mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
COMP: tecio : move out of thirdparty
This commit is contained in:
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Build optional components (eg, may depend on third-party libraries)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# build tecio
|
||||||
|
wmake libso tecio/tecsrc
|
||||||
|
|
||||||
|
# build converter
|
||||||
|
wmake
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------- end-of-file
|
||||||
@ -1,5 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(WM_THIRD_PARTY_DIR)/tecio/tecsrc/lnInclude \
|
-Itecio/tecsrc/lnInclude \
|
||||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude
|
-I$(LIB_SRC)/meshTools/lnInclude
|
||||||
@ -10,4 +10,4 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lgenericPatchFields \
|
-lgenericPatchFields \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-L$(FOAM_EXT_LIBBIN) -ltecio
|
-ltecio
|
||||||
|
|||||||
@ -0,0 +1,277 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
MAKEWHAT=
|
||||||
|
EXTRAFLAGS=
|
||||||
|
STRIPFLAG=-s
|
||||||
|
isrelease=n
|
||||||
|
skipcompile=n
|
||||||
|
if test $# -ge 1 ; then
|
||||||
|
Platname=$1
|
||||||
|
shift
|
||||||
|
while test $# -ge 1
|
||||||
|
do
|
||||||
|
if test "$1" = "-release" ; then
|
||||||
|
isrelease=y
|
||||||
|
elif test "$1" = "-skipcompile" ; then
|
||||||
|
skipcompile=y
|
||||||
|
elif test "$1" = "-tecio" ; then
|
||||||
|
MAKEWHAT=tecio.a
|
||||||
|
else
|
||||||
|
EXTRAFLAGS="$EXTRAFLAGS $1"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "Choose platform:"
|
||||||
|
echo " "
|
||||||
|
echo " macux.104"
|
||||||
|
echo " macix64.105"
|
||||||
|
echo " sgix.62"
|
||||||
|
echo " sgix3.62"
|
||||||
|
echo " sgix.65"
|
||||||
|
echo " sgix64.65"
|
||||||
|
echo " sgix2.65"
|
||||||
|
echo " sun4.57"
|
||||||
|
echo " sun464.57"
|
||||||
|
echo " sun86.54"
|
||||||
|
echo " ibmx.43"
|
||||||
|
echo " ibmx64.43"
|
||||||
|
echo " ibmx.51"
|
||||||
|
echo " ibmx64.51"
|
||||||
|
echo " ibmx64.53"
|
||||||
|
echo " decalpha.32"
|
||||||
|
echo " compaq.51"
|
||||||
|
echo " hp7xx.11"
|
||||||
|
echo " hp7xx64.11"
|
||||||
|
echo " hpi64.11"
|
||||||
|
echo " linux.24"
|
||||||
|
echo " linuxi64.24"
|
||||||
|
echo " linux.22"
|
||||||
|
echo " linuxa.22"
|
||||||
|
echo " linuxg248x64.26"
|
||||||
|
echo " linuxg27x64.26"
|
||||||
|
echo " crayc90"
|
||||||
|
echo "->\c"
|
||||||
|
read Platname
|
||||||
|
|
||||||
|
echo "Choose:"
|
||||||
|
echo " 1. Make tecio.a only"
|
||||||
|
echo " 2. Make tecio.a and pltview"
|
||||||
|
|
||||||
|
read choice
|
||||||
|
|
||||||
|
if test $choice -eq 1 ;then
|
||||||
|
MAKEWHAT=tecio.a
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
MAKECMD=make
|
||||||
|
LINKFLAGS=
|
||||||
|
LINKLIBS=
|
||||||
|
AR=ar
|
||||||
|
ARFLAGS=qv
|
||||||
|
DISTSUBDIR2=
|
||||||
|
|
||||||
|
case $Platname in
|
||||||
|
mac*) CCOMP=g++
|
||||||
|
FINALCFLAGS="-arch ppc -arch i386 -arch ppc64 -arch x86_64 -DDARWIN -DLONGIS64 -I/usr/X11R6/include"
|
||||||
|
STRIPFLAG=-Wl,-x
|
||||||
|
LINKFLAGS="-arch ppc -arch i386 -arch ppc64 -arch x86_64"
|
||||||
|
;;
|
||||||
|
sgix.65-64) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DLONGIS64 -mips4 -64"
|
||||||
|
LINKFLAGS="-mips4 -64"
|
||||||
|
;;
|
||||||
|
sgix64.65) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DLONGIS64 -mips4 -64"
|
||||||
|
LINKFLAGS="-mips4 -64"
|
||||||
|
;;
|
||||||
|
sgix.65) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -mips4 -n32"
|
||||||
|
LINKFLAGS="-mips4 -n32"
|
||||||
|
;;
|
||||||
|
sgix2.65) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -o32"
|
||||||
|
LINKFLAGS="-o32"
|
||||||
|
;;
|
||||||
|
sgix.62-64) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DIRIX62 -DLONGIS64 -mips4 -64"
|
||||||
|
LINKFLAGS="-mips4 -64"
|
||||||
|
;;
|
||||||
|
sgix.62) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DIRIX62 -mips4 -n32"
|
||||||
|
LINKFLAGS="-mips4 -n32"
|
||||||
|
;;
|
||||||
|
sgix1.62) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DIRIX62 -mips1 -32"
|
||||||
|
LINKFLAGS="-mips1 -32"
|
||||||
|
;;
|
||||||
|
sgix3.62) CCOMP=CC
|
||||||
|
FINALCFLAGS="-DIRISX -DIRIX62 -mips3 -n32"
|
||||||
|
LINKFLAGS="-mips3 -n32"
|
||||||
|
;;
|
||||||
|
ibmx.*) CCOMP=xlC
|
||||||
|
FINALCFLAGS=-DIBMRS6000X
|
||||||
|
;;
|
||||||
|
ibmx64.*) CCOMP=xlC
|
||||||
|
FINALCFLAGS="-DIBMRS6000X -DLONGIS64 -q64"
|
||||||
|
ARFLAGS="-X64 qv"
|
||||||
|
;;
|
||||||
|
compaq.51) CCOMP=cxx
|
||||||
|
FINALCFLAGS="-DCOMPAQX -I/usr/include -ieee_with_inexact"
|
||||||
|
;;
|
||||||
|
decalpha.32)CCOMP=cc
|
||||||
|
FINALCFLAGS="-DDECALPHAX -I/usr/include -ieee_with_inexact"
|
||||||
|
;;
|
||||||
|
hp7xx.*-64) CCOMP=aCC
|
||||||
|
FINALCFLAGS="+DD64 +DS2.0 -AA -DHPX -DLONGIS64 -I/usr/include/X11R6 -I/usr/include/Motif2.1"
|
||||||
|
LINKFLAGS="+DA2.0W +DD64 +DS2.0W"
|
||||||
|
;;
|
||||||
|
hp7xx64.11) CCOMP=aCC
|
||||||
|
FINALCFLAGS="+DA2.0W +DD64 +DS2.0W -AA -DHPX -DLONGIS64 -I/usr/include/X11R6 -I/usr/include/Motif2.1"
|
||||||
|
LINKFLAGS="+DA2.0W +DD64 +DS2.0W"
|
||||||
|
;;
|
||||||
|
hpi64.11) CCOMP=aCC
|
||||||
|
FINALCFLAGS="+DD64 -AA -DHPX -DLONGIS64 -I/usr/include/X11R6 -I/usr/include/Motif2.1"
|
||||||
|
LINKFLAGS="+DD64"
|
||||||
|
;;
|
||||||
|
hp7xx.11) CCOMP=aCC
|
||||||
|
FINALCFLAGS="+DAportable -AA -DHPX -I/usr/include/X11R6 -I/usr/include/Motif2.1"
|
||||||
|
LINKFLAGS="+DAportable"
|
||||||
|
;;
|
||||||
|
crayc90) CCOMP=cc
|
||||||
|
FINALCFLAGS="-DCRAY -DUNIXX"
|
||||||
|
;;
|
||||||
|
linux*i64.*)CCOMP=g++
|
||||||
|
FINALCFLAGS="-fPIC -DLINUX -DLINUXI64"
|
||||||
|
;;
|
||||||
|
linux*64.*) CCOMP=g++
|
||||||
|
FINALCFLAGS="-fPIC -DLINUX -DLINUX64"
|
||||||
|
;;
|
||||||
|
linux*) CCOMP=g++
|
||||||
|
FINALCFLAGS="-fPIC -DLINUX"
|
||||||
|
;;
|
||||||
|
sun4.54) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUN -DSUNSOLARISX -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun4.55) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUN -DSUNSOLARISX -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun4.57) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUNSOLARISX -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun4.57-64) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUNSOLARISX -DLONGIS64 -KPIC -xarch=v9 -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-KPIC -xarch=v9 -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun464.57) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUNSOLARISX -DLONGIS64 -KPIC -xarch=v9 -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-KPIC -xarch=v9 -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun464.59) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUNSOLARISX -DLONGIS64 -KPIC -m64 -xarch=generic -I/usr/openwin/include -I/usr/dt/include -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg -xO1"
|
||||||
|
LINKFLAGS="-KPIC -m64 -xarch=generic -library=libC -library=Cstd -library=no%rwtools7 -library=no%rwtools7_dbg"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
sun86.54) CCOMP=/opt/SUNWspro/bin/CC
|
||||||
|
FINALCFLAGS="-DSUN -DSUNSOLARISX -I/usr/openwin/include -I/usr/dt/include"
|
||||||
|
MAKECMD=/usr/ccs/bin/make
|
||||||
|
AR=/opt/SUNWspro/bin/CC
|
||||||
|
ARFLAGS="-xar -o"
|
||||||
|
;;
|
||||||
|
*) echo "Err: Invalid platform"
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test "$isrelease" = "y" ; then
|
||||||
|
EXTRAFLAGS="$EXTRAFLAGS -DNO_ASSERTS"
|
||||||
|
else
|
||||||
|
STRIPFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$skipcompile" = "n" ; then
|
||||||
|
rm -f *.o */*.o *.a > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f *.a > /dev/null 2>&1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FINALCFLAGS="$FINALCFLAGS $EXTRAFLAGS -DUSEENUM -DTHREED"
|
||||||
|
#
|
||||||
|
# NOTE: Used to use make here but had problems with using remsh to run
|
||||||
|
# make multiple times to get 64 bit and 32 bit versions of libraries....
|
||||||
|
#
|
||||||
|
# $MAKECMD $MAKEWHAT AR=$AR CC=$CCOMP LINKFLAGS="$LINKFLAGS" STRIPFLAG=$STRIPFLAG CFLAGS="$EXTRAFLAGS -DUSEENUM -DTHREED $FINALCFLAGS"
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
cd tecsrc
|
||||||
|
|
||||||
|
BASELIST=`/bin/ls -1 *.cpp`
|
||||||
|
|
||||||
|
OBJLIST=
|
||||||
|
for file in $BASELIST
|
||||||
|
do
|
||||||
|
OBJNAME=`echo $file | sed 's/\.cpp/.o/'`
|
||||||
|
OBJLIST="$OBJLIST tecsrc/$OBJNAME"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test "$skipcompile" = "n" ; then
|
||||||
|
for file in $BASELIST
|
||||||
|
do
|
||||||
|
case $file in
|
||||||
|
tecxxx.cpp) ARCHIVEFLAG=-DMAKEARCHIVE;;
|
||||||
|
arrlist.cpp) ARCHIVEFLAG=-DMAKEARCHIVE;;
|
||||||
|
datautil.cpp) ARCHIVEFLAG=-DMAKEARCHIVE;;
|
||||||
|
*) ARCHIVEFLAG= ;;
|
||||||
|
esac
|
||||||
|
echo "$CCOMP $FINALCFLAGS $ARCHIVEFLAG -c $file"
|
||||||
|
$CCOMP $FINALCFLAGS $ARCHIVEFLAG -c $file
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
pwd
|
||||||
|
|
||||||
|
|
||||||
|
echo "$AR $ARFLAGS tecio.a $OBJLIST"
|
||||||
|
$AR $ARFLAGS tecio.a $OBJLIST
|
||||||
|
if test -f /bin/ranlib ; then
|
||||||
|
/bin/ranlib tecio.a;
|
||||||
|
elif test -f /usr/bin/ranlib ; then
|
||||||
|
/usr/bin/ranlib tecio.a;
|
||||||
|
elif test -f /usr/ucb/ranlib ; then
|
||||||
|
/usr/ucb/ranlib tecio.a;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$CCOMP -I./tecsrc -DMAKEARCHIVE $FINALCFLAGS -c pltview.cpp"
|
||||||
|
$CCOMP -I./tecsrc -DMAKEARCHIVE $FINALCFLAGS -c pltview.cpp
|
||||||
|
|
||||||
|
echo "$CCOMP $FINALCFLAGS pltview.o tecio.a $LINKFLAGS $LINKLIBS $STRIPFLAG -lm -o pltview"
|
||||||
|
$CCOMP $FINALCFLAGS pltview.o tecio.a $LINKFLAGS $LINKLIBS $STRIPFLAG -lm -o pltview
|
||||||
Binary file not shown.
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=arrow
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,530 @@
|
|||||||
|
/* This example creates two simple polyhedral zones in the shape
|
||||||
|
* of a three-dimensional arrow. Obscured boundary faces are used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "TECIO.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* DOCSTART:arrow_tecini.txt*/
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 1;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I;
|
||||||
|
|
||||||
|
/* Open the file and write the Tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"Multiple polyhedral zones", /* Name of the entire
|
||||||
|
* dataset.
|
||||||
|
*/
|
||||||
|
(char*)"X Y Z P", /* Defines the variables for the data
|
||||||
|
* file. Each zone must contain each of
|
||||||
|
* the variables listed here. The order
|
||||||
|
* of the variables in the list is used
|
||||||
|
* to define the variable number (e.g.
|
||||||
|
* X is Var 1).
|
||||||
|
*/
|
||||||
|
(char*)"Arrow.plt",
|
||||||
|
(char*)".", /* Scratch Directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
|
||||||
|
/* After TECINI is called, call TECZNE to create one or more
|
||||||
|
* zones for your data file. In this example, Zone 1 contains a
|
||||||
|
* single rectangular solid created as a face-based finite-element
|
||||||
|
* (i.e. polyhedral zone). The zone has eight points (or nodes),
|
||||||
|
* six faces and one element.
|
||||||
|
*/
|
||||||
|
/* DOCSTART:arrow_teczne_rect.txt*/
|
||||||
|
/* TECZNE Parameters */
|
||||||
|
INTEGER4 ZoneType = 7; /* sets the zone type
|
||||||
|
* to polyhedral */
|
||||||
|
INTEGER4 NumPts_Rect = 8;
|
||||||
|
INTEGER4 NumElems_Rect = 1;
|
||||||
|
INTEGER4 NumFaces_Rect = 6;
|
||||||
|
INTEGER4 ICellMax = 0; /* not used */
|
||||||
|
INTEGER4 JCellMax = 0; /* not used */
|
||||||
|
INTEGER4 KCellMax = 0; /* not used */
|
||||||
|
double SolutionTime = 0.0;
|
||||||
|
INTEGER4 StrandID = 0;
|
||||||
|
INTEGER4 ParentZone = 0;
|
||||||
|
INTEGER4 IsBlock = 1;
|
||||||
|
INTEGER4 NumFaceConnections = 0; /* not used */
|
||||||
|
INTEGER4 FaceNeighborMode = 1; /* not used */
|
||||||
|
INTEGER4 SharConn = 0;
|
||||||
|
|
||||||
|
/* In a rectangular solid, each face is composed of four nodes.
|
||||||
|
* As such, the total number of face nodes is twenty-four (four
|
||||||
|
* nodes for each of the six faces).
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumFaceNodes_Rect = 24;
|
||||||
|
|
||||||
|
/* There is one connected boundary face in this zone (the face on
|
||||||
|
* the rectangle adjacent to the arrowhead). Refer to the Data
|
||||||
|
* Format Guide for additional information. */
|
||||||
|
INTEGER4 NumConnBndryFaces_Rect = 1;
|
||||||
|
|
||||||
|
/* The connected boundary face has one connection, the face on
|
||||||
|
* the bottom of the arrowhead. A connection is an element-zone
|
||||||
|
* tuple that indicates a neighboring element (and its zone) when
|
||||||
|
* the neighboring element is in a different zone. Generally,
|
||||||
|
* there will be one boundary connection for each boundary face.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryConns_Rect = 1;
|
||||||
|
|
||||||
|
/* For illustrative purposes, the grid variables (X, Y, and Z)
|
||||||
|
* are nodal variables (i.e. ValueLocation = 1), and the pressure
|
||||||
|
* variable (P) is a cell-centered variable (i.e.
|
||||||
|
* ValueLocation = 0).
|
||||||
|
*/
|
||||||
|
INTEGER4 ValueLocation[4] = { 1, 1, 1, 0 };
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Zone 1: Rectangular Solid",
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts_Rect,
|
||||||
|
&NumElems_Rect,
|
||||||
|
&NumFaces_Rect,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes_Rect,
|
||||||
|
&NumConnBndryFaces_Rect,
|
||||||
|
&TotalNumBndryConns_Rect,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_tecdat_rect.txt*/
|
||||||
|
//set variable values (X_Rect, Y_Rect, Z_Rect & P_Rect)
|
||||||
|
double *X_Rect = new double[NumPts_Rect];
|
||||||
|
double *Y_Rect = new double[NumPts_Rect];
|
||||||
|
double *Z_Rect = new double[NumPts_Rect];
|
||||||
|
double *P_Rect = new double[NumElems_Rect];
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii <= NumPts_Rect / 2; ii += 4)
|
||||||
|
{
|
||||||
|
X_Rect[ii] = 0;
|
||||||
|
X_Rect[ii+1] = 3;
|
||||||
|
X_Rect[ii+2] = 3;
|
||||||
|
X_Rect[ii+3] = 0;
|
||||||
|
|
||||||
|
Y_Rect[ii] = 3;
|
||||||
|
Y_Rect[ii+1] = 3;
|
||||||
|
Y_Rect[ii+2] = 1;
|
||||||
|
Y_Rect[ii+3] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < 4; ii++)
|
||||||
|
Z_Rect[ii] = 0;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 4; ii < NumPts_Rect; ii++)
|
||||||
|
Z_Rect[ii] = -2;
|
||||||
|
|
||||||
|
P_Rect[0] = 10;
|
||||||
|
|
||||||
|
|
||||||
|
INTEGER4 IsDouble = 1;
|
||||||
|
I = TECDAT112(&NumPts_Rect, X_Rect, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Rect, Y_Rect, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Rect, Z_Rect, &IsDouble);
|
||||||
|
I = TECDAT112(&NumElems_Rect, P_Rect, &IsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_facenodes_rect.txt*/
|
||||||
|
|
||||||
|
/* The FaceNodeCounts array is used to describe the number of
|
||||||
|
* nodes in each face of the zone. The first value in the array
|
||||||
|
* is the number of nodes in Face 1, the second value is the
|
||||||
|
* number of nodes in Face 2 and so forth. In this example, each
|
||||||
|
* face of the zone has four nodes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceNodeCounts_Rect = new INTEGER4[NumFaces_Rect];
|
||||||
|
//For this particular zone, each face has the 4 nodes
|
||||||
|
for (INTEGER4 ii = 0; ii < NumFaces_Rect; ii++)
|
||||||
|
FaceNodeCounts_Rect[ii] = 4;
|
||||||
|
|
||||||
|
/* The FaceNodes array is used to specify the nodes that compose
|
||||||
|
* each face. For each face (n of N), the number of nodes used
|
||||||
|
* to define the face is specified by the nth value in the
|
||||||
|
* FaceNodeCounts array. For example, if the first value in the
|
||||||
|
* FaceNodeCounts array is 4 (indicating Face 1 is composed of
|
||||||
|
* four nodes), the first four values in the FaceNodes array are
|
||||||
|
* the node numbers of the nodes in Face 1.
|
||||||
|
*
|
||||||
|
* ------------
|
||||||
|
* WARNING
|
||||||
|
* When providing the node numbers for each face, you must
|
||||||
|
* provide the node numbers in a consistent order (either
|
||||||
|
* clockwise or counter-clockwise. Providing the node numbers
|
||||||
|
* out of order results in contorted faces.
|
||||||
|
* ------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceNodes_Rect = new INTEGER4[TotalNumFaceNodes_Rect];
|
||||||
|
|
||||||
|
//Nodes for Face 1
|
||||||
|
FaceNodes_Rect[0] = 1;
|
||||||
|
FaceNodes_Rect[1] = 2;
|
||||||
|
FaceNodes_Rect[2] = 3;
|
||||||
|
FaceNodes_Rect[3] = 4;
|
||||||
|
|
||||||
|
//Nodes for Face 2
|
||||||
|
FaceNodes_Rect[4] = 1;
|
||||||
|
FaceNodes_Rect[5] = 4;
|
||||||
|
FaceNodes_Rect[6] = 8;
|
||||||
|
FaceNodes_Rect[7] = 5;
|
||||||
|
|
||||||
|
//Nodes for Face 3
|
||||||
|
FaceNodes_Rect[8] = 5;
|
||||||
|
FaceNodes_Rect[9] = 8;
|
||||||
|
FaceNodes_Rect[10] = 7;
|
||||||
|
FaceNodes_Rect[11] = 6;
|
||||||
|
|
||||||
|
//Nodes for Face 4
|
||||||
|
FaceNodes_Rect[12] = 2;
|
||||||
|
FaceNodes_Rect[13] = 6;
|
||||||
|
FaceNodes_Rect[14] = 7;
|
||||||
|
FaceNodes_Rect[15] = 3;
|
||||||
|
|
||||||
|
//Nodes for Face 5
|
||||||
|
FaceNodes_Rect[16] = 6;
|
||||||
|
FaceNodes_Rect[17] = 2;
|
||||||
|
FaceNodes_Rect[18] = 1;
|
||||||
|
FaceNodes_Rect[19] = 5;
|
||||||
|
|
||||||
|
//Nodes for Face 6
|
||||||
|
FaceNodes_Rect[20] = 3;
|
||||||
|
FaceNodes_Rect[21] = 7;
|
||||||
|
FaceNodes_Rect[22] = 8;
|
||||||
|
FaceNodes_Rect[23] = 4;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_neighbors_rect.txt*/
|
||||||
|
INTEGER4 *FaceLeftElems_Rect = new INTEGER4[NumFaces_Rect];
|
||||||
|
INTEGER4 *FaceRightElems_Rect = new INTEGER4[NumFaces_Rect];
|
||||||
|
|
||||||
|
/* Since this zone has just one element, all leftelems are
|
||||||
|
* NoNeighboring Element and all right elems are itself
|
||||||
|
*/
|
||||||
|
for (INTEGER4 ii = 0; ii < NumFaces_Rect; ii++)
|
||||||
|
{
|
||||||
|
FaceRightElems_Rect[ii] = 1;
|
||||||
|
FaceLeftElems_Rect[ii] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The negative value in the FaceLeftElems array indicates that
|
||||||
|
* the face is connected to an element in another zone. In this
|
||||||
|
* case, Face 4 is connected to a face in Zone 2 (to be defined
|
||||||
|
* later in the example). The FaceBoundaryConnectionElems array
|
||||||
|
* lists all of the element numbers in other zones that the
|
||||||
|
* current zone shares boundary connections with. Similarly, the
|
||||||
|
* FaceBoundaryConnectionZones array lists all of the zone numbers
|
||||||
|
* with which the current zone shares boundaries. A negative
|
||||||
|
* value in the FaceLeftElems or FaceRightElems array indicates
|
||||||
|
* the position within these arrays that defines the neighboring
|
||||||
|
* element and zone for a face.
|
||||||
|
*
|
||||||
|
* For example, if the FaceBoundaryConnectionElems array is:
|
||||||
|
* [1 8 2] and the FaceBoundaryConnectionZones array is: [2 5 3],
|
||||||
|
* a FaceLeftElems or FaceRightElems value of -2 indicates that
|
||||||
|
* the face in question has a boundary connection with Element 8
|
||||||
|
* in Zone 5.
|
||||||
|
*/
|
||||||
|
FaceLeftElems_Rect[3] = -1;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_tecpoly_rect.txt*/
|
||||||
|
/* The FaceBndryConnectionCounts array is used to define the
|
||||||
|
* number of boundary connections for each face that has a
|
||||||
|
* boundary connection. For example, if a zone has three boundary
|
||||||
|
* connections in total (NumConnectedBoundaryFaces), two of those
|
||||||
|
* boundary connections are in one face, and the remaining
|
||||||
|
* boundary connection is in a second face, the
|
||||||
|
* FaceBndryConnectionCounts array would be: [2 1].
|
||||||
|
* In this example, the total number of connected boundary faces
|
||||||
|
* (specified via TECZNE) is equal to one, so the
|
||||||
|
* FaceBoundaryConnectionCounts array contains a single value (1).
|
||||||
|
*/
|
||||||
|
INTEGER4 *FaceBndryConnCounts_Rect = new INTEGER4[NumConnBndryFaces_Rect];
|
||||||
|
FaceBndryConnCounts_Rect[0] = 1;
|
||||||
|
|
||||||
|
/* The value(s) in the FaceBndryConnectionElems and
|
||||||
|
* FaceBndryConnectionZones arrays specify the element number and
|
||||||
|
* zone number, respectively, that a given boundary connection is
|
||||||
|
* connected to. In this case, the boundary connection face is
|
||||||
|
* connected to Element 1 in Zone 2.
|
||||||
|
*/
|
||||||
|
INTEGER4 *FaceBndryConnElems_Rect = new INTEGER4[TotalNumBndryConns_Rect];
|
||||||
|
INTEGER4 *FaceBndryConnZones_Rect = new INTEGER4[TotalNumBndryConns_Rect];
|
||||||
|
|
||||||
|
FaceBndryConnElems_Rect[0] = 1;
|
||||||
|
FaceBndryConnZones_Rect[0] = 2;
|
||||||
|
|
||||||
|
I = TECPOLY112(FaceNodeCounts_Rect,
|
||||||
|
FaceNodes_Rect,
|
||||||
|
FaceLeftElems_Rect,
|
||||||
|
FaceRightElems_Rect,
|
||||||
|
FaceBndryConnCounts_Rect,
|
||||||
|
FaceBndryConnElems_Rect,
|
||||||
|
FaceBndryConnZones_Rect);
|
||||||
|
|
||||||
|
/* cleanup */
|
||||||
|
delete X_Rect;
|
||||||
|
delete Y_Rect;
|
||||||
|
delete Z_Rect;
|
||||||
|
delete P_Rect;
|
||||||
|
delete FaceNodeCounts_Rect;
|
||||||
|
delete FaceNodes_Rect;
|
||||||
|
delete FaceLeftElems_Rect;
|
||||||
|
delete FaceRightElems_Rect;
|
||||||
|
delete FaceBndryConnCounts_Rect;
|
||||||
|
delete FaceBndryConnElems_Rect;
|
||||||
|
delete FaceBndryConnZones_Rect;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* The data for Zone 1 has been written to the data file, so we
|
||||||
|
* are ready to create Zone 2. For simplicity, we will reuse many
|
||||||
|
* of the variables created for the rectangular zone that are not
|
||||||
|
* relevant to this tutorial. */
|
||||||
|
|
||||||
|
/* Zone 2 (the arrowhead or prism) has a single element composed
|
||||||
|
* of six nodes and five faces.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_teczne_prism.txt*/
|
||||||
|
//TECZNE Parameters
|
||||||
|
INTEGER4 NumPts_Prism = 6;
|
||||||
|
INTEGER4 NumElems_Prism = 1;
|
||||||
|
INTEGER4 NumFaces_Prism = 5;
|
||||||
|
|
||||||
|
/* The prism is composed of two triangular faces and three
|
||||||
|
* rectangular faces. The total number of face nodes is the sum
|
||||||
|
* of the nodes in each triangular face (2 times 3) and the nodes
|
||||||
|
* in each rectangular face (3 times 4).
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumFaceNodes_Prism = 18;
|
||||||
|
|
||||||
|
/* As with Zone 1, Zone 2 has one connected boundary face, the
|
||||||
|
* face that is connected to Zone 1.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumConnBndryFaces_Prism = 1;
|
||||||
|
|
||||||
|
/* In this case, we have set the total number of boundary
|
||||||
|
* connections for the connected face to two. The first boundary
|
||||||
|
* connection is the connection to Zone 1. The second boundary
|
||||||
|
* connection is used to indicate that the face is only partially
|
||||||
|
* obscured by the face from Zone 1. If we omitted the second
|
||||||
|
* boundary connection, the connected face of the prism would
|
||||||
|
* disappear if the rectangular zone was deactivated.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryConns_Prism = 2;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Zone 2: Prism",
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts_Prism,
|
||||||
|
&NumElems_Prism,
|
||||||
|
&NumFaces_Prism,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes_Prism,
|
||||||
|
&NumConnBndryFaces_Prism,
|
||||||
|
&TotalNumBndryConns_Prism,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_tecdat_prism.txt*/
|
||||||
|
|
||||||
|
|
||||||
|
double *X_Prism = new double[NumPts_Prism];
|
||||||
|
double *Y_Prism = new double[NumPts_Prism];
|
||||||
|
double *Z_Prism = new double[NumPts_Prism];
|
||||||
|
|
||||||
|
|
||||||
|
/* Set the X and Y variable values, one z-plane at a time */
|
||||||
|
double ZVal = 0;
|
||||||
|
for (INTEGER4 ii = 0; ii < 2; ii++)
|
||||||
|
{
|
||||||
|
// triangle in Z=ZVal plane
|
||||||
|
X_Prism[3*ii] = 3;
|
||||||
|
Y_Prism[3*ii] = 4;
|
||||||
|
Z_Prism[3*ii] = ZVal;
|
||||||
|
|
||||||
|
X_Prism[3*ii+1] = 7;
|
||||||
|
Y_Prism[3*ii+1] = 2;
|
||||||
|
Z_Prism[3*ii+1] = ZVal;
|
||||||
|
|
||||||
|
X_Prism[3*ii+2] = 3;
|
||||||
|
Y_Prism[3*ii+2] = 0;
|
||||||
|
Z_Prism[3*ii+2] = ZVal;
|
||||||
|
|
||||||
|
ZVal = ZVal - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When we called TecZne, we specified that the variable 4
|
||||||
|
* (pressure) is cell-centered. As such, only NumElements number
|
||||||
|
* of values needs to be written to the data file for the pressure
|
||||||
|
* variable.
|
||||||
|
*/
|
||||||
|
double *P_Prism = new double[NumElems_Prism];
|
||||||
|
P_Prism[0] = 20;
|
||||||
|
|
||||||
|
I = TECDAT112(&NumPts_Prism, X_Prism, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Prism, Y_Prism, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Prism, Z_Prism, &IsDouble);
|
||||||
|
I = TECDAT112(&NumElems_Prism, P_Prism, &IsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_facemap_prism.txt*/
|
||||||
|
INTEGER4 *FaceNodeCounts_Prism = new INTEGER4[NumFaces_Prism];
|
||||||
|
INTEGER4 *FaceNodes_Prism = new INTEGER4[TotalNumFaceNodes_Prism];
|
||||||
|
|
||||||
|
/* Because of the way we chose to number our faces, the first
|
||||||
|
* three faces are rectangular and the last two are triangular.
|
||||||
|
* The numbering of the faces is arbitrary, but the faces must
|
||||||
|
* be referred to consistently.
|
||||||
|
*/
|
||||||
|
for (INTEGER4 ii = 0; ii < 3; ii++)
|
||||||
|
FaceNodeCounts_Prism[ii] = 4;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 3; ii < NumFaces_Prism; ii++)
|
||||||
|
FaceNodeCounts_Prism[ii] = 3;
|
||||||
|
|
||||||
|
//Nodes for Face 1
|
||||||
|
FaceNodes_Prism[0] = 1;
|
||||||
|
FaceNodes_Prism[1] = 3;
|
||||||
|
FaceNodes_Prism[2] = 6;
|
||||||
|
FaceNodes_Prism[3] = 4;
|
||||||
|
|
||||||
|
//Nodes for Face 2
|
||||||
|
FaceNodes_Prism[4] = 1;
|
||||||
|
FaceNodes_Prism[5] = 4;
|
||||||
|
FaceNodes_Prism[6] = 5;
|
||||||
|
FaceNodes_Prism[7] = 2;
|
||||||
|
|
||||||
|
//Nodes for Face 3
|
||||||
|
FaceNodes_Prism[8] = 3;
|
||||||
|
FaceNodes_Prism[9] = 2;
|
||||||
|
FaceNodes_Prism[10] = 5;
|
||||||
|
FaceNodes_Prism[11] = 6;
|
||||||
|
|
||||||
|
//Nodes for Face 4
|
||||||
|
FaceNodes_Prism[12] = 5;
|
||||||
|
FaceNodes_Prism[13] = 4;
|
||||||
|
FaceNodes_Prism[14] = 6;
|
||||||
|
|
||||||
|
//Nodes for Face 5
|
||||||
|
FaceNodes_Prism[15] = 1;
|
||||||
|
FaceNodes_Prism[16] = 2;
|
||||||
|
FaceNodes_Prism[17] = 3;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_neighbors_prism.txt*/
|
||||||
|
/* Since this zone has just one element, all leftelems are
|
||||||
|
* NoNeighboring Element and all right elems are itself.
|
||||||
|
*/
|
||||||
|
INTEGER4 *FaceLeftElems_Prism = new INTEGER4[NumFaces_Prism];
|
||||||
|
INTEGER4 *FaceRightElems_Prism = new INTEGER4[NumFaces_Prism];
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < NumFaces_Prism; ii++)
|
||||||
|
{
|
||||||
|
FaceRightElems_Prism[ii] = 1;
|
||||||
|
FaceLeftElems_Prism[ii] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The negative value in the FaceLeftElems array indicates that
|
||||||
|
* the face is connected to an element in another zone. In this
|
||||||
|
* case, Face 1 is connected to a face in Zone 1 (as indicated in
|
||||||
|
* Line 6). The FaceBoundaryConnectionElems array lists all of
|
||||||
|
* the element numbers in other zones that the current zone shares
|
||||||
|
* boundary connections with. Similarly, the
|
||||||
|
* FaceBoundaryConnectionZones array lists all of the zone numbers
|
||||||
|
* with which the current zone shares boundaries. A negative
|
||||||
|
* value in the FaceLeftElems or FaceRightElems array indicates
|
||||||
|
* the position within these arrays that defines the neighboring
|
||||||
|
* element and zone for a face.
|
||||||
|
*/
|
||||||
|
FaceLeftElems_Prism[0] = -1;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_tecpoly_prism.txt*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceBndryConnCounts_Prism = new INTEGER4[NumConnBndryFaces_Prism];
|
||||||
|
FaceBndryConnCounts_Prism[0] = 2;
|
||||||
|
|
||||||
|
INTEGER4 *FaceBndryConnElems_Prism = new INTEGER4[TotalNumBndryConns_Prism];
|
||||||
|
INTEGER4 *FaceBndryConnZones_Prism = new INTEGER4[TotalNumBndryConns_Prism];
|
||||||
|
|
||||||
|
/* As previously mentioned, a connected boundary face is a face
|
||||||
|
* that has either multiple neighboring faces or neighbor(s) that
|
||||||
|
* belong to another zone. Those cases are sufficient when the
|
||||||
|
* combination of all of the face<63>s neighbors completely cover the
|
||||||
|
* face. However, there are some cases (such as the bottom of the
|
||||||
|
* arrowhead) where the face is not completely covered by its
|
||||||
|
* neighbors. In those cases the face is referred to as <20>partially
|
||||||
|
* obscured<65>. A partially obscured face is indicated by
|
||||||
|
* incrementing the value in TotalNumConnectedBoundaryFaces and
|
||||||
|
* entering a value of 0 in both the FaceBndryConnectionElems and
|
||||||
|
* FaceBoundaryConnectionZones arrays for the boundary connection
|
||||||
|
* for the partially obscured face.
|
||||||
|
*/
|
||||||
|
FaceBndryConnElems_Prism[0] = 0;
|
||||||
|
FaceBndryConnZones_Prism[0] = 0;
|
||||||
|
|
||||||
|
/* Indicates that Face 1 is connected to Element 1 in Zone 1. */
|
||||||
|
FaceBndryConnElems_Prism[1] = 1;
|
||||||
|
FaceBndryConnZones_Prism[1] = 1;
|
||||||
|
|
||||||
|
I = TECPOLY112(FaceNodeCounts_Prism,
|
||||||
|
FaceNodes_Prism,
|
||||||
|
FaceLeftElems_Prism,
|
||||||
|
FaceRightElems_Prism,
|
||||||
|
FaceBndryConnCounts_Prism,
|
||||||
|
FaceBndryConnElems_Prism,
|
||||||
|
FaceBndryConnZones_Prism);
|
||||||
|
|
||||||
|
/* cleanup */
|
||||||
|
delete X_Prism;
|
||||||
|
delete Y_Prism;
|
||||||
|
delete Z_Prism;
|
||||||
|
delete P_Prism;
|
||||||
|
delete FaceNodeCounts_Prism;
|
||||||
|
delete FaceNodes_Prism;
|
||||||
|
delete FaceLeftElems_Prism;
|
||||||
|
delete FaceRightElems_Prism;
|
||||||
|
delete FaceBndryConnCounts_Prism;
|
||||||
|
delete FaceBndryConnElems_Prism;
|
||||||
|
delete FaceBndryConnZones_Prism;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:arrow_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="arrow"
|
||||||
|
ProjectGUID="{3C1105D7-5690-48E0-9402-111CBDC84B42}"
|
||||||
|
RootNamespace="arrow"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\arrow.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=comtest
|
||||||
|
FILES=$(EXECUTABLE).c
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,492 @@
|
|||||||
|
/*
|
||||||
|
* Complex example C program to write a
|
||||||
|
* binary data file for Tecplot. This example
|
||||||
|
* does the following:
|
||||||
|
*
|
||||||
|
* 1. Open a data file called "field.plt."
|
||||||
|
* 2. Open a data file called "line.plt."
|
||||||
|
* 3. Assign values for X, Y and P. These will be used
|
||||||
|
* in both the ordered and finite-element data files.
|
||||||
|
* 4. Write out an ordered zone dimensioned 4 x 5 to "field.plt."
|
||||||
|
* 5. Assign values for XL and YL arrays.
|
||||||
|
* 6. Write out data for line plot to "line.plt." Make the data
|
||||||
|
* use double precision.
|
||||||
|
* 7. Write out a finite-element zone to "field.plt."
|
||||||
|
* 8. Write out a text record to "field.plt."
|
||||||
|
* 9. Write out a geometry (circle) record to "field.plt."
|
||||||
|
* 10. Close file 1.
|
||||||
|
* 11. Close file 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "TECIO.h"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
float X[5][4], Y[5][4], P[5][4];
|
||||||
|
double XL[50], YL[50];
|
||||||
|
double SolTime;
|
||||||
|
INTEGER4 Debug, I, J, K, L, III, NPts, NElm, DIsDouble, VIsDouble, IMax, JMax, KMax;
|
||||||
|
INTEGER4 ICellMax, JCellMax, KCellMax, ZoneType, Clipping;
|
||||||
|
INTEGER4 StrandID, ParentZn, FieldFileType, LineFileType;
|
||||||
|
INTEGER4 SharingZone[3] = {0, 0, 0};
|
||||||
|
INTEGER4 IsBlock, NumFaceConnections, FaceNeighborMode, ShareConnectivityFromZone;
|
||||||
|
INTEGER4 NM[12][4];
|
||||||
|
double XP, YP, ZP, FH, LineSpacing, PatternLength;
|
||||||
|
double BoxMargin, BoxLineThickness, TextAngle;
|
||||||
|
INTEGER4 AttachToZone, Zone, Scope, PositionCoordSys, FontType, HeightUnits;
|
||||||
|
INTEGER4 IsFilled, GeomType, LinePattern, NumEllipsePts;
|
||||||
|
INTEGER4 Anchor, BoxType, BoxColor, BoxFillColor, TextColor, Color, FillColor;
|
||||||
|
INTEGER4 ArrowheadStyle, ArrowheadAttachment, NumSegments, NumSegPts[1];
|
||||||
|
double LineThickness, ArrowheadSize, ArrowheadAngle;
|
||||||
|
float XGeomData[1], YGeomData[1], ZGeomData[1];
|
||||||
|
enum FileType { FULL = 0, GRID = 1, SOLUTION = 2 };
|
||||||
|
|
||||||
|
Debug = 2;
|
||||||
|
VIsDouble = 0;
|
||||||
|
DIsDouble = 0;
|
||||||
|
FieldFileType = FULL;
|
||||||
|
LineFileType = FULL;
|
||||||
|
/*
|
||||||
|
* Open order.plt and write the header information.
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"DATASET WITH ONE ORDERED ZONE AND ONE FE-QUAD ZONE OVER 2 TIME STEPS",
|
||||||
|
(char*)"X Y P",
|
||||||
|
(char*)"field.plt",
|
||||||
|
(char*)".",
|
||||||
|
&FieldFileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/*
|
||||||
|
* Open line.plt and write the header information.
|
||||||
|
*/
|
||||||
|
VIsDouble = 1;
|
||||||
|
I = TECINI112((char*)"DATASET WITH ONE I-ORDERED ZONE",
|
||||||
|
(char*)"X Y",
|
||||||
|
(char*)"line.plt",
|
||||||
|
(char*)".",
|
||||||
|
&LineFileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate values for the field variables.
|
||||||
|
*/
|
||||||
|
for (J = 0; J < 5; J++)
|
||||||
|
for (I = 0; I < 4; I++)
|
||||||
|
{
|
||||||
|
X[J][I] = (float)(I + 1);
|
||||||
|
Y[J][I] = (float)(J + 1);
|
||||||
|
P[J][I] = (float)((I + 1) * (J + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure writing to file #1.
|
||||||
|
*/
|
||||||
|
III = 1;
|
||||||
|
I = TECFIL112(&III);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the zone header information for the ordered zone.
|
||||||
|
*/
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
KMax = 1;
|
||||||
|
ICellMax = 0;
|
||||||
|
JCellMax = 0;
|
||||||
|
KCellMax = 0;
|
||||||
|
ZoneType = 0;
|
||||||
|
SolTime = 10.0;
|
||||||
|
StrandID = 1;
|
||||||
|
ParentZn = 0;
|
||||||
|
IsBlock = 1;
|
||||||
|
NumFaceConnections = 0;
|
||||||
|
FaceNeighborMode = 0;
|
||||||
|
ShareConnectivityFromZone = 0;
|
||||||
|
I = TECZNE112((char*)"Ordered Zone 1",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
NULL, /* PassiveVarList */
|
||||||
|
NULL, /* ValueLocation */
|
||||||
|
NULL, /* ShareVarFromZone */
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
&ShareConnectivityFromZone);
|
||||||
|
/*
|
||||||
|
* Write out the field data for the ordered zone.
|
||||||
|
*/
|
||||||
|
III = IMax * JMax;
|
||||||
|
I = TECDAT112(&III, &X[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &Y[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &P[0][0], &DIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate values for the I-ordered zone.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (I = 0; I < 50; I++)
|
||||||
|
{
|
||||||
|
XL[I] = I + 1;
|
||||||
|
YL[I] = sin((double)(I + 1) / 20.0);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Switch to the "line.plt" file (file number 2)
|
||||||
|
* and write out the line plot data.
|
||||||
|
*/
|
||||||
|
|
||||||
|
III = 2;
|
||||||
|
I = TECFIL112(&III);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the zone header information for the XY-data.
|
||||||
|
*/
|
||||||
|
IMax = 50;
|
||||||
|
JMax = 1;
|
||||||
|
KMax = 1;
|
||||||
|
SolTime = 0.0;
|
||||||
|
StrandID = 0; /* StaticZone */
|
||||||
|
I = TECZNE112((char*)"XY Line plot",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
NULL, /* PassiveVarList */
|
||||||
|
NULL, /* ValueLocation */
|
||||||
|
NULL, /* ShareVarFromZone */
|
||||||
|
&ShareConnectivityFromZone);
|
||||||
|
/*
|
||||||
|
* Write out the line plot.
|
||||||
|
*/
|
||||||
|
DIsDouble = 1;
|
||||||
|
III = IMax;
|
||||||
|
I = TECDAT112(&III, (float *) & XL[0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, (float *) & YL[0], &DIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Switch back to the field plot file and write out
|
||||||
|
* the finite-element zone.
|
||||||
|
*/
|
||||||
|
III = 1;
|
||||||
|
I = TECFIL112(&III);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Move the coordinates so this zone's not on top of the other
|
||||||
|
*/
|
||||||
|
for (J = 0; J < 5; J++)
|
||||||
|
for (I = 0; I < 4; I++)
|
||||||
|
{
|
||||||
|
X[J][I] = (float)(I + 6);
|
||||||
|
Y[J][I] = (float)(J + 1);
|
||||||
|
P[J][I] = (float)((I + 1) * (J + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the zone header information for the finite-element zone.
|
||||||
|
*/
|
||||||
|
ZoneType = 3; /* FEQuad */
|
||||||
|
NPts = 20; /* Number of points */
|
||||||
|
NElm = 12; /* Number of elements */
|
||||||
|
KMax = 0; /* Unused */
|
||||||
|
SolTime = 10.0;
|
||||||
|
StrandID = 2;
|
||||||
|
I = TECZNE112((char*)"Finite Zone 1",
|
||||||
|
&ZoneType,
|
||||||
|
&NPts,
|
||||||
|
&NElm,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
NULL, /* PassiveVarList */
|
||||||
|
NULL, /* ValueLocation */
|
||||||
|
NULL, /* ShareVarFromZone */
|
||||||
|
&ShareConnectivityFromZone);
|
||||||
|
/*
|
||||||
|
* Write out the field data for the finite-element zone.
|
||||||
|
*/
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
III = IMax * JMax;
|
||||||
|
DIsDouble = 0;
|
||||||
|
I = TECDAT112(&III, &X[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &Y[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &P[0][0], &DIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate and then write out the connectivity list.
|
||||||
|
* Note: The NM array references cells starting with
|
||||||
|
* offset of 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (I = 1; I < IMax; I++)
|
||||||
|
for (J = 1; J < JMax; J++)
|
||||||
|
{
|
||||||
|
K = I + (J - 1) * (IMax - 1);
|
||||||
|
L = I + (J - 1) * IMax;
|
||||||
|
NM[K-1][0] = L;
|
||||||
|
NM[K-1][1] = L + 1;
|
||||||
|
NM[K-1][2] = L + IMax + 1;
|
||||||
|
NM[K-1][3] = L + IMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
I = TECNOD112((INTEGER4 *)NM);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate values for the new solution variable.
|
||||||
|
*/
|
||||||
|
for (J = 0; J < 5; J++)
|
||||||
|
for (I = 0; I < 4; I++)
|
||||||
|
{
|
||||||
|
P[J][I] = (float)(2.0 * (I + 1) * (J + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the zone header information for time step 2
|
||||||
|
*/
|
||||||
|
ZoneType = 0;
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
KMax = 1;
|
||||||
|
SolTime = 20.0;
|
||||||
|
StrandID = 1;
|
||||||
|
SharingZone[0] = 1;
|
||||||
|
SharingZone[1] = 1;
|
||||||
|
SharingZone[2] = 0; /* solution variable is not shared */
|
||||||
|
ShareConnectivityFromZone = 0;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Ordered Zone 2",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
SharingZone,
|
||||||
|
&ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write out the solution variable the grid variables are shared.
|
||||||
|
*/
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
III = IMax * JMax;
|
||||||
|
DIsDouble = 0;
|
||||||
|
I = TECDAT112(&III, &P[0][0], &DIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate values for the new solution variable.
|
||||||
|
*/
|
||||||
|
for (J = 0; J < 5; J++)
|
||||||
|
for (I = 0; I < 4; I++)
|
||||||
|
{
|
||||||
|
P[J][I] = (float)(3.0 * (I + 1) * (J + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write another time step for the FEZone and share from the first
|
||||||
|
*/
|
||||||
|
ZoneType = 3;
|
||||||
|
SolTime = 20.0;
|
||||||
|
StrandID = 2;
|
||||||
|
KMax = 0;
|
||||||
|
SharingZone[0] = 2;
|
||||||
|
SharingZone[1] = 2;
|
||||||
|
SharingZone[2] = 0; /* solution variable is not shared */
|
||||||
|
ShareConnectivityFromZone = 2;
|
||||||
|
I = TECZNE112((char*)"Finite Zone 2",
|
||||||
|
&ZoneType,
|
||||||
|
&NPts,
|
||||||
|
&NElm,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
NULL, /* PassiveVarList */
|
||||||
|
NULL, /* ValueLocation */
|
||||||
|
SharingZone,
|
||||||
|
&ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write out the solution variable the grid variables are shared.
|
||||||
|
*/
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
III = IMax * JMax;
|
||||||
|
DIsDouble = 0;
|
||||||
|
I = TECDAT112(&III, &P[0][0], &DIsDouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare to write out text record. Text is positioned
|
||||||
|
* at 0.5, 0.5 in frame units and has a height
|
||||||
|
* of 0.05 frame units.
|
||||||
|
*/
|
||||||
|
XP = 50.0;
|
||||||
|
YP = 50.0;
|
||||||
|
ZP = 0.0;
|
||||||
|
FH = 5.0;
|
||||||
|
Scope = 1; /* Local */
|
||||||
|
Clipping = 1; /* Clip to frame */
|
||||||
|
PositionCoordSys = 1; /* Frame */
|
||||||
|
FontType = 1; /* Helv Bold */
|
||||||
|
HeightUnits = 1; /* Frame */
|
||||||
|
AttachToZone = 0;
|
||||||
|
Zone = 0;
|
||||||
|
BoxType = 0; /* None */
|
||||||
|
BoxMargin = 5.0;
|
||||||
|
BoxLineThickness = 0.5;
|
||||||
|
BoxColor = 3;
|
||||||
|
BoxFillColor = 7;
|
||||||
|
TextAngle = 0.0;
|
||||||
|
Anchor = 0; /* Left */
|
||||||
|
LineSpacing = 1.0;
|
||||||
|
TextColor = 0; /* Black */
|
||||||
|
|
||||||
|
III = TECTXT112(&XP,
|
||||||
|
&YP,
|
||||||
|
&ZP,
|
||||||
|
&PositionCoordSys,
|
||||||
|
&AttachToZone,
|
||||||
|
&Zone,
|
||||||
|
&FontType,
|
||||||
|
&HeightUnits,
|
||||||
|
&FH,
|
||||||
|
&BoxType,
|
||||||
|
&BoxMargin,
|
||||||
|
&BoxLineThickness,
|
||||||
|
&BoxColor,
|
||||||
|
&BoxFillColor,
|
||||||
|
&TextAngle,
|
||||||
|
&Anchor,
|
||||||
|
&LineSpacing,
|
||||||
|
&TextColor,
|
||||||
|
&Scope,
|
||||||
|
&Clipping,
|
||||||
|
(char*)"Hi Mom",
|
||||||
|
(char*)"");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare to write out geometry record (circle). Circle is
|
||||||
|
* positioned at 25, 25 (in frame units) and has a radius of
|
||||||
|
* 20 percent. Circle is drawn using a dashed line.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
XP = 25.0;
|
||||||
|
YP = 25.0;
|
||||||
|
ZP = 0.0;
|
||||||
|
IsFilled = 0;
|
||||||
|
Color = 0;
|
||||||
|
FillColor = 7;
|
||||||
|
GeomType = 3; /* Circle */
|
||||||
|
LinePattern = 1; /* Dashed */
|
||||||
|
LineThickness = 0.3;
|
||||||
|
PatternLength = 1.5;
|
||||||
|
NumEllipsePts = 72;
|
||||||
|
ArrowheadStyle = 0;
|
||||||
|
ArrowheadAttachment = 0;
|
||||||
|
ArrowheadSize = 0.1;
|
||||||
|
ArrowheadAngle = 15.0;
|
||||||
|
NumSegments = 1;
|
||||||
|
NumSegPts[0] = 1;
|
||||||
|
|
||||||
|
XGeomData[0] = 20.0;
|
||||||
|
YGeomData[0] = 0.0;
|
||||||
|
ZGeomData[0] = 0.0;
|
||||||
|
|
||||||
|
|
||||||
|
III = TECGEO112(&XP,
|
||||||
|
&YP,
|
||||||
|
&ZP,
|
||||||
|
&PositionCoordSys,
|
||||||
|
&AttachToZone,
|
||||||
|
&Zone,
|
||||||
|
&Color,
|
||||||
|
&FillColor,
|
||||||
|
&IsFilled,
|
||||||
|
&GeomType,
|
||||||
|
&LinePattern,
|
||||||
|
&PatternLength,
|
||||||
|
&LineThickness,
|
||||||
|
&NumEllipsePts,
|
||||||
|
&ArrowheadStyle,
|
||||||
|
&ArrowheadAttachment,
|
||||||
|
&ArrowheadSize,
|
||||||
|
&ArrowheadAngle,
|
||||||
|
&Scope,
|
||||||
|
&Clipping,
|
||||||
|
&NumSegments,
|
||||||
|
NumSegPts,
|
||||||
|
&XGeomData[0],
|
||||||
|
&YGeomData[0],
|
||||||
|
&ZGeomData[0],
|
||||||
|
(char*)"");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close out file 1.
|
||||||
|
*/
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close out file 2.
|
||||||
|
*/
|
||||||
|
III = 2;
|
||||||
|
I = TECFIL112(&III);
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,467 @@
|
|||||||
|
C
|
||||||
|
C Complex example FORTRAN program to write a
|
||||||
|
C binary data file for Tecplot. This example
|
||||||
|
C does the following:
|
||||||
|
C
|
||||||
|
C 1. Open a data file called "field.plt."
|
||||||
|
C 2. Open a data file called "line.plt."
|
||||||
|
C 3. Assign values for X, Y and P. These will be used
|
||||||
|
C in both the ordered and FE data files.
|
||||||
|
C 4. Write out an ordered zone dimensioned 4 x 5 to "field.plt."
|
||||||
|
C 5. Assign values for XL and YL arrays.
|
||||||
|
C 6. Write out data for line plot to "line.plt." Make the data
|
||||||
|
C use double precision.
|
||||||
|
C 7. Write out a finite element zone to "field.plt."
|
||||||
|
C 8. Write out a text record to "field.plt."
|
||||||
|
C 9. Write out a geometry (circle) record to "field.plt."
|
||||||
|
C 10. Close file 1.
|
||||||
|
C 11. Close file 2.
|
||||||
|
C
|
||||||
|
Program ComplexTest
|
||||||
|
|
||||||
|
Include "tecio.inc"
|
||||||
|
|
||||||
|
REAL*4 X(4,5), Y(4,5), P(4,5)
|
||||||
|
REAL*8 XL(50), YL(50)
|
||||||
|
REAL*4 XLDummy(1), YLDummy(1)
|
||||||
|
EQUIVALENCE (XLDummy(1), XL(1))
|
||||||
|
EQUIVALENCE (YLDummy(1), YL(1))
|
||||||
|
REAL*8 SolTime
|
||||||
|
INTEGER*4 Debug,I,J,K,L,III,NPts,NElm,DIsDouble,VIsDouble
|
||||||
|
INTEGER*4 IMax,JMax,KMax,NM(4,12),FileType
|
||||||
|
INTEGER*4 StrandID,ParentZn
|
||||||
|
INTEGER*4 SharingZone(3)
|
||||||
|
REAL*8 XP, YP, ZP, FH, LineSpacing, PatternLength
|
||||||
|
REAL*8 BoxMargin, BoxLineThickness, TextAngle
|
||||||
|
INTEGER*4 AttachToZone, Zone, Scope, PositionCoordSys
|
||||||
|
INTEGER*4 Clipping
|
||||||
|
INTEGER*4 FontType, HeightUnits, Anchor, BoxType
|
||||||
|
INTEGER*4 IsFilled, GeomType, LinePattern, NumEllipsePts
|
||||||
|
INTEGER*4 BoxColor, BoxFillColor, TextColor, Color, FillColor
|
||||||
|
INTEGER*4 ArrowheadStyle, ArrowheadAttachment, NumSegments
|
||||||
|
INTEGER*4 NumSegPts(1)
|
||||||
|
REAL*8 LineThickness, ArrowheadSize, ArrowheadAngle
|
||||||
|
REAL*4 XGeomData(1), YGeomData(1), ZGeomData(1)
|
||||||
|
CHARACTER*1 NULCHAR
|
||||||
|
INTEGER*4 Zero
|
||||||
|
POINTER (NullPtr,Null)
|
||||||
|
INTEGER*4 Null(*)
|
||||||
|
|
||||||
|
Debug = 2
|
||||||
|
VIsDouble = 0
|
||||||
|
FileType = 0
|
||||||
|
DIsDouble = 0
|
||||||
|
NULCHAR = CHAR(0)
|
||||||
|
Zero = 0
|
||||||
|
NullPtr = 0
|
||||||
|
C
|
||||||
|
C Open field.plt and write the header information.
|
||||||
|
C
|
||||||
|
I = TECINI112('DATASET WITH 1 ORDERED ZONE, '//
|
||||||
|
& '1 QUAD ZONE OVER 2 TIME STEPS'//NULCHAR,
|
||||||
|
& 'X Y P'//NULCHAR,
|
||||||
|
& 'field.plt'//NULCHAR,
|
||||||
|
& '.'//NULCHAR,
|
||||||
|
& FileType,
|
||||||
|
& Debug,
|
||||||
|
& VIsDouble)
|
||||||
|
C
|
||||||
|
C Open line.plt and write the header information.
|
||||||
|
C
|
||||||
|
VIsDouble = 1
|
||||||
|
I = TECINI112('DATASET WITH ONE I-ORDERED ZONE'//NULCHAR,
|
||||||
|
& 'X Y'//NULCHAR,
|
||||||
|
& 'line.plt'//NULCHAR,
|
||||||
|
& '.'//NULCHAR,
|
||||||
|
& FileType,
|
||||||
|
& Debug,
|
||||||
|
& VIsDouble)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Calculate values for the field variables.
|
||||||
|
C
|
||||||
|
Do 10 J = 1,5
|
||||||
|
Do 10 I = 1,4
|
||||||
|
X(I,J) = I
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
10 Continue
|
||||||
|
|
||||||
|
C
|
||||||
|
C Make sure writing to file #1.
|
||||||
|
C
|
||||||
|
III = 1
|
||||||
|
I = TECFIL112(III)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Write the zone header information for the ordered zone.
|
||||||
|
C
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 10.0
|
||||||
|
StrandID = 1
|
||||||
|
ParentZn = 0
|
||||||
|
I = TECZNE112('Ordered Zone 1'//NULCHAR,
|
||||||
|
& 0, ! ZONETYPE
|
||||||
|
& IMax,
|
||||||
|
& JMax,
|
||||||
|
& KMax,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& 1, ! ISBLOCK
|
||||||
|
& 0, ! NumFaceConnections
|
||||||
|
& 0, ! FaceNeighborMode
|
||||||
|
& 0, ! TotalNumFaceNodes
|
||||||
|
& 0, ! NumConnectedBoundaryFaces
|
||||||
|
& 0, ! TotalNumBoundaryConnections
|
||||||
|
& Null, ! PassiveVarList
|
||||||
|
& Null, ! ValueLocation
|
||||||
|
& Null, ! ShareVarFromZone
|
||||||
|
& 0) ! ShareConnectivityFromZone)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Write out the field data for the ordered zone.
|
||||||
|
C
|
||||||
|
III = IMax*JMax
|
||||||
|
I = TECDAT112(III,X,DIsDouble)
|
||||||
|
I = TECDAT112(III,Y,DIsDouble)
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Calculate values for the I-ordered zone.
|
||||||
|
C
|
||||||
|
|
||||||
|
Do 20 I = 1,50
|
||||||
|
XL(I) = I
|
||||||
|
YL(I) = sin(I/20.0)
|
||||||
|
20 Continue
|
||||||
|
C
|
||||||
|
C Switch to the 'line.plt' file (file number 2)
|
||||||
|
C and write out the line plot data.
|
||||||
|
C
|
||||||
|
III = 2
|
||||||
|
I = TECFIL112(III)
|
||||||
|
C
|
||||||
|
C Write the zone header information for the XY-data.
|
||||||
|
C
|
||||||
|
IMax = 50
|
||||||
|
JMax = 1
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 0.0
|
||||||
|
StrandID = 0
|
||||||
|
I = TECZNE112('XY Line plot'//NULCHAR,
|
||||||
|
& 0,
|
||||||
|
& IMax,
|
||||||
|
& JMax,
|
||||||
|
& KMax,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& 1,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& 0)
|
||||||
|
C
|
||||||
|
C Write out the line plot.
|
||||||
|
C
|
||||||
|
DIsDouble = 1
|
||||||
|
III = IMax
|
||||||
|
I = TECDAT112(III,XLDummy,DIsDouble)
|
||||||
|
I = TECDAT112(III,YLDummy,DIsDouble)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Switch back to the field plot file and write out
|
||||||
|
C the finite-element zone.
|
||||||
|
C
|
||||||
|
III = 1
|
||||||
|
I = TECFIL112(III)
|
||||||
|
C
|
||||||
|
C Move the coordinates so this zone's not on top of the other
|
||||||
|
C
|
||||||
|
Do 30 J = 1,5
|
||||||
|
Do 30 I = 1,4
|
||||||
|
X(I,J) = I+5
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
30 Continue
|
||||||
|
C
|
||||||
|
C Write the zone header information for the finite-element zone.
|
||||||
|
C
|
||||||
|
NPts = 20
|
||||||
|
NElm = 12
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 10.0
|
||||||
|
StrandID = 2
|
||||||
|
I = TECZNE112('Finite Zone 1'//NULCHAR,
|
||||||
|
& 3, ! FEQUADRILATERAL
|
||||||
|
& NPts,
|
||||||
|
& NElm,
|
||||||
|
& KMax,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& 1,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& 0)
|
||||||
|
C
|
||||||
|
C Write out the field data for the finite-element zone.
|
||||||
|
C
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,X,DIsDouble)
|
||||||
|
I = TECDAT112(III,Y,DIsDouble)
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Calculate and then write out the connectivity list.
|
||||||
|
C Note: The NM array references cells starting with
|
||||||
|
C offset of 1.
|
||||||
|
C
|
||||||
|
|
||||||
|
Do 40 I = 1,IMax-1
|
||||||
|
Do 40 J = 1,JMax-1
|
||||||
|
K = I+(J-1)*(IMax-1)
|
||||||
|
L = I+(J-1)*IMax
|
||||||
|
NM(1,K) = L
|
||||||
|
NM(2,K) = L+1
|
||||||
|
NM(3,K) = L+IMax+1
|
||||||
|
NM(4,K) = L+IMax
|
||||||
|
40 Continue
|
||||||
|
|
||||||
|
I = TECNOD112(NM)
|
||||||
|
C
|
||||||
|
C Calculate vlues for the new solution variable.
|
||||||
|
C
|
||||||
|
Do 50 J = 1,5
|
||||||
|
Do 50 I = 1,4
|
||||||
|
P(I,J) = 2*I*J
|
||||||
|
50 Continue
|
||||||
|
C
|
||||||
|
C Write the zone header information for time step 2
|
||||||
|
C
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 20.0
|
||||||
|
StrandID = 1
|
||||||
|
SharingZone(1) = 1
|
||||||
|
SharingZone(2) = 1
|
||||||
|
SharingZone(3) = 0
|
||||||
|
I = TECZNE112('Ordered Zone 2'//NULCHAR,
|
||||||
|
& 0, ! ORDERED
|
||||||
|
& IMax,
|
||||||
|
& JMax,
|
||||||
|
& KMax,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& 1,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& SharingZone,
|
||||||
|
& 0)
|
||||||
|
C
|
||||||
|
C Write out the solution variable the grid variables are shared.
|
||||||
|
C
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
C
|
||||||
|
C Calculate values for the new solution variable.
|
||||||
|
C
|
||||||
|
Do 60 J = 1,5
|
||||||
|
Do 60 I = 1,4
|
||||||
|
P(I,J) = 3*I*J
|
||||||
|
60 Continue
|
||||||
|
C
|
||||||
|
C Write another time step for the FEZone and share from the first
|
||||||
|
C
|
||||||
|
SolTime = 20.0
|
||||||
|
StrandID = 2
|
||||||
|
KMax = 0
|
||||||
|
SharingZone(1) = 2
|
||||||
|
SharingZone(2) = 2
|
||||||
|
SharingZone(3) = 0
|
||||||
|
I = TECZNE112('Finite Zone 2'//NULCHAR,
|
||||||
|
& 3, ! FEQUADRILATERAL
|
||||||
|
& NPts,
|
||||||
|
& NElm,
|
||||||
|
& KMax,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& 1,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& SharingZone,
|
||||||
|
& 2)
|
||||||
|
C
|
||||||
|
C Write out the solution variable the grid variables are shared.
|
||||||
|
C
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Prepare to write out text record. Text is positioned
|
||||||
|
C at 50, 50 in frame units and has a height 5 frame units.
|
||||||
|
C
|
||||||
|
XP = 50
|
||||||
|
YP = 50
|
||||||
|
FH = 5
|
||||||
|
Scope = 1
|
||||||
|
Clipping = 0
|
||||||
|
PositionCoordSys = 1
|
||||||
|
FontType = 1
|
||||||
|
HeightUnits = 1
|
||||||
|
AttachToZone = 0
|
||||||
|
Zone = 0
|
||||||
|
BoxType = 0
|
||||||
|
BoxMargin = 5.0
|
||||||
|
BoxLineThickness = 0.5
|
||||||
|
BoxColor = 3
|
||||||
|
BoxFillColor = 7
|
||||||
|
TextAngle = 0.0
|
||||||
|
Anchor = 0
|
||||||
|
LineSpacing = 1.5
|
||||||
|
TextColor = 0
|
||||||
|
|
||||||
|
III = TECTXT112(XP,
|
||||||
|
& YP,
|
||||||
|
& 0.0d0,
|
||||||
|
& PositionCoordSys,
|
||||||
|
& AttachToZone,
|
||||||
|
& Zone,
|
||||||
|
& FontType,
|
||||||
|
& HeightUnits,
|
||||||
|
& FH,
|
||||||
|
& BoxType,
|
||||||
|
& BoxMargin,
|
||||||
|
& BoxLineThickness,
|
||||||
|
& BoxColor,
|
||||||
|
& BoxFillColor,
|
||||||
|
& TextAngle,
|
||||||
|
& Anchor,
|
||||||
|
& LineSpacing,
|
||||||
|
& TextColor,
|
||||||
|
& Scope,
|
||||||
|
& Clipping,
|
||||||
|
& 'Hi Mom'//NULCHAR,
|
||||||
|
& NULCHAR)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Prepare to write out geometry record (circle). Circle is
|
||||||
|
C positioned at 25, 25 in frame units and has a radius of 30.
|
||||||
|
C Circle is drawn using a dashed line pattern.
|
||||||
|
C
|
||||||
|
|
||||||
|
|
||||||
|
XP = 25
|
||||||
|
YP = 25
|
||||||
|
ZP = 0.0
|
||||||
|
IsFilled = 0
|
||||||
|
Color = 0
|
||||||
|
FillColor = 7
|
||||||
|
GeomType = 2
|
||||||
|
LinePattern = 1
|
||||||
|
LineThickness = 0.3
|
||||||
|
PatternLength = 1
|
||||||
|
NumEllipsePts = 72
|
||||||
|
ArrowheadStyle = 0
|
||||||
|
ArrowheadAttachment = 0
|
||||||
|
ArrowheadSize = 0.0
|
||||||
|
ArrowheadAngle = 15.0
|
||||||
|
NumSegments = 1
|
||||||
|
NumSegPts(1) = 1
|
||||||
|
|
||||||
|
XGeomData(1) = 30
|
||||||
|
YGeomData(1) = 0.0
|
||||||
|
ZGeomData(1) = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
III = TECGEO112(XP,
|
||||||
|
& YP,
|
||||||
|
& ZP,
|
||||||
|
& PositionCoordSys,
|
||||||
|
& AttachToZone,
|
||||||
|
& Zone,
|
||||||
|
& Color,
|
||||||
|
& FillColor,
|
||||||
|
& IsFilled,
|
||||||
|
& GeomType,
|
||||||
|
& LinePattern,
|
||||||
|
& PatternLength,
|
||||||
|
& LineThickness,
|
||||||
|
& NumEllipsePts,
|
||||||
|
& ArrowheadStyle,
|
||||||
|
& ArrowheadAttachment,
|
||||||
|
& ArrowheadSize,
|
||||||
|
& ArrowheadAngle,
|
||||||
|
& Scope,
|
||||||
|
& Clipping,
|
||||||
|
& NumSegments,
|
||||||
|
& NumSegPts,
|
||||||
|
& XGeomData,
|
||||||
|
& YGeomData,
|
||||||
|
& ZGeomData,
|
||||||
|
& NULCHAR)
|
||||||
|
|
||||||
|
C
|
||||||
|
C Close out file 1.
|
||||||
|
C
|
||||||
|
I = TECEND112()
|
||||||
|
|
||||||
|
C
|
||||||
|
C Close out file 2.
|
||||||
|
C
|
||||||
|
III = 2
|
||||||
|
I = TECFIL112(III)
|
||||||
|
I = TECEND112()
|
||||||
|
STOP
|
||||||
|
END
|
||||||
@ -0,0 +1,467 @@
|
|||||||
|
!
|
||||||
|
! Complex example FORTRAN program to write a
|
||||||
|
! binary data file for Tecplot. This example
|
||||||
|
! does the following:
|
||||||
|
!
|
||||||
|
! 1. Open a data file called "field.plt."
|
||||||
|
! 2. Open a data file called "line.plt."
|
||||||
|
! 3. Assign values for X, Y and P. These will be used
|
||||||
|
! in both the ordered and FE data files.
|
||||||
|
! 4. Write out an ordered zone dimensioned 4 x 5 to "field.plt."
|
||||||
|
! 5. Assign values for XL and YL arrays.
|
||||||
|
! 6. Write out data for line plot to "line.plt." Make the data
|
||||||
|
! use double precision.
|
||||||
|
! 7. Write out a finite element zone to "field.plt."
|
||||||
|
! 8. Write out a text record to "field.plt."
|
||||||
|
! 9. Write out a geometry (circle) record to "field.plt."
|
||||||
|
! 10. Close file 1.
|
||||||
|
! 11. Close file 2.
|
||||||
|
!
|
||||||
|
Program ComplexTest
|
||||||
|
|
||||||
|
Include "tecio.f90"
|
||||||
|
|
||||||
|
REAL*4 X(4,5), Y(4,5), P(4,5)
|
||||||
|
REAL*8 XL(50), YL(50)
|
||||||
|
REAL*4 XLDummy(1), YLDummy(1)
|
||||||
|
EQUIVALENCE (XLDummy(1), XL(1))
|
||||||
|
EQUIVALENCE (YLDummy(1), YL(1))
|
||||||
|
REAL*8 SolTime
|
||||||
|
INTEGER*4 Debug,I,J,K,L,III,NPts,NElm,DIsDouble,VIsDouble,FileType
|
||||||
|
INTEGER*4 IMax,JMax,KMax,NM(4,12)
|
||||||
|
INTEGER*4 StrandID,ParentZn
|
||||||
|
INTEGER*4 SharingZone(3)
|
||||||
|
REAL*8 XP, YP, ZP, FH, LineSpacing, PatternLength
|
||||||
|
REAL*8 BoxMargin, BoxLineThickness, TextAngle
|
||||||
|
INTEGER*4 AttachToZone, Zone, Scope, PositionCoordSys
|
||||||
|
INTEGER*4 Clipping
|
||||||
|
INTEGER*4 FontType, HeightUnits, Anchor, BoxType
|
||||||
|
INTEGER*4 IsFilled, GeomType, LinePattern, NumEllipsePts
|
||||||
|
INTEGER*4 BoxColor, BoxFillColor, TextColor, Color, FillColor
|
||||||
|
INTEGER*4 ArrowheadStyle, ArrowheadAttachment, NumSegments
|
||||||
|
INTEGER*4 NumSegPts(1)
|
||||||
|
REAL*8 LineThickness, ArrowheadSize, ArrowheadAngle
|
||||||
|
REAL*4 XGeomData(1), YGeomData(1), ZGeomData(1)
|
||||||
|
CHARACTER*1 NULCHAR
|
||||||
|
INTEGER*4 Zero
|
||||||
|
POINTER (NullPtr,Null)
|
||||||
|
INTEGER*4 Null(*)
|
||||||
|
|
||||||
|
Debug = 2
|
||||||
|
VIsDouble = 0
|
||||||
|
FileType = 0
|
||||||
|
DIsDouble = 0
|
||||||
|
NULCHAR = CHAR(0)
|
||||||
|
Zero = 0
|
||||||
|
NullPtr = 0
|
||||||
|
!
|
||||||
|
! Open field.plt and write the header information.
|
||||||
|
!
|
||||||
|
I = TECINI112('DATASET WITH 1 ORDERED ZONE, '// &
|
||||||
|
'1 QUAD ZONE OVER 2 TIME STEPS'//NULCHAR, &
|
||||||
|
'X Y P'//NULCHAR, &
|
||||||
|
'field.plt'//NULCHAR, &
|
||||||
|
'.'//NULCHAR, &
|
||||||
|
FileType, &
|
||||||
|
Debug, &
|
||||||
|
VIsDouble)
|
||||||
|
!
|
||||||
|
! Open line.plt and write the header information.
|
||||||
|
!
|
||||||
|
VIsDouble = 1
|
||||||
|
I = TECINI112('DATASET WITH ONE I-ORDERED ZONE'//NULCHAR, &
|
||||||
|
'X Y'//NULCHAR, &
|
||||||
|
'line.plt'//NULCHAR, &
|
||||||
|
'.'//NULCHAR, &
|
||||||
|
FileType, &
|
||||||
|
Debug, &
|
||||||
|
VIsDouble)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Calculate values for the field variables.
|
||||||
|
!
|
||||||
|
Do 10 J = 1,5
|
||||||
|
Do 10 I = 1,4
|
||||||
|
X(I,J) = I
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
10 Continue
|
||||||
|
|
||||||
|
!
|
||||||
|
! Make sure writing to file #1.
|
||||||
|
!
|
||||||
|
III = 1
|
||||||
|
I = TECFIL112(III)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Write the zone header information for the ordered zone.
|
||||||
|
!
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 10.0
|
||||||
|
StrandID = 1
|
||||||
|
ParentZn = 0
|
||||||
|
I = TECZNE112('Ordered Zone 1'//NULCHAR, &
|
||||||
|
0, & ! ZONETYPE
|
||||||
|
IMax, &
|
||||||
|
JMax, &
|
||||||
|
KMax, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
1, & ! ISBLOCK
|
||||||
|
0, & ! NumFaceConnections
|
||||||
|
0, & ! FaceNeighborMode
|
||||||
|
0, & ! TotalNumFaceNodes
|
||||||
|
0, & ! NumConnectedBoundaryFaces
|
||||||
|
0, & ! TotalNumBoundaryConnections
|
||||||
|
Null, & ! PassiveVarList
|
||||||
|
Null, & ! ValueLocation
|
||||||
|
Null, & ! ShareVarFromZone
|
||||||
|
0) ! ShareConnectivityFromZone)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Write out the field data for the ordered zone.
|
||||||
|
!
|
||||||
|
III = IMax*JMax
|
||||||
|
I = TECDAT112(III,X,DIsDouble)
|
||||||
|
I = TECDAT112(III,Y,DIsDouble)
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Calculate values for the I-ordered zone.
|
||||||
|
!
|
||||||
|
|
||||||
|
Do 20 I = 1,50
|
||||||
|
XL(I) = I
|
||||||
|
YL(I) = sin(I/20.0)
|
||||||
|
20 Continue
|
||||||
|
!
|
||||||
|
! Switch to the 'line.plt' file (file number 2)
|
||||||
|
! and write out the line plot data.
|
||||||
|
!
|
||||||
|
III = 2
|
||||||
|
I = TECFIL112(III)
|
||||||
|
!
|
||||||
|
! Write the zone header information for the XY-data.
|
||||||
|
!
|
||||||
|
IMax = 50
|
||||||
|
JMax = 1
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 0.0
|
||||||
|
StrandID = 0
|
||||||
|
I = TECZNE112('XY Line plot'//NULCHAR, &
|
||||||
|
0, &
|
||||||
|
IMax, &
|
||||||
|
JMax, &
|
||||||
|
KMax, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
1, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
0)
|
||||||
|
!
|
||||||
|
! Write out the line plot.
|
||||||
|
!
|
||||||
|
DIsDouble = 1
|
||||||
|
III = IMax
|
||||||
|
I = TECDAT112(III,XLDummy,DIsDouble)
|
||||||
|
I = TECDAT112(III,YLDummy,DIsDouble)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Switch back to the field plot file and write out
|
||||||
|
! the finite-element zone.
|
||||||
|
!
|
||||||
|
III = 1
|
||||||
|
I = TECFIL112(III)
|
||||||
|
!
|
||||||
|
! Move the coordinates so this zone's not on top of the other
|
||||||
|
!
|
||||||
|
Do 30 J = 1,5
|
||||||
|
Do 30 I = 1,4
|
||||||
|
X(I,J) = I+5
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
30 Continue
|
||||||
|
!
|
||||||
|
! Write the zone header information for the finite-element zone.
|
||||||
|
!
|
||||||
|
NPts = 20
|
||||||
|
NElm = 12
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 10.0
|
||||||
|
StrandID = 2
|
||||||
|
I = TECZNE112('Finite Zone 1'//NULCHAR, &
|
||||||
|
3, & ! FEQUADRILATERAL
|
||||||
|
NPts, &
|
||||||
|
NElm, &
|
||||||
|
KMax, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
1, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
0)
|
||||||
|
!
|
||||||
|
! Write out the field data for the finite-element zone.
|
||||||
|
!
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,X,DIsDouble)
|
||||||
|
I = TECDAT112(III,Y,DIsDouble)
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Calculate and then write out the connectivity list.
|
||||||
|
! Note: The NM array references cells starting with
|
||||||
|
! offset of 1.
|
||||||
|
!
|
||||||
|
|
||||||
|
Do 40 I = 1,IMax-1
|
||||||
|
Do 40 J = 1,JMax-1
|
||||||
|
K = I+(J-1)*(IMax-1)
|
||||||
|
L = I+(J-1)*IMax
|
||||||
|
NM(1,K) = L
|
||||||
|
NM(2,K) = L+1
|
||||||
|
NM(3,K) = L+IMax+1
|
||||||
|
NM(4,K) = L+IMax
|
||||||
|
40 Continue
|
||||||
|
|
||||||
|
I = TECNOD112(NM)
|
||||||
|
!
|
||||||
|
! Calculate vlues for the new solution variable.
|
||||||
|
!
|
||||||
|
Do 50 J = 1,5
|
||||||
|
Do 50 I = 1,4
|
||||||
|
P(I,J) = 2*I*J
|
||||||
|
50 Continue
|
||||||
|
!
|
||||||
|
! Write the zone header information for time step 2
|
||||||
|
!
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
SolTime = 20.0
|
||||||
|
StrandID = 1
|
||||||
|
SharingZone(1) = 1
|
||||||
|
SharingZone(2) = 1
|
||||||
|
SharingZone(3) = 0
|
||||||
|
I = TECZNE112('Ordered Zone 2'//NULCHAR, &
|
||||||
|
0, & ! ORDERED
|
||||||
|
IMax, &
|
||||||
|
JMax, &
|
||||||
|
KMax, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
1, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
SharingZone, &
|
||||||
|
0)
|
||||||
|
!
|
||||||
|
! Write out the solution variable the grid variables are shared.
|
||||||
|
!
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
!
|
||||||
|
! Calculate values for the new solution variable.
|
||||||
|
!
|
||||||
|
Do 60 J = 1,5
|
||||||
|
Do 60 I = 1,4
|
||||||
|
P(I,J) = 3*I*J
|
||||||
|
60 Continue
|
||||||
|
!
|
||||||
|
! Write another time step for the FEZone and share from the first
|
||||||
|
!
|
||||||
|
SolTime = 20.0
|
||||||
|
StrandID = 2
|
||||||
|
KMax = 0
|
||||||
|
SharingZone(1) = 2
|
||||||
|
SharingZone(2) = 2
|
||||||
|
SharingZone(3) = 0
|
||||||
|
I = TECZNE112('Finite Zone 2'//NULCHAR, &
|
||||||
|
3, & ! FEQUADRILATERAL
|
||||||
|
NPts, &
|
||||||
|
NElm, &
|
||||||
|
KMax, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
1, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
SharingZone, &
|
||||||
|
2)
|
||||||
|
!
|
||||||
|
! Write out the solution variable the grid variables are shared.
|
||||||
|
!
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
III = IMax*JMax
|
||||||
|
DIsDouble = 0
|
||||||
|
I = TECDAT112(III,P,DIsDouble)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Prepare to write out text record. Text is positioned
|
||||||
|
! at 50, 50 in frame units and has a height 5 frame units.
|
||||||
|
!
|
||||||
|
XP = 50
|
||||||
|
YP = 50
|
||||||
|
FH = 5
|
||||||
|
Scope = 1
|
||||||
|
Clipping = 0
|
||||||
|
PositionCoordSys = 1
|
||||||
|
FontType = 1
|
||||||
|
HeightUnits = 1
|
||||||
|
AttachToZone = 0
|
||||||
|
Zone = 0
|
||||||
|
BoxType = 0
|
||||||
|
BoxMargin = 5.0
|
||||||
|
BoxLineThickness = 0.5
|
||||||
|
BoxColor = 3
|
||||||
|
BoxFillColor = 7
|
||||||
|
TextAngle = 0.0
|
||||||
|
Anchor = 0
|
||||||
|
LineSpacing = 1.5
|
||||||
|
TextColor = 0
|
||||||
|
|
||||||
|
III = TECTXT112(XP, &
|
||||||
|
YP, &
|
||||||
|
0.0d0, &
|
||||||
|
PositionCoordSys, &
|
||||||
|
AttachToZone, &
|
||||||
|
Zone, &
|
||||||
|
FontType, &
|
||||||
|
HeightUnits, &
|
||||||
|
FH, &
|
||||||
|
BoxType, &
|
||||||
|
BoxMargin, &
|
||||||
|
BoxLineThickness, &
|
||||||
|
BoxColor, &
|
||||||
|
BoxFillColor, &
|
||||||
|
TextAngle, &
|
||||||
|
Anchor, &
|
||||||
|
LineSpacing, &
|
||||||
|
TextColor, &
|
||||||
|
Scope, &
|
||||||
|
Clipping, &
|
||||||
|
'Hi Mom'//NULCHAR, &
|
||||||
|
NULCHAR)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Prepare to write out geometry record (circle). Circle is
|
||||||
|
! positioned at 25, 25 in frame units and has a radius of 30.
|
||||||
|
! Circle is drawn using a dashed line pattern.
|
||||||
|
!
|
||||||
|
|
||||||
|
|
||||||
|
XP = 25
|
||||||
|
YP = 25
|
||||||
|
ZP = 0.0
|
||||||
|
IsFilled = 0
|
||||||
|
Color = 0
|
||||||
|
FillColor = 7
|
||||||
|
GeomType = 2
|
||||||
|
LinePattern = 1
|
||||||
|
LineThickness = 0.3
|
||||||
|
PatternLength = 1
|
||||||
|
NumEllipsePts = 72
|
||||||
|
ArrowheadStyle = 0
|
||||||
|
ArrowheadAttachment = 0
|
||||||
|
ArrowheadSize = 0.0
|
||||||
|
ArrowheadAngle = 15.0
|
||||||
|
NumSegments = 1
|
||||||
|
NumSegPts(1) = 1
|
||||||
|
|
||||||
|
XGeomData(1) = 30
|
||||||
|
YGeomData(1) = 0.0
|
||||||
|
ZGeomData(1) = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
III = TECGEO112(XP, &
|
||||||
|
YP, &
|
||||||
|
ZP, &
|
||||||
|
PositionCoordSys, &
|
||||||
|
AttachToZone, &
|
||||||
|
Zone, &
|
||||||
|
Color, &
|
||||||
|
FillColor, &
|
||||||
|
IsFilled, &
|
||||||
|
GeomType, &
|
||||||
|
LinePattern, &
|
||||||
|
PatternLength, &
|
||||||
|
LineThickness, &
|
||||||
|
NumEllipsePts, &
|
||||||
|
ArrowheadStyle, &
|
||||||
|
ArrowheadAttachment, &
|
||||||
|
ArrowheadSize, &
|
||||||
|
ArrowheadAngle, &
|
||||||
|
Scope, &
|
||||||
|
Clipping, &
|
||||||
|
NumSegments, &
|
||||||
|
NumSegPts, &
|
||||||
|
XGeomData, &
|
||||||
|
YGeomData, &
|
||||||
|
ZGeomData, &
|
||||||
|
NULCHAR)
|
||||||
|
|
||||||
|
!
|
||||||
|
! Close out file 1.
|
||||||
|
!
|
||||||
|
I = TECEND112()
|
||||||
|
|
||||||
|
!
|
||||||
|
! Close out file 2.
|
||||||
|
!
|
||||||
|
III = 2
|
||||||
|
I = TECFIL112(III)
|
||||||
|
I = TECEND112()
|
||||||
|
STOP
|
||||||
|
END
|
||||||
@ -0,0 +1,346 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="comtestc"
|
||||||
|
ProjectGUID="{723FBFD1-5AF2-4154-B77A-CE3849EAFCA2}"
|
||||||
|
RootNamespace="comtestc"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\comtest.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<VisualStudioProject ProjectCreator="Intel Fortran" Keyword="Console Application" Version="9.10" ProjectIdGuid="{861BC05F-1E95-401A-A80E-7589ADD1C79E}">
|
||||||
|
<Platforms>
|
||||||
|
<Platform Name="Win32"/></Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)">
|
||||||
|
<Tool Name="VFMidlTool" SuppressStartupBanner="true" HeaderFileName="$(InputName).h" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
|
||||||
|
<Tool Name="VFPreBuildEventTool"/>
|
||||||
|
<Tool Name="VFFortranCompilerTool" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="$(TEC_360_2009)/Include" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" Traceback="true" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
|
||||||
|
<Tool Name="VFPostBuildEventTool"/>
|
||||||
|
<Tool Name="VFCustomBuildTool"/>
|
||||||
|
<Tool Name="VFLinkerTool" OutputFile="$(OUTDIR)/comtestf.exe" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" AdditionalLibraryDirectories="$(TEC_360_2009)/Bin" GenerateDebugInformation="true" ProgramDatabaseFile="$(OUTDIR)/comtestf.pdb" SubSystem="subSystemConsole" AdditionalDependencies="tecio.lib"/>
|
||||||
|
<Tool Name="VFResourceCompilerTool" ResourceOutputFileName="$(IntDir)/$(InputName).res"/>
|
||||||
|
<Tool Name="VFPreLinkEventTool"/></Configuration>
|
||||||
|
<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" MustRebuild="true">
|
||||||
|
<Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" HeaderFileName="$(InputName).h" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
|
||||||
|
<Tool Name="VFPreBuildEventTool"/>
|
||||||
|
<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" AdditionalIncludeDirectories="$(TEC_360_2009)/Include" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" RuntimeLibrary="rtMultiThreaded" CompileOnly="true"/>
|
||||||
|
<Tool Name="VFPostBuildEventTool"/>
|
||||||
|
<Tool Name="VFCustomBuildTool"/>
|
||||||
|
<Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OUTDIR)/comtestf.exe" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" AdditionalLibraryDirectories="$(TEC_360_2009)/Bin" SubSystem="subSystemConsole" AdditionalDependencies="tecio.lib"/>
|
||||||
|
<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" ResourceOutputFileName="$(IntDir)/$(InputName).res"/>
|
||||||
|
<Tool Name="VFPreLinkEventTool"/></Configuration></Configurations>
|
||||||
|
<Files>
|
||||||
|
<File RelativePath="comtest.f90"/></Files>
|
||||||
|
<Globals/></VisualStudioProject>
|
||||||
Binary file not shown.
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=faceneighbors
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,354 @@
|
|||||||
|
/* This example illustrates how to create two simple
|
||||||
|
* FE-quadilateral zones and create a face neighbor
|
||||||
|
* connection between the two zones. In order to keep the
|
||||||
|
* example as simple as possible, error checking is not included.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* Initialize the Data File using TECINI. TECINI is required
|
||||||
|
* for all data files. It is used to: open the data file and
|
||||||
|
* initialize the file header information (name the data file,
|
||||||
|
* the variables for the data file, and the file type).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecini.txt*/
|
||||||
|
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I = 0; /* Used to track return codes */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Face Neighbors Example", /* Specifies the name
|
||||||
|
* of the entire
|
||||||
|
* dataset
|
||||||
|
*/
|
||||||
|
(char*)"X Y P", /* Defines the
|
||||||
|
* variables for the
|
||||||
|
* data file. Each
|
||||||
|
* zone must contain
|
||||||
|
* each of the vars
|
||||||
|
* listed. The order
|
||||||
|
* of the variables in
|
||||||
|
* the list is used to
|
||||||
|
* define the variable
|
||||||
|
* number (e.g. X is
|
||||||
|
* Var 1.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
(char*)"FaceNeighbors.plt", /* Specifies the
|
||||||
|
* file name.
|
||||||
|
*/
|
||||||
|
(char*)".",
|
||||||
|
&FileType, /* The FileType is set to
|
||||||
|
* zero, indicating it is
|
||||||
|
* a full file (containing
|
||||||
|
* both grid and solution
|
||||||
|
* data).
|
||||||
|
*/
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* After TECINI is called, call TECZNE to create one or
|
||||||
|
* more zones for your data file.
|
||||||
|
*/
|
||||||
|
/* DOCSTART:faceneighbors_teczne1.txt*/
|
||||||
|
INTEGER4 ZoneType = 3; /* set the zone type to
|
||||||
|
* FEQuadrilateral
|
||||||
|
*/
|
||||||
|
INTEGER4 NumPts = 6;
|
||||||
|
INTEGER4 NumElems = 2;
|
||||||
|
INTEGER4 NumFaces = 8;
|
||||||
|
INTEGER4 ICellMax = 0; /* not used */
|
||||||
|
INTEGER4 JCellMax = 0; /* not used */
|
||||||
|
INTEGER4 KCellMax = 0; /* not used */
|
||||||
|
double SolTime = 360.0;
|
||||||
|
INTEGER4 StrandID = 0; /* StaticZone */
|
||||||
|
INTEGER4 ParentZn = 0;
|
||||||
|
INTEGER4 IsBlock = 1; /* Block */
|
||||||
|
INTEGER4 NFConns = 1; /* Specify the number of Face
|
||||||
|
* Neighbor Connections in the
|
||||||
|
* Zone. When this value is
|
||||||
|
* greater than zero, TECFACE must
|
||||||
|
* be called prior to creating the
|
||||||
|
* next zone or ending the file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Specify the Face Neighbor Mode.
|
||||||
|
* A value of 2 indicated that the face neighbor mode is global
|
||||||
|
* one-to-one. The scope of the face neighbors (local or
|
||||||
|
* global) is with respect to the zones. A value of global
|
||||||
|
* indicates that the face neighbor(s) is/are shared aross zones;
|
||||||
|
* a value of local indicates that the face neighbor(s) are
|
||||||
|
* shared within the current zone. The terms one-to-one and
|
||||||
|
* one-to-many are used to indicate whether the face in question
|
||||||
|
* is shared with one cell or several cells.
|
||||||
|
* For example, if your data is arranged as follows:
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
| | | |
|
||||||
|
| 1 | 2 | 3 |
|
||||||
|
| | | |
|
||||||
|
-----------------------
|
||||||
|
| | |
|
||||||
|
| 4 | 5 |
|
||||||
|
| | |
|
||||||
|
-----------------------
|
||||||
|
* The face between 1 & 4 is local-one-to-one. The face between
|
||||||
|
* 5 and (2 & 3) is local one-to-many.
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 FNMode = 2;
|
||||||
|
|
||||||
|
INTEGER4 TotalNumFaceNodes = 1; /* Not used for
|
||||||
|
* FEQuad zones*/
|
||||||
|
INTEGER4 NumConnectedBoundaryFaces = 1; /* Not used for
|
||||||
|
* FEQuad zones*/
|
||||||
|
INTEGER4 TotalNumBoundaryConnections = 1; /* Not used for
|
||||||
|
* FEQuad zones*/
|
||||||
|
INTEGER4 ShrConn = 0;
|
||||||
|
|
||||||
|
INTEGER4 ValueLocation[3] = {1, 1, 1}; /* Specify the variable
|
||||||
|
* values at the nodes.
|
||||||
|
* NOTE: Because all of
|
||||||
|
* the variables are
|
||||||
|
* defined at the nodes,
|
||||||
|
* we can just pass
|
||||||
|
* NULL for this array.
|
||||||
|
* We are providing the
|
||||||
|
* array for illustration
|
||||||
|
* purposes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Zone 1",
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&NumConnectedBoundaryFaces,
|
||||||
|
&TotalNumBoundaryConnections,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Set up the variable values. The variable values will be
|
||||||
|
* written to the file using TECDAT. Because we are specifying
|
||||||
|
* nodal variables (as specified via the ValueLocation
|
||||||
|
* parameter in TECZNE, each variable is dimensioned by the
|
||||||
|
* number of points (NumPts) in the Zone. You have the option
|
||||||
|
* to specify some variables with nodal values and some with
|
||||||
|
* cell-centered values. Refer to the Binary Function
|
||||||
|
* Reference for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecdat1.txt*/
|
||||||
|
float *X = new float[NumPts];
|
||||||
|
float *Y = new float[NumPts];
|
||||||
|
float *P = new float[NumPts];
|
||||||
|
|
||||||
|
/* For this example, we will create 2 rectangular cells in Zone
|
||||||
|
* 1. Before defining your variables, you must establish a
|
||||||
|
* consistent node numbering scheme for your data. Once the
|
||||||
|
* node numbers are defined, supply the variable values in the
|
||||||
|
* node numbering order. In this example, node 1 is defined at
|
||||||
|
* X = 0 and Y = 0. As such, the first value supplied for X
|
||||||
|
* (i.e. X[0]) is 0. Similarly, the first value supplied for Y
|
||||||
|
* is 0.
|
||||||
|
*
|
||||||
|
* It is important that you refer to node numbers consistently.
|
||||||
|
* The node numbers will be used later to define the
|
||||||
|
* connectivity for each element.
|
||||||
|
*/
|
||||||
|
|
||||||
|
X[0] = 0;
|
||||||
|
X[1] = 0;
|
||||||
|
X[2] = 1;
|
||||||
|
X[3] = 1;
|
||||||
|
X[4] = 2;
|
||||||
|
X[5] = 2;
|
||||||
|
|
||||||
|
Y[0] = 0;
|
||||||
|
Y[1] = 1;
|
||||||
|
Y[2] = 0;
|
||||||
|
Y[3] = 1;
|
||||||
|
Y[4] = 0;
|
||||||
|
Y[5] = 1;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < NumPts; ii++)
|
||||||
|
P[ii] = (float)(NumPts - ii);
|
||||||
|
|
||||||
|
INTEGER4 DIsDouble = 0; /* Set DIsDouble to zero to use
|
||||||
|
* variables in float format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Call TECDAT once for each variable */
|
||||||
|
I = TECDAT112(&NumPts, &X[0], &DIsDouble);
|
||||||
|
I = TECDAT112(&NumPts, &Y[0], &DIsDouble);
|
||||||
|
I = TECDAT112(&NumPts, &P[0], &DIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Define the face neighbors connections.
|
||||||
|
* The Connectivity List is used to specify the nodes that
|
||||||
|
* compose each element. When working with nodal variables, the
|
||||||
|
* numbering of the nodes is implicitly defined when the
|
||||||
|
* variables are declared. The first value of each variable is
|
||||||
|
* for node one, the second value for node two, and so on.
|
||||||
|
*
|
||||||
|
* Because this zone contains two quadilateral elements, we must
|
||||||
|
* supply 8 values in the connectivity list. The first four
|
||||||
|
* values define the nodes that form element 1. Similarly, the
|
||||||
|
* second four values define the nodes that form element 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecnod1.txt*/
|
||||||
|
INTEGER4 ConnList[8] = {1, 3, 4, 2,
|
||||||
|
3, 5, 6, 4
|
||||||
|
};
|
||||||
|
I = TECNOD112(ConnList);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* TIP! It is important to provide the node list in either a
|
||||||
|
* clockwise or counter-clockwise order. Otherwise, your
|
||||||
|
* elements will be misformed. For example, if the first two
|
||||||
|
* numbers in the above connectivity list, the zone would
|
||||||
|
* appear as follows:
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Now that TECNOD has been called, the creation of Zone 1
|
||||||
|
* is complete. However, in this example, we will define a
|
||||||
|
* face neighbor between Zone 1 and Zone 2 (to be created
|
||||||
|
* later in the example). Face Neighbor connections are used
|
||||||
|
* to define connections that are not created via the
|
||||||
|
* connectivity list. For example, local face neighbors may
|
||||||
|
* need to be defined when a zone wraps itself and global face
|
||||||
|
* neighbors may need to be defined to smooth edges across
|
||||||
|
* zones. Face Neighbors are used when deriving variables and
|
||||||
|
* drawing contours.
|
||||||
|
*
|
||||||
|
* In this example, we are creating a face neighbor connection
|
||||||
|
* between cell 2 in Zone 1 and cell 1 in Zone 2. The
|
||||||
|
* information required when specifying face neighbors
|
||||||
|
* depends upon the type of connection.
|
||||||
|
*
|
||||||
|
* In this case, we must supply (in this order):
|
||||||
|
* - the cell number in the current zone that contains the
|
||||||
|
* - the number of the face in that cell that contains the
|
||||||
|
* face neighbor
|
||||||
|
* - the number of the other zone to which the face is
|
||||||
|
* connected
|
||||||
|
* - the number of the cell in the other zone to which the
|
||||||
|
* face is connected
|
||||||
|
* The face numbering for cell-based finite elements is
|
||||||
|
* defined using the picture displayed in the Data Format
|
||||||
|
* Guide. In this example, face 2 in cell 2 in the current
|
||||||
|
* zone is connected to cell 1 in zone 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecface1.txt*/
|
||||||
|
INTEGER4 FaceConn[4] = {2, 2, 2, 1};
|
||||||
|
I = TECFACE112(FaceConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* The creation of Zone 1 is complete. We are ready to create
|
||||||
|
* Zone 2. For simplicity, Zone 2 is a copy of Zone 1 shifted
|
||||||
|
* along the X-axis. As such, many of the variables used to
|
||||||
|
* create Zone 1 are re-used here.
|
||||||
|
*/
|
||||||
|
/* DOCSTART:faceneighbors_teczne2.txt*/
|
||||||
|
/* Call TECZNE to create Zone 2 */
|
||||||
|
I = TECZNE112((char*)"Zone 2",
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&NumConnectedBoundaryFaces,
|
||||||
|
&TotalNumBoundaryConnections,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Define the variables for Zone 2. Because Zone 2 is a copy
|
||||||
|
* of Zone 1, shifted along the X-axis, we can share the Y
|
||||||
|
* variable definition used to Zone. We will also create a
|
||||||
|
* second pressure variable for Zone 2 (P2).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecdat2.txt*/
|
||||||
|
float *X2 = new float[NumPts];
|
||||||
|
float *P2 = new float[NumPts];
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < NumPts; ii++)
|
||||||
|
{
|
||||||
|
X2[ii] = X[ii] + 2;
|
||||||
|
P2[ii] = 2 * (float)ii;
|
||||||
|
}
|
||||||
|
|
||||||
|
I = TECDAT112(&NumPts, &X2[0], &DIsDouble);
|
||||||
|
I = TECDAT112(&NumPts, &Y[0], &DIsDouble);
|
||||||
|
I = TECDAT112(&NumPts, &P2[0], &DIsDouble);
|
||||||
|
|
||||||
|
delete X;
|
||||||
|
delete Y;
|
||||||
|
delete P;
|
||||||
|
delete X2;
|
||||||
|
delete P2;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* As with Zone 1, we must define the connectivity list for
|
||||||
|
* Zone 2. Because, the node numbering restarts at one for each
|
||||||
|
* new zone and the nodal arrangement is identical between the
|
||||||
|
* two zones, we may reuse the connectivity list from Zone 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecnod2.txt*/
|
||||||
|
I = TECNOD112(ConnList);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* We will now specify the face neighbor connection with
|
||||||
|
* respect to our new current zone of Zone 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:faceneighbors_tecface2.txt*/
|
||||||
|
INTEGER4 FaceConn2[4] = {1, 4, 1, 2}; /* cell 1, face 4 in
|
||||||
|
* current zone is a
|
||||||
|
* neighbor to cell 2 in
|
||||||
|
* zone 1.
|
||||||
|
*/
|
||||||
|
I = TECFACE112(FaceConn2);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Call TECEND to close the file */
|
||||||
|
/* DOCSTART:faceneighbors_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="faceneighbors"
|
||||||
|
ProjectGUID="{1074FD63-4831-4D1B-8A27-94A3AC33A509}"
|
||||||
|
RootNamespace="faceneighbors"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\faceneighbors.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=gridsolution
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,376 @@
|
|||||||
|
/* This example illustrates using separate grid
|
||||||
|
* and solution files.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* DOCSTART:gridsolution_grid_tecini.txt*/
|
||||||
|
INTEGER4 I; /* use to check return values */
|
||||||
|
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 1; /* 1 = grid file. */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Example: Separate grid and solution files",
|
||||||
|
(char*)"X Y Z", /* Defines the variables for the data file.
|
||||||
|
* Each zone must contain each of the vars
|
||||||
|
* listed here. The order of the variables
|
||||||
|
* in the list is used to define the
|
||||||
|
* variable number (e.g. X is Variable 1).
|
||||||
|
* When referring to variables in other
|
||||||
|
* TecIO functions, you will refer to the
|
||||||
|
* variable by its number.
|
||||||
|
*/
|
||||||
|
(char*)"grid.plt",
|
||||||
|
(char*)".", /* scratch directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_grid_teczne.txt*/
|
||||||
|
/* TECZNE Parameters */
|
||||||
|
INTEGER4 ZoneType = 7; /* FE Polyhedron */
|
||||||
|
INTEGER4 NumPts = 20; /* the number of unique
|
||||||
|
* nodes in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumElems = 1;
|
||||||
|
INTEGER4 NumFaces = 12; /* the number of unique
|
||||||
|
* faces in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 ICellMax = 0; /* not used */
|
||||||
|
INTEGER4 JCellMax = 0; /* not used */
|
||||||
|
INTEGER4 KCellMax = 0; /* not used */
|
||||||
|
double SolutionTime = 0.0;
|
||||||
|
INTEGER4 StrandID = 1; /* time strand for
|
||||||
|
* unsteady solution.
|
||||||
|
*/
|
||||||
|
INTEGER4 ParentZone = 0;
|
||||||
|
INTEGER4 IsBlock = 1;
|
||||||
|
INTEGER4 NumFaceConnections = 0;
|
||||||
|
INTEGER4 FaceNeighborMode = 1;
|
||||||
|
INTEGER4 SharConn = 0;
|
||||||
|
|
||||||
|
/* For this zone, the total number of face nodes is
|
||||||
|
* five times number of faces, because each face
|
||||||
|
* is a pentagon.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumFaceNodes = 5 * NumFaces;
|
||||||
|
|
||||||
|
/* This zone has no connected boundary faces.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryFaces = 0;
|
||||||
|
INTEGER4 TotalNumBndryConns = 0;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Dodecahedron", /* Name of the zone. */
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConns,
|
||||||
|
NULL,
|
||||||
|
NULL, /* All nodal variables */
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_grid_tecdat.txt*/
|
||||||
|
|
||||||
|
/* TECDAT Parameters */
|
||||||
|
double Phi = 0.5 * (1.0 + sqrt(5.0));
|
||||||
|
double Pi = 3.141592653578;
|
||||||
|
double *X = new double[NumPts];
|
||||||
|
double *Y = new double[NumPts];
|
||||||
|
double *Z = new double[NumPts];
|
||||||
|
int Count = 0;
|
||||||
|
|
||||||
|
for(int J = 0; J <= 4; J++)
|
||||||
|
{
|
||||||
|
X[Count] = 2.0 * cos(2.0 / 5.0 * Pi * J);
|
||||||
|
Y[Count] = 2.0 * sin(2.0 / 5.0 * Pi * J);
|
||||||
|
Z[Count] = Phi + 1.0;
|
||||||
|
Count++;
|
||||||
|
|
||||||
|
X[Count] = -X[Count - 1];
|
||||||
|
Y[Count] = -Y[Count - 1];
|
||||||
|
Z[Count] = -Z[Count - 1];
|
||||||
|
Count++;
|
||||||
|
|
||||||
|
X[Count] = 2.0 * Phi * cos(2.0 / 5.0 * Pi * J);
|
||||||
|
Y[Count] = 2.0 * Phi * sin(2.0 / 5.0 * Pi * J);
|
||||||
|
Z[Count] = Phi - 1.0;
|
||||||
|
Count++;
|
||||||
|
|
||||||
|
X[Count] = -X[Count - 1];
|
||||||
|
Y[Count] = -Y[Count - 1];
|
||||||
|
Z[Count] = -Z[Count - 1];
|
||||||
|
Count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
INTEGER4 IsDouble = 1;
|
||||||
|
|
||||||
|
I = TECDAT112(&NumPts, X, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts, Y, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts, Z, &IsDouble);
|
||||||
|
|
||||||
|
delete X;
|
||||||
|
delete Y;
|
||||||
|
delete Z;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_grid_facenodes.txt*/
|
||||||
|
/* TecPoly Parameters */
|
||||||
|
|
||||||
|
/* Create a FaceNodes array, dimensioned by the total number
|
||||||
|
* of face nodes in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 *FaceNodes = new INTEGER4[TotalNumFaceNodes];
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
/* Face Nodes for face 1 of the dodecahedron */
|
||||||
|
FaceNodes[n++] = 2;
|
||||||
|
FaceNodes[n++] = 6;
|
||||||
|
FaceNodes[n++] = 10;
|
||||||
|
FaceNodes[n++] = 14;
|
||||||
|
FaceNodes[n++] = 18;
|
||||||
|
|
||||||
|
/* Face Nodes for face 2 */
|
||||||
|
FaceNodes[n++] = 6;
|
||||||
|
FaceNodes[n++] = 8;
|
||||||
|
FaceNodes[n++] = 19;
|
||||||
|
FaceNodes[n++] = 12;
|
||||||
|
FaceNodes[n++] = 10;
|
||||||
|
|
||||||
|
/* Face Nodes for face 3 */
|
||||||
|
FaceNodes[n++] = 3;
|
||||||
|
FaceNodes[n++] = 12;
|
||||||
|
FaceNodes[n++] = 10;
|
||||||
|
FaceNodes[n++] = 14;
|
||||||
|
FaceNodes[n++] = 16;
|
||||||
|
|
||||||
|
/* Face Nodes for face 4 */
|
||||||
|
FaceNodes[n++] = 7;
|
||||||
|
FaceNodes[n++] = 16;
|
||||||
|
FaceNodes[n++] = 14;
|
||||||
|
FaceNodes[n++] = 18;
|
||||||
|
FaceNodes[n++] = 20;
|
||||||
|
|
||||||
|
/* Face Nodes for face 5 */
|
||||||
|
FaceNodes[n++] = 2;
|
||||||
|
FaceNodes[n++] = 4;
|
||||||
|
FaceNodes[n++] = 11;
|
||||||
|
FaceNodes[n++] = 20;
|
||||||
|
FaceNodes[n++] = 18;
|
||||||
|
|
||||||
|
/* Face Nodes for face 6 */
|
||||||
|
FaceNodes[n++] = 2;
|
||||||
|
FaceNodes[n++] = 4;
|
||||||
|
FaceNodes[n++] = 15;
|
||||||
|
FaceNodes[n++] = 8;
|
||||||
|
FaceNodes[n++] = 6;
|
||||||
|
|
||||||
|
/* Face Nodes for face 7 */
|
||||||
|
FaceNodes[n++] = 1;
|
||||||
|
FaceNodes[n++] = 3;
|
||||||
|
FaceNodes[n++] = 12;
|
||||||
|
FaceNodes[n++] = 19;
|
||||||
|
FaceNodes[n++] = 17;
|
||||||
|
|
||||||
|
/* Face Nodes for face 8 */
|
||||||
|
FaceNodes[n++] = 1;
|
||||||
|
FaceNodes[n++] = 3;
|
||||||
|
FaceNodes[n++] = 16;
|
||||||
|
FaceNodes[n++] = 7;
|
||||||
|
FaceNodes[n++] = 5;
|
||||||
|
|
||||||
|
/* Face Nodes for face 9 */
|
||||||
|
FaceNodes[n++] = 5;
|
||||||
|
FaceNodes[n++] = 7;
|
||||||
|
FaceNodes[n++] = 20;
|
||||||
|
FaceNodes[n++] = 11;
|
||||||
|
FaceNodes[n++] = 9;
|
||||||
|
|
||||||
|
/* Face Nodes for face 10 */
|
||||||
|
FaceNodes[n++] = 4;
|
||||||
|
FaceNodes[n++] = 11;
|
||||||
|
FaceNodes[n++] = 9;
|
||||||
|
FaceNodes[n++] = 13;
|
||||||
|
FaceNodes[n++] = 15;
|
||||||
|
|
||||||
|
/* Face Nodes for face 11 */
|
||||||
|
FaceNodes[n++] = 8;
|
||||||
|
FaceNodes[n++] = 15;
|
||||||
|
FaceNodes[n++] = 13;
|
||||||
|
FaceNodes[n++] = 17;
|
||||||
|
FaceNodes[n++] = 19;
|
||||||
|
|
||||||
|
/* Face Nodes for face 12 */
|
||||||
|
FaceNodes[n++] = 1;
|
||||||
|
FaceNodes[n++] = 5;
|
||||||
|
FaceNodes[n++] = 9;
|
||||||
|
FaceNodes[n++] = 13;
|
||||||
|
FaceNodes[n++] = 17;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Specify the number of nodes for each face, and the right and
|
||||||
|
* left neighboring elements. The neighboring elements can be
|
||||||
|
* determined using the right-hand rule. For each face, curl
|
||||||
|
* the fingers of your right hand in the direction of
|
||||||
|
* incrementing node numbers (i.e. from Node 1 to Node 2 and
|
||||||
|
* so on). Your thumb will point toward the right element.
|
||||||
|
* A value of zero indicates that there is no
|
||||||
|
* neighboring element on that side. A negative value
|
||||||
|
* indicates that the neighboring element is in another zone.
|
||||||
|
* In that case, the number is a pointer into the
|
||||||
|
* FaceBndryConnectionElems and FaceBndryConnectionZones arrays.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_grid_tecpoly.txt*/
|
||||||
|
INTEGER4 *FaceNodeCounts = new INTEGER4[NumFaces];
|
||||||
|
INTEGER4 *FaceLeftElems = new INTEGER4[NumFaces];
|
||||||
|
INTEGER4 *FaceRightElems = new INTEGER4[NumFaces];
|
||||||
|
|
||||||
|
/* For this particular zone, each face has the 5 nodes. */
|
||||||
|
for(int J = 0; J < NumFaces; J++)
|
||||||
|
FaceNodeCounts[J] = 5;
|
||||||
|
|
||||||
|
/* Set the right and left elements for each face. */
|
||||||
|
FaceRightElems[0] = 1;
|
||||||
|
FaceRightElems[1] = 1;
|
||||||
|
FaceRightElems[2] = 0;
|
||||||
|
FaceRightElems[3] = 0;
|
||||||
|
FaceRightElems[4] = 0;
|
||||||
|
FaceRightElems[5] = 1;
|
||||||
|
FaceRightElems[6] = 1;
|
||||||
|
FaceRightElems[7] = 0;
|
||||||
|
FaceRightElems[8] = 0;
|
||||||
|
FaceRightElems[9] = 1;
|
||||||
|
FaceRightElems[10] = 1;
|
||||||
|
FaceRightElems[11] = 0;
|
||||||
|
|
||||||
|
FaceLeftElems[0] = 0;
|
||||||
|
FaceLeftElems[1] = 0;
|
||||||
|
FaceLeftElems[2] = 1;
|
||||||
|
FaceLeftElems[3] = 1;
|
||||||
|
FaceLeftElems[4] = 1;
|
||||||
|
FaceLeftElems[5] = 0;
|
||||||
|
FaceLeftElems[6] = 0;
|
||||||
|
FaceLeftElems[7] = 1;
|
||||||
|
FaceLeftElems[8] = 1;
|
||||||
|
FaceLeftElems[9] = 0;
|
||||||
|
FaceLeftElems[10] = 0;
|
||||||
|
FaceLeftElems[11] = 1;
|
||||||
|
|
||||||
|
I = TECPOLY112(FaceNodeCounts,
|
||||||
|
FaceNodes,
|
||||||
|
FaceLeftElems,
|
||||||
|
FaceRightElems,
|
||||||
|
NULL, /* No boundary connections. */
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
delete FaceNodes;
|
||||||
|
delete FaceLeftElems;
|
||||||
|
delete FaceRightElems;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_grid_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_solution_tecini.txt*/
|
||||||
|
for(int J = 0; J < 5; J++)
|
||||||
|
{
|
||||||
|
char SolutionFileName[128];
|
||||||
|
sprintf(SolutionFileName, "solution%d.plt", J);
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_solution_tecini.txt*/
|
||||||
|
FileType = 2; /* 1 = solution file. */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Example: Separate grid and solution files",
|
||||||
|
(char*)"P T", /* Defines the variables for the solution file.
|
||||||
|
* Note that these are different variables from
|
||||||
|
* the grid file.
|
||||||
|
*/
|
||||||
|
SolutionFileName,
|
||||||
|
(char*)".", /* scratch directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_solution_teczne.txt*/
|
||||||
|
/* TECZNE Parameters are mostly unchanged from creation of the grid file. */
|
||||||
|
TotalNumFaceNodes = 0;
|
||||||
|
SolutionTime = J;
|
||||||
|
|
||||||
|
char ZoneName[128];
|
||||||
|
sprintf(ZoneName, "Dodecahedron Time=%g", SolutionTime);
|
||||||
|
I = TECZNE112(ZoneName,
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConns,
|
||||||
|
NULL,
|
||||||
|
NULL, /* All nodal variables */
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_solution_tecdat.txt*/
|
||||||
|
|
||||||
|
/* TECDAT Parameters */
|
||||||
|
double *P = new double[NumPts];
|
||||||
|
double *T = new double[NumPts];
|
||||||
|
|
||||||
|
for(int K = 0; K < NumPts; K++)
|
||||||
|
{
|
||||||
|
P[K] = (double)(K + J);
|
||||||
|
T[K] = 1.0 + K + K;
|
||||||
|
}
|
||||||
|
|
||||||
|
I = TECDAT112(&NumPts, P, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts, T, &IsDouble);
|
||||||
|
|
||||||
|
delete P;
|
||||||
|
delete T;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:gridsolution_solution_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,321 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="gridsolution"
|
||||||
|
ProjectGUID="{D2747EA6-7807-42E1-984D-C946B3D97D95}"
|
||||||
|
RootNamespace="mulitplepolygons"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\gridsolution.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=ij_ordered
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,149 @@
|
|||||||
|
/* This example creates a simple set of IJ-ordered zones */
|
||||||
|
/* DOCSTART:ij_ordered.txt*/
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I = 0; /* Used to track return codes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open the file and write the tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"IJ Ordered Zones", /* Name of the entire
|
||||||
|
* dataset.
|
||||||
|
*/
|
||||||
|
(char*)"X Y P", /* Defines the variables for the data
|
||||||
|
* file. Each zone must contain each of
|
||||||
|
* the variables listed here. The order
|
||||||
|
* of the variables in the list is used
|
||||||
|
* to define the variable number (e.g.
|
||||||
|
* X is Var 1).
|
||||||
|
*/
|
||||||
|
(char*)"ij_ordered.plt",
|
||||||
|
(char*)".", /* Scratch Directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
float X1[4];
|
||||||
|
float Y1[4];
|
||||||
|
float P1[4];
|
||||||
|
float X2[4];
|
||||||
|
float Y2[4];
|
||||||
|
float P2[4];
|
||||||
|
|
||||||
|
INTEGER4 ICellMax = 0;
|
||||||
|
INTEGER4 JCellMax = 0;
|
||||||
|
INTEGER4 KCellMax = 0;
|
||||||
|
INTEGER4 DIsDouble = 0;
|
||||||
|
double SolTime = 360.0;
|
||||||
|
INTEGER4 StrandID = 0; /* StaticZone */
|
||||||
|
INTEGER4 ParentZn = 0;
|
||||||
|
INTEGER4 IsBlock = 1; /* Block */
|
||||||
|
INTEGER4 NFConns = 0;
|
||||||
|
INTEGER4 FNMode = 0;
|
||||||
|
INTEGER4 TotalNumFaceNodes = 1;
|
||||||
|
INTEGER4 TotalNumBndryFaces = 1;
|
||||||
|
INTEGER4 TotalNumBndryConnections = 1;
|
||||||
|
INTEGER4 ShrConn = 0;
|
||||||
|
|
||||||
|
/*Ordered Zone Parameters*/
|
||||||
|
INTEGER4 IMax = 2;
|
||||||
|
INTEGER4 JMax = 2;
|
||||||
|
INTEGER4 KMax = 1;
|
||||||
|
|
||||||
|
X1[0] = .125;
|
||||||
|
Y1[0] = .5;
|
||||||
|
P1[0] = 5;
|
||||||
|
|
||||||
|
X1[1] = .625;
|
||||||
|
Y1[1] = .5;
|
||||||
|
P1[1] = 7.5;
|
||||||
|
|
||||||
|
X1[2] = .125;
|
||||||
|
Y1[2] = .875;
|
||||||
|
P1[2] = 10;
|
||||||
|
|
||||||
|
X1[3] = .625;
|
||||||
|
Y1[3] = .875;
|
||||||
|
P1[3] = 7.5;
|
||||||
|
|
||||||
|
X2[0] = .375;
|
||||||
|
Y2[0] = .125;
|
||||||
|
P2[0] = 5;
|
||||||
|
|
||||||
|
X2[1] = .875;
|
||||||
|
Y2[1] = .125;
|
||||||
|
P2[1] = 7.5;
|
||||||
|
|
||||||
|
X2[2] = .375;
|
||||||
|
Y2[2] = .5;
|
||||||
|
P2[2] = 10;
|
||||||
|
|
||||||
|
X2[3] = .875;
|
||||||
|
Y2[3] = .5;
|
||||||
|
P2[3] = 7.5;
|
||||||
|
|
||||||
|
/* Ordered Zone */
|
||||||
|
INTEGER4 ZoneType = 0;
|
||||||
|
I = TECZNE112((char*)"Ordered Zone",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConnections,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
INTEGER4 III = IMax * JMax * KMax;
|
||||||
|
I = TECDAT112(&III, X1, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, Y1, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, P1, &DIsDouble);
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Ordered Zone2",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConnections,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
|
||||||
|
I = TECDAT112(&III, X2, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, Y2, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, P2, &DIsDouble);
|
||||||
|
|
||||||
|
I = TECEND112();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* DOCEND */
|
||||||
Binary file not shown.
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="ij_ordered"
|
||||||
|
ProjectGUID="{47556A00-C441-4B9A-8920-91CA63AC1595}"
|
||||||
|
RootNamespace="ij_ordered"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ij_ordered.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=multiplefiles
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,214 @@
|
|||||||
|
/* This example illustrates working with TecFil to create multiple
|
||||||
|
* plt files simultaneously.
|
||||||
|
*/
|
||||||
|
#if defined _MSC_VER
|
||||||
|
#pragma warning (disable: 4996) /* Windows strcpy warning off */
|
||||||
|
#endif
|
||||||
|
/* DOCSTART:mulitplefiles.txt */
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Open the file and write the tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I = 0; /* Used to check the return value */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"SIMPLE DATASET", /* Name of the entire dataset.*/
|
||||||
|
|
||||||
|
(char*)"X1 Y1 P1", /* Defines the variables for the data
|
||||||
|
* file. Each zone must contain each of
|
||||||
|
* the variables listed here. The order
|
||||||
|
* of the variables in the list is used
|
||||||
|
* to define the variable number (e.g.
|
||||||
|
* X1 is Var 1).
|
||||||
|
*/
|
||||||
|
(char*)"file1.plt",
|
||||||
|
(char*)".", /* Scratch Directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
/* Set the parameters for TecZne */
|
||||||
|
INTEGER4 ZoneType = 0; /* sets the zone type to
|
||||||
|
* ordered
|
||||||
|
*/
|
||||||
|
INTEGER4 IMax = 2; /* Create an IJ-ordered zone,
|
||||||
|
* by using IMax and JMax
|
||||||
|
* values that are greater
|
||||||
|
* than one, and setting KMax
|
||||||
|
* to one.
|
||||||
|
*/
|
||||||
|
INTEGER4 JMax = 2;
|
||||||
|
INTEGER4 KMax = 1;
|
||||||
|
|
||||||
|
double SolTime = 0;
|
||||||
|
INTEGER4 StrandID = 0; /* StaticZone */
|
||||||
|
INTEGER4 ParentZn = 0; /* used for surface streams */
|
||||||
|
|
||||||
|
INTEGER4 ICellMax = 0; /* not used */
|
||||||
|
INTEGER4 JCellMax = 0; /* not used */
|
||||||
|
INTEGER4 KCellMax = 0; /* not used */
|
||||||
|
|
||||||
|
INTEGER4 IsBlock = 1; /* Block */
|
||||||
|
|
||||||
|
INTEGER4 NFConns = 0; /* this example does not use
|
||||||
|
* face neighbors */
|
||||||
|
INTEGER4 FNMode = 0;
|
||||||
|
INTEGER4 TotalNumFaceNodes = 1;
|
||||||
|
INTEGER4 TotalNumBndryFaces = 1;
|
||||||
|
INTEGER4 TotalNumBndryConn = 1;
|
||||||
|
INTEGER4 ShrConn = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* Create an Ordered Zone */
|
||||||
|
I = TECZNE112((char*)"Ordered Zone",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConn,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
|
||||||
|
/* Set the variable values for the ordered zone. */
|
||||||
|
float X1[4];
|
||||||
|
float Y1[4];
|
||||||
|
float P1[4];
|
||||||
|
|
||||||
|
X1[0] = 0.125;
|
||||||
|
Y1[0] = 0.5;
|
||||||
|
P1[0] = 7.5;
|
||||||
|
|
||||||
|
X1[1] = 0.625;
|
||||||
|
Y1[1] = 0.5;
|
||||||
|
P1[1] = 10.0;
|
||||||
|
|
||||||
|
X1[2] = 0.125;
|
||||||
|
Y1[2] = 0.875;
|
||||||
|
P1[2] = 5.0;
|
||||||
|
|
||||||
|
X1[3] = 0.625;
|
||||||
|
Y1[3] = 0.875;
|
||||||
|
P1[3] = 7.5;
|
||||||
|
|
||||||
|
INTEGER4 DIsDouble = 0; /* set DIsDouble to 0, for float
|
||||||
|
* values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 III = IMax * JMax * KMax;
|
||||||
|
I = TECDAT112(&III, X1, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, Y1, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, P1, &DIsDouble);
|
||||||
|
|
||||||
|
/* Open a new data file. note: the first file is still open
|
||||||
|
* because TecEnd was not called.
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"Auxiliary Data",
|
||||||
|
(char*)"X1 Y1 P1",
|
||||||
|
(char*)"file2.plt",
|
||||||
|
(char*)".",
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
/* Switch the active file to the newly created data file
|
||||||
|
* (file2.plt) which is the second file opened with TECINI112
|
||||||
|
* so we use 2.
|
||||||
|
*/
|
||||||
|
INTEGER4 WhichFile = 2;
|
||||||
|
I = TECFIL112(&WhichFile);
|
||||||
|
|
||||||
|
/* Create a second zone, using many of the values from the first
|
||||||
|
* zone, and write it to the second data file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Ordered Zone2",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&TotalNumFaceNodes,
|
||||||
|
&TotalNumBndryFaces,
|
||||||
|
&TotalNumBndryConn,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
/* set the variable values for the second zone */
|
||||||
|
float X2[4];
|
||||||
|
float Y2[4];
|
||||||
|
float P2[4];
|
||||||
|
|
||||||
|
X2[0] = 0.375;
|
||||||
|
Y2[0] = 0.125;
|
||||||
|
P2[0] = 5;
|
||||||
|
|
||||||
|
X2[1] = 0.875;
|
||||||
|
Y2[1] = 0.125;
|
||||||
|
P2[1] = 7.5;
|
||||||
|
|
||||||
|
X2[2] = 0.375;
|
||||||
|
Y2[2] = 0.5;
|
||||||
|
P2[2] = 10;
|
||||||
|
|
||||||
|
Y2[3] = 0.5;
|
||||||
|
X2[3] = 0.875;
|
||||||
|
P2[3] = 7.5;
|
||||||
|
|
||||||
|
III = IMax * JMax * KMax;
|
||||||
|
I = TECDAT112(&III, X2, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, Y2, &DIsDouble);
|
||||||
|
I = TECDAT112(&III, P2, &DIsDouble);
|
||||||
|
|
||||||
|
/* Switch to the first file. */
|
||||||
|
WhichFile = 1;
|
||||||
|
I = TECFIL112(&WhichFile);
|
||||||
|
|
||||||
|
/* Create an auxiliary data value and write it to the file */
|
||||||
|
char DeformationValue[128];
|
||||||
|
strcpy(DeformationValue, "0.98");
|
||||||
|
|
||||||
|
I = TECAUXSTR112((char*)"DeformationValue",
|
||||||
|
DeformationValue);
|
||||||
|
/* Close the first file */
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
/* The remaining file will become the active file. As such,
|
||||||
|
* TecFil does not need to be called again to close the second
|
||||||
|
* file.
|
||||||
|
*/
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="multiplefiles"
|
||||||
|
ProjectGUID="{93CB23B2-530F-4D6F-900F-893815299C7F}"
|
||||||
|
RootNamespace="multiplefiles"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\multiplefiles.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
Binary file not shown.
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=multiplepolygons
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,569 @@
|
|||||||
|
/* This example illustrates using TecPoly to create two polygonal
|
||||||
|
* zones. The first zone contains six hexagons, and the second
|
||||||
|
* zone contains a hexagon and an octagon. Refer to the Data
|
||||||
|
* Format Guide for a picture of the configuration, including node
|
||||||
|
* and face numbers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* DOCSTART:hexagons_tecini.txt*/
|
||||||
|
INTEGER4 I; /* use to check return values */
|
||||||
|
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Example: Multiple polygonal zones",
|
||||||
|
(char*)"X Y P", /* Defines the variables for the data file.
|
||||||
|
* Each zone must contain each of the vars
|
||||||
|
* listed here. The order of the variables
|
||||||
|
* in the list is used to define the
|
||||||
|
* variable number (e.g. X is Variable 1).
|
||||||
|
* When referring to variables in other
|
||||||
|
* TecIO functions, you will refer to the
|
||||||
|
* variable by its number.
|
||||||
|
*/
|
||||||
|
(char*)"HexagonsAndOctagon.plt",
|
||||||
|
(char*)".", /* scratch directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone1_teczne.txt*/
|
||||||
|
/* TECZNE Parameters */
|
||||||
|
INTEGER4 ZoneType = 6; /* FE Polygon */
|
||||||
|
INTEGER4 NumPts_Z1 = 13; /* the number of unique
|
||||||
|
* nodes in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumElems_Z1 = 3;
|
||||||
|
INTEGER4 NumFaces_Z1 = 15; /* the number of unique
|
||||||
|
* faces in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 ICellMax = 0; /* not used */
|
||||||
|
INTEGER4 JCellMax = 0; /* not used */
|
||||||
|
INTEGER4 KCellMax = 0; /* not used */
|
||||||
|
double SolutionTime = 0.0;
|
||||||
|
INTEGER4 StrandID = 0;
|
||||||
|
INTEGER4 ParentZone = 0;
|
||||||
|
INTEGER4 IsBlock = 1;
|
||||||
|
INTEGER4 NumFaceConnections = 0;
|
||||||
|
INTEGER4 FaceNeighborMode = 1;
|
||||||
|
INTEGER4 SharConn = 0;
|
||||||
|
|
||||||
|
INTEGER4 ValueLocation[3] = { 1, 1, 0 };
|
||||||
|
|
||||||
|
/* For a polygonal zone, the total number of face nodes is
|
||||||
|
* twice the total number of faces. This is because each face
|
||||||
|
* is composed of exactly two nodes.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumFaceNodes_Z1 = 2 * NumFaces_Z1;
|
||||||
|
|
||||||
|
/* A boundary face is a face that is neighbored by an element
|
||||||
|
* or elements in another zone or zone(s). In Zone 1, Face 9,
|
||||||
|
* Face 10 and Face 12 have a neighbor in Zone 2. Therefore,
|
||||||
|
* the total number of boundary faces is <20>3<EFBFBD>.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryFaces_Z1 = 3;
|
||||||
|
|
||||||
|
/* Each boundary face has one or more boundary connections. A
|
||||||
|
* boundary connection is defined as another element in another
|
||||||
|
* zone. Face 9 has a boundary connection with Element 1 in
|
||||||
|
* Zone 2. In this example, each boundary face is connected to
|
||||||
|
* one other element, so the total number of boundary
|
||||||
|
* connections is equivalent to the total number of boundary
|
||||||
|
* faces (3).
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryConns_Z1 = 3;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Zone 1: 3 Hexagons", /* Specifies the name of
|
||||||
|
* the entire dataset. When
|
||||||
|
* the file is loaded into
|
||||||
|
* Tecplot, the value is
|
||||||
|
* available via the Data
|
||||||
|
* Set Info dialog.
|
||||||
|
*/
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts_Z1,
|
||||||
|
&NumElems_Z1,
|
||||||
|
&NumFaces_Z1,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes_Z1,
|
||||||
|
&TotalNumBndryFaces_Z1,
|
||||||
|
&TotalNumBndryConns_Z1,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone1_tecdat.txt*/
|
||||||
|
|
||||||
|
/* TECDAT Parameters */
|
||||||
|
double *X_Z1 = new double[NumPts_Z1];
|
||||||
|
double *Y_Z1 = new double[NumPts_Z1];
|
||||||
|
|
||||||
|
X_Z1[0] = 1;
|
||||||
|
Y_Z1[0] = 6;
|
||||||
|
|
||||||
|
X_Z1[1] = 2;
|
||||||
|
Y_Z1[1] = 6;
|
||||||
|
|
||||||
|
X_Z1[2] = 3;
|
||||||
|
Y_Z1[2] = 5;
|
||||||
|
|
||||||
|
X_Z1[3] = 2;
|
||||||
|
Y_Z1[3] = 4;
|
||||||
|
|
||||||
|
X_Z1[4] = 1;
|
||||||
|
Y_Z1[4] = 4;
|
||||||
|
|
||||||
|
X_Z1[5] = 0;
|
||||||
|
Y_Z1[5] = 5;
|
||||||
|
|
||||||
|
X_Z1[6] = 4;
|
||||||
|
Y_Z1[6] = 5;
|
||||||
|
|
||||||
|
X_Z1[7] = 5;
|
||||||
|
Y_Z1[7] = 4;
|
||||||
|
|
||||||
|
X_Z1[8] = 4;
|
||||||
|
Y_Z1[8] = 3;
|
||||||
|
|
||||||
|
X_Z1[9] = 3;
|
||||||
|
Y_Z1[9] = 3;
|
||||||
|
|
||||||
|
X_Z1[10] = 2;
|
||||||
|
Y_Z1[10] = 2;
|
||||||
|
|
||||||
|
X_Z1[11] = 1;
|
||||||
|
Y_Z1[11] = 2;
|
||||||
|
|
||||||
|
X_Z1[12] = 0;
|
||||||
|
Y_Z1[12] = 3;
|
||||||
|
|
||||||
|
|
||||||
|
double *P_Z1 = new double[NumElems_Z1];
|
||||||
|
P_Z1[0] = 2;
|
||||||
|
P_Z1[1] = 4;
|
||||||
|
P_Z1[2] = 5;
|
||||||
|
|
||||||
|
|
||||||
|
INTEGER4 IsDouble = 1;
|
||||||
|
I = TECDAT112(&NumPts_Z1, X_Z1, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Z1, Y_Z1, &IsDouble);
|
||||||
|
I = TECDAT112(&NumElems_Z1, P_Z1, &IsDouble);
|
||||||
|
delete X_Z1;
|
||||||
|
delete Y_Z1;
|
||||||
|
delete P_Z1;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone1_facenodes.txt*/
|
||||||
|
/* TecPoly Parameters */
|
||||||
|
|
||||||
|
/* Create a FaceNodes array, dimensioned by the total number
|
||||||
|
* of face nodes in the zone.
|
||||||
|
*/
|
||||||
|
INTEGER4 *FaceNodes_Z1 = new INTEGER4[TotalNumFaceNodes_Z1];
|
||||||
|
|
||||||
|
/* Face Nodes for Element 1 */
|
||||||
|
FaceNodes_Z1[0] = 1;
|
||||||
|
FaceNodes_Z1[1] = 2;
|
||||||
|
|
||||||
|
FaceNodes_Z1[2] = 2;
|
||||||
|
FaceNodes_Z1[3] = 3;
|
||||||
|
|
||||||
|
FaceNodes_Z1[4] = 3;
|
||||||
|
FaceNodes_Z1[5] = 4;
|
||||||
|
|
||||||
|
FaceNodes_Z1[6] = 4;
|
||||||
|
FaceNodes_Z1[7] = 5;
|
||||||
|
|
||||||
|
FaceNodes_Z1[8] = 5;
|
||||||
|
FaceNodes_Z1[9] = 6;
|
||||||
|
|
||||||
|
FaceNodes_Z1[10] = 6;
|
||||||
|
FaceNodes_Z1[11] = 1;
|
||||||
|
|
||||||
|
/* Face Nodes for Element 2 */
|
||||||
|
FaceNodes_Z1[12] = 3;
|
||||||
|
FaceNodes_Z1[13] = 7;
|
||||||
|
|
||||||
|
FaceNodes_Z1[14] = 7;
|
||||||
|
FaceNodes_Z1[15] = 8;
|
||||||
|
|
||||||
|
FaceNodes_Z1[16] = 8;
|
||||||
|
FaceNodes_Z1[17] = 9;
|
||||||
|
|
||||||
|
FaceNodes_Z1[18] = 9;
|
||||||
|
FaceNodes_Z1[19] = 10;
|
||||||
|
|
||||||
|
FaceNodes_Z1[20] = 10;
|
||||||
|
FaceNodes_Z1[21] = 4;
|
||||||
|
|
||||||
|
/* Face Nodes for Element 3 */
|
||||||
|
FaceNodes_Z1[22] = 10;
|
||||||
|
FaceNodes_Z1[23] = 11;
|
||||||
|
|
||||||
|
FaceNodes_Z1[24] = 11;
|
||||||
|
FaceNodes_Z1[25] = 12;
|
||||||
|
|
||||||
|
FaceNodes_Z1[26] = 12;
|
||||||
|
FaceNodes_Z1[27] = 13;
|
||||||
|
|
||||||
|
FaceNodes_Z1[28] = 13;
|
||||||
|
FaceNodes_Z1[29] = 5;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Specify the right and left neighboring elements.
|
||||||
|
* The neighboring elements can be determined using the
|
||||||
|
* right-hand rule. For each face, place your right-hand along
|
||||||
|
* the face with your fingers pointing the direction of
|
||||||
|
* incrementing node numbers (i.e. from Node 1 to Node 2). The
|
||||||
|
* right side of your hand will indicate the right element,
|
||||||
|
* and the left side of your hand will indicate the left
|
||||||
|
* element. A value of zero indicates that there is no
|
||||||
|
* neighboring element on that side. A negative value
|
||||||
|
* indicates that the neighboring element is in another zone.
|
||||||
|
* The number is a pointer into the FaceBndryConnectionElems
|
||||||
|
* and FaceBndryConnectionZones arrays.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone1_neighbors.txt*/
|
||||||
|
INTEGER4 *FaceLeftElems_Z1 = new INTEGER4[NumFaces_Z1];
|
||||||
|
INTEGER4 *FaceRightElems_Z1 = new INTEGER4[NumFaces_Z1];
|
||||||
|
|
||||||
|
/* Left Face Elems for Element 1 */
|
||||||
|
FaceLeftElems_Z1[0] = 0;
|
||||||
|
FaceLeftElems_Z1[1] = 0;
|
||||||
|
FaceLeftElems_Z1[2] = 2;
|
||||||
|
FaceLeftElems_Z1[3] = 3;
|
||||||
|
FaceLeftElems_Z1[4] = 0;
|
||||||
|
|
||||||
|
/* Left Face Elems for Element 2 */
|
||||||
|
FaceLeftElems_Z1[5] = 0;
|
||||||
|
FaceLeftElems_Z1[6] = 0;
|
||||||
|
FaceLeftElems_Z1[7] = 0;
|
||||||
|
FaceLeftElems_Z1[8] = -1;
|
||||||
|
FaceLeftElems_Z1[9] = -2;
|
||||||
|
FaceLeftElems_Z1[10] = 2;
|
||||||
|
|
||||||
|
/* Left Face Elems for Element 3 */
|
||||||
|
FaceLeftElems_Z1[11] = -3;
|
||||||
|
FaceLeftElems_Z1[12] = 0;
|
||||||
|
FaceLeftElems_Z1[13] = 0;
|
||||||
|
FaceLeftElems_Z1[14] = 0;
|
||||||
|
|
||||||
|
/* Set Right Face Elems. Because of the way we numbered the
|
||||||
|
* nodes and faces, the right element for every face is the
|
||||||
|
* element itself.
|
||||||
|
*/
|
||||||
|
for (INTEGER4 ii = 0; ii < 6; ii++)
|
||||||
|
FaceRightElems_Z1[ii] = 1;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 6; ii < 10; ii++)
|
||||||
|
FaceRightElems_Z1[ii] = 2;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 10; ii <= 14; ii++)
|
||||||
|
FaceRightElems_Z1[ii] = 3;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone1_tecpoly.txt */
|
||||||
|
|
||||||
|
/* The FaceBndryConnectionCounts array is used to define the
|
||||||
|
* number of boundary connections for each face that has a
|
||||||
|
* boundary connection. For example, if a zone has three
|
||||||
|
* boundary connections in total (NumConnectedBoundaryFaces),
|
||||||
|
* two of those boundary connections are in one face, and the
|
||||||
|
* remaining boundary connection is in a second face, the
|
||||||
|
* FaceBndryConnectionCounts array would be: [2 1].
|
||||||
|
*
|
||||||
|
* In this example, the total number of connected boundary
|
||||||
|
* faces (specified via TECZNE) is equal to three. Each
|
||||||
|
* boundary face is connected to only one other element,
|
||||||
|
* so the FaceBoundaryConnectionCounts array is (1, 1, 1).
|
||||||
|
*/
|
||||||
|
INTEGER4 FaceBndryConnectionCounts_Z1[3] = {1, 1, 1};
|
||||||
|
|
||||||
|
/* The value(s) in the FaceBndryConnectionElems and
|
||||||
|
* FaceBndryConnectionZones arrays specifies the element number
|
||||||
|
* and zone number, respectively, that a given boundary
|
||||||
|
* connection is connected to. In this case, the first
|
||||||
|
* boundary connection face is connected to Element 1 in Zone 2
|
||||||
|
* and the remaining connection is to Element 2 in Zone 2.
|
||||||
|
*/
|
||||||
|
INTEGER4 FaceBndryConnectionElems_Z1[3] = {1, 2, 2};
|
||||||
|
INTEGER4 FaceBndryConnectionZones_Z1[3] = {2, 2, 2};
|
||||||
|
|
||||||
|
|
||||||
|
I = TECPOLY112(NULL, /* Not used for polygon zones */
|
||||||
|
FaceNodes_Z1,
|
||||||
|
FaceLeftElems_Z1,
|
||||||
|
FaceRightElems_Z1,
|
||||||
|
FaceBndryConnectionCounts_Z1,
|
||||||
|
FaceBndryConnectionElems_Z1,
|
||||||
|
FaceBndryConnectionZones_Z1);
|
||||||
|
|
||||||
|
delete FaceNodes_Z1;
|
||||||
|
delete FaceLeftElems_Z1;
|
||||||
|
delete FaceRightElems_Z1;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Define Zone 2. Zone 2 contains an octagon and a hexagon. */
|
||||||
|
/* TECZNE Parameters */
|
||||||
|
/* DOCSTART:hexagons_zone2_teczne.txt*/
|
||||||
|
INTEGER4 NumPts_Z2 = 12; /* number of unique
|
||||||
|
* nodes in the zone
|
||||||
|
*/
|
||||||
|
INTEGER4 NumElems_Z2 = 2;
|
||||||
|
INTEGER4 NumFaces_Z2 = 13; /* number of unique
|
||||||
|
* faces in the zone
|
||||||
|
*/
|
||||||
|
INTEGER4 NumFaceConnections_Z2 = 0;
|
||||||
|
/* In polygonal zones, each face has exactly two nodes */
|
||||||
|
INTEGER4 TotalNumFaceNodes_Z2 = NumFaces_Z2 * 2;
|
||||||
|
|
||||||
|
/* A boundary face is a face that is neighbored by an element or
|
||||||
|
* elements from another zone or zone(s). In Zone 2, Face 6,
|
||||||
|
* Face 7 and Face 13 have a neighbor in Zone 1. Therefore, the
|
||||||
|
* total number of boundary faces is <20>3<EFBFBD>.
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryFaces_Z2 = 3;
|
||||||
|
|
||||||
|
/* Each boundary face has one or more boundary connections. In
|
||||||
|
* this example, each boundary face is connected to one other
|
||||||
|
* element (i.e. the number of boundary faces and the number of
|
||||||
|
* boundary connections is one-to-one).
|
||||||
|
*/
|
||||||
|
INTEGER4 TotalNumBndryConns_Z2 = 3;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Zone 2: 1 Hexagon and 1 Octagon",
|
||||||
|
&ZoneType,
|
||||||
|
&NumPts_Z2,
|
||||||
|
&NumElems_Z2,
|
||||||
|
&NumFaces_Z2,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolutionTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NumFaceConnections_Z2,
|
||||||
|
&FaceNeighborMode,
|
||||||
|
&TotalNumFaceNodes_Z2,
|
||||||
|
&TotalNumBndryFaces_Z2,
|
||||||
|
&TotalNumBndryConns_Z2,
|
||||||
|
NULL,
|
||||||
|
ValueLocation,
|
||||||
|
NULL,
|
||||||
|
&SharConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* TECDAT Parameters */
|
||||||
|
/* DOCSTART:hexagons_zone2_tecdat.txt*/
|
||||||
|
double *X_Z2 = new double[NumPts_Z2];
|
||||||
|
double *Y_Z2 = new double[NumPts_Z2];
|
||||||
|
|
||||||
|
X_Z2[0] = 5;
|
||||||
|
Y_Z2[0] = 4;
|
||||||
|
|
||||||
|
X_Z2[1] = 6;
|
||||||
|
Y_Z2[1] = 4;
|
||||||
|
|
||||||
|
X_Z2[2] = 7;
|
||||||
|
Y_Z2[2] = 3;
|
||||||
|
|
||||||
|
X_Z2[3] = 6;
|
||||||
|
Y_Z2[3] = 2;
|
||||||
|
|
||||||
|
X_Z2[4] = 5;
|
||||||
|
Y_Z2[4] = 2;
|
||||||
|
|
||||||
|
X_Z2[5] = 4;
|
||||||
|
Y_Z2[5] = 3;
|
||||||
|
|
||||||
|
|
||||||
|
X_Z2[6] = 3;
|
||||||
|
Y_Z2[6] = 3;
|
||||||
|
|
||||||
|
X_Z2[7] = 5;
|
||||||
|
Y_Z2[7] = 1;
|
||||||
|
|
||||||
|
X_Z2[8] = 4;
|
||||||
|
Y_Z2[8] = 0;
|
||||||
|
|
||||||
|
X_Z2[9] = 3;
|
||||||
|
Y_Z2[9] = 0;
|
||||||
|
|
||||||
|
X_Z2[10] = 2;
|
||||||
|
Y_Z2[10] = 1;
|
||||||
|
|
||||||
|
X_Z2[11] = 2;
|
||||||
|
Y_Z2[11] = 2;
|
||||||
|
|
||||||
|
/* In the call to TecZne, P was set to a cell centered variable.
|
||||||
|
* As such, only two values need to be defined.
|
||||||
|
*/
|
||||||
|
double *P_Z2 = new double[NumPts_Z2];
|
||||||
|
|
||||||
|
P_Z2[0] = 8;
|
||||||
|
P_Z2[1] = 6;
|
||||||
|
|
||||||
|
I = TECDAT112(&NumPts_Z2, X_Z2, &IsDouble);
|
||||||
|
I = TECDAT112(&NumPts_Z2, Y_Z2, &IsDouble);
|
||||||
|
I = TECDAT112(&NumElems_Z2, P_Z2, &IsDouble);
|
||||||
|
|
||||||
|
delete X_Z2;
|
||||||
|
delete Y_Z2;
|
||||||
|
delete P_Z2;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* TecPoly Parameters */
|
||||||
|
/* DOCSTART:hexagons_zone2_facemap.txt*/
|
||||||
|
INTEGER4 *FaceNodes_Z2;
|
||||||
|
FaceNodes_Z2 = new INTEGER4[TotalNumFaceNodes_Z2];
|
||||||
|
|
||||||
|
/* Face Nodes for Element 1 */
|
||||||
|
FaceNodes_Z2[0] = 1;
|
||||||
|
FaceNodes_Z2[1] = 2;
|
||||||
|
|
||||||
|
FaceNodes_Z2[2] = 2;
|
||||||
|
FaceNodes_Z2[3] = 3;
|
||||||
|
|
||||||
|
FaceNodes_Z2[4] = 3;
|
||||||
|
FaceNodes_Z2[5] = 4;
|
||||||
|
|
||||||
|
FaceNodes_Z2[6] = 4;
|
||||||
|
FaceNodes_Z2[7] = 5;
|
||||||
|
|
||||||
|
FaceNodes_Z2[8] = 5;
|
||||||
|
FaceNodes_Z2[9] = 6;
|
||||||
|
|
||||||
|
FaceNodes_Z2[10] = 6;
|
||||||
|
FaceNodes_Z2[11] = 1;
|
||||||
|
|
||||||
|
|
||||||
|
/* Face Nodes for Element 2 */
|
||||||
|
FaceNodes_Z2[12] = 7;
|
||||||
|
FaceNodes_Z2[13] = 6;
|
||||||
|
|
||||||
|
FaceNodes_Z2[14] = 5;
|
||||||
|
FaceNodes_Z2[15] = 8;
|
||||||
|
|
||||||
|
FaceNodes_Z2[16] = 8;
|
||||||
|
FaceNodes_Z2[17] = 9;
|
||||||
|
|
||||||
|
FaceNodes_Z2[18] = 9;
|
||||||
|
FaceNodes_Z2[19] = 10;
|
||||||
|
|
||||||
|
FaceNodes_Z2[20] = 10;
|
||||||
|
FaceNodes_Z2[21] = 11;
|
||||||
|
|
||||||
|
FaceNodes_Z2[22] = 11;
|
||||||
|
FaceNodes_Z2[23] = 12;
|
||||||
|
|
||||||
|
FaceNodes_Z2[24] = 12;
|
||||||
|
FaceNodes_Z2[25] = 7;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone2_tecpoly.txt*/
|
||||||
|
/* Specify the right and left neighboring elements.
|
||||||
|
* The neighboring elements can be determined using the
|
||||||
|
* right-hand rule. For each face, place your right-hand along
|
||||||
|
* the face with your fingers pointing the direction of
|
||||||
|
* incrementing node numbers (i.e. from Node 1 to Node 2). The
|
||||||
|
* right side of your hand will indicate the right element,
|
||||||
|
* and the left side of your hand will indicate the left
|
||||||
|
* element. A value of zero indicates that there is no
|
||||||
|
* neighboring element on that side. A negative value
|
||||||
|
* indicates that the neighboring element is in another zone.
|
||||||
|
* The number is a pointer into the FaceBndryConnectionElems
|
||||||
|
* and FaceBndryConnectionZones arrays.
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceLeftElems_Z2 = new INTEGER4[NumFaces_Z2];
|
||||||
|
INTEGER4 *FaceRightElems_Z2 = new INTEGER4[NumFaces_Z2];
|
||||||
|
|
||||||
|
/* Left Face Elems for Element 1 */
|
||||||
|
FaceLeftElems_Z2[0] = 0;
|
||||||
|
FaceLeftElems_Z2[1] = 0;
|
||||||
|
FaceLeftElems_Z2[2] = 0;
|
||||||
|
FaceLeftElems_Z2[3] = 0;
|
||||||
|
FaceLeftElems_Z2[4] = 2;
|
||||||
|
FaceLeftElems_Z2[5] = -1;
|
||||||
|
|
||||||
|
/* Left Face Elems for Element 2 */
|
||||||
|
FaceLeftElems_Z2[6] = -2;
|
||||||
|
FaceLeftElems_Z2[7] = 0;
|
||||||
|
FaceLeftElems_Z2[8] = 0;
|
||||||
|
FaceLeftElems_Z2[9] = 0;
|
||||||
|
FaceLeftElems_Z2[10] = 0;
|
||||||
|
FaceLeftElems_Z2[11] = 0;
|
||||||
|
FaceLeftElems_Z2[12] = -3;
|
||||||
|
|
||||||
|
/* Set Right Face Elems. Because of the way we numbered the
|
||||||
|
* nodes and faces, the right element for every face is the
|
||||||
|
* element itself. */
|
||||||
|
for (INTEGER4 ii = 0; ii < 6; ii++)
|
||||||
|
FaceRightElems_Z2[ii] = 1;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 6; ii < 13; ii++)
|
||||||
|
FaceRightElems_Z2[ii] = 2;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_zone2_tecpoly.txt*/
|
||||||
|
/* The FaceBndryConnectionCounts array is used to define the
|
||||||
|
* number of boundary connections for each face that has a
|
||||||
|
* boundary connection. In this example, the total number of
|
||||||
|
* connected boundary faces (specified via TECZNE) is equal to
|
||||||
|
* three. Each boundary face is connected to only one other
|
||||||
|
* element, so the FaceBoundaryConnectionCounts array is
|
||||||
|
* (1, 1, 1).
|
||||||
|
*/
|
||||||
|
INTEGER4 FaceBndryConnectionCounts_Z2[3] = {1, 1, 1};
|
||||||
|
|
||||||
|
/* The value(s) in the FaceBndryConnectionElems and
|
||||||
|
* FaceBndryConnectionZones arrays specifies that element
|
||||||
|
* number and zone number, respectively, that a given boundary
|
||||||
|
* connection is connected to. In this case, the first boundary
|
||||||
|
* connection face is connected to Element 2 in Zone 1 and the
|
||||||
|
* remaining connections are Element 3 in Zone 1.
|
||||||
|
*/
|
||||||
|
INTEGER4 FaceBndryConnectionElems_Z2[3] = {2, 3, 3};
|
||||||
|
INTEGER4 FaceBndryConnectionZones_Z2[3] = {1, 1, 1};
|
||||||
|
|
||||||
|
I = TECPOLY112(NULL,
|
||||||
|
FaceNodes_Z2,
|
||||||
|
FaceLeftElems_Z2,
|
||||||
|
FaceRightElems_Z2,
|
||||||
|
FaceBndryConnectionCounts_Z2,
|
||||||
|
FaceBndryConnectionElems_Z2,
|
||||||
|
FaceBndryConnectionZones_Z2);
|
||||||
|
|
||||||
|
delete FaceNodes_Z2;
|
||||||
|
delete FaceLeftElems_Z2;
|
||||||
|
delete FaceRightElems_Z2;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* DOCSTART:hexagons_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="multiplepolygons"
|
||||||
|
ProjectGUID="{D2747EA6-7807-42E1-984D-C946B3D97D95}"
|
||||||
|
RootNamespace="mulitplepolygons"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\multiplepolygons.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=octagon
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
Binary file not shown.
@ -0,0 +1,248 @@
|
|||||||
|
/* This example illustrates how to create a zone with a single
|
||||||
|
* polygonal cell. Please refer to the Data Format Guide for
|
||||||
|
* additional information, including figures that display node
|
||||||
|
* numbering.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* DOCSTART:octagon_tecini.txt*/
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I; /* used to check return codes */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open the file and write the Tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Octagon",
|
||||||
|
(char*)"X Y P", /* Defines the variables for the data
|
||||||
|
* file. Each zone must contain each
|
||||||
|
* of the vars listed here. The order
|
||||||
|
* of the variables in the list is
|
||||||
|
* used to define the variable number
|
||||||
|
* (e.g. X is Variable 1). When
|
||||||
|
* referring to variables in other
|
||||||
|
* TecIO functions, you will refer to
|
||||||
|
* thevariable by its number.
|
||||||
|
*/
|
||||||
|
(char*)"Octagon.plt",
|
||||||
|
(char*)".", /* scratch directory */
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Declare TECZNE variables */
|
||||||
|
/* DOCSTART:octagon_teczne.txt*/
|
||||||
|
/* In this example, we will create a single octagonal cell in
|
||||||
|
* Tecplot 360's polyhedral file format.
|
||||||
|
*/
|
||||||
|
INTEGER4 ZoneType = 6; /* FEPolygon */
|
||||||
|
INTEGER4 NumNodes = 8; /* Number of nodes in the octagon.*/
|
||||||
|
INTEGER4 NumElems = 1; /* Number of octagonal elements. */
|
||||||
|
INTEGER4 NumFaces = 8; /* Number of faces in the octagon.*/
|
||||||
|
INTEGER4 ICellMax = 0; /* Not Used */
|
||||||
|
INTEGER4 JCellMax = 0; /* Not Used */
|
||||||
|
INTEGER4 KCellMax = 0; /* Not Used */
|
||||||
|
double SolTime = 360.0;
|
||||||
|
INTEGER4 StrandID = 0; /* Static Zone */
|
||||||
|
INTEGER4 ParentZn = 0; /* No Parent Zone */
|
||||||
|
INTEGER4 IsBlock = 1; /* Block */
|
||||||
|
INTEGER4 NFConns = 0;
|
||||||
|
INTEGER4 FNMode = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* For polygonal zones, the total number of face nodes is equal
|
||||||
|
* to twice the number of nodes. This is because, each face
|
||||||
|
* has exactly two nodes.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumFaceNodes = 2 * NumNodes;
|
||||||
|
/* Boundary Faces and Boundary Connections are not used in this
|
||||||
|
* example.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumBFaces = 0;
|
||||||
|
INTEGER4 NumBConnections = 0;
|
||||||
|
|
||||||
|
INTEGER4 ShrConn = 0;
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Octagonal Zone",
|
||||||
|
&ZoneType,
|
||||||
|
&NumNodes,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&NumFaceNodes,
|
||||||
|
&NumBFaces,
|
||||||
|
&NumBConnections,
|
||||||
|
NULL,
|
||||||
|
NULL, /* When Value Location is not specified,
|
||||||
|
* Tecplot will treat all variables as
|
||||||
|
* nodal variables.
|
||||||
|
*/
|
||||||
|
NULL,
|
||||||
|
&ShrConn);
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Establish numbering.
|
||||||
|
* For this example, we will a single octagonal cell.
|
||||||
|
* Before defining your variables, you must establish a
|
||||||
|
* consistent node numbering scheme for your data. Once the
|
||||||
|
* node numbers are defined, supply the variable values in the
|
||||||
|
* node numbering order. In this example, node 1 is defined at
|
||||||
|
* X = 0 and Y = 0. As such, the first value supplied for X
|
||||||
|
* (i.e. X[0]) is 0. Similarly, the first value supplied for
|
||||||
|
* Y is 0.
|
||||||
|
*
|
||||||
|
* It is important that you refer to node numbers consistently.
|
||||||
|
* The node numbers will be used later to define the
|
||||||
|
* connectivity for each element.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TECDAT Variables */
|
||||||
|
/* Set up the variable values. The variable values will be
|
||||||
|
* written to the file using TECDAT. Because we are specifying
|
||||||
|
* nodal variables (as specified via the ValueLocation
|
||||||
|
* parameter in TECZNE, each variable is dimensioned by the
|
||||||
|
* number of points (NumPts) in the Zone. You have the option
|
||||||
|
* to specify some variables with nodal values and some with
|
||||||
|
* cell-centered values. Refer to the Binary Function Reference
|
||||||
|
* for details.
|
||||||
|
*/
|
||||||
|
/* DOCSTART:octagon_tecdat.txt*/
|
||||||
|
float *X = new float[NumNodes];
|
||||||
|
float *Y = new float[NumNodes];
|
||||||
|
float *P = new float[NumNodes];
|
||||||
|
|
||||||
|
//Define the grid values.
|
||||||
|
X[0] = 0.25;
|
||||||
|
Y[0] = 0.0;
|
||||||
|
|
||||||
|
X[1] = 0.75;
|
||||||
|
Y[1] = 0.0;
|
||||||
|
|
||||||
|
X[2] = 1.0;
|
||||||
|
Y[2] = 0.25;
|
||||||
|
|
||||||
|
X[3] = 1.0;
|
||||||
|
Y[3] = 0.75;
|
||||||
|
|
||||||
|
X[4] = 0.75;
|
||||||
|
Y[4] = 1.0;
|
||||||
|
|
||||||
|
X[5] = 0.25;
|
||||||
|
Y[5] = 1.0;
|
||||||
|
|
||||||
|
X[6] = 0.0;
|
||||||
|
Y[6] = 0.75;
|
||||||
|
|
||||||
|
X[7] = 0.0;
|
||||||
|
Y[7] = 0.25;
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < 8; ii++)
|
||||||
|
P[ii] = .5;
|
||||||
|
|
||||||
|
/* Write out the field data using TECDAT */
|
||||||
|
INTEGER4 DIsDouble = 0; /* set IsDouble to 0 to use float
|
||||||
|
* variables. */
|
||||||
|
|
||||||
|
I = TECDAT112(&NumNodes, X, &DIsDouble);
|
||||||
|
I = TECDAT112(&NumNodes, Y, &DIsDouble);
|
||||||
|
I = TECDAT112(&NumNodes, P, &DIsDouble);
|
||||||
|
|
||||||
|
delete X;
|
||||||
|
delete Y;
|
||||||
|
delete P;
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
/* Define the Face Nodes.
|
||||||
|
|
||||||
|
* The FaceNodes array is used to indicate which nodes define
|
||||||
|
* which face. As mentioned earlier, the number of the nodes is
|
||||||
|
* implicitly defined by the order in which the nodal data is
|
||||||
|
* provided. The first value of each nodal variable describes
|
||||||
|
* node 1, the second value describes node 2, and so on.
|
||||||
|
*
|
||||||
|
* The face numbering is implicitly defined. Because there are
|
||||||
|
* two nodes in each face, the first two nodes provided define
|
||||||
|
* face 1, the next two define face 2 and so on. If there was
|
||||||
|
* a variable number of nodes used to define the faces, the
|
||||||
|
* array would be more complicated.
|
||||||
|
*/
|
||||||
|
/* DOCSTART:octagon_facenodes.txt*/
|
||||||
|
INTEGER4 *FaceNodes = new INTEGER4[NumFaceNodes];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Loop over number of sides, and set each side to two
|
||||||
|
* consecutive nodes.
|
||||||
|
*/
|
||||||
|
for (INTEGER4 ii = 0; ii < 8; ii++)
|
||||||
|
{
|
||||||
|
FaceNodes[2*ii] = ii + 1;
|
||||||
|
FaceNodes[2*ii+1] = ii + 2;
|
||||||
|
}
|
||||||
|
FaceNodes[15] = 1;
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
|
/* Define the right and left elements of each face.
|
||||||
|
|
||||||
|
* The last step for writing out the polyhedral data is to
|
||||||
|
* define the right and left neighboring elements for each
|
||||||
|
* face. The neighboring elements can be determined using the
|
||||||
|
* right-hand rule. For each face, place your right-hand along
|
||||||
|
* the face which your fingers pointing the direction of
|
||||||
|
* incrementing node numbers (i.e. from node 1 to node 2).
|
||||||
|
* Your right thumb will point towards the right element; the
|
||||||
|
* element on the other side of your hand is the left element.
|
||||||
|
*
|
||||||
|
* The number zero is used to indicate that there isn't an
|
||||||
|
* element on that side of the face.
|
||||||
|
*
|
||||||
|
* Because of the way we numbered the nodes and faces, the
|
||||||
|
* right element for every face is the element itself
|
||||||
|
* (element 1) and the left element is "no-neighboring element"
|
||||||
|
* (element 0).
|
||||||
|
*/
|
||||||
|
/* DOCSTART:octagon_rightleft.txt*/
|
||||||
|
INTEGER4 *FaceLeftElems = new INTEGER4[NumFaces];
|
||||||
|
INTEGER4 *FaceRightElems = new INTEGER4[NumFaces];
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii < NumFaces; ii++)
|
||||||
|
{
|
||||||
|
FaceLeftElems[ii] = 0;
|
||||||
|
FaceRightElems[ii] = 1;
|
||||||
|
}
|
||||||
|
/* DOCEND */
|
||||||
|
/* Write the polyhedral data to the file. */
|
||||||
|
/* DOCSTART:octagon_tecpoly.txt*/
|
||||||
|
I = TECPOLY112(NULL,
|
||||||
|
FaceNodes,
|
||||||
|
FaceLeftElems,
|
||||||
|
FaceRightElems,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
delete FaceNodes;
|
||||||
|
delete FaceLeftElems;
|
||||||
|
delete FaceRightElems;
|
||||||
|
/* DOCEND */
|
||||||
|
/* DOCSTART:octagon_tecend.txt*/
|
||||||
|
I = TECEND112();
|
||||||
|
/* DOCEND */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="octagon"
|
||||||
|
ProjectGUID="{C4BEE7D4-6449-468F-81CC-3BEFDA554F31}"
|
||||||
|
RootNamespace="octagon"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\octagon.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=pyramid
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,222 @@
|
|||||||
|
/* This example creates a zone with a single polyhedral cell. */
|
||||||
|
|
||||||
|
/* DOCSTART:pyramid.txt*/
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include "MASTER.h" /* for defintion of NULL */
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* Call TECINI112 */
|
||||||
|
INTEGER4 FileType = 0; /* 0 for full file */
|
||||||
|
INTEGER4 Debug = 0;
|
||||||
|
INTEGER4 VIsDouble = 1;
|
||||||
|
INTEGER4 I = 0; /* use to check return codes */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Pyramid", /* Data Set Title */
|
||||||
|
(char*)"X Y Z", /* Variable List */
|
||||||
|
(char*)"pyramid.plt", /* File Name */
|
||||||
|
(char*)".", /* Scratch Directory */
|
||||||
|
&(FileType),
|
||||||
|
&(Debug),
|
||||||
|
&(VIsDouble));
|
||||||
|
|
||||||
|
|
||||||
|
/* Call TECZNE112 */
|
||||||
|
INTEGER4 ZoneType = 7; /* 7 for FEPolyhedron */
|
||||||
|
INTEGER4 NumNodes = 5; /* number of unique nodes */
|
||||||
|
INTEGER4 NumElems = 1; /* number of elements */
|
||||||
|
INTEGER4 NumFaces = 5; /* number of unique faces */
|
||||||
|
|
||||||
|
INTEGER4 ICellMax = 0; /* Not Used, set to zero */
|
||||||
|
INTEGER4 JCellMax = 0; /* Not Used, set to zero */
|
||||||
|
INTEGER4 KCellMax = 0; /* Not Used, set to zero */
|
||||||
|
|
||||||
|
double SolTime = 12.65; /* solution time */
|
||||||
|
INTEGER4 StrandID = 0; /* static zone */
|
||||||
|
INTEGER4 ParentZone = 0; /* no parent zone */
|
||||||
|
|
||||||
|
INTEGER4 IsBlock = 1; /* block format */
|
||||||
|
|
||||||
|
INTEGER4 NFConns = 0; /* not used for FEPolyhedron
|
||||||
|
* zones
|
||||||
|
*/
|
||||||
|
INTEGER4 FNMode = 0; /* not used for FEPolyhedron
|
||||||
|
* zones
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *PassiveVarArray = NULL;
|
||||||
|
INTEGER4 *ValueLocArray = NULL;
|
||||||
|
INTEGER4 *VarShareArray = NULL;
|
||||||
|
|
||||||
|
INTEGER4 ShrConn = 0;
|
||||||
|
|
||||||
|
/* The number of face nodes in the zone. This example creates
|
||||||
|
* a zone with a single pyramidal cell. This cell has four
|
||||||
|
* triangular faces and one rectangular face, yielding a total
|
||||||
|
* of 16 face nodes.
|
||||||
|
*/
|
||||||
|
INTEGER4 NumFaceNodes = 16;
|
||||||
|
INTEGER4 NumBConns = 0; /* No Boundary Connections */
|
||||||
|
INTEGER4 NumBItems = 0; /* No Boundary Items */
|
||||||
|
|
||||||
|
I = TECZNE112((char*)"Polyhedral Zone (Octahedron)",
|
||||||
|
&ZoneType,
|
||||||
|
&NumNodes,
|
||||||
|
&NumElems,
|
||||||
|
&NumFaces,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZone,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
&NumFaceNodes,
|
||||||
|
&NumBConns,
|
||||||
|
&NumBItems,
|
||||||
|
PassiveVarArray,
|
||||||
|
ValueLocArray,
|
||||||
|
VarShareArray,
|
||||||
|
&ShrConn);
|
||||||
|
|
||||||
|
/* Initialize arrays of nodal data */
|
||||||
|
double *X = new double[NumNodes];
|
||||||
|
double *Y = new double[NumNodes];
|
||||||
|
double *Z = new double[NumNodes];
|
||||||
|
|
||||||
|
X[0] = 0;
|
||||||
|
Y[0] = 0;
|
||||||
|
Z[0] = 0;
|
||||||
|
|
||||||
|
X[1] = 1;
|
||||||
|
Y[1] = 1;
|
||||||
|
Z[1] = 2;
|
||||||
|
|
||||||
|
X[2] = 2;
|
||||||
|
Y[2] = 0;
|
||||||
|
Z[2] = 0;
|
||||||
|
|
||||||
|
X[3] = 2;
|
||||||
|
Y[3] = 2;
|
||||||
|
Z[3] = 0;
|
||||||
|
|
||||||
|
X[4] = 0;
|
||||||
|
Y[4] = 2;
|
||||||
|
Z[4] = 0;
|
||||||
|
|
||||||
|
/* Write the data (using TECDAT112) */
|
||||||
|
INTEGER4 DIsDouble = 1; /* One for double precision */
|
||||||
|
I = TECDAT112(&NumNodes, X, &DIsDouble);
|
||||||
|
I = TECDAT112(&NumNodes, Y, &DIsDouble);
|
||||||
|
I = TECDAT112(&NumNodes, Z, &DIsDouble);
|
||||||
|
|
||||||
|
delete X;
|
||||||
|
delete Y;
|
||||||
|
delete Z;
|
||||||
|
|
||||||
|
/* Define the Face Nodes.
|
||||||
|
|
||||||
|
* The FaceNodes array is used to indicate which nodes define
|
||||||
|
* which face. As mentioned earlier, the number of the nodes is
|
||||||
|
* implicitly defined by the order in which the nodal data is
|
||||||
|
* provided. The first value of each nodal variable describes
|
||||||
|
* node 1, the second value describes node 2, and so on.
|
||||||
|
*
|
||||||
|
* The face numbering is implicitly defined. Because there are
|
||||||
|
* two nodes in each face, the first two nodes provided define
|
||||||
|
* face 1, the next two define face 2 and so on. If there was
|
||||||
|
* a variable number of nodes used to define the faces, the
|
||||||
|
* array would be more complicated.
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceNodeCounts = new INTEGER4[NumFaces];
|
||||||
|
/* The first four faces are triangular, i.e. have three nodes.
|
||||||
|
* The fifth face is rectangular, i.e. has four nodes. */
|
||||||
|
FaceNodeCounts[0] = 3;
|
||||||
|
FaceNodeCounts[1] = 3;
|
||||||
|
FaceNodeCounts[2] = 3;
|
||||||
|
FaceNodeCounts[3] = 3;
|
||||||
|
FaceNodeCounts[4] = 4;
|
||||||
|
|
||||||
|
INTEGER4 *FaceNodes = new INTEGER4[NumFaceNodes];
|
||||||
|
/* Face Nodes for Face 1 */
|
||||||
|
FaceNodes[0] = 1;
|
||||||
|
FaceNodes[1] = 2;
|
||||||
|
FaceNodes[2] = 3;
|
||||||
|
|
||||||
|
/* Face Nodes for Face 2 */
|
||||||
|
FaceNodes[3] = 3;
|
||||||
|
FaceNodes[4] = 2;
|
||||||
|
FaceNodes[5] = 4;
|
||||||
|
|
||||||
|
/* Face Nodes for Face 3 */
|
||||||
|
FaceNodes[6] = 5;
|
||||||
|
FaceNodes[7] = 2;
|
||||||
|
FaceNodes[8] = 4;
|
||||||
|
|
||||||
|
/* Face Nodes for Face 4 */
|
||||||
|
FaceNodes[9] = 1;
|
||||||
|
FaceNodes[10] = 2;
|
||||||
|
FaceNodes[11] = 5;
|
||||||
|
|
||||||
|
/* Face Nodes for Face 5 */
|
||||||
|
FaceNodes[12] = 1;
|
||||||
|
FaceNodes[13] = 5;
|
||||||
|
FaceNodes[14] = 4;
|
||||||
|
FaceNodes[15] = 3;
|
||||||
|
|
||||||
|
/* Define the right and left elements of each face.
|
||||||
|
*
|
||||||
|
* The last step for writing out the polyhedral data is to
|
||||||
|
* define the right and left neighboring elements for each
|
||||||
|
* face. The neighboring elements can be determined using the
|
||||||
|
* right-hand rule. For each face, place your right-hand along
|
||||||
|
* the face which your fingers pointing the direction of
|
||||||
|
* incrementing node numbers (i.e. from node 1 to node 2).
|
||||||
|
* Your right thumb will point towards the right element; the
|
||||||
|
* element on the other side of your hand is the left element.
|
||||||
|
*
|
||||||
|
* The number zero is used to indicate that there isn't an
|
||||||
|
* element on that side of the face.
|
||||||
|
*
|
||||||
|
* Because of the way we numbered the nodes and faces, the
|
||||||
|
* right element for every face is the element itself
|
||||||
|
* (element 1) and the left element is "no-neighboring element"
|
||||||
|
* (element 0).
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 *FaceLeftElems = new INTEGER4[NumFaces];
|
||||||
|
FaceLeftElems[0] = 1;
|
||||||
|
FaceLeftElems[1] = 1;
|
||||||
|
FaceLeftElems[2] = 0;
|
||||||
|
FaceLeftElems[3] = 0;
|
||||||
|
FaceLeftElems[4] = 0;
|
||||||
|
|
||||||
|
INTEGER4 *FaceRightElems = new INTEGER4[NumFaces];
|
||||||
|
FaceRightElems[0] = 0;
|
||||||
|
FaceRightElems[1] = 0;
|
||||||
|
FaceRightElems[2] = 1;
|
||||||
|
FaceRightElems[3] = 1;
|
||||||
|
FaceRightElems[4] = 1;
|
||||||
|
|
||||||
|
/* Write the face map (created above) using TECPOLY112. */
|
||||||
|
I = TECPOLY112(FaceNodeCounts, /* The face node counts array */
|
||||||
|
FaceNodes, /* The face nodes array */
|
||||||
|
FaceLeftElems, /* The left elements array */
|
||||||
|
FaceRightElems, /* The right elements array */
|
||||||
|
NULL, /* No boundary connection counts */
|
||||||
|
NULL, /* No boundary connection elements */
|
||||||
|
NULL); /* No boundary connection zones */
|
||||||
|
|
||||||
|
delete FaceNodeCounts;
|
||||||
|
delete FaceNodes;
|
||||||
|
delete FaceLeftElems;
|
||||||
|
delete FaceRightElems;
|
||||||
|
|
||||||
|
I = TECEND112();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
Binary file not shown.
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="pyramid"
|
||||||
|
ProjectGUID="{CFED06AE-48C6-491C-AE5F-E1B7882A44E9}"
|
||||||
|
RootNamespace="pyramid"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\pyramid.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=simtest
|
||||||
|
FILES=$(EXECUTABLE).c
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Simple example c program to write a
|
||||||
|
* binary datafile for tecplot. This example
|
||||||
|
* does the following:
|
||||||
|
*
|
||||||
|
* 1. Open a datafile called "t.plt"
|
||||||
|
* 2. Assign values for X,Y, and P
|
||||||
|
* 3. Write out a zone dimensioned 4x5
|
||||||
|
* 4. Close the datafile.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TECIO.h"
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum FileType { FULL = 0, GRID = 1, SOLUTION = 2 };
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
float X[5][4], Y[5][4], P[5][4];
|
||||||
|
double SolTime;
|
||||||
|
INTEGER4 Debug, I, J, III, DIsDouble, VIsDouble, IMax, JMax, KMax, ZoneType, StrandID, ParentZn, IsBlock;
|
||||||
|
INTEGER4 ICellMax, JCellMax, KCellMax, NFConns, FNMode, ShrConn, FileType;
|
||||||
|
|
||||||
|
Debug = 1;
|
||||||
|
VIsDouble = 0;
|
||||||
|
DIsDouble = 0;
|
||||||
|
IMax = 4;
|
||||||
|
JMax = 5;
|
||||||
|
KMax = 1;
|
||||||
|
ZoneType = 0; /* Ordered */
|
||||||
|
SolTime = 360.0;
|
||||||
|
StrandID = 0; /* StaticZone */
|
||||||
|
ParentZn = 0; /* No Parent */
|
||||||
|
IsBlock = 1; /* Block */
|
||||||
|
ICellMax = 0;
|
||||||
|
JCellMax = 0;
|
||||||
|
KCellMax = 0;
|
||||||
|
NFConns = 0;
|
||||||
|
FNMode = 0;
|
||||||
|
ShrConn = 0;
|
||||||
|
FileType = FULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open the file and write the tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"SIMPLE DATASET",
|
||||||
|
(char*)"X Y P",
|
||||||
|
(char*)"t.plt",
|
||||||
|
(char*)".",
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
for (J = 0; J < 5; J++)
|
||||||
|
for (I = 0; I < 4; I++)
|
||||||
|
{
|
||||||
|
X[J][I] = (float)(I + 1);
|
||||||
|
Y[J][I] = (float)(J + 1);
|
||||||
|
P[J][I] = (float)((I + 1) * (J + 1));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Write the zone header information.
|
||||||
|
*/
|
||||||
|
I = TECZNE112((char*)"Simple Zone",
|
||||||
|
&ZoneType,
|
||||||
|
&IMax,
|
||||||
|
&JMax,
|
||||||
|
&KMax,
|
||||||
|
&ICellMax,
|
||||||
|
&JCellMax,
|
||||||
|
&KCellMax,
|
||||||
|
&SolTime,
|
||||||
|
&StrandID,
|
||||||
|
&ParentZn,
|
||||||
|
&IsBlock,
|
||||||
|
&NFConns,
|
||||||
|
&FNMode,
|
||||||
|
0, /* TotalNumFaceNodes */
|
||||||
|
0, /* NumConnectedBoundaryFaces */
|
||||||
|
0, /* TotalNumBoundaryConnections */
|
||||||
|
NULL, /* PassiveVarList */
|
||||||
|
NULL, /* ValueLocation = Nodal */
|
||||||
|
NULL, /* SharVarFromZone */
|
||||||
|
&ShrConn);
|
||||||
|
/*
|
||||||
|
* Write out the field data.
|
||||||
|
*/
|
||||||
|
III = IMax * JMax;
|
||||||
|
I = TECDAT112(&III, &X[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &Y[0][0], &DIsDouble);
|
||||||
|
I = TECDAT112(&III, &P[0][0], &DIsDouble);
|
||||||
|
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
C
|
||||||
|
C Simple example fortran program to write a
|
||||||
|
C binary datafile for tecplot. This example
|
||||||
|
C does the following:
|
||||||
|
C
|
||||||
|
C 1. Open a datafile called "t.plt"
|
||||||
|
C 2. Assign values for X,Y, and P
|
||||||
|
C 3. Write out a zone dimensioned 4x5
|
||||||
|
C 4. Close the datafile.
|
||||||
|
C
|
||||||
|
C
|
||||||
|
program test
|
||||||
|
|
||||||
|
INCLUDE 'tecio.inc'
|
||||||
|
|
||||||
|
character*1 NULLCHR
|
||||||
|
Integer*4 Debug,III,NPts,NElm
|
||||||
|
|
||||||
|
Dimension X(4,5), Y(4,5), P(4,5)
|
||||||
|
Real*8 SolTime
|
||||||
|
Integer*4 VIsDouble, FileType
|
||||||
|
Integer*4 ZoneType,StrandID,ParentZn,IsBlock
|
||||||
|
Integer*4 ICellMax,JCellMax,KCellMax,NFConns,FNMode,ShrConn
|
||||||
|
POINTER (NullPtr,Null)
|
||||||
|
Integer*4 Null(*)
|
||||||
|
|
||||||
|
NULLCHR = CHAR(0)
|
||||||
|
NullPtr = 0
|
||||||
|
Debug = 1
|
||||||
|
FileType = 0
|
||||||
|
VIsDouble = 0
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
ZoneType = 0
|
||||||
|
SolTime = 360.0
|
||||||
|
StrandID = 0
|
||||||
|
ParentZn = 0
|
||||||
|
IsBlock = 1
|
||||||
|
ICellMax = 0
|
||||||
|
JCellMax = 0
|
||||||
|
KCellMax = 0
|
||||||
|
NFConns = 0
|
||||||
|
FNMode = 0
|
||||||
|
ShrConn = 0
|
||||||
|
C
|
||||||
|
C... Open the file and write the tecplot datafile
|
||||||
|
C... header information.
|
||||||
|
C
|
||||||
|
I = TecIni112('SIMPLE DATASET'//NULLCHR,
|
||||||
|
& 'X Y P'//NULLCHR,
|
||||||
|
& 't.plt'//NULLCHR,
|
||||||
|
& '.'//NULLCHR,
|
||||||
|
& FileType,
|
||||||
|
& Debug,
|
||||||
|
& VIsDouble)
|
||||||
|
|
||||||
|
Do 10 I = 1,4
|
||||||
|
Do 10 J = 1,5
|
||||||
|
X(I,J) = I
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
10 Continue
|
||||||
|
C
|
||||||
|
C... Write the zone header information.
|
||||||
|
C
|
||||||
|
I = TecZne112('Simple Zone'//NULLCHR,
|
||||||
|
& ZoneType,
|
||||||
|
& IMax,
|
||||||
|
& JMax,
|
||||||
|
& KMax,
|
||||||
|
& ICellMax,
|
||||||
|
& JCellMax,
|
||||||
|
& KCellMax,
|
||||||
|
& SolTime,
|
||||||
|
& StrandID,
|
||||||
|
& ParentZn,
|
||||||
|
& IsBlock,
|
||||||
|
& NFConns,
|
||||||
|
& FNMode,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& 0,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& Null,
|
||||||
|
& ShrConn)
|
||||||
|
C
|
||||||
|
C... Write out the field data.
|
||||||
|
C
|
||||||
|
III = IMax*JMax
|
||||||
|
I = TecDat112(III,X,0)
|
||||||
|
I = TecDat112(III,Y,0)
|
||||||
|
I = TecDat112(III,P,0)
|
||||||
|
|
||||||
|
I = TecEnd112()
|
||||||
|
Stop
|
||||||
|
End
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
!
|
||||||
|
! Simple example fortran program to write a
|
||||||
|
! binary datafile for tecplot. This example
|
||||||
|
! does the following:
|
||||||
|
!
|
||||||
|
! 1. Open a datafile called "t.plt"
|
||||||
|
! 2. Assign values for X,Y, and P
|
||||||
|
! 3. Write out a zone dimensioned 4x5
|
||||||
|
! 4. Close the datafile.
|
||||||
|
!
|
||||||
|
!
|
||||||
|
program test
|
||||||
|
|
||||||
|
INCLUDE 'tecio.f90'
|
||||||
|
|
||||||
|
character*1 NULLCHR
|
||||||
|
Integer*4 Debug,III,NPts,NElm
|
||||||
|
|
||||||
|
Dimension X(4,5), Y(4,5), P(4,5)
|
||||||
|
Real*8 SolTime
|
||||||
|
Integer*4 VIsDouble, FileType
|
||||||
|
Integer*4 ZoneType,StrandID,ParentZn,IsBlock
|
||||||
|
Integer*4 ICellMax,JCellMax,KCellMax,NFConns,FNMode,ShrConn
|
||||||
|
POINTER (NullPtr,Null)
|
||||||
|
Integer*4 Null(*)
|
||||||
|
|
||||||
|
NULLCHR = CHAR(0)
|
||||||
|
NullPtr = 0
|
||||||
|
Debug = 1
|
||||||
|
FileType = 0
|
||||||
|
VIsDouble = 0
|
||||||
|
IMax = 4
|
||||||
|
JMax = 5
|
||||||
|
KMax = 1
|
||||||
|
ZoneType = 0
|
||||||
|
SolTime = 360.0
|
||||||
|
StrandID = 0
|
||||||
|
ParentZn = 0
|
||||||
|
IsBlock = 1
|
||||||
|
ICellMax = 0
|
||||||
|
JCellMax = 0
|
||||||
|
KCellMax = 0
|
||||||
|
NFConns = 0
|
||||||
|
FNMode = 0
|
||||||
|
ShrConn = 0
|
||||||
|
!
|
||||||
|
!... Open the file and write the tecplot datafile
|
||||||
|
!... header information.
|
||||||
|
!
|
||||||
|
I = TecIni112('SIMPLE DATASET'//NULLCHR, &
|
||||||
|
'X Y P'//NULLCHR, &
|
||||||
|
't.plt'//NULLCHR, &
|
||||||
|
'.'//NULLCHR, &
|
||||||
|
FileType, &
|
||||||
|
Debug, &
|
||||||
|
VIsDouble)
|
||||||
|
|
||||||
|
Do 10 I = 1,4
|
||||||
|
Do 10 J = 1,5
|
||||||
|
X(I,J) = I
|
||||||
|
Y(I,J) = J
|
||||||
|
P(I,J) = I*J
|
||||||
|
10 Continue
|
||||||
|
!
|
||||||
|
!... Write the zone header information.
|
||||||
|
!
|
||||||
|
I = TecZne112('Simple Zone'//NULLCHR, &
|
||||||
|
ZoneType, &
|
||||||
|
IMax, &
|
||||||
|
JMax, &
|
||||||
|
KMax, &
|
||||||
|
ICellMax, &
|
||||||
|
JCellMax, &
|
||||||
|
KCellMax, &
|
||||||
|
SolTime, &
|
||||||
|
StrandID, &
|
||||||
|
ParentZn, &
|
||||||
|
IsBlock, &
|
||||||
|
NFConns, &
|
||||||
|
FNMode, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
0, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
Null, &
|
||||||
|
ShrConn)
|
||||||
|
!
|
||||||
|
!... Write out the field data.
|
||||||
|
!
|
||||||
|
III = IMax*JMax
|
||||||
|
I = TecDat112(III,X,0)
|
||||||
|
I = TecDat112(III,Y,0)
|
||||||
|
I = TecDat112(III,P,0)
|
||||||
|
|
||||||
|
I = TecEnd112()
|
||||||
|
Stop
|
||||||
|
End
|
||||||
@ -0,0 +1,346 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="simtestc"
|
||||||
|
ProjectGUID="{62FA6E8C-388E-4047-BC9D-574B470B94DE}"
|
||||||
|
RootNamespace="simtestc"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
<Platform
|
||||||
|
Name="x64"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|x64"
|
||||||
|
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="1"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
TargetEnvironment="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="17"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\simtest.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<VisualStudioProject ProjectCreator="Intel Fortran" Keyword="Console Application" Version="9.10" ProjectIdGuid="{861BC05F-1E95-401A-A80E-7589ADD1C79E}">
|
||||||
|
<Platforms>
|
||||||
|
<Platform Name="Win32"/></Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)">
|
||||||
|
<Tool Name="VFMidlTool" SuppressStartupBanner="true" HeaderFileName="$(InputName).h" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
|
||||||
|
<Tool Name="VFPreBuildEventTool"/>
|
||||||
|
<Tool Name="VFPostBuildEventTool"/>
|
||||||
|
<Tool Name="VFFortranCompilerTool" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="$(TEC_360_2009)/Include" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" Traceback="true" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
|
||||||
|
<Tool Name="VFCustomBuildTool"/>
|
||||||
|
<Tool Name="VFLinkerTool" OutputFile="$(OUTDIR)/simtestf.exe" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" AdditionalLibraryDirectories="$(TEC_360_2009)/Bin" GenerateDebugInformation="true" ProgramDatabaseFile="$(OUTDIR)/simtestf.pdb" SubSystem="subSystemConsole" AdditionalDependencies="tecio.lib"/>
|
||||||
|
<Tool Name="VFPreLinkEventTool"/>
|
||||||
|
<Tool Name="VFResourceCompilerTool" ResourceOutputFileName="$(IntDir)/$(InputName).res"/></Configuration>
|
||||||
|
<Configuration Name="Release|Win32" OutputDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)$(PlatformName)/$(ConfigurationName)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)">
|
||||||
|
<Tool Name="VFMidlTool" SuppressStartupBanner="true" HeaderFileName="$(InputName).h" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
|
||||||
|
<Tool Name="VFPreBuildEventTool"/>
|
||||||
|
<Tool Name="VFPostBuildEventTool"/>
|
||||||
|
<Tool Name="VFFortranCompilerTool" SuppressStartupBanner="true" AdditionalIncludeDirectories="$(TEC_360_2009)/Include" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" RuntimeLibrary="rtMultiThreaded" CompileOnly="true"/>
|
||||||
|
<Tool Name="VFCustomBuildTool"/>
|
||||||
|
<Tool Name="VFLinkerTool" OutputFile="$(OUTDIR)/simtestf.exe" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" AdditionalLibraryDirectories="$(TEC_360_2009)/Bin" SubSystem="subSystemConsole" AdditionalDependencies="tecio.lib"/>
|
||||||
|
<Tool Name="VFPreLinkEventTool"/>
|
||||||
|
<Tool Name="VFResourceCompilerTool" ResourceOutputFileName="$(IntDir)/$(InputName).res"/></Configuration></Configurations>
|
||||||
|
<Files>
|
||||||
|
<File RelativePath="simtest.f90"/></Files>
|
||||||
|
<Globals/></VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=squares
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,124 @@
|
|||||||
|
/* This example creates a group of square geometries, each with a
|
||||||
|
* different fill color */
|
||||||
|
#if defined _MSC_VER
|
||||||
|
#pragma warning (disable: 4996) /* Windows strcpy warning off */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* DOCSTART:tecgeo.txt*/
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I = 0; /* use to check return values */
|
||||||
|
|
||||||
|
|
||||||
|
/* Open the file and write the tecplot datafile
|
||||||
|
* header information
|
||||||
|
*/
|
||||||
|
I = TECINI112((char*)"Square Geometries",
|
||||||
|
(char*)"X Y P",
|
||||||
|
(char*)"squares.plt",
|
||||||
|
(char*)".",
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
double ZPos = 0.0; /* N/A for squares */
|
||||||
|
double XPos;
|
||||||
|
double YPos;
|
||||||
|
|
||||||
|
INTEGER4 PosCoordMode = 0; /* use grid coordinates */
|
||||||
|
|
||||||
|
/* opt not to attach the text to a given zone. When text is
|
||||||
|
* attached to a given zone, it is displayed only when the zone
|
||||||
|
* is displayed.
|
||||||
|
*/
|
||||||
|
INTEGER4 AttachToZone = 0;
|
||||||
|
INTEGER4 Zone = 1;
|
||||||
|
|
||||||
|
/* Set the Geometry Style Values */
|
||||||
|
INTEGER4 Color = 0; /* set the outline color to
|
||||||
|
* black
|
||||||
|
*/
|
||||||
|
INTEGER4 IsFilled = 1;
|
||||||
|
INTEGER4 GeomType = 2; /* set the geometry type to
|
||||||
|
* square
|
||||||
|
*/
|
||||||
|
INTEGER4 LinePattern = 5; /* set the line pattern to
|
||||||
|
* DashDotDot
|
||||||
|
*/
|
||||||
|
double PatternLength = .1;
|
||||||
|
double LineThick = .2;
|
||||||
|
|
||||||
|
/* N/A for square geometries */
|
||||||
|
INTEGER4 NumPts = 100;
|
||||||
|
INTEGER4 ArrowStyle = 1;
|
||||||
|
INTEGER4 ArrowAttach = 0;
|
||||||
|
double ArrowSize = 1;
|
||||||
|
double ArrowAngle = 30;
|
||||||
|
INTEGER4 NumSegments = 15;
|
||||||
|
INTEGER4 NumSegPts = 25;
|
||||||
|
|
||||||
|
|
||||||
|
INTEGER4 Scope = 1; /* set the text to "local", i.e.
|
||||||
|
* available in the current frame
|
||||||
|
* only.
|
||||||
|
*/
|
||||||
|
INTEGER4 Clipping = 1;
|
||||||
|
|
||||||
|
/* Specify the length of a side of the square. The units used
|
||||||
|
* are those defined with PosCoordMode.
|
||||||
|
*/
|
||||||
|
float XGeomData = 2.5;
|
||||||
|
|
||||||
|
float YGeomData = 0; /* N/A for square geometries */
|
||||||
|
float ZGeomData = 0; /* N/A for square geometries */
|
||||||
|
|
||||||
|
char * MFC = new char[128];
|
||||||
|
strcpy(MFC, "SQUARE");
|
||||||
|
|
||||||
|
for (INTEGER4 ii = 0; ii <= 7; ii++)
|
||||||
|
{
|
||||||
|
INTEGER4 FillColor = ii;
|
||||||
|
XPos = (double) ii;
|
||||||
|
YPos = (double) ii;
|
||||||
|
|
||||||
|
I = TECGEO112(&XPos,
|
||||||
|
&YPos,
|
||||||
|
&ZPos,
|
||||||
|
&PosCoordMode,
|
||||||
|
&AttachToZone,
|
||||||
|
&Zone,
|
||||||
|
&Color,
|
||||||
|
&FillColor,
|
||||||
|
&IsFilled,
|
||||||
|
&GeomType,
|
||||||
|
&LinePattern,
|
||||||
|
&PatternLength,
|
||||||
|
&LineThick,
|
||||||
|
&NumPts,
|
||||||
|
&ArrowStyle,
|
||||||
|
&ArrowAttach,
|
||||||
|
&ArrowSize,
|
||||||
|
&ArrowAngle,
|
||||||
|
&Scope,
|
||||||
|
&Clipping,
|
||||||
|
&NumSegments,
|
||||||
|
&NumSegPts,
|
||||||
|
&XGeomData,
|
||||||
|
&YGeomData,
|
||||||
|
&ZGeomData,
|
||||||
|
MFC);
|
||||||
|
}
|
||||||
|
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
delete MFC;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
Binary file not shown.
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="squares"
|
||||||
|
ProjectGUID="{2E5EC0A5-5902-4A66-8A67-A61EC9EB0855}"
|
||||||
|
RootNamespace="squares"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\squares.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Set to appropriate C++ compiler
|
||||||
|
CPP=g++
|
||||||
|
CPPFLAGS=-I../../tecsrc ../../tecio.a
|
||||||
|
EXECUTABLE=text
|
||||||
|
FILES=$(EXECUTABLE).cpp
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CPP) $(FILES) $(CPPFLAGS) -o $(EXECUTABLE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXECUTABLE)
|
||||||
@ -0,0 +1,112 @@
|
|||||||
|
/* This example demonstrates adding a text object to a Tecplot
|
||||||
|
* data file.
|
||||||
|
*/
|
||||||
|
#if defined _MSC_VER
|
||||||
|
#pragma warning (disable: 4996) /* Windows strcpy warning off */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* DOCSTART:tectxt.txt*/
|
||||||
|
#include "TECIO.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
/* Open the file & write the datafile header information */
|
||||||
|
INTEGER4 Debug = 1;
|
||||||
|
INTEGER4 VIsDouble = 0;
|
||||||
|
INTEGER4 FileType = 0;
|
||||||
|
INTEGER4 I = 0; /* used to check the return value */
|
||||||
|
|
||||||
|
I = TECINI112((char*)"Text",
|
||||||
|
(char*)"X Y P",
|
||||||
|
(char*)"text.plt",
|
||||||
|
(char*)".",
|
||||||
|
&FileType,
|
||||||
|
&Debug,
|
||||||
|
&VIsDouble);
|
||||||
|
|
||||||
|
/* Specify the X, Y and Z position of the anchor point */
|
||||||
|
double XPos = 0.0;
|
||||||
|
double YPos = 1.0;
|
||||||
|
double ZPos = 0.0; /* N/A for 2D text */
|
||||||
|
|
||||||
|
INTEGER4 PosCoordMode = 0; /* use grid coordinates */
|
||||||
|
|
||||||
|
/* opt not to attach the text to a given zone. When text is
|
||||||
|
* attached to a given zone, it is displayed only when the zone
|
||||||
|
* is displayed.
|
||||||
|
*/
|
||||||
|
INTEGER4 AttachToZone = 0;
|
||||||
|
INTEGER4 Zone = 2;
|
||||||
|
|
||||||
|
|
||||||
|
/* Specify the font values */
|
||||||
|
INTEGER4 Font = 1; /* Helvetica Bold */
|
||||||
|
INTEGER4 FontHeightUnits = 2; /* in grid coordinates */
|
||||||
|
double FontHeight = 18;
|
||||||
|
|
||||||
|
/* Set the box style parameters */
|
||||||
|
INTEGER4 BoxType = 1; /* filled box */
|
||||||
|
double BoxMargin = .5; /* margin between the text
|
||||||
|
* and the text box
|
||||||
|
*/
|
||||||
|
double BoxLineThickness = .1;
|
||||||
|
INTEGER4 BoxColor = 0; /* set the box line color
|
||||||
|
* to black.
|
||||||
|
*/
|
||||||
|
INTEGER4 BoxFillColor = 1; /* set the box fill color
|
||||||
|
* to red.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* set the font properties */
|
||||||
|
double Angle = 30; /* angle of the text */
|
||||||
|
INTEGER4 Anchor = 1; /* set the anchor point to
|
||||||
|
* the center of the text
|
||||||
|
* box.
|
||||||
|
*/
|
||||||
|
double LineSpacing = 1.5;
|
||||||
|
INTEGER4 TextColor = 7; /* set the font color to
|
||||||
|
* white
|
||||||
|
*/
|
||||||
|
|
||||||
|
INTEGER4 Scope = 1; /* set the text to "local",
|
||||||
|
* i.e. available in the
|
||||||
|
* current frame only.
|
||||||
|
*/
|
||||||
|
INTEGER4 Clipping = 1;
|
||||||
|
|
||||||
|
|
||||||
|
char Text[60];
|
||||||
|
char MFC[24];
|
||||||
|
strcpy(Text, "Sample Text");
|
||||||
|
strcpy(MFC, "My Macro");
|
||||||
|
|
||||||
|
I = TECTXT112(&XPos,
|
||||||
|
&YPos,
|
||||||
|
&ZPos,
|
||||||
|
&PosCoordMode,
|
||||||
|
&AttachToZone,
|
||||||
|
&Zone,
|
||||||
|
&Font,
|
||||||
|
&FontHeightUnits,
|
||||||
|
&FontHeight,
|
||||||
|
&BoxType,
|
||||||
|
&BoxMargin,
|
||||||
|
&BoxLineThickness,
|
||||||
|
&BoxColor,
|
||||||
|
&BoxFillColor,
|
||||||
|
&Angle,
|
||||||
|
&Anchor,
|
||||||
|
&LineSpacing,
|
||||||
|
&TextColor,
|
||||||
|
&Scope,
|
||||||
|
&Clipping,
|
||||||
|
Text,
|
||||||
|
MFC);
|
||||||
|
|
||||||
|
I = TECEND112();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DOCEND */
|
||||||
Binary file not shown.
@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="text"
|
||||||
|
ProjectGUID="{FE2A061A-1787-410B-ABA0-366D6EA603FB}"
|
||||||
|
RootNamespace="text"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
InheritedPropertySheets="..\TecIO_Examples.vsprops"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\text.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
@ -0,0 +1,559 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) Copyright 2004-2006 by Tecplot, Inc. ********
|
||||||
|
****** (C) Copyright 1989-2003 by AMTEC ENGINEERING INC.********
|
||||||
|
******* All Rights Reserved. ********
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
****************************************************************
|
||||||
|
****************** BEGIN DEVELOPMENT NOTES *********************
|
||||||
|
****************************************************************
|
||||||
|
|
||||||
|
BEGIN CODELOG PLTVIEW
|
||||||
|
V 09/04/98
|
||||||
|
V ****************************************************************
|
||||||
|
V * Build 1.0 9-04-98 *
|
||||||
|
V ****************************************************************
|
||||||
|
END CODELOG
|
||||||
|
|
||||||
|
*********************************************************************
|
||||||
|
* IMPORTANT NOTE: Only development notes for "pltview" stand-alone *
|
||||||
|
* belong in this file. See "ADDONVER.h" for changes *
|
||||||
|
* related to the add-on. *
|
||||||
|
*********************************************************************
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
* V in column 1 marks date information. *
|
||||||
|
* C in column 1 marks notes on new changes. *
|
||||||
|
* B in column 1 marks notes on bug fixes. *
|
||||||
|
****************************************************************
|
||||||
|
|
||||||
|
****************************************************************
|
||||||
|
****************** END DEVELOPMENT NOTES ***********************
|
||||||
|
****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined ADDON
|
||||||
|
#include "TECADDON.h"
|
||||||
|
#include "GUIDEFS.h"
|
||||||
|
#include "GUI.h"
|
||||||
|
#define READTEC TecUtilReadBinaryData
|
||||||
|
#define SHOWINFO(S) TecGUITextAppendString(Output_T_D1,S);
|
||||||
|
#define ERRMSG(S) TecUtilDialogErrMsg(S)
|
||||||
|
#define ALLOC_ARRAY(N,Type,S) (Type *)TecUtilStringAlloc((N)*sizeof(Type),"debug info")
|
||||||
|
#define FREE_ARRAY(N,S) TecUtilStringDealloc((char **)&N)
|
||||||
|
#define STRINGLISTGETSTRING(S,N) TecUtilStringListGetString(S,N)
|
||||||
|
#define STRINGLISTGETCOUNT(S) TecUtilStringListGetCount(S)
|
||||||
|
#define STRINGLISTDEALLOC(S) TecUtilStringListDealloc(S)
|
||||||
|
#else
|
||||||
|
#include "MASTER.h"
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#define ALLOC_ARRAY(N,Type,S) (Type *)TecAlloc((N)*sizeof(Type))
|
||||||
|
#define FREE_ARRAY(N,S) TecFree((void *)N)
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
#include "DATAUTIL.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include "TECADDON.h"
|
||||||
|
#include "TECXXX.h"
|
||||||
|
#include "DATAUTIL.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define READTEC ReadTec
|
||||||
|
#define SHOWINFO(S) printf("%s",S);
|
||||||
|
#define ERRMSG(S) printf("Err: %s\n",S);
|
||||||
|
#define STRINGLISTGETSTRING(S,N) StringListGetString(S,(N)-1)
|
||||||
|
#define STRINGLISTGETCOUNT(S) StringListCount(S)
|
||||||
|
#define STRINGLISTDEALLOC(S) StringListDealloc(S)
|
||||||
|
#define MaxCharsUserRec 500
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int GetNumPtsPerCell(ZoneType_e ZoneType)
|
||||||
|
{
|
||||||
|
int NumPts = 0;
|
||||||
|
switch (ZoneType)
|
||||||
|
{
|
||||||
|
case ZoneType_FETriangle : NumPts = 3; break;
|
||||||
|
case ZoneType_FEQuad : NumPts = 4; break;
|
||||||
|
case ZoneType_FETetra : NumPts = 4; break;
|
||||||
|
case ZoneType_FEBrick : NumPts = 8; break;
|
||||||
|
default : NumPts = 0;
|
||||||
|
}
|
||||||
|
return (NumPts);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int GetNumPts(ZoneType_e ZoneType,
|
||||||
|
LgIndex_t NumPtsI,
|
||||||
|
LgIndex_t NumPtsJ,
|
||||||
|
LgIndex_t NumPtsK)
|
||||||
|
{
|
||||||
|
int NumPts = 0;
|
||||||
|
switch (ZoneType)
|
||||||
|
{
|
||||||
|
case ZoneType_FETriangle :
|
||||||
|
case ZoneType_FEQuad :
|
||||||
|
case ZoneType_FETetra :
|
||||||
|
case ZoneType_FEBrick :
|
||||||
|
case ZoneType_FEPolygon :
|
||||||
|
case ZoneType_FEPolyhedron: NumPts = NumPtsI; break;
|
||||||
|
default : NumPts = NumPtsI*NumPtsJ*NumPtsK;
|
||||||
|
}
|
||||||
|
return (NumPts);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void DeallocHeaderInfo(char **DataSetTitle,
|
||||||
|
StringList_pa *VarNames,
|
||||||
|
StringList_pa *ZoneNames,
|
||||||
|
LgIndex_t **NumPtsI,
|
||||||
|
LgIndex_t **NumPtsJ,
|
||||||
|
LgIndex_t **NumPtsK,
|
||||||
|
ZoneType_e **ZoneType,
|
||||||
|
StringList_pa *UserRec)
|
||||||
|
{
|
||||||
|
if (*DataSetTitle)
|
||||||
|
FREE_ARRAY(*DataSetTitle, "data set title");
|
||||||
|
if (*VarNames)
|
||||||
|
STRINGLISTDEALLOC(VarNames);
|
||||||
|
if (*ZoneNames)
|
||||||
|
STRINGLISTDEALLOC(ZoneNames);
|
||||||
|
if (*NumPtsI)
|
||||||
|
FREE_ARRAY(*NumPtsI, "NumPtsI Array");
|
||||||
|
if (*NumPtsJ)
|
||||||
|
FREE_ARRAY(*NumPtsJ, "NumPtsJ Array");
|
||||||
|
if (*NumPtsK)
|
||||||
|
FREE_ARRAY(*NumPtsK, "NumPtsK Array");
|
||||||
|
if (*ZoneType)
|
||||||
|
FREE_ARRAY(*ZoneType, "ZoneType Array");
|
||||||
|
if (*UserRec)
|
||||||
|
STRINGLISTDEALLOC(UserRec);
|
||||||
|
|
||||||
|
*DataSetTitle = NULL;
|
||||||
|
*VarNames = NULL;
|
||||||
|
*ZoneNames = NULL;
|
||||||
|
*NumPtsI = NULL;
|
||||||
|
*NumPtsJ = NULL;
|
||||||
|
*NumPtsK = NULL;
|
||||||
|
*ZoneType = NULL;
|
||||||
|
*UserRec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MAXCHARSINFOLINE 5000
|
||||||
|
|
||||||
|
|
||||||
|
void ReportFileInfo(char *FName,
|
||||||
|
Boolean_t LoadRawData,
|
||||||
|
Boolean_t AllocateRawDataSpaceLocally)
|
||||||
|
{
|
||||||
|
short IVersion;
|
||||||
|
EntIndex_t NumZones;
|
||||||
|
EntIndex_t NumVars;
|
||||||
|
char *DataSetTitle = NULL;
|
||||||
|
StringList_pa VarNames = NULL;
|
||||||
|
StringList_pa ZoneNames = NULL;
|
||||||
|
LgIndex_t *NumPtsI = NULL;
|
||||||
|
LgIndex_t *NumPtsJ = NULL;
|
||||||
|
LgIndex_t *NumPtsK = NULL;
|
||||||
|
ZoneType_e *ZoneType = NULL;
|
||||||
|
StringList_pa UserRec = NULL;
|
||||||
|
int CZ, CV;
|
||||||
|
char InfoLine[MAXCHARSINFOLINE+1];
|
||||||
|
double **VDataBase = NULL;
|
||||||
|
NodeMap_t **NodeMap = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load in the header information only.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!READTEC(TRUE,
|
||||||
|
FName,
|
||||||
|
&IVersion,
|
||||||
|
&DataSetTitle,
|
||||||
|
&NumZones,
|
||||||
|
&NumVars,
|
||||||
|
&VarNames,
|
||||||
|
&ZoneNames,
|
||||||
|
&NumPtsI,
|
||||||
|
&NumPtsJ,
|
||||||
|
&NumPtsK,
|
||||||
|
&ZoneType,
|
||||||
|
&UserRec,
|
||||||
|
FALSE,
|
||||||
|
(NodeMap_t ***)NULL,
|
||||||
|
(double ***)NULL))
|
||||||
|
{
|
||||||
|
sprintf(InfoLine, "Cannot read file \"%s\"\nor file is not a Tecplot binary data file.\n", FName);
|
||||||
|
ERRMSG(InfoLine);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Boolean_t IsOk = TRUE;
|
||||||
|
if (LoadRawData)
|
||||||
|
{
|
||||||
|
if (AllocateRawDataSpaceLocally)
|
||||||
|
{
|
||||||
|
int NumPts;
|
||||||
|
VDataBase = ALLOC_ARRAY(NumZones * NumVars, double *, "vdatabase array");
|
||||||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||||||
|
for (CV = 0; CV < NumVars; CV++)
|
||||||
|
{
|
||||||
|
NumPts = GetNumPts(ZoneType[CZ], NumPtsI[CZ], NumPtsJ[CZ], NumPtsK[CZ]);
|
||||||
|
if (NumPts >= 1)
|
||||||
|
VDataBase[CZ*NumVars+CV] = ALLOC_ARRAY(NumPts, double, "vdatabase array");
|
||||||
|
else
|
||||||
|
VDataBase[CZ*NumVars+CV] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeMap = ALLOC_ARRAY(NumZones, NodeMap_t *, "nodemap array");
|
||||||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||||||
|
{
|
||||||
|
if (ZoneType[CZ] == ZoneType_Ordered)
|
||||||
|
NodeMap[CZ] = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int PtsPerCell = GetNumPtsPerCell(ZoneType[CZ]);
|
||||||
|
NodeMap[CZ] = ALLOC_ARRAY(PtsPerCell * NumPtsJ[CZ],
|
||||||
|
NodeMap_t, "zone nodemap");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VDataBase = NULL;
|
||||||
|
NodeMap = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: If any of the above alloc's failed then no big deal. ReadTec
|
||||||
|
* itself "skips" vars if memory was not allocated for it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DeallocHeaderInfo(&DataSetTitle,
|
||||||
|
&VarNames,
|
||||||
|
&ZoneNames,
|
||||||
|
&NumPtsI,
|
||||||
|
&NumPtsJ,
|
||||||
|
&NumPtsK,
|
||||||
|
&ZoneType,
|
||||||
|
&UserRec);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reread the datafile. This time load in the header AND the raw data
|
||||||
|
* Note that VDataBase may be preallocated or may be left up to ReadTec
|
||||||
|
* to allocate (See AllocateRawDataSpaceLocally above).
|
||||||
|
*/
|
||||||
|
if (!READTEC(FALSE,
|
||||||
|
FName,
|
||||||
|
&IVersion,
|
||||||
|
&DataSetTitle,
|
||||||
|
&NumZones,
|
||||||
|
&NumVars,
|
||||||
|
&VarNames,
|
||||||
|
&ZoneNames,
|
||||||
|
&NumPtsI,
|
||||||
|
&NumPtsJ,
|
||||||
|
&NumPtsK,
|
||||||
|
&ZoneType,
|
||||||
|
&UserRec,
|
||||||
|
AllocateRawDataSpaceLocally,
|
||||||
|
&NodeMap,
|
||||||
|
&VDataBase))
|
||||||
|
{
|
||||||
|
if (IVersion > 99)
|
||||||
|
{
|
||||||
|
sprintf(InfoLine,
|
||||||
|
"Error: ***\n"
|
||||||
|
" This add-on can only display raw nodal data\n"
|
||||||
|
" and it appears to contain cell centered data.\n");
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf(InfoLine,
|
||||||
|
"Cannot Read File, %s.\n"
|
||||||
|
"File may not be a tecplot binary data file.",
|
||||||
|
FName);
|
||||||
|
ERRMSG(InfoLine);
|
||||||
|
}
|
||||||
|
IsOk = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHOWINFO("\n");
|
||||||
|
sprintf(InfoLine, "FileName : %s\n", FName);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
sprintf(InfoLine, "File Version: %3.1f\n", IVersion / 10.0);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
|
||||||
|
/* if the file contains filetype, then retrieve that separately since ReadTec should not be changed */
|
||||||
|
if (IVersion >= 109)
|
||||||
|
{
|
||||||
|
DataFileType_e FileType = DataFileType_Full;
|
||||||
|
char FileTypeStr[32];
|
||||||
|
FILE *F = NULL;
|
||||||
|
|
||||||
|
/* open the file and get the filetype */
|
||||||
|
F = fopen(FName, "rb");
|
||||||
|
if (F)
|
||||||
|
{
|
||||||
|
char Buffer[8];
|
||||||
|
Int32_t One;
|
||||||
|
Int32_t FileTypeInt;
|
||||||
|
|
||||||
|
/* 8 bytes for magic# and version and 4 bytes for Int32 */
|
||||||
|
fread(Buffer, sizeof(Buffer[0]), 8, F);
|
||||||
|
fread(&One, sizeof(One), 1, F);
|
||||||
|
fread(&FileTypeInt, sizeof(FileTypeInt), 1, F);
|
||||||
|
FileType = (DataFileType_e)FileTypeInt;
|
||||||
|
fclose(F);
|
||||||
|
F = NULL;
|
||||||
|
}
|
||||||
|
/* map the filetype */
|
||||||
|
switch (FileType)
|
||||||
|
{
|
||||||
|
case DataFileType_Full:
|
||||||
|
strcpy(FileTypeStr, "Full");
|
||||||
|
break;
|
||||||
|
case DataFileType_Grid:
|
||||||
|
strcpy(FileTypeStr, "Grid");
|
||||||
|
break;
|
||||||
|
case DataFileType_Solution:
|
||||||
|
strcpy(FileTypeStr, "Solution");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
IsOk = FALSE;
|
||||||
|
CHECK(FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sprintf(InfoLine, "File Type : %s\n", FileTypeStr);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(InfoLine, "DataSetTitle: %s\n", DataSetTitle ? DataSetTitle : " ");
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
sprintf(InfoLine, "NumZones : %d\n", (int)NumZones);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
sprintf(InfoLine, "NumVars : %d\n", (int)NumVars);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
if (IsOk && (NumZones > 0))
|
||||||
|
{
|
||||||
|
SHOWINFO("Var Names : ");
|
||||||
|
for (CZ = 0; CZ < NumVars; CZ++)
|
||||||
|
{
|
||||||
|
char *VarName = STRINGLISTGETSTRING(VarNames, CZ + 1);
|
||||||
|
sprintf(InfoLine, "%s", VarName ? VarName : "NULL");
|
||||||
|
if (CZ < NumVars - 1)
|
||||||
|
strcat(InfoLine, ",");
|
||||||
|
else
|
||||||
|
strcat(InfoLine, "\n\n");
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
if (VarName)
|
||||||
|
FREE_ARRAY(VarName, "VarName array");
|
||||||
|
}
|
||||||
|
SHOWINFO("ZoneName IMax JMax KMax Node Face Elmt EType\n");
|
||||||
|
SHOWINFO("-------------------------------------------------------------------------------\n");
|
||||||
|
|
||||||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||||||
|
{
|
||||||
|
char *ZoneName = STRINGLISTGETSTRING(ZoneNames, CZ + 1);
|
||||||
|
if (ZoneType[CZ] != ZoneType_Ordered)
|
||||||
|
{
|
||||||
|
if (ZoneType[CZ] == ZoneType_FEPolygon ||
|
||||||
|
ZoneType[CZ] == ZoneType_FEPolyhedron)
|
||||||
|
sprintf(InfoLine, "%-20s --- --- --- %-8ld %-8ld %-8ld ",
|
||||||
|
(ZoneName ? ZoneName : "NULL"),
|
||||||
|
(long)NumPtsI[CZ],
|
||||||
|
(long)NumPtsK[CZ],
|
||||||
|
(long)NumPtsJ[CZ]);
|
||||||
|
else
|
||||||
|
sprintf(InfoLine, "%-20s --- --- --- %-8ld --- %-8ld ",
|
||||||
|
(ZoneName ? ZoneName : "NULL"),
|
||||||
|
(long)NumPtsI[CZ],
|
||||||
|
(long)NumPtsJ[CZ]);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
switch (ZoneType[CZ])
|
||||||
|
{
|
||||||
|
case ZoneType_FETriangle : SHOWINFO("Tri\n"); break;
|
||||||
|
case ZoneType_FEQuad : SHOWINFO("Quad\n"); break;
|
||||||
|
case ZoneType_FETetra : SHOWINFO("Tetra\n"); break;
|
||||||
|
case ZoneType_FEBrick : SHOWINFO("Brick\n"); break;
|
||||||
|
case ZoneType_FELineSeg : SHOWINFO("LineSeg\n"); break;
|
||||||
|
case ZoneType_FEPolygon : SHOWINFO("Polygon\n"); break;
|
||||||
|
case ZoneType_FEPolyhedron: SHOWINFO("Polyhed\n"); break;
|
||||||
|
default: CHECK(FALSE); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf(InfoLine, "%-20s %-7ld %-7ld %-7ld --- --- --- ---\n",
|
||||||
|
(ZoneName ? ZoneName : "NULL"),
|
||||||
|
(long)NumPtsI[CZ],
|
||||||
|
(long)NumPtsJ[CZ],
|
||||||
|
(long)NumPtsK[CZ]);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
}
|
||||||
|
if (ZoneName)
|
||||||
|
FREE_ARRAY(ZoneName, "ZoneName Array");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
for (CZ = 1; CZ <= STRINGLISTGETCOUNT(UserRec); CZ++)
|
||||||
|
{
|
||||||
|
char *S = STRINGLISTGETSTRING(UserRec, CZ);
|
||||||
|
if (S)
|
||||||
|
{
|
||||||
|
int L;
|
||||||
|
strcpy(InfoLine, "UserRec: ");
|
||||||
|
L = (int)strlen(InfoLine);
|
||||||
|
strncat(&InfoLine[L], S, MAXCHARSINFOLINE - L - 2);
|
||||||
|
strcat(&InfoLine[strlen(InfoLine)], "\n");
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
FREE_ARRAY(S, "temp string");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (LoadRawData)
|
||||||
|
{
|
||||||
|
for (CZ = 0; CZ < NumZones; CZ++)
|
||||||
|
{
|
||||||
|
int CV;
|
||||||
|
for (CV = 0; CV < NumVars; CV++)
|
||||||
|
if (VDataBase[CZ*NumVars+CV])
|
||||||
|
{
|
||||||
|
int I;
|
||||||
|
int NumPts = GetNumPts(ZoneType[CZ], NumPtsI[CZ], NumPtsJ[CZ], NumPtsK[CZ]);
|
||||||
|
int SLen = 0;
|
||||||
|
sprintf(InfoLine, "\n\nVariable data for zone %d, Var %d\n", CZ + 1, CV + 1);
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
InfoLine[0] = '\0';
|
||||||
|
for (I = 0; I < NumPts; I++)
|
||||||
|
{
|
||||||
|
char PString[50];
|
||||||
|
if (SLen + 50 > MAXCHARSINFOLINE)
|
||||||
|
{
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
InfoLine[0] = '\0';
|
||||||
|
SLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(PString, "%lG ", VDataBase[CZ*NumVars+CV][I]);
|
||||||
|
strcat(InfoLine, PString);
|
||||||
|
SLen += (int)strlen(PString);
|
||||||
|
|
||||||
|
if ((I % 5) == 4)
|
||||||
|
{
|
||||||
|
strcat(InfoLine, "\n");
|
||||||
|
SLen++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (*InfoLine)
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
FREE_ARRAY(VDataBase[CZ*NumVars+CV], "vdatabase double");
|
||||||
|
}
|
||||||
|
if (NodeMap[CZ])
|
||||||
|
{
|
||||||
|
int I, J;
|
||||||
|
int PtsPerCell = GetNumPtsPerCell(ZoneType[CZ]);
|
||||||
|
int SLen = 0;
|
||||||
|
SHOWINFO("\nConnectivity list:\n");
|
||||||
|
InfoLine[0] = '\0';
|
||||||
|
for (J = 0; J < NumPtsJ[CZ]; J++)
|
||||||
|
{
|
||||||
|
if (SLen + 200 > MAXCHARSINFOLINE)
|
||||||
|
{
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
InfoLine[0] = '\0';
|
||||||
|
SLen = 0;
|
||||||
|
}
|
||||||
|
for (I = 0; I < PtsPerCell; I++)
|
||||||
|
{
|
||||||
|
char NString[20];
|
||||||
|
sprintf(NString, "%u ", (unsigned int)NodeMap[CZ][J*PtsPerCell+I] + 1);
|
||||||
|
strcat(InfoLine, NString);
|
||||||
|
SLen += (int)strlen(NString);
|
||||||
|
}
|
||||||
|
strcat(InfoLine, "\n");
|
||||||
|
SLen++;
|
||||||
|
}
|
||||||
|
if (*InfoLine)
|
||||||
|
SHOWINFO(InfoLine);
|
||||||
|
FREE_ARRAY(NodeMap[CZ], "nodemap");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FREE_ARRAY(NodeMap, "Nodemap base array");
|
||||||
|
FREE_ARRAY(VDataBase, "vdatabase base array");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHOWINFO("\n\n");
|
||||||
|
|
||||||
|
DeallocHeaderInfo(&DataSetTitle,
|
||||||
|
&VarNames,
|
||||||
|
&ZoneNames,
|
||||||
|
&NumPtsI,
|
||||||
|
&NumPtsJ,
|
||||||
|
&NumPtsK,
|
||||||
|
&ZoneType,
|
||||||
|
&UserRec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined ADDON
|
||||||
|
int main(int argc, char *(argv[]))
|
||||||
|
{
|
||||||
|
short CurFile;
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
printf("Err: Need: pltview file1 [file2] ...\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (CurFile = 1; CurFile < argc; CurFile++)
|
||||||
|
ReportFileInfo(argv[CurFile], FALSE, FALSE);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
***********************************************
|
||||||
|
** README **
|
||||||
|
***********************************************
|
||||||
|
|
||||||
|
To build the TecIO library and/or the pltview utility
|
||||||
|
simply run the Runmake script in this directory.
|
||||||
|
|
||||||
|
If customization is needed it will most likely be done
|
||||||
|
in GLOBAL.h (to identify machine as 64 bit) and/or in
|
||||||
|
dataio4.c. Just look for CRAY in dataio4.c and you
|
||||||
|
will find most of the critical areas. Note that the
|
||||||
|
existing code defined by CRAY is quite old and has
|
||||||
|
not been in use for some time.
|
||||||
|
|
||||||
|
Each example has its own Makefile. You may have to adjust
|
||||||
|
the variables at the top of the Makefile for your platform.
|
||||||
|
|
||||||
|
|
||||||
|
ReadTec()
|
||||||
|
|
||||||
|
The ReadTec() is included in the tecio library but is
|
||||||
|
not supported by Tecplot, Inc. ReadTec is used
|
||||||
|
to read Tecplot binary data files (all versions at or
|
||||||
|
older than the Tecplot version providing the tecio
|
||||||
|
library). See tecsrc/DATAUTIL.h for more information.
|
||||||
|
|
||||||
|
The pltview example app gives an example of using ReadTec
|
||||||
|
to read just the header from a file as well as loading all
|
||||||
|
field data from a file./*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2009 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
#ifndef ALLOC_H
|
||||||
|
#define ALLOC_H
|
||||||
|
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#if defined __cplusplus
|
||||||
|
#include <new>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined __cplusplus
|
||||||
|
#define ALLOC_ARRAY(N,Type,str) (Type *)malloc((N)*sizeof(Type))
|
||||||
|
#define ALLOC_ITEM(Type,str) (Type *)malloc(sizeof(Type))
|
||||||
|
#ifdef _DEBUG
|
||||||
|
/* NOTE: the pointer is set to 0xFFFF after the free for debug */
|
||||||
|
/* versions in the hopes of catching invalid pointer usage */
|
||||||
|
#define FREE_ARRAY(X,str) do { free((void *)(X)); *((void **)&(X)) = (void *)0xFFFF; } while (0)
|
||||||
|
#define FREE_ITEM(X,str) do { free((void *)(X)); *((void **)&(X)) = (void *)0xFFFF; } while (0)
|
||||||
|
#else
|
||||||
|
#define FREE_ARRAY(X,str) free((void *)(X))
|
||||||
|
#define FREE_ITEM(X,str) free((void *)(X))
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef TRACK_MEMORY_USAGE
|
||||||
|
extern void initMemoryUsageTracking(void);
|
||||||
|
extern void cleanUpMemoryUsageTracking(void);
|
||||||
|
extern void trackMemoryAlloc(size_t size);
|
||||||
|
extern void trackMemoryFree(size_t size);
|
||||||
|
extern void trackMemoryClearHighMark(void);
|
||||||
|
extern void trackMemorySaveHighMark(void);
|
||||||
|
extern void getMemoryUsage(size_t* memoryInUse,
|
||||||
|
size_t* memoryCurrentHighMark,
|
||||||
|
size_t* memorySavedHighMark,
|
||||||
|
size_t* memoryTotalHighMark);
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Create a version of new that returns NULL instead
|
||||||
|
* of throwing std::bad_alloc. A lot of code is written using
|
||||||
|
* ALLOC_ITEM and ALLOC_ARRAY that expect a return value of
|
||||||
|
* NULL on failure instead of the exception. 2008-05-08 CAM
|
||||||
|
*/
|
||||||
|
#if defined MSWIN && defined _DEBUG
|
||||||
|
template <typename T>
|
||||||
|
inline T *nonExceptionNew(size_t numItems,
|
||||||
|
const char* fileName,
|
||||||
|
int lineNumber)
|
||||||
|
{
|
||||||
|
REQUIRE(numItems > 0);
|
||||||
|
REQUIRE(VALID_REF(fileName));
|
||||||
|
REQUIRE(lineNumber > 0);
|
||||||
|
T* result;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_NEW
|
||||||
|
#ifdef new
|
||||||
|
#undef new
|
||||||
|
#define USING_DEBUG_NEW
|
||||||
|
#endif
|
||||||
|
result = new(fileName, lineNumber) T[numItems];
|
||||||
|
#ifdef USING_DEBUG_NEW
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef USING_DEBUG_NEW
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
result = new T[numItems];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
catch (std::bad_alloc&)
|
||||||
|
{
|
||||||
|
result = NULL;
|
||||||
|
}
|
||||||
|
#ifdef TRACK_MEMORY_USAGE
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
|
#ifdef MSWIN
|
||||||
|
trackMemoryAlloc(_msize(result));
|
||||||
|
#else
|
||||||
|
trackMemoryAlloc(malloc_usable_size(result));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ENSURE(VALID_REF_OR_NULL(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define ALLOC_ARRAY(N,Type,str) nonExceptionNew<Type>((N),__FILE__,__LINE__)
|
||||||
|
#else
|
||||||
|
template <typename T>
|
||||||
|
inline T *nonExceptionNew(size_t numItems)
|
||||||
|
{
|
||||||
|
REQUIRE(numItems > 0);
|
||||||
|
T *result;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = new T[numItems];
|
||||||
|
}
|
||||||
|
catch (std::bad_alloc&)
|
||||||
|
{
|
||||||
|
result = NULL;
|
||||||
|
}
|
||||||
|
#ifdef TRACK_MEMORY_USAGE
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
|
#ifdef MSWIN
|
||||||
|
trackMemoryAlloc(_msize(result));
|
||||||
|
#else
|
||||||
|
trackMemoryAlloc(malloc_usable_size(result));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ENSURE(VALID_REF_OR_NULL(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define ALLOC_ARRAY(N,Type,str) nonExceptionNew<Type>((N))
|
||||||
|
#endif
|
||||||
|
#define ALLOC_ITEM(Type,str) ALLOC_ARRAY(1,Type,str)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Although delete doesn't throw exceptions, this function matches
|
||||||
|
* nonExceptionNew, and also reports the size of the block if we
|
||||||
|
* are tracking memory.
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
inline void nonExceptionDelete(T* &ptr)
|
||||||
|
{
|
||||||
|
#if defined MSWIN && !defined NO_ASSERTS
|
||||||
|
CHECK(!IsBadReadPtr((void*)ptr, 1));
|
||||||
|
#endif
|
||||||
|
#if defined TRACK_MEMORY_USAGE
|
||||||
|
if (ptr != NULL)
|
||||||
|
{
|
||||||
|
#ifdef MSWIN
|
||||||
|
trackMemoryFree(_msize(ptr));
|
||||||
|
#else
|
||||||
|
trackMemoryFree(malloc_usable_size(ptr));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
delete [] ptr;
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
/*
|
||||||
|
* NOTE: the pointer is set to 0xFFFF after the free for asserted
|
||||||
|
* builds in the hopes of catching invalid pointer usage
|
||||||
|
*/
|
||||||
|
ptr = (T*)(void*)0xFFFF;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#define FREE_ARRAY(ptr,str) nonExceptionDelete((ptr))
|
||||||
|
#define FREE_ITEM(ptr,str) FREE_ARRAY(ptr,str)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following functor can be used to easily deallocate memory from containers
|
||||||
|
* that hold pointers to allocated objects. For example:
|
||||||
|
*
|
||||||
|
* vector<MyObject*> container;
|
||||||
|
* for (int ii = 0; ii < 10; ii++
|
||||||
|
* container.push_back(new MyObject);
|
||||||
|
* ... do something with the objects ...
|
||||||
|
* ... now we need to clean up ...
|
||||||
|
* for_each(container.begin(),
|
||||||
|
* container.end(),
|
||||||
|
* DeleteItem());
|
||||||
|
*/
|
||||||
|
struct DeleteItem
|
||||||
|
{
|
||||||
|
template<typename T>
|
||||||
|
void operator()(T*& object)
|
||||||
|
{
|
||||||
|
delete object;
|
||||||
|
object = NULL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* ALLOC_H */
|
||||||
@ -0,0 +1,626 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if !defined ARRLIST_h
|
||||||
|
#define ARRLIST_h
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
# undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined ARRLISTMODULE
|
||||||
|
# define EXTERN
|
||||||
|
#else
|
||||||
|
# define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ArrayListType_UnsignedChar,
|
||||||
|
ArrayListType_UnsignedShort,
|
||||||
|
ArrayListType_UnsignedInt,
|
||||||
|
ArrayListType_UnsignedLong,
|
||||||
|
ArrayListType_Int64,
|
||||||
|
ArrayListType_Char,
|
||||||
|
ArrayListType_Short,
|
||||||
|
ArrayListType_Int,
|
||||||
|
ArrayListType_Long,
|
||||||
|
ArrayListType_Float,
|
||||||
|
ArrayListType_Double,
|
||||||
|
ArrayListType_LgIndex,
|
||||||
|
ArrayListType_EntIndex,
|
||||||
|
ArrayListType_SmInteger,
|
||||||
|
ArrayListType_Boolean,
|
||||||
|
ArrayListType_ArbParam,
|
||||||
|
ArrayListType_UnsignedCharPtr,
|
||||||
|
ArrayListType_UnsignedShortPtr,
|
||||||
|
ArrayListType_UnsignedIntPtr,
|
||||||
|
ArrayListType_UnsignedLongPtr,
|
||||||
|
ArrayListType_Int64Ptr,
|
||||||
|
ArrayListType_CharPtr,
|
||||||
|
ArrayListType_ShortPtr,
|
||||||
|
ArrayListType_IntPtr,
|
||||||
|
ArrayListType_LongPtr,
|
||||||
|
ArrayListType_FloatPtr,
|
||||||
|
ArrayListType_DoublePtr,
|
||||||
|
ArrayListType_LgIndexPtr,
|
||||||
|
ArrayListType_EntIndexPtr,
|
||||||
|
ArrayListType_SmIntegerPtr,
|
||||||
|
ArrayListType_BooleanPtr,
|
||||||
|
ArrayListType_ArbParamPtr,
|
||||||
|
ArrayListType_VoidPtr,
|
||||||
|
ArrayListType_FunctionPtr,
|
||||||
|
ArrayListType_Any,
|
||||||
|
END_ArrayListType_e,
|
||||||
|
ArrayListType_Invalid = BadEnumValue
|
||||||
|
} ArrayListType_e;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
unsigned char UnsignedChar;
|
||||||
|
unsigned short UnsignedShort;
|
||||||
|
unsigned int UnsignedInt;
|
||||||
|
unsigned long UnsignedLong;
|
||||||
|
Int64_t Int64;
|
||||||
|
char Char;
|
||||||
|
short Short;
|
||||||
|
int Int;
|
||||||
|
long Long;
|
||||||
|
float Float;
|
||||||
|
double Double;
|
||||||
|
LgIndex_t LgIndex;
|
||||||
|
EntIndex_t EntIndex;
|
||||||
|
SmInteger_t SmInteger;
|
||||||
|
Boolean_t BBoolean; /* X-Windows uses Boolean */
|
||||||
|
ArbParam_t ArbParam;
|
||||||
|
unsigned char *UnsignedCharPtr;
|
||||||
|
unsigned short *UnsignedShortPtr;
|
||||||
|
unsigned int *UnsignedIntPtr;
|
||||||
|
unsigned long *UnsignedLongPtr;
|
||||||
|
Int64_t *Int64Ptr;
|
||||||
|
char *CharPtr;
|
||||||
|
short *ShortPtr;
|
||||||
|
int *IntPtr;
|
||||||
|
long *LongPtr;
|
||||||
|
float *FloatPtr;
|
||||||
|
double *DoublePtr;
|
||||||
|
LgIndex_t *LgIndexPtr;
|
||||||
|
EntIndex_t *EntIndexPtr;
|
||||||
|
SmInteger_t *SmIntegerPtr;
|
||||||
|
Boolean_t *BooleanPtr;
|
||||||
|
ArbParam_t *ArbParamPtr;
|
||||||
|
void *VoidPtr;
|
||||||
|
void (*FunctionPtr)(void);
|
||||||
|
} ArrayListItem_u;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NULL array list item for added convenience of inserting a NULL item without
|
||||||
|
* having to declare and assign one. Can be used as follows:
|
||||||
|
*
|
||||||
|
* IsOk = ArrayListInsertItem(SomeArrayList, SomeIndex, ArrayListNumItem);
|
||||||
|
*
|
||||||
|
* NOTE: This value must be set to zero before Tecplot uses array lists.
|
||||||
|
* memset(&ArrayListNullItem, 0, sizeof(ArrayListType_Any));
|
||||||
|
*/
|
||||||
|
EXTERN ArrayListItem_u ArrayListNullItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Visitor for traversing an array list. An iterator may not perform any
|
||||||
|
* operation that will adjust the size of the list. In other words it may not
|
||||||
|
* insert or delete items from the list. However an iterator may perform a get
|
||||||
|
* operation or a set operation that do not expand the list size.
|
||||||
|
*
|
||||||
|
* param ItemRef
|
||||||
|
* Reference to the array list item visited.
|
||||||
|
* param ClientData
|
||||||
|
* Any client data required for the visitor.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE to continue visiting items, otherwise
|
||||||
|
* FALSE to discontinue visiting
|
||||||
|
*/
|
||||||
|
typedef Boolean_t (*ArrayListItemVisitor_pf)(void *ItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
#if 0 /* use this stub as a starting place */
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(TypeRef));
|
||||||
|
REQUIRE(VALID_REF(*TypeRef) || *TypeRef == NULL);
|
||||||
|
|
||||||
|
Boolean_t DoContinue = TRUE;
|
||||||
|
<type> *TypeRef = (<type> *)ItemRef;
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(DoContinue));
|
||||||
|
return DoContinue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor for cleaning up one or more array list items. If a destructor is
|
||||||
|
* not supplied then the array items are simply discarded.
|
||||||
|
*
|
||||||
|
* NOTE: The only change to ArrayListItemVisitor_pf is the policy which
|
||||||
|
* requires that the return value is TRUE.
|
||||||
|
*
|
||||||
|
* param ItemRef
|
||||||
|
* Reference to the array list item to cleanup.
|
||||||
|
* param ClientData
|
||||||
|
* Any client data required for cleanup.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE is a requirement
|
||||||
|
*/
|
||||||
|
typedef ArrayListItemVisitor_pf ArrayListItemDestructor_pf;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duplicator for copying one or more array list items. If a duplicator is not
|
||||||
|
* supplied then the array items are simply copied. For pointer types this
|
||||||
|
* means by reference. Note that if a duplicator is used the rules for
|
||||||
|
* duplication and subsequent cleanup are defined by the client.
|
||||||
|
*
|
||||||
|
* param TargetItemRef
|
||||||
|
* Reference to the array list to receive the duplicate.
|
||||||
|
* param SourceItemRef
|
||||||
|
* Reference to the array list item to duplicate.
|
||||||
|
* param ClientData
|
||||||
|
* Any client data required for duplication.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the duplication was a success
|
||||||
|
* FALSE otherwise. If the duplication failed it
|
||||||
|
* is the client's responsibility to cleanup any
|
||||||
|
* partial duplication
|
||||||
|
*/
|
||||||
|
typedef Boolean_t (*ArrayListItemDuplicator_pf)(void *TargetItemRef,
|
||||||
|
void *SourceItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
#if 0 /* use this stub as a starting place */
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(TargetTypeRef));
|
||||||
|
REQUIRE(VALID_REF(SourceTypeRef));
|
||||||
|
REQUIRE(VALID_REF(*SourceTypeRef) || *SourceTypeRef == NULL);
|
||||||
|
|
||||||
|
Boolean_t IsOk = TRUE;
|
||||||
|
<type> *TargetTypeRef = (<type> *)TargetItemRef;
|
||||||
|
<type> *SourceTypeRef = (<type> *)SourceItemRef;
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(IsOk));
|
||||||
|
return IsOk;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjusts the capacity request as necessary to minimize memory reallocations
|
||||||
|
* for large lists. Unless the request exceeds the maximum the adjusted
|
||||||
|
* capacity will be at least as big as requested however it may be larger if it
|
||||||
|
* is determined that the space requirement is growing faster. If the maximum
|
||||||
|
* is exceeded zero should be returned.
|
||||||
|
*
|
||||||
|
* param ArrayList
|
||||||
|
* Array list requesting the change in capacity.
|
||||||
|
* param CurrentCapacity
|
||||||
|
* Current capacity of the array list.
|
||||||
|
* param RequestedCapacity
|
||||||
|
* Capacity request or zero for default size.
|
||||||
|
* param ClientData
|
||||||
|
* Any client data needed for the adjustment.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Adjusted capacity that is at least as large as the request or zero if
|
||||||
|
* unable to satisfy the requested capacity.
|
||||||
|
*/
|
||||||
|
typedef LgIndex_t (*ArrayListCapacityRequestAdjuster_pf)(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t CurrentCapacity,
|
||||||
|
LgIndex_t RequestedCapacity,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
#if 0 /* use this stub as a starting place */
|
||||||
|
{
|
||||||
|
REQUIRE(ArrayListIsValid(ArrayList));
|
||||||
|
REQUIRE((RequestedCapacity == 0 && CurrentCapacity == 0) ||
|
||||||
|
RequestedCapacity > ArrayList->Capacity);
|
||||||
|
|
||||||
|
LgIndex_t Result;
|
||||||
|
|
||||||
|
ENSURE(Result == 0 || Result >= RequestedCapacity);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* private ArrayList structure: only exposed so STRUTIL can use it */
|
||||||
|
typedef struct _ArrayList_s
|
||||||
|
{
|
||||||
|
char *Array; /* byte array for holding the items */
|
||||||
|
ArrayListType_e Type; /* type of array items */
|
||||||
|
SmInteger_t ItemSize; /* byte size of an individual item */
|
||||||
|
LgIndex_t Count; /* number of items in the array */
|
||||||
|
LgIndex_t Capacity; /* maximum holding capacity of the array */
|
||||||
|
Boolean_t IsVisitingItems; /* indicates if an iteration is in progress */
|
||||||
|
ArrayListCapacityRequestAdjuster_pf CapacityRequestAdjuster;
|
||||||
|
ArbParam_t CapacityRequestAdjusterClientData;
|
||||||
|
} ArrayList_s;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares two array list elements. Note that either string may be
|
||||||
|
* NULL as array lists allow for NULL elements.
|
||||||
|
*
|
||||||
|
* @param Item1
|
||||||
|
* Element to compare against Item2.
|
||||||
|
* @param Item2
|
||||||
|
* Element to compare against Item1.
|
||||||
|
* @param ClientData
|
||||||
|
* Contextual information that was passed to the 'ArrayListQSort' function.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* - A value less than zero if Item1 is less than Item2.
|
||||||
|
* - A value of zero if Item1 is equal to Item2.
|
||||||
|
* - A value greater than zero if Item1 is greater than Item2.
|
||||||
|
*/
|
||||||
|
typedef int (STDCALL *ArrayListItemComparator_pf)(ArrayListItem_u Item1,
|
||||||
|
ArrayListItem_u Item2,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
|
||||||
|
EXTERN Boolean_t ArrayListIsValid(ArrayList_pa ArrayList);
|
||||||
|
EXTERN ArrayListType_e ArrayListGetType(ArrayList_pa ArrayList);
|
||||||
|
EXTERN Boolean_t ArrayListEnlargeCapacity(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t RequestedCapacity);
|
||||||
|
EXTERN ArrayList_pa ArrayListAlloc(LgIndex_t EstimatedCapacity,
|
||||||
|
ArrayListType_e Type,
|
||||||
|
ArrayListCapacityRequestAdjuster_pf CapacityRequestAdjuster,
|
||||||
|
ArbParam_t CapacityRequestAdjusterClientData);
|
||||||
|
EXTERN void ArrayListDealloc(ArrayList_pa *ArrayList,
|
||||||
|
ArrayListItemDestructor_pf ItemDestructor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN void ArrayListDeleteAllItems(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItemDestructor_pf ItemDestructor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN void ArrayListDeleteItems(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
LgIndex_t Count,
|
||||||
|
ArrayListItemDestructor_pf ItemDestructor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN void ArrayListDeleteItem(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
ArrayListItemDestructor_pf ItemDestructor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN ArrayList_pa ArrayListRemoveItems(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
LgIndex_t Count);
|
||||||
|
EXTERN ArrayListItem_u ArrayListRemoveItem(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset);
|
||||||
|
EXTERN Boolean_t ArrayListInsertItem(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
ArrayListItem_u Item);
|
||||||
|
EXTERN Boolean_t ArrayListInsert(ArrayList_pa Target,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
ArrayList_pa Source);
|
||||||
|
EXTERN Boolean_t ArrayListVisitItems(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
LgIndex_t Count,
|
||||||
|
ArrayListItemVisitor_pf ItemVisitor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN ArrayList_pa ArrayListGetItems(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
LgIndex_t Count);
|
||||||
|
EXTERN ArrayListItem_u ArrayListGetItem(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset);
|
||||||
|
EXTERN Boolean_t ArrayListSetItem(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset,
|
||||||
|
ArrayListItem_u Item,
|
||||||
|
ArrayListItemDestructor_pf ItemDestructor,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN Boolean_t ArrayListAppendItem(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItem_u Item);
|
||||||
|
EXTERN Boolean_t ArrayListAppend(ArrayList_pa Target,
|
||||||
|
ArrayList_pa Source);
|
||||||
|
EXTERN ArrayList_pa ArrayListCopy(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItemDuplicator_pf ItemDuplicator,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN void *ArrayListToArray(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItemDuplicator_pf ItemDuplicator,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN ArrayList_pa ArrayListFromArray(void *Source,
|
||||||
|
LgIndex_t Count,
|
||||||
|
ArrayListType_e Type,
|
||||||
|
ArrayListItemDuplicator_pf ItemDuplicator,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
EXTERN void ArrayListQSort(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItemComparator_pf Comparator,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
EXTERN Boolean_t ArrayListBSearch(ArrayList_pa ArrayList,
|
||||||
|
ArrayListItem_u Item,
|
||||||
|
ArrayListItemComparator_pf Comparator,
|
||||||
|
ArbParam_t ClientData,
|
||||||
|
LgIndex_t *ItemIndex);
|
||||||
|
|
||||||
|
#if defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
/**
|
||||||
|
* Gets the array list's internal buffer representation.
|
||||||
|
* Use ArrayListGetXxx accessors whenever possible as their
|
||||||
|
* implementation in the release build is as fast as using
|
||||||
|
* the array directly anyway.
|
||||||
|
*
|
||||||
|
* WARNING:
|
||||||
|
* Some array list functions modify the internal buffer.
|
||||||
|
* This will invalidate this reference however it is
|
||||||
|
* the client's responsibility not to make further use
|
||||||
|
* of it. In addition, this reference should never be
|
||||||
|
* deallocated directly as the array list assumes the
|
||||||
|
* responsible for the cleanup.
|
||||||
|
*
|
||||||
|
* param ArrayList
|
||||||
|
* Array list for which a reference to the internal
|
||||||
|
* buffer is desired.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Reference to the array list's internal buffer.
|
||||||
|
*/
|
||||||
|
# define ArrayListGetInternalRef ArrayListGetInternalRef_MACRO
|
||||||
|
/**
|
||||||
|
* Gets the item's internal reference at the specified offset in the list.
|
||||||
|
*
|
||||||
|
* WARNING:
|
||||||
|
* Some array list functions modify the internal buffer.
|
||||||
|
* This will invalidate this reference however it is
|
||||||
|
* the client's responsibility not to make further use
|
||||||
|
* of it. In addition, this reference should never be
|
||||||
|
* deallocated directly as the array list assumes the
|
||||||
|
* responsible for the cleanup.
|
||||||
|
*
|
||||||
|
* param ArrayList
|
||||||
|
* Array list containing the desired item.
|
||||||
|
* param ItemOffset
|
||||||
|
* Offset to the item in the list.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* The internal reference to the requested item.
|
||||||
|
*/
|
||||||
|
# define ArrayListGetItemInternalRef ArrayListGetItemInternalRef_MACRO
|
||||||
|
# define ArrayListGetCount ArrayListGetCount_MACRO
|
||||||
|
|
||||||
|
# define ArrayListGetUnsignedChar(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned char)
|
||||||
|
# define ArrayListGetUnsignedShort(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned short)
|
||||||
|
# define ArrayListGetUnsignedInt(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned int)
|
||||||
|
# define ArrayListGetUnsignedLong(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned long)
|
||||||
|
# define ArrayListGetInt64(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, Int64_t)
|
||||||
|
# define ArrayListGetChar(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, char)
|
||||||
|
# define ArrayListGetShort(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, short)
|
||||||
|
# define ArrayListGetInt(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, int)
|
||||||
|
# define ArrayListGetLong(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, long)
|
||||||
|
# define ArrayListGetFloat(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, float)
|
||||||
|
# define ArrayListGetDouble(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, double)
|
||||||
|
# define ArrayListGetLgIndex(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, LgIndex_t)
|
||||||
|
# define ArrayListGetEntIndex(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, EntIndex_t)
|
||||||
|
# define ArrayListGetSmInteger(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, SmInteger_t)
|
||||||
|
# define ArrayListGetBoolean(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, Boolean_t)
|
||||||
|
# define ArrayListGetArbParam(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, ArbParam_t)
|
||||||
|
# define ArrayListGetUnsignedCharPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned char *)
|
||||||
|
# define ArrayListGetUnsignedShortPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned short *)
|
||||||
|
# define ArrayListGetUnsignedIntPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned int *)
|
||||||
|
# define ArrayListGetUnsignedLongPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, unsigned long *)
|
||||||
|
# define ArrayListGetInt64Ptr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, Int64_t *)
|
||||||
|
# define ArrayListGetCharPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, char *)
|
||||||
|
# define ArrayListGetShortPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, short *)
|
||||||
|
# define ArrayListGetIntPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, int *)
|
||||||
|
# define ArrayListGetLongPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, long *)
|
||||||
|
# define ArrayListGetFloatPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, float *)
|
||||||
|
# define ArrayListGetDoublePtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, double *)
|
||||||
|
# define ArrayListGetLgIndexPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, LgIndex_t *)
|
||||||
|
# define ArrayListGetEntIndexPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, EntIndex_t *)
|
||||||
|
# define ArrayListGetSmIntegerPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, SmInteger_t *)
|
||||||
|
# define ArrayListGetBooleanPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, Boolean_t *)
|
||||||
|
# define ArrayListGetArbParamPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, ArbParam_t *)
|
||||||
|
# define ArrayListGetVoidPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, void *)
|
||||||
|
# define ArrayListGetFunctionPtr(ArrayList, ItemOffset) ArrayListGetTypedItem(ArrayList, ItemOffset, (**)(void))
|
||||||
|
#else
|
||||||
|
# define ArrayListGetInternalRef ArrayListGetInternalRef_FUNC
|
||||||
|
# define ArrayListGetItemInternalRef ArrayListGetItemInternalRef_FUNC
|
||||||
|
# define ArrayListGetCount ArrayListGetCount_FUNC
|
||||||
|
|
||||||
|
# define ArrayListGetUnsignedChar(ArrayList, ItemOffset) (*((unsigned char *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedShort(ArrayList, ItemOffset) (*((unsigned short *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedInt(ArrayList, ItemOffset) (*((unsigned int *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedLong(ArrayList, ItemOffset) (*((unsigned long *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetInt64(ArrayList, ItemOffset) (*((Int64_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetChar(ArrayList, ItemOffset) (*((char *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetShort(ArrayList, ItemOffset) (*((short *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetInt(ArrayList, ItemOffset) (*((int *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetLong(ArrayList, ItemOffset) (*((long *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetFloat(ArrayList, ItemOffset) (*((float *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetDouble(ArrayList, ItemOffset) (*((double *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetLgIndex(ArrayList, ItemOffset) (*((LgIndex_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetEntIndex(ArrayList, ItemOffset) (*((EntIndex_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetSmInteger(ArrayList, ItemOffset) (*((SmInteger_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetBoolean(ArrayList, ItemOffset) (*((Boolean_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetArbParam(ArrayList, ItemOffset) (*((ArbParam_t *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedCharPtr(ArrayList, ItemOffset) (*((unsigned char * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedShortPtr(ArrayList, ItemOffset) (*((unsigned short * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedIntPtr(ArrayList, ItemOffset) (*((unsigned int * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetUnsignedLongPtr(ArrayList, ItemOffset) (*((unsigned long * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetInt64Ptr(ArrayList, ItemOffset) (*((Int64_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetCharPtr(ArrayList, ItemOffset) (*((char * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetShortPtr(ArrayList, ItemOffset) (*((short * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetIntPtr(ArrayList, ItemOffset) (*((int * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetLongPtr(ArrayList, ItemOffset) (*((long * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetFloatPtr(ArrayList, ItemOffset) (*((float * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetDoublePtr(ArrayList, ItemOffset) (*((double * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetLgIndexPtr(ArrayList, ItemOffset) (*((LgIndex_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetEntIndexPtr(ArrayList, ItemOffset) (*((EntIndex_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetSmIntegerPtr(ArrayList, ItemOffset) (*((SmInteger_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetBooleanPtr(ArrayList, ItemOffset) (*((Boolean_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetArbParamPtr(ArrayList, ItemOffset) (*((ArbParam_t * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetVoidPtr(ArrayList, ItemOffset) (*((void * *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
# define ArrayListGetFunctionPtr(ArrayList, ItemOffset) (*(((**)(void) *)ArrayListGetItemInternalRef_FUNC(ArrayList, ItemOffset)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
EXTERN const void *ArrayListGetInternalRef_FUNC(ArrayList_pa ArrayList);
|
||||||
|
EXTERN const void *ArrayListGetItemInternalRef_FUNC(ArrayList_pa ArrayList,
|
||||||
|
LgIndex_t ItemOffset);
|
||||||
|
EXTERN LgIndex_t ArrayListGetCount_FUNC(ArrayList_pa ArrayList);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ArrayListGetInternalRef_MACRO(ArrayList) ((const void *)((ArrayList)->Array))
|
||||||
|
#define ArrayListGetItemInternalRef_MACRO(ArrayList, ItemOffset) ((const void *)&((ArrayList)->Array[(ItemOffset)*(ArrayList)->ItemSize]))
|
||||||
|
#define ArrayListGetCount_MACRO(ArrayList) ((ArrayList)->Count)
|
||||||
|
#define ArrayListGetTypedArrayRef(ArrayList, NativeType) ((NativeType *)((ArrayList)->Array))
|
||||||
|
#define ArrayListGetTypedItem(ArrayList, ItemOffset, NativeType) (ArrayListGetTypedArrayRef(ArrayList,NativeType)[ItemOffset])
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple macro to determine if the item offset is within the array list
|
||||||
|
* capacity. In the debug or checked builds we also perform a lower bound
|
||||||
|
* assertion check.
|
||||||
|
*/
|
||||||
|
#if defined NO_ASSERTS
|
||||||
|
# define ArrayListOffsetWithinCapacity(ArrayList, ItemOffset) ((ItemOffset) < (ArrayList)->Capacity)
|
||||||
|
#else
|
||||||
|
/**
|
||||||
|
* Using 'assert' rather than 'REQUIRE' because under Windows, REQUIRE (and ASSERT) trickles down to being a
|
||||||
|
* do-while loop, which doesn't jive well with the comma operator.
|
||||||
|
*/
|
||||||
|
# define ArrayListOffsetWithinCapacity(ArrayList, ItemOffset) ((assert((ItemOffset) >= 0),TRUE) && ((ItemOffset) < (ArrayList)->Capacity))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Places the item at the specified offset. If the offset is beyond the
|
||||||
|
* end of the list it is sized accordingly and the intervening items
|
||||||
|
* between the last item of the original state and the last item of the
|
||||||
|
* new state are guaranteed to be 0.
|
||||||
|
*
|
||||||
|
* This is the workhorse of the set and append convenience macros that follow.
|
||||||
|
* Please note that unlike ArrayListSetItem no destructor facility is provided
|
||||||
|
* therefore if an item previously occupied 'ItemOffset' it will be replaced.
|
||||||
|
*
|
||||||
|
* param ArrayList
|
||||||
|
* Array list target in which to set the item.
|
||||||
|
* param ItemOffset
|
||||||
|
* Offset of the item.
|
||||||
|
* param Item
|
||||||
|
* Item to set at the specified offset. Its native type must
|
||||||
|
* match 'NativeType'
|
||||||
|
* param NativeType
|
||||||
|
* Native type of 'Item'.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if sufficient memory permitted the operation, otherwise FALSE.
|
||||||
|
*/
|
||||||
|
#define ArrayListSetTypedItem(ArrayList, ItemOffset, Item, NativeType) \
|
||||||
|
((ArrayListOffsetWithinCapacity((ArrayList), (ItemOffset)) || \
|
||||||
|
ArrayListEnlargeCapacity((ArrayList), (ItemOffset)+1)) \
|
||||||
|
? (((((NativeType *)((ArrayList)->Array))[(ItemOffset)]) = (Item)), \
|
||||||
|
(((ItemOffset)+1 > (ArrayList)->Count) \
|
||||||
|
? (((ArrayList)->Count = (ItemOffset)+1), TRUE) \
|
||||||
|
: (TRUE))) \
|
||||||
|
: (FALSE))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This section provides macros for high speed setting and appending to an
|
||||||
|
* array list of a known type. The only additional overhead incurred versus just
|
||||||
|
* using a simple array is the cost of testing the array list capacity.
|
||||||
|
*/
|
||||||
|
#define ArrayListSetUnsignedChar(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned char)
|
||||||
|
#define ArrayListSetUnsignedShort(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned short)
|
||||||
|
#define ArrayListSetUnsignedInt(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned int)
|
||||||
|
#define ArrayListSetUnsignedLong(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned long)
|
||||||
|
#define ArrayListSetInt64(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, Int64_t)
|
||||||
|
#define ArrayListSetChar(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, char)
|
||||||
|
#define ArrayListSetShort(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, short)
|
||||||
|
#define ArrayListSetInt(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, int)
|
||||||
|
#define ArrayListSetLong(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, long)
|
||||||
|
#define ArrayListSetFloat(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, float)
|
||||||
|
#define ArrayListSetDouble(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, double)
|
||||||
|
#define ArrayListSetLgIndex(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, LgIndex_t)
|
||||||
|
#define ArrayListSetEntIndex(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, EntIndex_t)
|
||||||
|
#define ArrayListSetSmInteger(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, SmInteger_t)
|
||||||
|
#define ArrayListSetBoolean(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, Boolean_t)
|
||||||
|
#define ArrayListSetArbParam(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, ArbParam_t)
|
||||||
|
#define ArrayListSetUnsignedCharPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned char *)
|
||||||
|
#define ArrayListSetUnsignedShortPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned short *)
|
||||||
|
#define ArrayListSetUnsignedIntPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned int *)
|
||||||
|
#define ArrayListSetUnsignedLongPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, unsigned long *)
|
||||||
|
#define ArrayListSetInt64Ptr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, Int64_t *)
|
||||||
|
#define ArrayListSetCharPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, char *)
|
||||||
|
#define ArrayListSetShortPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, short *)
|
||||||
|
#define ArrayListSetIntPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, int *)
|
||||||
|
#define ArrayListSetLongPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, long *)
|
||||||
|
#define ArrayListSetFloatPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, float *)
|
||||||
|
#define ArrayListSetDoublePtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, double *)
|
||||||
|
#define ArrayListSetLgIndexPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, LgIndex_t *)
|
||||||
|
#define ArrayListSetEntIndexPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, EntIndex_t *)
|
||||||
|
#define ArrayListSetSmIntegerPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, SmInteger_t *)
|
||||||
|
#define ArrayListSetBooleanPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, Boolean_t *)
|
||||||
|
#define ArrayListSetArbParamPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, ArbParam_t *)
|
||||||
|
#define ArrayListSetVoidPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, void *)
|
||||||
|
#define ArrayListSetFunctionPtr(ArrayList, ItemOffset, Item) ArrayListSetTypedItem(ArrayList, ItemOffset, Item, (**)(void))
|
||||||
|
|
||||||
|
#define ArrayListAppendUnsignedChar(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned char)
|
||||||
|
#define ArrayListAppendUnsignedShort(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned short)
|
||||||
|
#define ArrayListAppendUnsignedInt(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned int)
|
||||||
|
#define ArrayListAppendUnsignedLong(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned long)
|
||||||
|
#define ArrayListAppendInt64(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, Int64_t)
|
||||||
|
#define ArrayListAppendChar(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, char)
|
||||||
|
#define ArrayListAppendShort(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, short)
|
||||||
|
#define ArrayListAppendInt(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, int)
|
||||||
|
#define ArrayListAppendLong(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, long)
|
||||||
|
#define ArrayListAppendFloat(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, float)
|
||||||
|
#define ArrayListAppendDouble(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, double)
|
||||||
|
#define ArrayListAppendLgIndex(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, LgIndex_t)
|
||||||
|
#define ArrayListAppendEntIndex(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, EntIndex_t)
|
||||||
|
#define ArrayListAppendSmInteger(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, SmInteger_t)
|
||||||
|
#define ArrayListAppendBoolean(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, Boolean_t)
|
||||||
|
#define ArrayListAppendArbParam(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, ArbParam_t)
|
||||||
|
#define ArrayListAppendUnsignedCharPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned char *)
|
||||||
|
#define ArrayListAppendUnsignedShortPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned short *)
|
||||||
|
#define ArrayListAppendUnsignedIntPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned int *)
|
||||||
|
#define ArrayListAppendUnsignedLongPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, unsigned long *)
|
||||||
|
#define ArrayListAppendInt64Ptr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, Int64_t *)
|
||||||
|
#define ArrayListAppendCharPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, char *)
|
||||||
|
#define ArrayListAppendShortPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, short *)
|
||||||
|
#define ArrayListAppendIntPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, int *)
|
||||||
|
#define ArrayListAppendLongPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, long *)
|
||||||
|
#define ArrayListAppendFloatPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, float *)
|
||||||
|
#define ArrayListAppendDoublePtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, double *)
|
||||||
|
#define ArrayListAppendLgIndexPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, LgIndex_t *)
|
||||||
|
#define ArrayListAppendEntIndexPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, EntIndex_t *)
|
||||||
|
#define ArrayListAppendSmIntegerPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, SmInteger_t *)
|
||||||
|
#define ArrayListAppendBooleanPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, Boolean_t *)
|
||||||
|
#define ArrayListAppendArbParamPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, ArbParam_t *)
|
||||||
|
#define ArrayListAppendVoidPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, void *)
|
||||||
|
#define ArrayListAppendFunctionPtr(ArrayList, Item) ArrayListSetTypedItem(ArrayList, (ArrayList)->Count, Item, (**)(void))
|
||||||
|
|
||||||
|
#endif /* ARRLIST_h */
|
||||||
@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if !defined AUXDATA_h
|
||||||
|
#define AUXDATA_h
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
# undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined AUXDATAMODULE
|
||||||
|
# define EXTERN
|
||||||
|
#else
|
||||||
|
# define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataIsValidNameChar(char Char,
|
||||||
|
Boolean_t IsLeadChar);
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataIsValidName(const char *Name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN AuxData_pa AuxDataAlloc(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN void AuxDataDealloc(AuxData_pa *AuxData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN AuxData_pa AuxDataCopy(AuxData_pa AuxData,
|
||||||
|
Boolean_t ConsiderRetain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN LgIndex_t AuxDataGetNumItems(AuxData_pa AuxData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataGetItemIndex(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
LgIndex_t *ItemIndex);
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN void AuxDataGetItemByIndex(AuxData_pa AuxData,
|
||||||
|
LgIndex_t Index,
|
||||||
|
const char **Name,
|
||||||
|
ArbParam_t *Value,
|
||||||
|
AuxDataType_e *Type,
|
||||||
|
Boolean_t *Retain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataGetItemByName(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
ArbParam_t *Value,
|
||||||
|
AuxDataType_e *Type,
|
||||||
|
Boolean_t *Retain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataGetBooleanItemByName(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
Boolean_t *Value,
|
||||||
|
AuxDataType_e *Type,
|
||||||
|
Boolean_t *Retain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataSetItem(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
ArbParam_t Value,
|
||||||
|
AuxDataType_e Type,
|
||||||
|
Boolean_t Retain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataDeleteItemByName(AuxData_pa AuxData,
|
||||||
|
const char *Name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AuxDataAppendItems(AuxData_pa TargetAuxData,
|
||||||
|
AuxData_pa SourceAuxData);
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN void AuxDataDeleteItemByIndex(AuxData_pa AuxData,
|
||||||
|
LgIndex_t Index);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#endif /* !defined AUXDATA_h */
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined DATAIOMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN Boolean_t OpenBinaryFileAndCheckMagicNumber(FileStream_s **FileStream,
|
||||||
|
char *FName,
|
||||||
|
FileOffset_t StartOffset,
|
||||||
|
short *IVersion);
|
||||||
|
|
||||||
|
EXTERN Boolean_t ReadDataFileHeader(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
Boolean_t ShowDataIOStatus,
|
||||||
|
EntIndex_t *NumZones,
|
||||||
|
EntIndex_t *NumVars,
|
||||||
|
SmInteger_t *NumCustomLabelSets,
|
||||||
|
char **DataSetTitle,
|
||||||
|
Text_s **BaseText,
|
||||||
|
Geom_s **BaseGeom,
|
||||||
|
StringList_pa **CustomLabelBase,
|
||||||
|
StringList_pa *UserRec,
|
||||||
|
AuxData_pa *DataSetAuxData,
|
||||||
|
Set_pa **IsVarCellCentered,
|
||||||
|
Boolean_t *HasText,
|
||||||
|
Boolean_t *HasGeoms,
|
||||||
|
ArrayList_pa *ZoneSpecList,
|
||||||
|
StringList_pa *VarNames,
|
||||||
|
ArrayList_pa *VarAuxDataList, /*<AuxData_pa>[NumVars]*/
|
||||||
|
Set_pa *IsRawFNAvailable, /* classic data only */
|
||||||
|
LgIndex_t **FNNumBndryConns, /* classic data only */
|
||||||
|
DataFileType_e *FileType);
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
@ -0,0 +1,213 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef DATAIO4_H
|
||||||
|
#define DATAIO4_H
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined DATAIO4MODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN double GetNextValue(FileStream_s *FileStream,
|
||||||
|
FieldDataType_e FieldDataType,
|
||||||
|
double Min,
|
||||||
|
double Max,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN LgIndex_t GetNextI(FileStream_s *FileStream,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN LgIndex_t GetIoFileInt(FileStream_s *FileStream,
|
||||||
|
short Version,
|
||||||
|
LgIndex_t Min,
|
||||||
|
LgIndex_t Max,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN Boolean_t ReadInString(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
int MaxCharacters,
|
||||||
|
char **S,
|
||||||
|
Boolean_t ProcessData);
|
||||||
|
EXTERN void ReadByteBlock(FileStream_s *FileStream,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
Byte_t *Buffer,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadInt16Block(FileStream_s *FileStream,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
Int16_t *Buffer,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadInt16BlockToInt32(FileStream_s *FileStream,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
Int32_t *Buffer,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadInt32Block(FileStream_s *FileStream,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
Int32_t *Buffer,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadPureBlock(FileStream_s *FileStream,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
void *Buffer,
|
||||||
|
FieldDataType_e FieldDataType,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadBlock(FileStream_s *FileStream,
|
||||||
|
FieldData_pa FieldData,
|
||||||
|
Boolean_t DoRead,
|
||||||
|
FieldDataType_e FieldDataTypeInFile,
|
||||||
|
HgIndex_t StartIndex,
|
||||||
|
HgIndex_t EndIndex,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN void ReadClassicOrderedCCBlock(FileStream_s *DataFileStream,
|
||||||
|
FieldData_pa FieldData,
|
||||||
|
FieldDataType_e FieldDataTypeInFile,
|
||||||
|
LgIndex_t NumIPtsInFile,
|
||||||
|
LgIndex_t NumJPtsInFile,
|
||||||
|
LgIndex_t NumKPtsInFile,
|
||||||
|
Boolean_t *IsOk);
|
||||||
|
EXTERN Boolean_t ReadInDataFileTypeTitleAndVarNames(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
char **DataSetTitle,
|
||||||
|
DataFileType_e *FileType,
|
||||||
|
int *NumVars,
|
||||||
|
StringList_pa *VarNames);
|
||||||
|
EXTERN Boolean_t ReadInZoneHeader(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
ZoneSpec_s *ZoneSpec,
|
||||||
|
Set_pa IsVarCellCentered,
|
||||||
|
EntIndex_t NumVars,
|
||||||
|
Boolean_t *IsRawFNAvailable,
|
||||||
|
LgIndex_t *FNNumBndryConns);
|
||||||
|
EXTERN Boolean_t ReadInCustomLabels(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
Boolean_t OkToLoad,
|
||||||
|
StringList_pa *CustomLabelBase);
|
||||||
|
EXTERN Boolean_t ReadInUserRec(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
int MaxCharactersAllowed,
|
||||||
|
char **UserRec);
|
||||||
|
EXTERN Boolean_t ReadInAuxData(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
AuxData_pa AuxData);
|
||||||
|
EXTERN Boolean_t ReadInGeometry(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
Boolean_t OkToLoad,
|
||||||
|
Geom_s *G,
|
||||||
|
LgIndex_t MaxDataPts);
|
||||||
|
EXTERN Boolean_t ReadInText(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
Boolean_t OkToLoad,
|
||||||
|
Text_s *T,
|
||||||
|
LgIndex_t MaxTextLen);
|
||||||
|
/*
|
||||||
|
* STDCALL since PreplotAsciiDatafile is sent to RegisterDataSetReader
|
||||||
|
* which can also be used by addons.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t STDCALL PreplotAsciiDatafile(char *CurFName,
|
||||||
|
char *BinaryFName,
|
||||||
|
char **MessageString);
|
||||||
|
EXTERN short GetInputVersion(FileStream_s *FileStream);
|
||||||
|
|
||||||
|
EXTERN Boolean_t WriteBinaryInt16BlockUnaligned(FileStream_s *FileStream,
|
||||||
|
Byte_t *Int16Values,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t ValuesInNativeOrdering);
|
||||||
|
EXTERN Boolean_t WriteBinaryInt32BlockUnaligned(FileStream_s *FileStream,
|
||||||
|
Byte_t *Int32Values,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t ValuesInNativeOrdering);
|
||||||
|
EXTERN Boolean_t WriteBinaryByteBlock(FileStream_s *FileStream,
|
||||||
|
const Byte_t *ByteValues,
|
||||||
|
const HgIndex_t NumValues);
|
||||||
|
EXTERN Boolean_t WriteBinaryInt16(FileStream_s *FileStream,
|
||||||
|
Int16_t Value);
|
||||||
|
EXTERN Boolean_t WriteBinaryInt32(FileStream_s *FileStream,
|
||||||
|
Int32_t Value);
|
||||||
|
EXTERN Boolean_t WriteBinaryReal(FileStream_s *FileStream,
|
||||||
|
double RR,
|
||||||
|
FieldDataType_e FieldDataType);
|
||||||
|
EXTERN Boolean_t WriteFieldDataType(FileStream_s *FileStream,
|
||||||
|
FieldDataType_e FDT,
|
||||||
|
Boolean_t WriteBinary);
|
||||||
|
EXTERN Boolean_t WriteBinaryFieldDataBlock(FileStream_s *FileStream,
|
||||||
|
FieldData_pa D,
|
||||||
|
LgIndex_t StartI,
|
||||||
|
LgIndex_t NumValues);
|
||||||
|
EXTERN Boolean_t WriteCCFieldDataBlock(FileStream_s *FileStream,
|
||||||
|
FieldData_pa FieldData,
|
||||||
|
Boolean_t IsOrderedData,
|
||||||
|
LgIndex_t NumIPts,
|
||||||
|
LgIndex_t NumJPts,
|
||||||
|
LgIndex_t NumKPts,
|
||||||
|
Boolean_t WriteBinary,
|
||||||
|
SmInteger_t AsciiPrecision);
|
||||||
|
EXTERN Boolean_t DumpDatafileString(FileStream_s *FileStream,
|
||||||
|
const char *S,
|
||||||
|
Boolean_t WriteBinary);
|
||||||
|
bool DumpGeometry(FileStream_s* FileStream,
|
||||||
|
Geom_s const* Geom,
|
||||||
|
Boolean_t WriteBinary,
|
||||||
|
Boolean_t WriteGridDataAsPolar);
|
||||||
|
bool DumpText(FileStream_s* FileStream,
|
||||||
|
Text_s const* Text,
|
||||||
|
Boolean_t WriteBinary,
|
||||||
|
Boolean_t WriteGridDataAsPolar);
|
||||||
|
EXTERN Boolean_t DumpCustomAxisLabels(FileStream_s *FileStream,
|
||||||
|
Boolean_t WriteBinary,
|
||||||
|
StringList_pa LabelBase);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN Boolean_t WriteBinaryMagic(FileStream_s *FileStream);
|
||||||
|
|
||||||
|
bool writeBinaryVersionNumber(FileStream_s& fileStream,
|
||||||
|
int versionNumber);
|
||||||
|
|
||||||
|
#endif //DATAIO4_H
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef DATASET_h__
|
||||||
|
#define DATASET_h__
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DataSet functions involving zones, vars and the
|
||||||
|
* DataSet_s structure. See dataset0.c for low level
|
||||||
|
* dataset functions and dataset2 for higher level
|
||||||
|
* functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
Boolean_t FieldDataItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
Boolean_t ZoneSpecItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
LgIndex_t ZoneOrVarListAdjustCapacityRequest(ArrayList_pa ZoneOrVarArrayList,
|
||||||
|
LgIndex_t CurrentCapacity,
|
||||||
|
LgIndex_t RequestedCapacity,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
void CleanoutZoneSpec(ZoneSpec_s *ZoneSpec);
|
||||||
|
void ZoneSpecExcludeBndryConnsFromMetrics(ZoneSpec_s* ZoneSpec);
|
||||||
|
ZoneSpec_s *ZoneSpecAlloc(void);
|
||||||
|
void ZoneSpecDealloc(ZoneSpec_s **ZoneSpec);
|
||||||
|
void SetZoneSpecDefaults(ZoneSpec_s *ZoneSpec);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GetZoneSpec(ZoneSpecList,Zone) ((ZoneSpec_s *)ArrayListGetVoidPtr(ZoneSpecList,Zone))
|
||||||
|
#define GetZoneAuxData(DataSet, Zone) (GetZoneSpec((DataSet)->ZoneSpecList, (Zone))->AuxData)
|
||||||
|
#define GetVarSpec(VarSpecList,Var) ((VarSpec_s *)ArrayListGetVoidPtr(VarSpecList,Var))
|
||||||
|
#define GetVarAuxData(DataSet, Var) (GetVarSpec((DataSet)->VarSpecList, (Var))->AuxData)
|
||||||
|
#define GetStrandInfo(StrandInfoList, StrandID) ((StrandInfo_s *)ArrayListGetVoidPtr(StrandInfoList,StrandID))
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* defined TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#endif // DATASET_h__
|
||||||
@ -0,0 +1,404 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined DATASET0MODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace io
|
||||||
|
{
|
||||||
|
class File;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EXTERN void OutOfMemoryMsg(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn on DEBUG_FIELDVALUES by default in any build with assertions on
|
||||||
|
* (including checked builds), but allow turning this off with
|
||||||
|
* NO_DEBUG_FIELDVALUES
|
||||||
|
*/
|
||||||
|
#if !defined NO_ASSERTS && !defined NO_DEBUG_FIELDVALUES && !defined DEBUG_FIELDVALUES
|
||||||
|
#define DEBUG_FIELDVALUES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FieldData_a is intentionally not defined to further
|
||||||
|
* deter usage of this private structure */
|
||||||
|
struct _FieldData_a
|
||||||
|
{
|
||||||
|
void *Data; /* ...placed first in the structure for fastest access */
|
||||||
|
# if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# else
|
||||||
|
void *GetValueCallback[1]; /* ...this field is for TecIO only */
|
||||||
|
void *SetValueCallback[1]; /* ...this field is for TecIO only */
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* PRIVATE */
|
||||||
|
FieldDataType_e Type;
|
||||||
|
ValueLocation_e ValueLocation;
|
||||||
|
LgIndex_t RefCount;
|
||||||
|
LgIndex_t VarShareRefCount;
|
||||||
|
LgIndex_t NumValues;
|
||||||
|
# if defined TECPLOTKERNEL /* TecIO doesn't require these features yet. */
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* *
|
||||||
|
* * NOTE: "FieldData_pa" here is an "abstract type".
|
||||||
|
* * Any routines dealing with the internals workings
|
||||||
|
* * of FieldData_pa must be in the same file as these
|
||||||
|
* * routines
|
||||||
|
* */
|
||||||
|
|
||||||
|
#if defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#define USE_MACROS_FOR_FIELD_DATA_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are low-level (private) FD manipulation functions. In
|
||||||
|
* most cases, you should use some higher-level function. These
|
||||||
|
* macros are supplied for the dataset functions to use.
|
||||||
|
*/
|
||||||
|
#if defined USE_MACROS_FOR_FIELD_DATA_FUNCTIONS
|
||||||
|
#define GetFieldDataType GetFieldDataType_MACRO
|
||||||
|
#define GetFieldDataGetFunction GetFieldDataGetFunction_MACRO
|
||||||
|
#define GetFieldDataSetFunction GetFieldDataSetFunction_MACRO
|
||||||
|
#define GetFieldDataNumValues GetFieldDataNumValues_MACRO
|
||||||
|
#define GetFieldDataValueLocation GetFieldDataValueLocation_MACRO
|
||||||
|
#define IsFieldDataDirectAccessAllowed IsFieldDataDirectAccessAllowed_MACRO
|
||||||
|
#else
|
||||||
|
#define GetFieldDataType GetFieldDataType_FUNC
|
||||||
|
#define GetFieldDataGetFunction GetFieldDataGetFunction_FUNC
|
||||||
|
#define GetFieldDataSetFunction GetFieldDataSetFunction_FUNC
|
||||||
|
#define GetFieldDataNumValues GetFieldDataNumValues_FUNC
|
||||||
|
#define GetFieldDataValueLocation GetFieldDataValueLocation_FUNC
|
||||||
|
#define IsFieldDataDirectAccessAllowed IsFieldDataDirectAccessAllowed_FUNC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GetFieldDataType_MACRO(FieldData) ((FieldData)->Type)
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else /* ...for TecIO only */
|
||||||
|
#define GetFieldDataGetFunction_MACRO(FieldData) ((FieldValueGetFunction_pf)(FieldData)->GetValueCallback[0])
|
||||||
|
#define GetFieldDataSetFunction_MACRO(FieldData) ((FieldValueSetFunction_pf)(FieldData)->SetValueCallback[0])
|
||||||
|
#endif
|
||||||
|
#define GetFieldDataNumValues_MACRO(FieldData) ((FieldData)->NumValues)
|
||||||
|
#define GetFieldDataValueLocation_MACRO(FieldData) ((FieldData)->ValueLocation)
|
||||||
|
|
||||||
|
EXTERN double STDCALL GetFieldValueForFloat(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
EXTERN double STDCALL GetFieldValueForDouble(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
EXTERN double STDCALL GetFieldValueForInt32(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
EXTERN double STDCALL GetFieldValueForInt16(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
EXTERN double STDCALL GetFieldValueForByte(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
EXTERN double STDCALL GetFieldValueForBit(const FieldData_pa fd, LgIndex_t pt);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
#define IsFieldDataDirectAccessAllowed_MACRO(FieldData) ((FieldData)->Data != NULL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined USE_MACROS_FOR_FIELD_DATA_FUNCTIONS
|
||||||
|
EXTERN FieldDataType_e GetFieldDataType_FUNC(FieldData_pa FieldData);
|
||||||
|
EXTERN FieldValueGetFunction_pf GetFieldDataGetFunction_FUNC(FieldData_pa FieldData);
|
||||||
|
EXTERN FieldValueSetFunction_pf GetFieldDataSetFunction_FUNC(FieldData_pa FieldData);
|
||||||
|
EXTERN LgIndex_t GetFieldDataNumValues_FUNC(FieldData_pa FieldData);
|
||||||
|
EXTERN ValueLocation_e GetFieldDataValueLocation_FUNC(FieldData_pa FieldData);
|
||||||
|
EXTERN Boolean_t IsFieldDataDirectAccessAllowed_FUNC(FieldData_pa FieldData);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use separate types for reversed byte data than unreversed data so we
|
||||||
|
* have better compiler checking.
|
||||||
|
*/
|
||||||
|
typedef UInt32_t FloatRev_t;
|
||||||
|
typedef UInt64_t DoubleRev_t;
|
||||||
|
typedef UInt16_t Int16Rev_t;
|
||||||
|
typedef UInt32_t Int32Rev_t;
|
||||||
|
typedef UInt64_t Int64Rev_t;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note: there are so many GetFieldData*Ptr functions because we
|
||||||
|
* want a bunch of error checking. The Type and TypeRev check
|
||||||
|
* for that type. The Byte, 2Byte, etc. just make sure it is
|
||||||
|
* that type.
|
||||||
|
* GetFieldDataVoidPtr checks nothing, and thus should only be
|
||||||
|
* used with extreme caution (that is, checking the alignment
|
||||||
|
* and byte order by hand).
|
||||||
|
*/
|
||||||
|
#if defined USE_MACROS_FOR_FIELD_DATA_FUNCTIONS
|
||||||
|
#define GetFieldDataFloatPtr GetFieldDataFloatPtr_MACRO
|
||||||
|
#define GetFieldDataFloatRevPtr GetFieldDataFloatRevPtr_MACRO
|
||||||
|
#define GetFieldDataDoublePtr GetFieldDataDoublePtr_MACRO
|
||||||
|
#define GetFieldDataDoubleRevPtr GetFieldDataDoubleRevPtr_MACRO
|
||||||
|
#define GetFieldDataInt64Ptr GetFieldDataInt64Ptr_MACRO
|
||||||
|
#define GetFieldDataInt64RevPtr GetFieldDataInt64RevPtr_MACRO
|
||||||
|
#define GetFieldDataInt32Ptr GetFieldDataInt32Ptr_MACRO
|
||||||
|
#define GetFieldDataInt32RevPtr GetFieldDataInt32RevPtr_MACRO
|
||||||
|
#define GetFieldDataInt16Ptr GetFieldDataInt16Ptr_MACRO
|
||||||
|
#define GetFieldDataInt16RevPtr GetFieldDataInt16RevPtr_MACRO
|
||||||
|
#define GetFieldDataBytePtr GetFieldDataBytePtr_MACRO
|
||||||
|
#define GetFieldData2BytePtr GetFieldData2BytePtr_MACRO
|
||||||
|
#define GetFieldData4BytePtr GetFieldData4BytePtr_MACRO
|
||||||
|
#define GetFieldData8BytePtr GetFieldData8BytePtr_MACRO
|
||||||
|
#define GetFieldDataVoidPtr GetFieldDataVoidPtr_MACRO /*danger:see above*/
|
||||||
|
#else
|
||||||
|
#define GetFieldDataFloatPtr GetFieldDataFloatPtr_FUNC
|
||||||
|
#define GetFieldDataFloatRevPtr GetFieldDataFloatRevPtr_FUNC
|
||||||
|
#define GetFieldDataDoublePtr GetFieldDataDoublePtr_FUNC
|
||||||
|
#define GetFieldDataDoubleRevPtr GetFieldDataDoubleRevPtr_FUNC
|
||||||
|
#define GetFieldDataInt64Ptr GetFieldDataInt64Ptr_FUNC
|
||||||
|
#define GetFieldDataInt64RevPtr GetFieldDataInt64RevPtr_FUNC
|
||||||
|
#define GetFieldDataInt32Ptr GetFieldDataInt32Ptr_FUNC
|
||||||
|
#define GetFieldDataInt32RevPtr GetFieldDataInt32RevPtr_FUNC
|
||||||
|
#define GetFieldDataInt16Ptr GetFieldDataInt16Ptr_FUNC
|
||||||
|
#define GetFieldDataInt16RevPtr GetFieldDataInt16RevPtr_FUNC
|
||||||
|
#define GetFieldDataBytePtr GetFieldDataBytePtr_FUNC
|
||||||
|
#define GetFieldData2BytePtr GetFieldData2BytePtr_FUNC
|
||||||
|
#define GetFieldData4BytePtr GetFieldData4BytePtr_FUNC
|
||||||
|
#define GetFieldData8BytePtr GetFieldData8BytePtr_FUNC
|
||||||
|
#define GetFieldDataVoidPtr GetFieldDataVoidPtr_FUNC /*danger:see above*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GetFieldDataFloatPtr_MACRO(FieldData) ((float *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataFloatRevPtr_MACRO(FieldData) ((FloatRev_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataDoublePtr_MACRO(FieldData) ((double *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataDoubleRevPtr_MACRO(FieldData) ((DoubleRev_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt64Ptr_MACRO(FieldData) ((Int64_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt64RevPtr_MACRO(FieldData) ((Int64Rev_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt32Ptr_MACRO(FieldData) ((Int32_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt32RevPtr_MACRO(FieldData) ((Int32Rev_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt16Ptr_MACRO(FieldData) ((Int16_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataInt16RevPtr_MACRO(FieldData) ((Int16Rev_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataBytePtr_MACRO(FieldData) ((Byte_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldData2BytePtr_MACRO(FieldData) ((UInt16_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldData4BytePtr_MACRO(FieldData) ((UInt32_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldData8BytePtr_MACRO(FieldData) ((UInt64_t *)((FieldData)->Data))
|
||||||
|
#define GetFieldDataVoidPtr_MACRO(FieldData) ((void *)((FieldData)->Data)) /*danger:see above*/
|
||||||
|
|
||||||
|
#if !defined USE_MACROS_FOR_FIELD_DATA_FUNCTIONS
|
||||||
|
EXTERN float *GetFieldDataFloatPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN FloatRev_t *GetFieldDataFloatRevPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN double *GetFieldDataDoublePtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN DoubleRev_t *GetFieldDataDoubleRevPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int64_t *GetFieldDataInt64Ptr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int64Rev_t *GetFieldDataInt64RevPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int32_t *GetFieldDataInt32Ptr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int32Rev_t *GetFieldDataInt32RevPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int16_t *GetFieldDataInt16Ptr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Int16Rev_t *GetFieldDataInt16RevPtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN Byte_t *GetFieldDataBytePtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN UInt16_t *GetFieldData2BytePtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN UInt32_t *GetFieldData4BytePtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN UInt64_t *GetFieldData8BytePtr_FUNC(FieldData_pa fd);
|
||||||
|
EXTERN void *GetFieldDataVoidPtr_FUNC(FieldData_pa fd); /*danger:see above*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN FieldData_pa AllocScratchNodalFieldDataPtr(LgIndex_t NumValues,
|
||||||
|
FieldDataType_e Type,
|
||||||
|
Boolean_t ShowErrMsg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN void DeallocScratchNodalFieldDataPtr(FieldData_pa *ScratchFieldData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assume that indexrange has already been converted to the actual indices.
|
||||||
|
*/
|
||||||
|
EXTERN void CalcFieldDataMinMaxUsingRange(FieldData_pa field_data,
|
||||||
|
double *min_ptr,
|
||||||
|
double *max_ptr,
|
||||||
|
LgIndex_t startindex,
|
||||||
|
IndexRange_s *indexrange);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN void CopyTypedValueArray(FieldDataType_e ValueType,
|
||||||
|
void *DstArray,
|
||||||
|
LgIndex_t DstStart,
|
||||||
|
void *SrcArray,
|
||||||
|
LgIndex_t SrcStart,
|
||||||
|
LgIndex_t SrcEnd);
|
||||||
|
|
||||||
|
EXTERN void SwapBytesInTypedValueArray(FieldDataType_e ValueType,
|
||||||
|
void *SrcArray,
|
||||||
|
LgIndex_t SrcStart,
|
||||||
|
LgIndex_t SrcEnd,
|
||||||
|
LgIndex_t SrcSkip);
|
||||||
|
|
||||||
|
EXTERN void SwapBytesInUnalignedTypedValueArray(FieldDataType_e ValueType,
|
||||||
|
void *SrcArray,
|
||||||
|
LgIndex_t SrcStart,
|
||||||
|
LgIndex_t SrcEnd,
|
||||||
|
LgIndex_t SrcSkip);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copies values from "src" to "dst". "src" or "dst" may
|
||||||
|
* be differing types. Either or both may be V3D data pointers.
|
||||||
|
*/
|
||||||
|
EXTERN void CopyFieldDataRange(FieldData_pa dst,
|
||||||
|
LgIndex_t dst_start,
|
||||||
|
FieldData_pa src,
|
||||||
|
LgIndex_t src_start,
|
||||||
|
LgIndex_t src_end); /* -1 means last point */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy all values in field data
|
||||||
|
*/
|
||||||
|
EXTERN void CopyFieldData(FieldData_pa dst,
|
||||||
|
FieldData_pa src);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Like CopyFieldData except for single value.
|
||||||
|
*/
|
||||||
|
EXTERN void CopyFieldValue(FieldData_pa dst,
|
||||||
|
LgIndex_t dstindex,
|
||||||
|
FieldData_pa src,
|
||||||
|
LgIndex_t srcindex);
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets all values in the field data pointer "field_data"
|
||||||
|
* to zero.
|
||||||
|
*/
|
||||||
|
EXTERN void SetFieldDataPtrToAllZeros(FieldData_pa field_data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GetFieldValue macro
|
||||||
|
*/
|
||||||
|
#if !defined GET_FIELD_VALUE_BY_VIRTUAL_FUNCTION && \
|
||||||
|
!defined GET_FIELD_VALUE_BY_FLOAT_ONLY_MACRO && \
|
||||||
|
!defined GET_FIELD_VALUE_BY_DOUBLE_ONLY_MACRO && \
|
||||||
|
!defined GET_FIELD_VALUE_BY_FLOAT_AND_DOUBLE_MACRO
|
||||||
|
#if !defined NO_ASSERTS || defined DEBUG_FIELDVALUES
|
||||||
|
#define GET_FIELD_VALUE_BY_VIRTUAL_FUNCTION
|
||||||
|
#else
|
||||||
|
#define GET_FIELD_VALUE_BY_FLOAT_AND_DOUBLE_MACRO
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GET_FIELD_VALUE_BY_VIRTUAL_FUNCTION
|
||||||
|
#define GetFieldValue(fd,pt) ((GetFieldDataGetFunction(fd))((fd),(pt)))
|
||||||
|
#elif defined GET_FIELD_VALUE_BY_FLOAT_ONLY_MACRO
|
||||||
|
#define GetFieldValue(fd,pt) (GetFieldDataGetFunction(fd)==GetFieldValueForFloat \
|
||||||
|
?GetFieldDataFloatPtr(fd)[(pt)] \
|
||||||
|
:(GetFieldDataGetFunction(fd))((fd),(pt)))
|
||||||
|
#elif defined GET_FIELD_VALUE_BY_DOUBLE_ONLY_MACRO
|
||||||
|
#define GetFieldValue(fd,pt) (GetFieldDataGetFunction(fd)==GetFieldValueForDouble \
|
||||||
|
?GetFieldDataDoublePtr(fd)[(pt)] \
|
||||||
|
:(GetFieldDataGetFunction(fd))((fd),(pt)))
|
||||||
|
#elif defined GET_FIELD_VALUE_BY_FLOAT_AND_DOUBLE_MACRO
|
||||||
|
#define GetFieldValue(fd,pt) (GetFieldDataGetFunction(fd)==GetFieldValueForFloat \
|
||||||
|
?GetFieldDataFloatPtr(fd)[(pt)] \
|
||||||
|
:GetFieldDataGetFunction(fd)==GetFieldValueForDouble \
|
||||||
|
?GetFieldDataDoublePtr(fd)[(pt)] \
|
||||||
|
:(GetFieldDataGetFunction(fd))((fd),(pt)))
|
||||||
|
#else
|
||||||
|
#error "Need to define one of FIELD_VALUE_MACRO constants"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SetFieldValue macro
|
||||||
|
*/
|
||||||
|
#define SetFieldValue(fd,pt,val) ((GetFieldDataSetFunction(fd))((fd),(pt),(val)))
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#if defined _DEBUG
|
||||||
|
#define USEFUNCTIONSFORNODEVALUES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined DATASHRMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* General set of macros for reference count mananagement.
|
||||||
|
*/
|
||||||
|
#define IncStructureReference(V) ((V)->RefCount++)
|
||||||
|
#define DecStructureReference(V) ((V)->RefCount--)
|
||||||
|
#define IsStructureShared(V) ((V)->RefCount > 1)
|
||||||
|
#define IsStructureReferenced(V) ((V)->RefCount > 0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Special set of macros for field data that is having variable sharing between
|
||||||
|
* zones tracked. Field data maintains two reference counts: The first,
|
||||||
|
* RefCount, is used to keep track of when the field data needs to be
|
||||||
|
* deallocated; the second, VarShareRefCount, is used to track variable sharing
|
||||||
|
* between zones.
|
||||||
|
*/
|
||||||
|
#define IncVarStructureReference(V) ((V)->VarShareRefCount++)
|
||||||
|
#define DecVarStructureReference(V) ((V)->VarShareRefCount--)
|
||||||
|
#define IsVarStructureShared(V) ((V)->VarShareRefCount > 1)
|
||||||
|
#define IsVarStructureReferenced(V) ((V)->VarShareRefCount > 0)
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* DATAUTIL.h : COPYRIGHT (C)1987-2002 Tecplot, Inc.
|
||||||
|
* ALL RIGHTS RESERVED
|
||||||
|
*
|
||||||
|
* NOTE: THIS MODULE NOW IS PART OF THE TECPLOT SOURCE
|
||||||
|
* ONLY EDIT THIS IN THE MAIN TECPLOT SOURCE DIRECTORY.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef DATAUTIL_H
|
||||||
|
#define DATAUTIL_H
|
||||||
|
#define DATAUTIL_VERSION 61
|
||||||
|
|
||||||
|
#if defined MAKEARCHIVE
|
||||||
|
extern void InitInputSpecs(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Read a binary tecplot datafile.
|
||||||
|
*
|
||||||
|
* @param GetHeaderInfoOnly
|
||||||
|
* Return only the header info from the datafile.
|
||||||
|
*
|
||||||
|
* @param FName
|
||||||
|
* Name of the file to read.
|
||||||
|
*
|
||||||
|
* @param IVersion
|
||||||
|
* Returns version of the input file.
|
||||||
|
*
|
||||||
|
* @param DataSetTitle
|
||||||
|
* Allocates space for and returns dataset title.
|
||||||
|
*
|
||||||
|
* @param NumZones
|
||||||
|
* Returns the number of zones.
|
||||||
|
*
|
||||||
|
* @param NumVars
|
||||||
|
* Returns the number of variables.
|
||||||
|
*
|
||||||
|
* @param VarNames
|
||||||
|
* Allocates space for and returns the var names.
|
||||||
|
*
|
||||||
|
* @param ZoneNames
|
||||||
|
* Allocates space for and returns the zone names.
|
||||||
|
*
|
||||||
|
* @param NumPtsI, NumPtsJ, NumPtsK
|
||||||
|
* Zone dimensions loaded into LgIndex_t arrays.
|
||||||
|
*
|
||||||
|
* @param ZoneNames
|
||||||
|
* Zone types loaded into ZoneType_e array.
|
||||||
|
*
|
||||||
|
* @param UserRec
|
||||||
|
* Allocates space for and returns the user records.
|
||||||
|
*
|
||||||
|
* @param RawDataspaceAllocated
|
||||||
|
* Only used if GetHeaderInfoOnly is FALSE. TRUE = calling program has alloced space for
|
||||||
|
* the raw data. FALSE= let ReadTec allocate space for the raw data.
|
||||||
|
*
|
||||||
|
* @param NodeMap
|
||||||
|
* Finite Element connectivity information. ReadTec
|
||||||
|
* will allocate the space for you if RawDataspaceAllocated is FALSE.
|
||||||
|
*
|
||||||
|
* @param VDataBase
|
||||||
|
* Raw field data loaded into double arrays. ReadTec
|
||||||
|
* will allocate the space for you if RawDataspaceAllocated is
|
||||||
|
* FALSE. If RawDataspaceAllocated is TRUE then ReadTec will
|
||||||
|
* only load the arrays that have non NULL addresses.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
LIBFUNCTION Boolean_t STDCALL ReadTec(Boolean_t GetHeaderInfoOnly,
|
||||||
|
char *FName,
|
||||||
|
short *IVersion,
|
||||||
|
char **DataSetTitle,
|
||||||
|
EntIndex_t *NumZones,
|
||||||
|
EntIndex_t *NumVars,
|
||||||
|
StringList_pa *VarNames,
|
||||||
|
StringList_pa *ZoneNames,
|
||||||
|
LgIndex_t **NumPtsI,
|
||||||
|
LgIndex_t **NumPtsJ,
|
||||||
|
LgIndex_t **NumPtsK,
|
||||||
|
ZoneType_e **ZoneType,
|
||||||
|
StringList_pa *UserRec,
|
||||||
|
Boolean_t RawDataspaceAllocated,
|
||||||
|
NodeMap_t ***NodeMap,
|
||||||
|
double ***VDataBase);
|
||||||
|
|
||||||
|
LIBFUNCTION void * STDCALL TecAlloc(size_t size);
|
||||||
|
|
||||||
|
LIBFUNCTION void STDCALL TecFree(void *ptr);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !DATAUTIL_H */
|
||||||
@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
#ifndef _FACE_H_
|
||||||
|
#define _FACE_H_
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined FACEMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace kernel
|
||||||
|
{
|
||||||
|
class SubElemValueProducerInterface;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
inline Boolean_t IsCellFaceLogicallyCollapsed(LgIndex_t I1,
|
||||||
|
LgIndex_t I2,
|
||||||
|
LgIndex_t I3,
|
||||||
|
LgIndex_t I4)
|
||||||
|
{
|
||||||
|
return ((I1 == I2 && I3 == I4) ||
|
||||||
|
(I1 == I4 && I2 == I3) ||
|
||||||
|
(I1 == I3) ||
|
||||||
|
(I2 == I4));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IMPORTANT NOTE:
|
||||||
|
* A face obscuration of FaceObscuration_LogicallyObscured means that the
|
||||||
|
* face is entirely obscured by either an implicit neighbor for inside faces
|
||||||
|
* of ordered data or an auto generated neighbor for finite element data. In
|
||||||
|
* either case, logical obscuration is not considered if user defined
|
||||||
|
* neighbors have been specified for the face. Therefore, interior faces of
|
||||||
|
* ordered data can have an indication of FaceObscuration_PartiallyObscured.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
FaceObscuration_NotObscured,
|
||||||
|
FaceObscuration_PartiallyObscured,
|
||||||
|
FaceObscuration_EntirelyObscured,
|
||||||
|
FaceObscuration_LogicallyObscured,
|
||||||
|
END_FaceObscuration_e,
|
||||||
|
FaceObscuration_Invalid = BadEnumValue
|
||||||
|
} FaceObscuration_e;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN LgIndex_t GetLogicalOrderedNeighbor(LgIndex_t NumIPts,
|
||||||
|
LgIndex_t NumJPts,
|
||||||
|
LgIndex_t NumKPts,
|
||||||
|
LgIndex_t Element,
|
||||||
|
LgIndex_t Face);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to determine a cell's neighbor. It calls FaceNeighborGetSurfaceCellNeighbor()
|
||||||
|
* for classic zones.
|
||||||
|
*/
|
||||||
|
EXTERN void GetSurfaceCellNeighbor(CZInfo_s const* CZInfo,
|
||||||
|
CZData_s const* CZData,
|
||||||
|
LgIndex_t SurfaceCellIndex,
|
||||||
|
tecplot::kernel::SubElemValueProducerInterface* NodeValueProducer,
|
||||||
|
ElemFaceOffset_t PlaneOrFaceOffset,
|
||||||
|
ElemFaceOffset_t Edge,
|
||||||
|
LgIndex_t* NeighborSurfaceCellElem,
|
||||||
|
EntIndex_t* NeighborSurfaceCellZone);
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN FaceObscuration_e GetFaceObscuration(CZInfo_s const* CZInfo,
|
||||||
|
CZData_s const* CZData,
|
||||||
|
Set_pa ActiveRelevantZones,
|
||||||
|
LgIndex_t Element,
|
||||||
|
LgIndex_t FOffset,
|
||||||
|
Boolean_t ConsiderValueBlanking,
|
||||||
|
Boolean_t ConsiderIJKBlanking,
|
||||||
|
Boolean_t ConsiderDepthBlanking);
|
||||||
|
|
||||||
|
EXTERN EntIndex_t GetNodesPerElementFace(ZoneType_e ZoneType);
|
||||||
|
|
||||||
|
EXTERN EntIndex_t GetFacesPerElement(ZoneType_e ZoneType,
|
||||||
|
LgIndex_t IMax,
|
||||||
|
LgIndex_t JMax,
|
||||||
|
LgIndex_t KMax);
|
||||||
|
|
||||||
|
EXTERN CollapsedStatus_e GetSurfaceCellCollapsedStatus(CZInfo_s const* CZInfo,
|
||||||
|
CZData_s const* CZData,
|
||||||
|
tecplot::kernel::SubElemValueProducerInterface* SubElemValueProducer);
|
||||||
|
EXTERN CollapsedStatus_e GetSurfaceCellCollapsedStatus(CZInfo_s const* CZInfo,
|
||||||
|
CZData_s const* CZData,
|
||||||
|
LgIndex_t I1,
|
||||||
|
LgIndex_t I2,
|
||||||
|
LgIndex_t I3,
|
||||||
|
LgIndex_t I4);
|
||||||
|
EXTERN CollapsedStatus_e GetSurfaceCellLogicalCollapsedStatus(ZoneType_e ZoneType,
|
||||||
|
LgIndex_t I1,
|
||||||
|
LgIndex_t I2,
|
||||||
|
LgIndex_t I3,
|
||||||
|
LgIndex_t I4);
|
||||||
|
EXTERN CollapsedStatus_e GetSurfEdgeOrVolFaceLogicalCollapsedStatus(NodeMap_pa NodeMap,
|
||||||
|
LgIndex_t Element,
|
||||||
|
EntIndex_t Face);
|
||||||
|
#if defined ALLOW_USERDEF_NO_NEIGHBORING_ELEMENT
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t IsUserDefFaceNeighborBoundary(FaceNeighbor_pa FaceNeighbor,
|
||||||
|
LgIndex_t Element,
|
||||||
|
LgIndex_t Face);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if !defined FILESTREAM_h
|
||||||
|
#define FILESTREAM_h
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
# undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined FILESTREAMMODULE
|
||||||
|
# define EXTERN
|
||||||
|
#else
|
||||||
|
# define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
FILE *File;
|
||||||
|
Boolean_t IsByteOrderNative;
|
||||||
|
} FileStream_s;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a structure for associating an open file stream with its byte
|
||||||
|
* order. The byte order can changed at any time.
|
||||||
|
*
|
||||||
|
* @param File
|
||||||
|
* Handle to a file which can be NULL.
|
||||||
|
* @param IsByteOrderNative
|
||||||
|
* TRUE if the file's byte order is native, FALSE if foreign.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* An allocated structure associating an open file to its byte order.
|
||||||
|
*/
|
||||||
|
EXTERN FileStream_s *FileStreamAlloc(FILE *File,
|
||||||
|
Boolean_t IsByteOrderNative);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deallocates the structure associating the file stream with the byte order.
|
||||||
|
* This function does NOT close the file.
|
||||||
|
*
|
||||||
|
* @param FileStream
|
||||||
|
* Pointer to an open file stream or a pointer to NULL.
|
||||||
|
*/
|
||||||
|
EXTERN void FileStreamDealloc(FileStream_s **FileStream);
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined GEOMMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* * macros for checking CoordSys_e * */
|
||||||
|
#define VALID_RECTANGLE_COORDSYS(sys) \
|
||||||
|
(((sys)==CoordSys_Frame) || \
|
||||||
|
((sys)==CoordSys_Grid))
|
||||||
|
#define VALID_SQUARE_COORDSYS(sys) VALID_RECTANGLE_COORDSYS((sys))
|
||||||
|
#define VALID_ELLIPSE_COORDSYS(sys) VALID_RECTANGLE_COORDSYS((sys))
|
||||||
|
#define VALID_CIRCLE_COORDSYS(sys) VALID_ELLIPSE_COORDSYS((sys))
|
||||||
|
#define VALID_IMAGE_COORDSYS(sys) VALID_RECTANGLE_COORDSYS((sys))
|
||||||
|
#define VALID_LINESEG_COORDSYS(sys) \
|
||||||
|
(((sys)==CoordSys_Frame) || \
|
||||||
|
((sys)==CoordSys_Grid) || \
|
||||||
|
((sys)==CoordSys_Grid3D))
|
||||||
|
#define VALID_GEOM_COORDSYS(sys) \
|
||||||
|
(((sys)==CoordSys_Frame) || \
|
||||||
|
((sys)==CoordSys_Grid) || \
|
||||||
|
((sys)==CoordSys_Grid3D))
|
||||||
|
|
||||||
|
#define VALID_GEOM_TYPE(geomtype) \
|
||||||
|
( VALID_ENUM((geomtype),GeomType_e) && \
|
||||||
|
(geomtype)!=GeomType_LineSegs3D )
|
||||||
|
|
||||||
|
#define VALID_GEOM_FIELD_DATA_TYPE(datatype) \
|
||||||
|
( ( (datatype) == FieldDataType_Float ) || \
|
||||||
|
( (datatype) == FieldDataType_Double ) )
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined GEOM2MODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
EXTERN FieldDataType_e GetGeomFieldDataType(Geom_s const* Geom);
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined INITMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Input Specification limits */
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
EXTERN InputSpec_s /*X*/ GridCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ GridCoordFloatInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ XFrameCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YFrameCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ XFrameCoordFloatInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YFrameCoordFloatInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ XFrameCoordDeltaInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YFrameCoordDeltaInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ XFrameCoordFloatDeltaInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YFrameCoordFloatDeltaInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ FrameOffsetCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ XPaperCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YPaperCoordInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisPercentageInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AngleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AngleToApproxInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ FieldOfViewInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZeroAndAboveLgIndexInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZeroAndAboveSmIntegerInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZeroAndAboveDoubleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroLgIndexInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroDoubleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ DoubleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ EntIndexInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ EntRangeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ IndexRangeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroIndexRangeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZeroToOneInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PercentageInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroPercentageInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SignedPercentageInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ RadiansInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroRadiansInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TimeDateDoubleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroTimeDateDoubleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AboveZeroElapsedTimeInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
/* Specific */
|
||||||
|
#define MIN_VIEWPORT_SIZE 0.05
|
||||||
|
EXTERN InputSpec_s /*X*/ SurfaceTranslucencyInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxDepthBufferSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxMultiSamplesInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MinBitsPerRGBPlaneInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AnimationSpeedInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AnimationNumStepsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxCustomColorsInInterfaceInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxReducedPointsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxStripLengthInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxPrimativesPerBlockInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxTextureSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SuperSampleFactorInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TickLengthInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ BorrowLicenseInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* I/O Related */
|
||||||
|
EXTERN InputSpec_s /*X*/ HardcopyPaperSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ HardcopyNumCopiesInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ HardcopyPrecisionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ HardcopyPenSpeedInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PenPlotterPenNumberInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ BitDumpDepthInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
/* Widths, physical lengths, etc. */
|
||||||
|
EXTERN InputSpec_s /*X*/ XFrameDimensionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ YFrameDimensionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ LineThicknessInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PatternLengthInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisPercentageTextSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ FrameTextSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ GridTextSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PointTextSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TextBoxMarginInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TextLineSpacingInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ArrowheadSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisLabelOffsetInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ LegendLineSpacingInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ StreamStepSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ StreamMaxStepsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ArrowheadSpacingInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ RulerPaddingInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ RulerThicknessInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PickHandleWidthInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ImageDimensionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZoomScalePerFrameUnitInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ RGBLegendHeightInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Limit the number of objects or limit which object can be selected*/
|
||||||
|
EXTERN InputSpec_s /*X*/ ColorMapGroupInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SliceGroupInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ IsoSurfaceGroupInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ContourGroupInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ColorIndexInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumLightSourceShadesInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfControlPointsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ CustomLabelNumberInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumMinorTicksInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisEdgeNumberInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ LineMapWhichXAxisInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ LineMapWhichYAxisInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfCurvePointsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfContourLevelsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ColorMapOverrideLevelInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ColorMapOverrideNumberInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfColorMapCyclesInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfRodPointsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfStreamtracesInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ NumberOfEllipsePointsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxPtsInALineInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxChrsTextLabelsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxContourLevelsInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MaxLinkGroupsInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
/* Ratios */
|
||||||
|
EXTERN InputSpec_s /*X*/ DataAspectRatioLimitInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ DataAspectRatioResetInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisBoxAspectRatioLimitInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisBoxAspectRatioResetInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisRatioInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisBoxPaddingInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ScreenDistanceRatioInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ LiftFractionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ZClipInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ VectorHeadSizeFractionInputSpec;
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc */
|
||||||
|
EXTERN InputSpec_s /*X*/ ValuePrecisionInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PolynomialOrderInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SplineSlopeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ RotationStepSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SmoothRotationDegPerFrameUnitInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TranslationStepSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ScaleStepSizeInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SortLevelInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ AxisLabelSkipInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TextAngleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ArrowheadAngleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ MinCreaseAngleInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ExponentInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ SmoothWeightInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ TriangleKeepFactorInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ PlotAttrColumnWidthInputSpec;
|
||||||
|
EXTERN InputSpec_s /*X*/ ImageQualityInputSpec;
|
||||||
|
|
||||||
@ -0,0 +1,684 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************/
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* NOTE: All code contained between comments that look like
|
||||||
|
* BEGINREMOVEFROMADDON
|
||||||
|
* ENDREMOVEFROMADDON
|
||||||
|
* are pulled out to create the MASTER.h file used in addons.
|
||||||
|
*/
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#ifndef _MASTER_H_
|
||||||
|
#define _MASTER_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Annotations that specify the life cycle of objects returned from functions
|
||||||
|
* and input and output parameters sent as function parameters. The following
|
||||||
|
* table specifies the meaning in their context. The annotations provide code
|
||||||
|
* generation tools with information for building language bindings to various
|
||||||
|
* Tecplot 360 and Tecplot SDK related libraries.
|
||||||
|
*
|
||||||
|
* For purposes of this table the client is one making the call and the service
|
||||||
|
* is the recipient.
|
||||||
|
*
|
||||||
|
* +==================+=========================+=================================================================+
|
||||||
|
* | Function Context | Annotation | Meaning |
|
||||||
|
* | Result or | | |
|
||||||
|
* | Parameter | | |
|
||||||
|
* |==================+=========================+=================================================================|
|
||||||
|
* | Result | TP_OUT | Default for a function return value that does not transfer |
|
||||||
|
* | | | ownership. Because this is the most common scenario this |
|
||||||
|
* | | | annotation is implied and never explicitly used in this |
|
||||||
|
* | | | context. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Result | TP_GIVES | Annotates a function scalar return value as one who's ownership |
|
||||||
|
* | | | is transfered to the client. The client is responsible for |
|
||||||
|
* | | | properly disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Result | TP_ARRAY_GIVES | Annotates a function array return value as one who's ownership |
|
||||||
|
* | | | is transfered to the client. The client is responsible for |
|
||||||
|
* | | | properly disposing the value. |
|
||||||
|
* |==================+=========================+=================================================================|
|
||||||
|
* | Parameter | TP_IN | Default for a function input parameter value sent to the |
|
||||||
|
* | | | service. Because this is the most common scenario this |
|
||||||
|
* | | | annotation is implied and never explicitly used. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Parameter | TP_ACQUIRES | Annotates a function parameter as one that sends a value to |
|
||||||
|
* | | | the service through the parameter and acquires shared |
|
||||||
|
* | | | ownership of the input value with the client. The service is |
|
||||||
|
* | | | not responsible for disposing the value however it is |
|
||||||
|
* | | | expected that a symmetric API exists that "releases" the |
|
||||||
|
* | | | library of this shared ownership. For example: |
|
||||||
|
* | | | void addListener(TP_ACQUIRES Listener& listener); |
|
||||||
|
* | | | void removeListener(TP_RELEASES Listener& listener); |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Parameter | TP_RELEASES | Annotates a function parameter as one that sends a value to |
|
||||||
|
* | | | the service through the parameter and releases previously |
|
||||||
|
* | | | shared ownership of the |
|
||||||
|
* | | | input value with the client. The service is not responsible |
|
||||||
|
* | | | for disposing the value however it is expected that a |
|
||||||
|
* | | | symmetric API exists that "releases" the library of this |
|
||||||
|
* | | | shared ownership. For example: |
|
||||||
|
* | | | void addListener(TP_ACQUIRES Listener& listener); |
|
||||||
|
* | | | void removeListener(TP_RELEASES Listener& listener); |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Parameter | TP_OUT | Annotates a function scalar parameter as one that returns a |
|
||||||
|
* | | | value to the client through the parameter but does not |
|
||||||
|
* | | | transfer ownership of the output value to the client. |
|
||||||
|
* | | | The client is not responsible for disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Parameter | TP_IN_OUT | Annotates a function scalar parameter as one that both sends |
|
||||||
|
* | | | a value to the service and returns a value to the client |
|
||||||
|
* | | | through the parameter. Ownership of the input value is not |
|
||||||
|
* | | | transfered to the service nor is ownership of the output value |
|
||||||
|
* | | | transfered to the client. The service is not responsible for |
|
||||||
|
* | | | disposing the input value and the client is not responsible |
|
||||||
|
* | | | for disposing the output value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Parameter | TP_ARRAY_OUT | Annotates a function array parameter as one that returns a |
|
||||||
|
* | | | value to the client through the parameter but does not |
|
||||||
|
* | | | transfer ownership of the output value to the client. |
|
||||||
|
* | | | The client is not responsible for disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Parameter | TP_ARRAY_IN_OUT | Annotates a function array parameter as one that both sends |
|
||||||
|
* | | | a value to the service and returns a value to the client |
|
||||||
|
* | | | through the parameter. Ownership of the input value is not |
|
||||||
|
* | | | transfered to the service nor is ownership of the output value |
|
||||||
|
* | | | transfered to the client. The service is not responsible for |
|
||||||
|
* | | | disposing the input value and the client is not responsible |
|
||||||
|
* | | | for disposing the output value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Parameter | TP_GIVES | Annotates a function scalar parameter as one that returns a |
|
||||||
|
* | | | value to the client through the parameter and transfers |
|
||||||
|
* | | | ownership of the output value to the client. The client is |
|
||||||
|
* | | | responsible for properly disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Parameter | TP_RECEIVES | Annotates a function scalar parameter as one that sends a value |
|
||||||
|
* | | | to the service through the parameter and transfers ownership |
|
||||||
|
* | | | of the input value to the service. The service is responsible |
|
||||||
|
* | | | for properly disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Scalar Parameter | TP_RECEIVES_GIVES | Annotates a function scalar parameter as one that both sends |
|
||||||
|
* | | | a value to the service and returns a value to the client |
|
||||||
|
* | | | through the parameter. Ownership of the input value is |
|
||||||
|
* | | | transfered to the service and ownership of the output value is |
|
||||||
|
* | | | transfered to the client. The service is responsible for |
|
||||||
|
* | | | properly disposing the input value and the client is |
|
||||||
|
* | | | responsible for properly disposing the output value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Parameter | TP_ARRAY_GIVES | Annotates a function array parameter as one that returns a |
|
||||||
|
* | | | value to the client through the parameter and transfers |
|
||||||
|
* | | | ownership of the output value to the client. The client is |
|
||||||
|
* | | | responsible for properly disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Parameter | TP_ARRAY_RECEIVES | Annotates a function array parameter as one that sends a value |
|
||||||
|
* | | | to the service through the parameter and transfers ownership |
|
||||||
|
* | | | of the input value to the service. The service is responsible |
|
||||||
|
* | | | for properly disposing the value. |
|
||||||
|
* |------------------+-------------------------+-----------------------------------------------------------------|
|
||||||
|
* | Array Parameter | TP_ARRAY_RECEIVES_GIVES | Annotates a function array parameter as one that both sends |
|
||||||
|
* | | | a value to the service and returns a value to the client |
|
||||||
|
* | | | through the parameter. Ownership of the input value is |
|
||||||
|
* | | | transfered to the service and ownership of the output value is |
|
||||||
|
* | | | transfered to the client. The service is responsible for |
|
||||||
|
* | | | properly disposing the input value and the client is |
|
||||||
|
* | | | responsible for properly disposing the output value. |
|
||||||
|
* |==================+===================+=======================================================================|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First check to make sure that our life-cycle keywords are not in conflict with any system defines.
|
||||||
|
*/
|
||||||
|
#if defined TP_ACQUIRES || \
|
||||||
|
defined TP_RELEASES || \
|
||||||
|
defined TP_OUT || \
|
||||||
|
defined TP_IN_OUT || \
|
||||||
|
defined TP_ARRAY_OUT || \
|
||||||
|
defined TP_ARRAY_IN_OUT || \
|
||||||
|
defined TP_GIVES || \
|
||||||
|
defined TP_RECEIVES || \
|
||||||
|
defined TP_RECEIVES_GIVES || \
|
||||||
|
defined TP_ARRAY_GIVES || \
|
||||||
|
defined TP_ARRAY_RECEIVES || \
|
||||||
|
defined TP_ARRAY_RECEIVES_GIVES
|
||||||
|
#error "Tecplot's parameter life-cycle keywords are in direct conflict with other meanings."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined INCLUDE_OBJECT_LIFECYCLE_ANNOTATIONS
|
||||||
|
#define TP_ACQUIRES __attribute((gccxml("acquires","in")))
|
||||||
|
#define TP_RELEASES __attribute((gccxml("releases","in")))
|
||||||
|
#define TP_OUT __attribute((gccxml("out")))
|
||||||
|
#define TP_IN_OUT __attribute((gccxml("in","out")))
|
||||||
|
#define TP_ARRAY_OUT __attribute((gccxml("array","out")))
|
||||||
|
#define TP_ARRAY_IN_OUT __attribute((gccxml("array","in","out")))
|
||||||
|
#define TP_GIVES __attribute((gccxml("gives","out")))
|
||||||
|
#define TP_RECEIVES __attribute((gccxml("receives","in")))
|
||||||
|
#define TP_RECEIVES_GIVES __attribute((gccxml("receives","in","gives","out")))
|
||||||
|
#define TP_ARRAY_GIVES __attribute((gccxml("array","gives","out")))
|
||||||
|
#define TP_ARRAY_RECEIVES __attribute((gccxml("array","receives","in")))
|
||||||
|
#define TP_ARRAY_RECEIVES_GIVES __attribute((gccxml("array","receives","in","gives","out")))
|
||||||
|
#else
|
||||||
|
#define TP_ACQUIRES
|
||||||
|
#define TP_RELEASES
|
||||||
|
#define TP_OUT
|
||||||
|
#define TP_IN_OUT
|
||||||
|
#define TP_ARRAY_OUT
|
||||||
|
#define TP_ARRAY_IN_OUT
|
||||||
|
#define TP_GIVES
|
||||||
|
#define TP_RECEIVES
|
||||||
|
#define TP_RECEIVES_GIVES
|
||||||
|
#define TP_ARRAY_GIVES
|
||||||
|
#define TP_ARRAY_RECEIVES
|
||||||
|
#define TP_ARRAY_RECEIVES_GIVES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#ifdef NO_ASSERTS /* obfuscate names */
|
||||||
|
#define ShutDownLicensing FreeAllExtraMapData
|
||||||
|
#define ProcessYMapInXDirection
|
||||||
|
#endif /* NO_ASSERTS */
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************
|
||||||
|
* LICENSING
|
||||||
|
**************************************/
|
||||||
|
#if defined TECPLOTKERNEL && !defined ENGINE
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if defined FLEXLM && defined RLM
|
||||||
|
#endif
|
||||||
|
#if !defined FLEXLM && !defined RLM
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
#include "W__BASE.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
#include "TranslatedString.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following is a temporary fix for figuring out which product is
|
||||||
|
* running. In the future when Focus and 360 use the same code base,
|
||||||
|
* we will have to do this dynamically (either with flags on the compiler
|
||||||
|
* or variables within Tecplot).
|
||||||
|
*/
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#if defined _WIN32
|
||||||
|
|
||||||
|
#if !defined TECPLOTKERNEL
|
||||||
|
|
||||||
|
#if !defined MSWIN
|
||||||
|
#define MSWIN
|
||||||
|
#endif /* !MSWIN */
|
||||||
|
|
||||||
|
/* For the sake of some older add-ons,
|
||||||
|
defined _WINDOWS, WINDOWS, and WIN32
|
||||||
|
New code should always use MSWIN */
|
||||||
|
|
||||||
|
#if !defined WINDOWS
|
||||||
|
#define WINDOWS
|
||||||
|
#endif /* WINDOWS */
|
||||||
|
|
||||||
|
#if !defined _WINDOWS
|
||||||
|
#define _WINDOWS
|
||||||
|
#endif /* !_WINDOWS */
|
||||||
|
|
||||||
|
#if !defined WIN32
|
||||||
|
#define WIN32
|
||||||
|
#endif /* !WIN32 */
|
||||||
|
|
||||||
|
#if defined _DEBUG
|
||||||
|
#if !defined DEBUG
|
||||||
|
#define DEBUG
|
||||||
|
#endif
|
||||||
|
#elif defined CHECKED_BUILD
|
||||||
|
#if defined NO_ASSERTS
|
||||||
|
#undef NO_ASSERTS
|
||||||
|
#endif
|
||||||
|
#if defined NDEBUG
|
||||||
|
#undef NDEBUG
|
||||||
|
#endif
|
||||||
|
#else /* RELEASE */
|
||||||
|
#if !defined NDEBUG
|
||||||
|
#define NDEBUG
|
||||||
|
#endif
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
#define NO_ASSERTS
|
||||||
|
#endif
|
||||||
|
#endif /* _DEBUG */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
#if _MSC_VER >= 1400
|
||||||
|
#define VS_2005 /* Using VS2005 Compiler */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined TECPLOTKERNEL && defined VS_2005
|
||||||
|
/* Suppress the warnings about the
|
||||||
|
deprecated c runtime functions. */
|
||||||
|
|
||||||
|
#if !defined _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
#endif /* !TECPLOTKERNEL && VS_2005 */
|
||||||
|
|
||||||
|
#endif /* MSWIN */
|
||||||
|
|
||||||
|
#ifdef NDEBUG
|
||||||
|
# ifdef _DEBUG
|
||||||
|
# error "Both NDEBUG and _DEBUG defined"
|
||||||
|
# endif
|
||||||
|
#elif defined TECPLOTKERNEL
|
||||||
|
# ifndef _DEBUG
|
||||||
|
# define _DEBUG
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Now a requirement */
|
||||||
|
#define USE_3D_HARDWARE
|
||||||
|
|
||||||
|
#ifndef THREED
|
||||||
|
# define THREED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#if defined QUICKDEMO
|
||||||
|
#define DEMO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MicrosoftC
|
||||||
|
#define DOS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined CRAYX
|
||||||
|
#define CRAY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined IRISX
|
||||||
|
#define IRIS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined HPX
|
||||||
|
#define HPUX
|
||||||
|
#define HP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined IBMRS6000X
|
||||||
|
#define IBMRS6000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined COMPAQALPHAX
|
||||||
|
#define COMPAQALPHA
|
||||||
|
#define COMPAQX
|
||||||
|
#define COMPAQ
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined DECALPHAX
|
||||||
|
#define DECALPHA
|
||||||
|
#define DECX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined DECX
|
||||||
|
#define DEC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SUNSOLARISX || defined SUNSOLARIS86X
|
||||||
|
#define SUNX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SUNX
|
||||||
|
#define SUN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined IRISX || defined CRAYX || defined HPX || defined SUNX || defined CONVEXX
|
||||||
|
#define UNIXX
|
||||||
|
#define SYSV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined DECX || defined LINUX || defined IBMRS6000X || defined COMPAQX || defined DARWIN
|
||||||
|
#define UNIXX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* A bit of OEM stuff */
|
||||||
|
#define OEM_INVALID_CHECKSUM (LgIndex_t) -1
|
||||||
|
|
||||||
|
/* Hide the name of the checksum function */
|
||||||
|
#if defined NDEBUG
|
||||||
|
# define DECRYPTTIMEDCODE FixupPlot
|
||||||
|
# define CHECKHASHEDCODE ExpandPlot
|
||||||
|
# define UPDATECLASSICOEMEHCKSUM ToggleQuadrants
|
||||||
|
# define UPDATEOEMCHECKSUM ComputeAngleFromQuatrant
|
||||||
|
# define InitOemSettings InitAngleQuatrantSettings
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
#define USE_TRUETYPEFONTS
|
||||||
|
#endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#ifdef __cplusplus // STL
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
|
||||||
|
#pragma warning(push, 1) /* warning disabling bellow doesn't actually have any effect on compiler warning.
|
||||||
|
* It appears that Microsft STL enables all the warning right back on.
|
||||||
|
* Therefore, the only way to hide them is to push existing warning level,
|
||||||
|
* lower the level for the time while STL headers are included and then restore
|
||||||
|
* previous warning level with a "pragma warning(pop)"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma warning(disable: 4018) // signed/unsigned mismatch
|
||||||
|
#pragma warning(disable: 4100) // unreferenced formal parameter
|
||||||
|
#pragma warning(disable: 4146) // unary minus operator applied to unsigned type,
|
||||||
|
// result still unsigned
|
||||||
|
#pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2',
|
||||||
|
// possible loss of data
|
||||||
|
#pragma warning(disable: 4245) // conversion from 'type1' to 'type2', signed/unsigned
|
||||||
|
// mismatch
|
||||||
|
#pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
|
||||||
|
#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
|
||||||
|
#pragma warning(disable: 4663) // C++ language change: to explicitly specialize class
|
||||||
|
// template 'vector'
|
||||||
|
#pragma warning(disable: 4710) // 'function' : function not inlined
|
||||||
|
#pragma warning(disable: 4786) // identifier was truncated to 'number' characters
|
||||||
|
// in the debug information
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
#pragma warning(pop) //Restore old warning state.
|
||||||
|
#endif //MSWIN
|
||||||
|
|
||||||
|
#endif //__cplusplus
|
||||||
|
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#ifdef TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#ifndef TECPLOTKERNEL
|
||||||
|
#if defined VS_2005
|
||||||
|
#define Widget LONG_PTR /* correct for 32 & 64 bit builds */
|
||||||
|
#else
|
||||||
|
#define Widget long
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MSWIN */
|
||||||
|
|
||||||
|
|
||||||
|
#if defined UNIXX && defined ENGINE
|
||||||
|
typedef void *Widget;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#if !defined SYSV && !defined MSWIN
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (MicrosoftC)
|
||||||
|
#include <stdlib.h>
|
||||||
|
#define EXECOS
|
||||||
|
#ifndef FAR
|
||||||
|
#define FAR
|
||||||
|
#endif
|
||||||
|
#define VOID void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if defined UNIXX
|
||||||
|
#if !defined ENGINE
|
||||||
|
#define X11
|
||||||
|
#define MOTIF
|
||||||
|
#endif
|
||||||
|
#define FAR
|
||||||
|
#define NEAR
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined THREADS_BY_PTHREADS && !defined THREADS_BY_WINAPI
|
||||||
|
#endif
|
||||||
|
#if defined THREADS_BY_PTHREADS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* OPENGL currently a must have */
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# if !defined ENGINE
|
||||||
|
# if defined UNIXX
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
/*
|
||||||
|
* If not building the tecplot kernel then at least
|
||||||
|
* include the X Instrinsics. This will make most
|
||||||
|
* development for addons etc work.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* NOTE: MOTIF not defined if ENGINE is defined */
|
||||||
|
#if defined MOTIF
|
||||||
|
# if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# if XmVERSION == 1 && XmREVISION == 0
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# include <X11/Intrinsic.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MOTIF
|
||||||
|
#define CREATE_DIALOG_PARAMS Widget W
|
||||||
|
typedef Widget ComboBoxWidget_t;
|
||||||
|
typedef Widget DropDownListWidget_t;
|
||||||
|
typedef Widget FileDialogWidget_t;
|
||||||
|
typedef Widget LabelWidget_t;
|
||||||
|
typedef Widget ListWidget_t;
|
||||||
|
typedef Widget OptionMenuWidget_t;
|
||||||
|
typedef Widget PullDownMenuWidget_t;
|
||||||
|
typedef Widget ScaleWidget_t;
|
||||||
|
typedef Widget TextFieldWidget_t;
|
||||||
|
typedef Widget ToggleWidget_t;
|
||||||
|
typedef Widget ButtonWidget_t;
|
||||||
|
typedef Widget GridWidget_t;
|
||||||
|
#endif
|
||||||
|
#if defined MSWIN
|
||||||
|
#include <windows.h>
|
||||||
|
#define CREATE_DIALOG_PARAMS CWnd *, LaunchDialogMode_e
|
||||||
|
typedef Widget ComboBoxWidget_t;
|
||||||
|
typedef Widget DropDownListWidget_t;
|
||||||
|
typedef Widget FileDialogWidget_t;
|
||||||
|
typedef Widget LabelWidget_t;
|
||||||
|
typedef Widget ListWidget_t;
|
||||||
|
typedef Widget OptionMenuWidget_t;
|
||||||
|
typedef Widget PullDownMenuWidget_t;
|
||||||
|
typedef Widget ScaleWidget_t;
|
||||||
|
typedef Widget TextFieldWidget_t;
|
||||||
|
typedef Widget ToggleWidget_t;
|
||||||
|
typedef Widget ButtonWidget_t;
|
||||||
|
typedef Widget GridWidget_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if defined MSWIN && defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if defined TRACE
|
||||||
|
#endif
|
||||||
|
#if defined TRACE0
|
||||||
|
#endif
|
||||||
|
#if defined TRACE1
|
||||||
|
#endif
|
||||||
|
#if defined TRACE2
|
||||||
|
#endif
|
||||||
|
#if defined TRACE3
|
||||||
|
#endif
|
||||||
|
#if defined NDEBUG
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#endif /* MSWIN */
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* Assume that if TRACE is not defined, then none of the TRACE macros are */
|
||||||
|
#if !defined (TRACE)
|
||||||
|
/* TRACE is not used by non-debug builds */
|
||||||
|
#if defined NDEBUG
|
||||||
|
#if defined MSWIN
|
||||||
|
#define TRACE __noop
|
||||||
|
#define TRACE0(s) __noop
|
||||||
|
#define TRACE1(S,a1) __noop
|
||||||
|
#define TRACE2(s,a1,a2) __noop
|
||||||
|
#define TRACE3(s,a1,a2,a3) __noop
|
||||||
|
#else
|
||||||
|
#define TRACE(str) ((void)0)
|
||||||
|
#define TRACE0(str) ((void)0)
|
||||||
|
#define TRACE1(str,a1) ((void)0)
|
||||||
|
#define TRACE2(str,a1,a2) ((void)0)
|
||||||
|
#define TRACE3(str,a1,a2,a3) ((void)0)
|
||||||
|
#endif /* MSWIN */
|
||||||
|
#else /* DEBUG */
|
||||||
|
#if defined MSWIN
|
||||||
|
/* If the add-on is running in debug mode but does not
|
||||||
|
* use MFC, then no TRACE macro is available. Thus, to make tracing available,
|
||||||
|
* map TRACE to the win32 OutpuDebugString() function.
|
||||||
|
*/
|
||||||
|
# define TRACE(str) do { OutputDebugStringA(str); } while (0)
|
||||||
|
# define TRACE1(str,a1) do { char s[5000]; sprintf(s,str,a1); OutputDebugStringA(s); } while (0)
|
||||||
|
# define TRACE2(str,a1,a2) do { char s[5000]; sprintf(s,str,a1,a2); OutputDebugStringA(s); } while (0)
|
||||||
|
# define TRACE3(str,a1,a2,a3) do { char s[5000]; sprintf(s,str,a1,a2,a3); OutputDebugStringA(s); } while (0)
|
||||||
|
# define TRACE0(str) TRACE(str)
|
||||||
|
#else
|
||||||
|
#define TRACE printf
|
||||||
|
#define TRACE0 printf
|
||||||
|
#define TRACE1 printf
|
||||||
|
#define TRACE2 printf
|
||||||
|
#define TRACE3 printf
|
||||||
|
#endif /* MSWIN */
|
||||||
|
#endif /* NDEBUG */
|
||||||
|
#endif /* !defined (TRACE) */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Platform independent way for add-ons to know how much space
|
||||||
|
to allocate for a filename.
|
||||||
|
*/
|
||||||
|
#if !defined MAX_SIZEOFUTF8CHAR
|
||||||
|
#define MAX_SIZEOFUTF8CHAR 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined (MaxCharsFilePath)
|
||||||
|
# if defined (MSWIN)
|
||||||
|
# define MaxCharsFilePath (_MAX_PATH*MAX_SIZEOFUTF8CHAR+1) /* Includes traling '\0' */
|
||||||
|
# else
|
||||||
|
# define MaxCharsFilePath 2047 /* ...not really a hard limit for Linux/Unix */
|
||||||
|
# endif /* MSWIN */
|
||||||
|
#endif /* !MaxCharsFilePath */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Under Windows, if we are doing a release build (NDEBUG) that is not a CHECKED_BUILD
|
||||||
|
* then NO_ASSERTS should be defined
|
||||||
|
*/
|
||||||
|
#if defined MSWIN && defined NDEBUG && !defined NO_ASSERTS && !defined CHECKED_BUILD
|
||||||
|
/* intentionally break the compile */
|
||||||
|
# error "define NO_ASSERTS for release builds"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Under Windows, if we are doing a CHECKED_BUILD then it should
|
||||||
|
* also be a release build (NDEBUG)
|
||||||
|
*/
|
||||||
|
#if defined MSWIN && defined CHECKED_BUILD && !defined NDEBUG
|
||||||
|
# error "CHECKED_BUILDS must also be release builds"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined NO_ASSERTS
|
||||||
|
# define USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/*
|
||||||
|
* Under Linux the definition of NULL has a cast that conflicts with our own
|
||||||
|
* casting causing warnings that make it tough to find real problems.
|
||||||
|
*/
|
||||||
|
#if defined LINUX && defined NULL
|
||||||
|
# undef NULL
|
||||||
|
# define NULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
#if !defined MSWIN && !defined ENGINE && !defined ISMESA
|
||||||
|
#define DISALLOW_OFFSCREEN_EXPORT_IN_BATCH
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#endif /* _MASTER_H_ */
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
alloc.cpp
|
||||||
|
arrlist.cpp
|
||||||
|
auxdata.cpp
|
||||||
|
dataio4.cpp
|
||||||
|
dataio.cpp
|
||||||
|
dataset0.cpp
|
||||||
|
dataset.cpp
|
||||||
|
datautil.cpp
|
||||||
|
filestream.cpp
|
||||||
|
geom2.cpp
|
||||||
|
q_msg.cpp
|
||||||
|
q_unicode.cpp
|
||||||
|
set.cpp
|
||||||
|
strlist.cpp
|
||||||
|
strutil.cpp
|
||||||
|
tassert.cpp
|
||||||
|
tecxxx.cpp
|
||||||
|
TranslatedString.cpp
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libtecio
|
||||||
|
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
#include "tecioOptions"
|
||||||
|
|
||||||
|
EXE_INC = \
|
||||||
|
$(TECIO_FLAGS) $(TECIO_INC)
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
$(TECIO_LIBS)
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
#if defined(linux64)
|
||||||
|
|
||||||
|
TECIO_FLAGS = -DMAKEARCHIVE -DLINUX -DLINUX64 -DUSEENUM -DTHREED -U_WIN32
|
||||||
|
|
||||||
|
#elif defined(linuxIA64)
|
||||||
|
|
||||||
|
TECIO_FLAGS = -DMAKEARCHIVE -DLINUX -DLINUXI64 -DUSEENUM -DTHREED -U_WIN32
|
||||||
|
|
||||||
|
#elif defined(linux)
|
||||||
|
|
||||||
|
TECIO_FLAGS = -DMAKEARCHIVE -DLINUX -DUSEENUM -DTHREED -U_WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# error architecture not supported for compiling tecio.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TECIO_INC =
|
||||||
|
TECIO_LIBS =
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef Q_MSG_H
|
||||||
|
#define Q_MSG_H
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined Q_MSGMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MAX_STATUS_LINE_MSG_LEN 255
|
||||||
|
|
||||||
|
#include "TranslatedString.h"
|
||||||
|
|
||||||
|
EXTERN Boolean_t WrapString(const char *OldString,
|
||||||
|
char **NewString);
|
||||||
|
EXTERN void Warning(tecplot::strutil::TranslatedString Format,
|
||||||
|
...); /* zero or more arguments */
|
||||||
|
# if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
EXTERN void ErrMsg(tecplot::strutil::TranslatedString Format,
|
||||||
|
...); /* zero or more arguments */
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#if defined Q_MSGMODULE
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#endif // TECPLOTKERNEL
|
||||||
|
|
||||||
|
#endif // Q_MSG_H
|
||||||
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined Q_UNICODE_H_
|
||||||
|
# define Q_UNICODE_H_
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined Q_UNICODEMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace strutil
|
||||||
|
{
|
||||||
|
|
||||||
|
// functions
|
||||||
|
Boolean_t IsValidUtf8LeadByte(Byte_t ch);
|
||||||
|
Boolean_t IsValidUtf8ContinuingByte(Byte_t ch);
|
||||||
|
Boolean_t IsValidUtf8Byte(Byte_t ch);
|
||||||
|
|
||||||
|
Boolean_t IsValidUtf8String(const char *str);
|
||||||
|
Boolean_t ShouldConvertWideStringToUtf8String(const wchar_t *str);
|
||||||
|
void InitTranslatedStrings();
|
||||||
|
void CleanUpTranslatedStrings();
|
||||||
|
|
||||||
|
Boolean_t IsNullOrZeroLengthString(const char *S);
|
||||||
|
Boolean_t IsNullOrZeroLengthString(tecplot::strutil::TranslatedString TS);
|
||||||
|
|
||||||
|
Boolean_t IsEmptyString(const char *S);
|
||||||
|
Boolean_t IsEmptyString(tecplot::strutil::TranslatedString S);
|
||||||
|
Boolean_t IsEmptyString(const wchar_t* S);
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
|
||||||
|
std::string LookUpTranslation(std::string& strEnglish);
|
||||||
|
void MsWinInitTranslatedStrings();
|
||||||
|
|
||||||
|
std::string WStringToString(std::wstring str);
|
||||||
|
std::wstring StringToWString(std::string str);
|
||||||
|
|
||||||
|
std::wstring MultiByteToWideChar(const char *Utf8Str,
|
||||||
|
unsigned int CodePage);
|
||||||
|
|
||||||
|
std::string WideCharToMultiByte(const wchar_t *WideStr,
|
||||||
|
unsigned int CodePage);
|
||||||
|
|
||||||
|
// Conversion
|
||||||
|
std::string WideCharToUtf8(const wchar_t* str);
|
||||||
|
std::wstring Utf8ToWideChar(const char *str);
|
||||||
|
char *getenv(const char *str);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,283 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined SETMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _SET_H_INCLUDED
|
||||||
|
#define _SET_H_INCLUDED
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PadOut(X,Y) ((int)(((X)-1)/(Y)+1)*(Y))
|
||||||
|
#define SetBitSize (8*sizeof(SetData_t))
|
||||||
|
#define SetLastBit (((unsigned long)1)<<(SetBitSize-1))
|
||||||
|
|
||||||
|
#if defined _DEBUG
|
||||||
|
# define USE_FUNCTIONS_FOR_SETS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* *
|
||||||
|
* * NOTE: "Set_pa" is a pointer to an "abstract type",
|
||||||
|
* * hence the "_pa". Pointer here is akin to "handle".
|
||||||
|
* * Any routines dealing with the internals of Set_pa
|
||||||
|
* * or Set_a must be in the same file as these routines
|
||||||
|
* */
|
||||||
|
|
||||||
|
/* Set_a is intentionally not defined to further
|
||||||
|
* deter usage of this private structure */
|
||||||
|
struct _Set_a
|
||||||
|
{
|
||||||
|
/* * PRIVATE * */
|
||||||
|
SetIndex_t size;
|
||||||
|
SetData_pt data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks set for NULL.
|
||||||
|
*/
|
||||||
|
#define IsSetNull(Set) ((Set)==NULL)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates how many bytes are required to store the set data.
|
||||||
|
*/
|
||||||
|
inline size_t SetDataSizeInBytes(Set_pa Set)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(Set));
|
||||||
|
return Set->size / SetBitSize * sizeof(SetData_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocates a new empty set. Returns NULL if not enough memory.
|
||||||
|
*/
|
||||||
|
EXTERN Set_pa AllocSet(Boolean_t show_error_msg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Frees all memory associated with set "*set", and
|
||||||
|
* sets "*set" to NULL.
|
||||||
|
*/
|
||||||
|
EXTERN void DeallocSet(Set_pa *Set);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function adapts the DeallocSet function to work with the
|
||||||
|
* ArrayList's deallocation callback.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t SetItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData);
|
||||||
|
/*
|
||||||
|
* Makes sure set "set" can hold at least "max_val" elements.
|
||||||
|
* Returns TRUE if successful, FALSE otherwise. A successful
|
||||||
|
* call to ExpandSet() guarentees that any calls to AddToSet()
|
||||||
|
* will be successful as long as the elements added are less
|
||||||
|
* than "max_val".
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t ExpandSet(Set_pa Set,
|
||||||
|
SetIndex_t max_val,
|
||||||
|
Boolean_t show_error_msg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copies set "src" to set "dst". Returns TRUE if successful,
|
||||||
|
* FALSE if "src" contains elements it is unable to add to "dst".
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t CopySet(Set_pa dst,
|
||||||
|
Set_pa src,
|
||||||
|
Boolean_t show_error_msg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Appends set "src" to set "dst". Returns TRUE if successful,
|
||||||
|
* FALSE if "src" contains elements it is unable to add to "dst".
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t AppendSet(Set_pa dst,
|
||||||
|
Set_pa src,
|
||||||
|
Boolean_t show_error_msg);
|
||||||
|
/*
|
||||||
|
* Empties the set "set".
|
||||||
|
*/
|
||||||
|
EXTERN void ClearSet(Set_pa Set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adds "member" to set "set". Returns TRUE if successful,
|
||||||
|
* FALSE otherwise. AddToSet() can only return FALSE if
|
||||||
|
* "member" is greater than any previous member of "set" and
|
||||||
|
* also greater that any "max_val" set with ExpandSet().
|
||||||
|
*/
|
||||||
|
#if defined USE_FUNCTIONS_FOR_SETS
|
||||||
|
EXTERN Boolean_t AddToSet(Set_pa Set,
|
||||||
|
SetIndex_t member,
|
||||||
|
Boolean_t show_error_msg);
|
||||||
|
#else
|
||||||
|
# if defined __cplusplus
|
||||||
|
inline Boolean_t AddToSet(Set_pa Set,
|
||||||
|
SetIndex_t member,
|
||||||
|
Boolean_t show_error_msg)
|
||||||
|
{
|
||||||
|
if (Set &&
|
||||||
|
(member + 1 <= Set->size ||
|
||||||
|
ExpandSet(Set, member + 1, show_error_msg)))
|
||||||
|
{
|
||||||
|
SetIndex_t word = member / SetBitSize;
|
||||||
|
SetData_t bit = (SetData_t)1 << (member % SetBitSize);
|
||||||
|
Set->data[word] |= bit;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
} /* AddToSet() */
|
||||||
|
# else
|
||||||
|
# define AddToSet(Set,member,show_error_msg) \
|
||||||
|
(((Set) && \
|
||||||
|
((member)+1 <= (Set)->size || \
|
||||||
|
ExpandSet((Set), (member)+1, (show_error_msg)))) \
|
||||||
|
? (((Set)->data[(member) / SetBitSize] |= (SetData_t)1 << ((member) % SetBitSize)), TRUE) \
|
||||||
|
: FALSE)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes "member" from set "set".
|
||||||
|
*/
|
||||||
|
EXTERN void RemoveFromSet(Set_pa Set,
|
||||||
|
SetIndex_t member);
|
||||||
|
|
||||||
|
EXTERN void DeleteSetMember(Set_pa Set,
|
||||||
|
SetIndex_t Member);
|
||||||
|
EXTERN Boolean_t InsertSetMember(Set_pa Set,
|
||||||
|
SetIndex_t Member,
|
||||||
|
Boolean_t ShowErrMsg);
|
||||||
|
/*
|
||||||
|
* Test for membership of "member" in set "set". This is the only
|
||||||
|
* function worth making into a macro or inline function.
|
||||||
|
*/
|
||||||
|
#if defined USE_FUNCTIONS_FOR_SETS
|
||||||
|
EXTERN Boolean_t InSet(Set_pa Set,
|
||||||
|
SetIndex_t member);
|
||||||
|
#else
|
||||||
|
# if defined __cplusplus
|
||||||
|
inline Boolean_t InSet(Set_pa Set,
|
||||||
|
SetIndex_t member)
|
||||||
|
{
|
||||||
|
if (Set && (0 <= member && member < Set->size))
|
||||||
|
{
|
||||||
|
SetIndex_t word = member / SetBitSize;
|
||||||
|
SetData_t bit = (SetData_t)1 << (member % SetBitSize);
|
||||||
|
return (Set->data[word]&bit) != 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
} /* InSet() */
|
||||||
|
# else
|
||||||
|
# define InSet(Set,member) ((Set && (0<=(member) && (member)<(Set)->size)) \
|
||||||
|
? ((Set)->data[(member)/SetBitSize]&((SetData_t)1<<((member)%SetBitSize)))!=0 \
|
||||||
|
: FALSE)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns TRUE if set "set" is empty.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t IsEmpty(Set_pa Set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns TRUE if Set has voids.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t HasVoids(Set_pa Set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns number of members in Set "Set".
|
||||||
|
*/
|
||||||
|
EXTERN SetIndex_t MemberCount(Set_pa Set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the next member in set "set" after member "start_at".
|
||||||
|
* Use "start_at" of BAD_ZV_VALUE to find first member.
|
||||||
|
*/
|
||||||
|
EXTERN SetIndex_t GetNextMember(Set_pa Set,
|
||||||
|
SetIndex_t start_at);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the previous member in set "set" before member
|
||||||
|
* "start_at". Use "start_at" of BAD_ZV_VALUE to find last member.
|
||||||
|
*/
|
||||||
|
EXTERN SetIndex_t GetPrevMember(Set_pa Set,
|
||||||
|
SetIndex_t start_at);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns TRUE if sets are equal (have same members). FALSE otherwise.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t EqualSets(Set_pa set1,
|
||||||
|
Set_pa set2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns TRUE if all members of childset are contained in parentset.
|
||||||
|
*/
|
||||||
|
EXTERN Boolean_t IsSubSet(Set_pa childset,
|
||||||
|
Set_pa parentset);
|
||||||
|
|
||||||
|
EXTERN SetIndex_t MemberOffset(Set_pa Set,
|
||||||
|
SetIndex_t Member);
|
||||||
|
|
||||||
|
EXTERN SetIndex_t OffsetMember(Set_pa Set,
|
||||||
|
SetIndex_t Offset);
|
||||||
|
|
||||||
|
|
||||||
|
EXTERN Boolean_t CopySetMember(Set_pa DstSet,
|
||||||
|
SetIndex_t DstOffset,
|
||||||
|
Set_pa SrcSet,
|
||||||
|
SetIndex_t SrcOffset);
|
||||||
|
|
||||||
|
EXTERN void ShiftSet(Set_pa Set,
|
||||||
|
SetIndex_t ShiftPos1,
|
||||||
|
SetIndex_t ShiftPos2,
|
||||||
|
SetIndex_t ShiftAmount);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handy macros
|
||||||
|
*/
|
||||||
|
#define GetFirstSetMember(Set) (GetNextMember((Set), BAD_SET_VALUE))
|
||||||
|
#define GetLastSetMember(Set) (GetPrevMember((Set), BAD_SET_VALUE))
|
||||||
|
|
||||||
|
#define ForAllMembersInSet(Member, Set) \
|
||||||
|
for (Member = GetFirstSetMember((Set)); \
|
||||||
|
Member != BAD_SET_VALUE; \
|
||||||
|
Member = GetNextMember((Set), (Member)))
|
||||||
|
#define ForAllMembersInReversedSet(Member, Set) \
|
||||||
|
for (Member = GetLastSetMember((Set)); \
|
||||||
|
Member != BAD_SET_VALUE; \
|
||||||
|
Member = GetPrevMember((Set), (Member)))
|
||||||
|
|
||||||
|
#endif // _SET_H_INCLUDED
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
# undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined STRLISTMODULE
|
||||||
|
# define EXTERN
|
||||||
|
#else
|
||||||
|
# define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined ARRLIST_h
|
||||||
|
# error "Include ARRLIST.h before including STRLIST.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* For building pltview.exe under Windows, we use
|
||||||
|
* tecio.dll (which is linked to pltview).
|
||||||
|
* Since pltview.exe uses a few of the
|
||||||
|
* functions here, they need to be exported into
|
||||||
|
* the tecio.dll, thus "TECXXX.h" is included for the
|
||||||
|
* LIBFUNCTION & LIBCALL keywords. They are not
|
||||||
|
* documented with the other TECXXX() functions,
|
||||||
|
* however.
|
||||||
|
*
|
||||||
|
* If pltview requires other string functions
|
||||||
|
* in the future, they can be added to the dll
|
||||||
|
* by adding LIBFUNCTION & LIBCALL as in
|
||||||
|
* StringListDealloc(), etc. below.
|
||||||
|
*
|
||||||
|
* When building the tecplot kernal, LIBFUNCTION
|
||||||
|
* and LIBCALL are nop's.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "TECXXX.h"
|
||||||
|
|
||||||
|
EXTERN Boolean_t StringListValid(StringList_pa StringList);
|
||||||
|
EXTERN void StringListClear(StringList_pa StringList);
|
||||||
|
EXTERN void StringListRemoveStrings(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset,
|
||||||
|
LgIndex_t Count);
|
||||||
|
EXTERN void StringListRemoveString(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset);
|
||||||
|
LIBFUNCTION void LIBCALL StringListDealloc(StringList_pa *StringList);
|
||||||
|
EXTERN StringList_pa StringListAlloc(void);
|
||||||
|
EXTERN Boolean_t StringListAppendString(StringList_pa StringList,
|
||||||
|
const char *String);
|
||||||
|
LIBFUNCTION LgIndex_t LIBCALL StringListCount(StringList_pa StringList);
|
||||||
|
LIBFUNCTION char * LIBCALL StringListGetString(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset);
|
||||||
|
|
||||||
|
#if defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
# define StringListGetStringRef StringListGetStringRef_MACRO
|
||||||
|
#else
|
||||||
|
# define StringListGetStringRef StringListGetStringRef_FUNC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
EXTERN const char * StringListGetStringRef_FUNC(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset);
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* To maintain the string list's integrity the result is cast to a
|
||||||
|
* (const char *) to minimize the risk of users passing the result
|
||||||
|
* to FREE_ARRAY.
|
||||||
|
*/
|
||||||
|
#define StringListGetStringRef_MACRO(StringList, StringOffset) \
|
||||||
|
((const char *)ArrayListGetCharPtr((ArrayList_pa)(StringList), StringOffset))
|
||||||
|
|
||||||
|
EXTERN Boolean_t StringListSetString(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset,
|
||||||
|
const char *String);
|
||||||
|
EXTERN Boolean_t StringListInsertString(StringList_pa StringList,
|
||||||
|
LgIndex_t StringOffset,
|
||||||
|
const char *String);
|
||||||
|
EXTERN StringList_pa StringListCopy(StringList_pa StringList);
|
||||||
|
EXTERN Boolean_t StringListAppend(StringList_pa Target,
|
||||||
|
StringList_pa Source);
|
||||||
|
|
||||||
|
EXTERN char *StringListToNLString(StringList_pa StringList);
|
||||||
|
EXTERN StringList_pa StringListFromNLString(const char *String);
|
||||||
|
EXTERN char **StringListToArray(StringList_pa StringList);
|
||||||
|
EXTERN StringList_pa StringListFromArray(const char **StringArray,
|
||||||
|
LgIndex_t Count);
|
||||||
|
EXTERN StringList_pa StringListFromCompound(const char *String);
|
||||||
|
EXTERN char *StringListToCompound(StringList_pa StringList,
|
||||||
|
char GroupJoinCharacter,
|
||||||
|
const char *CharsToEscape);
|
||||||
|
EXTERN void StringListSort(StringList_pa StringList,
|
||||||
|
StringListStringComparator_pf Comparator,
|
||||||
|
ArbParam_t ClientData);
|
||||||
@ -0,0 +1,218 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined STRUTILMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace strutil
|
||||||
|
{
|
||||||
|
class Scanner;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXTERN void FormatStringBufferCleanup(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a helper function for FormatString or any other functions that want
|
||||||
|
* to format a string based on a format string followed by a set of arguments.
|
||||||
|
* See FormatString or ErrMsg functions for example usage.
|
||||||
|
*
|
||||||
|
* @param Format
|
||||||
|
* C format string.
|
||||||
|
* @param Arguments
|
||||||
|
* Variable argument list already fetched using va_start().
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Allocated string with the formatted string or NULL if it failed.
|
||||||
|
*/
|
||||||
|
EXTERN char *vFormatString(const char *Format,
|
||||||
|
va_list Arguments);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formats a string using the specified C format string.
|
||||||
|
*
|
||||||
|
* @param Format
|
||||||
|
* C format string.
|
||||||
|
* @param ...
|
||||||
|
* Any arguments needed by the C format string.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Allocated string with the formatted string or NULL if it failed. The
|
||||||
|
* client is responsible for deallocating the resource.
|
||||||
|
*/
|
||||||
|
EXTERN char *FormatString(tecplot::strutil::TranslatedString Format,
|
||||||
|
...); /* 0 or more variable arguments */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formats a string using the specified C format string and places the result
|
||||||
|
* in the string buffer.
|
||||||
|
*
|
||||||
|
* @param Buffer
|
||||||
|
* String buffer to receive the formatted string.
|
||||||
|
* @param Format
|
||||||
|
* C format string.
|
||||||
|
* @param ...
|
||||||
|
* Any arguments needed by the C format string.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Upon successful return, these functions return the number of characters
|
||||||
|
* printed, not including the trailing '\0' used to end output to strings. If
|
||||||
|
* unsuccessful -1 is returned.
|
||||||
|
*/
|
||||||
|
EXTERN int FormatString(std::string& Buffer,
|
||||||
|
tecplot::strutil::TranslatedString Format
|
||||||
|
...); /* 0 or more variable arguments */
|
||||||
|
EXTERN char *DupString(tecplot::strutil::TranslatedString String);
|
||||||
|
EXTERN void CopySubString(char *Target,
|
||||||
|
const char *Source,
|
||||||
|
int Index,
|
||||||
|
int Count);
|
||||||
|
|
||||||
|
#if !defined MSWIN
|
||||||
|
|
||||||
|
EXTERN void ReplaceCharInString(char *S,
|
||||||
|
short OldChar,
|
||||||
|
short NewChar);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN void MakeStringLowerCase(char *str);
|
||||||
|
EXTERN void MakeStringUpperCase(char *str);
|
||||||
|
EXTERN char *TrimLeadAndTrailSpaces(char *String);
|
||||||
|
EXTERN char *StringFlushLeft(char *String);
|
||||||
|
EXTERN char *StringTruncate(char *String,
|
||||||
|
LgIndex_t MaxLength);
|
||||||
|
EXTERN char *StringTrimAndTruncate(char *String,
|
||||||
|
LgIndex_t MaxLength);
|
||||||
|
|
||||||
|
#ifndef MSWIN
|
||||||
|
EXTERN StringList_pa LineBreakString(const char *String,
|
||||||
|
UInt32_t WrapMargin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN Boolean_t MatchKey(char *StringToMatch,
|
||||||
|
char *Key);
|
||||||
|
EXTERN void RemoveSeparator(const char **CPtr);
|
||||||
|
EXTERN void SkipWhiteSpace(const char **CPtr);
|
||||||
|
EXTERN void SkipNonWhiteSpace(char **CPtr);
|
||||||
|
EXTERN const char *ustrstr(const char *s1,
|
||||||
|
const char *s2);
|
||||||
|
EXTERN int ustrncmp(const char *s1,
|
||||||
|
const char *s2,
|
||||||
|
size_t Len);
|
||||||
|
EXTERN int ustrcmp(const char *s1,
|
||||||
|
const char *s2);
|
||||||
|
/* public access */
|
||||||
|
/* InternalResetString should not be used directly (use ResetString macro) */
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
EXTERN Boolean_t InternalResetString(char **SBase,
|
||||||
|
const char *NewString,
|
||||||
|
Boolean_t IssueErrMsg,
|
||||||
|
const char *FileName,
|
||||||
|
int LineNumber);
|
||||||
|
# define ResetString(SBase, NewString, IssueErrMsg) InternalResetString( \
|
||||||
|
SBase, \
|
||||||
|
NewString, \
|
||||||
|
IssueErrMsg, \
|
||||||
|
__FILE__, __LINE__)
|
||||||
|
#else
|
||||||
|
EXTERN Boolean_t InternalResetString(char **SBase,
|
||||||
|
const char *NewString,
|
||||||
|
Boolean_t IssueErrMsg);
|
||||||
|
# define ResetString(SBase, NewString, IssueErrMsg) InternalResetString( \
|
||||||
|
SBase, \
|
||||||
|
NewString, \
|
||||||
|
IssueErrMsg)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXTERN Boolean_t ScanForString(tecplot::strutil::Scanner &scanner,
|
||||||
|
std::string &DestString,
|
||||||
|
Boolean_t GrabEntireStringIncludingDelimiters);
|
||||||
|
EXTERN Boolean_t TackOnString(char **SBase,
|
||||||
|
const char *StringToAdd,
|
||||||
|
Boolean_t DeleteStringToAdd,
|
||||||
|
Boolean_t ConvertNewlineToAscii);
|
||||||
|
EXTERN Boolean_t TackOnConstString(char **SBase,
|
||||||
|
const char *StringToAdd,
|
||||||
|
Boolean_t ConvertNewlineToAscii);
|
||||||
|
EXTERN Boolean_t TackOnChar(char **SBase,
|
||||||
|
char CharToAdd);
|
||||||
|
EXTERN Boolean_t ReplaceNewlineWithBackslashN(char **String);
|
||||||
|
EXTERN Boolean_t ReplaceBackslashNWithNewline(char **S);
|
||||||
|
|
||||||
|
EXTERN Boolean_t EscapeOutDelimitersInString(char **S,
|
||||||
|
char Delimiter);
|
||||||
|
EXTERN Boolean_t ScanForSymbol(tecplot::strutil::Scanner &scanner,
|
||||||
|
char Symbol,
|
||||||
|
Boolean_t OnlySkipWhiteSpace);
|
||||||
|
|
||||||
|
|
||||||
|
/* Newline Delimited Strings */
|
||||||
|
EXTERN char *ConvertStringToNewlineDelimitedString(const char *OriginalString);
|
||||||
|
EXTERN char *ConvertNewlineDelimitedStringToQuotedString(const char *NewlineDelimitedString,
|
||||||
|
Boolean_t SeparateInstructionsWithPlus);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXTERN char *InsertNameAtPlaceHolder(char *BaseString,
|
||||||
|
char *NameToInsert);
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
#endif /* !NO_ASSERTS */
|
||||||
|
#endif //TECPLOTKERNEL
|
||||||
|
|
||||||
|
inline char* EndOfString(char* str)
|
||||||
|
{
|
||||||
|
return str + strlen(str);
|
||||||
|
};
|
||||||
|
inline char const* EndOfString(char const* str)
|
||||||
|
{
|
||||||
|
return str + strlen(str);
|
||||||
|
};
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined SYSTEMMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
EXTERN int OpenFileListGetCount(void);
|
||||||
|
EXTERN char *GetLongFileName(const char *FileName);
|
||||||
|
EXTERN Boolean_t VerifyToOverwriteFile(const char *FName);
|
||||||
|
EXTERN Boolean_t IsValidDirectory(const char *FName);
|
||||||
|
EXTERN Boolean_t FileExists(const char *F,
|
||||||
|
Boolean_t ShowErr);
|
||||||
|
EXTERN Boolean_t IsOkFNameChar(unsigned char ch);
|
||||||
|
EXTERN void ErrFName(const char *FName);
|
||||||
|
EXTERN Boolean_t IsValidFileName(const char *FileName,
|
||||||
|
Boolean_t IsReading,
|
||||||
|
Boolean_t ShowError);
|
||||||
|
EXTERN Boolean_t ResizeFile(FILE *File,
|
||||||
|
Int64_t Length);
|
||||||
|
EXTERN Boolean_t Close_File(FILE **F,
|
||||||
|
Boolean_t ShowErr);
|
||||||
|
EXTERN Boolean_t Open_File(FILE **F,
|
||||||
|
const char *FName,
|
||||||
|
Boolean_t IsReading,
|
||||||
|
Boolean_t IsAppending,
|
||||||
|
Boolean_t ForceOpen,
|
||||||
|
Boolean_t ShowErr,
|
||||||
|
Boolean_t IsAscii);
|
||||||
|
|
||||||
@ -0,0 +1,513 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Provide four levels of assertion control. Assertions provide a mechanism
|
||||||
|
* to enforce a contract between a client and service provider. The assertions
|
||||||
|
* are listed in order of highest to lowest priority. Assertions can be turned
|
||||||
|
* off individually by defining the appropriate name (see preprossessor
|
||||||
|
* definitions below), however, lower priority assertions should be turned
|
||||||
|
* off prior to higher ones. As confidence in the code increases all assertions
|
||||||
|
* can be turned off by defining NO_ASSERTS.
|
||||||
|
*
|
||||||
|
* The assertions defined below have the following meanings:
|
||||||
|
*
|
||||||
|
* INVARIANT - Asserts that a property's state is invariant throughout the
|
||||||
|
* life of the property's scope. Stating invariant properties
|
||||||
|
* of an application provides a deeper understanding of the
|
||||||
|
* application's state. These statements are usually
|
||||||
|
* positioned just ahead of the preconditions and just after
|
||||||
|
* the postconditions.
|
||||||
|
*
|
||||||
|
* REQUIRE - Asserts that a method's preconditions are within their
|
||||||
|
* valid domains. Preconditions are conditions placed upon
|
||||||
|
* any state information relied upon for the call. These
|
||||||
|
* statements should be as close to the top of the method
|
||||||
|
* as possible (except for assertions on invariant properties).
|
||||||
|
*
|
||||||
|
* ENSURE - Asserts that a method's postconditions are within their
|
||||||
|
* valid ranges. Postconditions are conditions placed upon
|
||||||
|
* any state information modified by the call. These
|
||||||
|
* statements should be as close to the bottom of the method
|
||||||
|
* (presumably there is only one exit point) as possible
|
||||||
|
* (except for assertions on invariant properties).
|
||||||
|
*
|
||||||
|
* CHECK - Any other assertion not covered by the above assertions.
|
||||||
|
* These are often added within a method body to specify
|
||||||
|
* something that may not be immediately obvious to the reader
|
||||||
|
* or to validate your assumptions about a call to a 3rd party
|
||||||
|
* method that does not use runtime assertions for its
|
||||||
|
* preconditions or postconditions. Obviously if the 3rd party
|
||||||
|
* method uses assertions then there is no need for the CHECK.
|
||||||
|
*
|
||||||
|
* Additionally a convenience macro is available to place in code that is
|
||||||
|
* pending implementation.
|
||||||
|
*
|
||||||
|
* NOT_IMPLEMENTED - Assertion that always fails during runtime for debug
|
||||||
|
* builds and always fails at compile time for release
|
||||||
|
* builds.
|
||||||
|
*/
|
||||||
|
#if !defined TASSERT_H
|
||||||
|
#define TASSERT_H
|
||||||
|
|
||||||
|
#if defined (MSWIN)
|
||||||
|
# include <assert.h>
|
||||||
|
#endif /* MSWIN */
|
||||||
|
|
||||||
|
#if !defined TECPLOTKERNEL && !defined STD_ASSERTS
|
||||||
|
#define STD_ASSERTS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined (MSWIN)
|
||||||
|
# include <assert.h>
|
||||||
|
# if !defined ASSERT
|
||||||
|
# define ASSERT assert
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/* MFC .NET defines ENSURE, so we undefine it here */
|
||||||
|
#if defined ENSURE
|
||||||
|
#undef ENSURE
|
||||||
|
#endif /* ENSURE */
|
||||||
|
#endif /* MSWIN */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#define INVALID_REF ((void *)0x0000FFFF)
|
||||||
|
/*
|
||||||
|
* Chances are low the address 0x11111111 will be used, so we'll risk asserting
|
||||||
|
* against it (see unitialized assignment in newmalloc).
|
||||||
|
*/
|
||||||
|
#define UNINITIALIZED_REF ((void *)0x11111111)
|
||||||
|
#define INVALID_FN_REF ((void *)NULL)
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#ifdef UNIXX
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# if defined NO_ASSERTS
|
||||||
|
# else
|
||||||
|
# endif
|
||||||
|
#endif /* TECPLOTKERNAL */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if !defined TECPLOTKERNEL
|
||||||
|
/* For add-ons, there is a problem with VALID_REF, so just test for non-NULL */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
# define VALID_REF(p) ( (p) != NULL )
|
||||||
|
# define VALID_FN_REF(fp) ( (fp) != NULL )
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#endif /* !defined TECPLOTKERNAL */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* Widgets are pointers under Motif */
|
||||||
|
# define VALID_WIDGET(widget) VALID_REF((widget))
|
||||||
|
/* Menu widgets are pointers too */
|
||||||
|
# define VALID_MENU_WIDGET(widget) VALID_REF((widget))
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
#endif /* UNIXX */
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* Don't use AfxIsValidAddress()! See Bug <7245>.
|
||||||
|
1/4/08, dto. */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#if defined NO_ASSERTS
|
||||||
|
/* release build in TecUtil layer uses these for TUASSERT */
|
||||||
|
# define VALID_REF(p) ((p) != NULL)
|
||||||
|
# define VALID_FN_REF(pf) ((pf) != NULL)
|
||||||
|
#else
|
||||||
|
# define VALID_REF(p) ((p) != NULL && !IsBadReadPtr((const void *)(p), 1))
|
||||||
|
# define VALID_FN_REF(pf) ((pf) != NULL && !IsBadReadPtr((const void *)(pf),(UINT_PTR)sizeof(const void*)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* Widgets are numbers under Windows, so we decode it with GetWindowFromWidget */
|
||||||
|
# if defined ENGINE
|
||||||
|
# define VALID_WIDGET(widget) ((widget) != NULL)
|
||||||
|
# else
|
||||||
|
# define VALID_WIDGET(widget) ((widget) != NULL && GetWindowFromWidget((widget))!=NULL)
|
||||||
|
# endif // ENGINE
|
||||||
|
|
||||||
|
/* Menu widgets are numbers too, so we just check against zero */
|
||||||
|
# define VALID_MENU_WIDGET(widget) ((widget)!=NULL)
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
#endif /* MSWIN */
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
/* handles are not pointers to memory, so the only test we can */
|
||||||
|
/* perform is to check for 0 */
|
||||||
|
#define VALID_HANDLE(handle) ((handle)!=0)
|
||||||
|
|
||||||
|
#if defined FLEXLM
|
||||||
|
#define VALID_FLEX_JOB_HANDLE(handle) ((handle) != NULL)
|
||||||
|
#define VALID_FLEX_ERROR_CODE(ErrorCode)(ErrorCode <= 0)
|
||||||
|
#endif /* FLEXLM */
|
||||||
|
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
/* other useful validity checks */
|
||||||
|
#define VALID_BOOLEAN(b) ((b) == TRUE || (b) == FALSE)
|
||||||
|
#define VALID_ENUM(value, type) (0 <= (value) && \
|
||||||
|
(value) < END_##type)
|
||||||
|
|
||||||
|
/* Test a parameter than can be NULL or a valid pointer */
|
||||||
|
#define VALID_REF_OR_NULL(ptr) IMPLICATION((ptr) != NULL, VALID_REF(ptr))
|
||||||
|
#define VALID_FN_REF_OR_NULL(ptr) IMPLICATION((ptr) != NULL, VALID_FN_REF(ptr))
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#define VALID_TRANSLATED_STRING(ts) (!(ts).isNull())
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These macros are a little complicated but it allows one to
|
||||||
|
* write a simple assertion regardless of the zone type or
|
||||||
|
* selected plane:
|
||||||
|
*
|
||||||
|
* REQUIRE(VALID_CELL_INDEX(CZData, CellIndex, Plane)));
|
||||||
|
*
|
||||||
|
* Prior to using the macros a call to SetupXxx,
|
||||||
|
* or at a minimum SetupCZData, must be called to setup
|
||||||
|
* the globals defining the dataset structure.
|
||||||
|
*/
|
||||||
|
#define VALID_FE_CELL_INDEX(CZData, CellIndex) \
|
||||||
|
(/* CellIndex range test */ \
|
||||||
|
0 <= (CellIndex) && \
|
||||||
|
(CellIndex) < (CZData)->NumElements)
|
||||||
|
|
||||||
|
#define VALID_IPLANE_CELL_INDEX(CZData,CellIndex) \
|
||||||
|
(/* CellIndex range test */ \
|
||||||
|
(CellIndex) >= 0 && \
|
||||||
|
IINDEX((CZData),CellIndex) <= MAX((CZData)->NumIPtsM1,1) && \
|
||||||
|
JINDEX((CZData),CellIndex) < MAX((CZData)->NumJPtsM1,1) && \
|
||||||
|
KINDEX((CZData),CellIndex) < MAX((CZData)->NumKPtsM1,1))
|
||||||
|
|
||||||
|
#define VALID_JPLANE_CELL_INDEX(CZData,CellIndex) \
|
||||||
|
(/* CellIndex range test */ \
|
||||||
|
(CellIndex) >= 0 && \
|
||||||
|
IINDEX((CZData),CellIndex) < MAX((CZData)->NumIPtsM1,1) && \
|
||||||
|
JINDEX((CZData),CellIndex) <= MAX((CZData)->NumJPtsM1,1) && \
|
||||||
|
KINDEX((CZData),CellIndex) < MAX((CZData)->NumKPtsM1,1))
|
||||||
|
|
||||||
|
#define VALID_KPLANE_CELL_INDEX(CZData,CellIndex) \
|
||||||
|
(/* CellIndex range test */ \
|
||||||
|
(CellIndex) >= 0 && \
|
||||||
|
IINDEX((CZData),CellIndex) < MAX((CZData)->NumIPtsM1,1) && \
|
||||||
|
JINDEX((CZData),CellIndex) < MAX((CZData)->NumJPtsM1,1) && \
|
||||||
|
KINDEX((CZData),CellIndex) <= MAX((CZData)->NumKPtsM1,1))
|
||||||
|
|
||||||
|
#define VALID_ORDERED_CELL_INDEX(CZData, CellIndex, Plane) \
|
||||||
|
(/* macro preconditions */ \
|
||||||
|
((IJKPlanes_e)(Plane) == IJKPlanes_I || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_J || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_K || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_Volume) && \
|
||||||
|
\
|
||||||
|
/* CellIndex range test */ \
|
||||||
|
(IMPLICATION(((IJKPlanes_e)(Plane) == IJKPlanes_I || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_Volume), \
|
||||||
|
VALID_IPLANE_CELL_INDEX((CZData),CellIndex)) && \
|
||||||
|
IMPLICATION(((IJKPlanes_e)(Plane) == IJKPlanes_J || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_Volume), \
|
||||||
|
VALID_JPLANE_CELL_INDEX((CZData),CellIndex)) && \
|
||||||
|
IMPLICATION(((IJKPlanes_e)(Plane) == IJKPlanes_K || \
|
||||||
|
(IJKPlanes_e)(Plane) == IJKPlanes_Volume), \
|
||||||
|
VALID_KPLANE_CELL_INDEX((CZData),CellIndex))))
|
||||||
|
|
||||||
|
#define VALID_CELL_INDEX(CZData, CellIndex, Plane) \
|
||||||
|
(((CZData)->NM != NULL || (CZData)->FM != NULL) ? \
|
||||||
|
VALID_FE_CELL_INDEX((CZData), (CellIndex)) : \
|
||||||
|
VALID_ORDERED_CELL_INDEX((CZData), (CellIndex), (Plane)))
|
||||||
|
|
||||||
|
#define VALID_DATASET(dataSet,checkNumZones) (((dataSet) != NULL) && \
|
||||||
|
IMPLICATION((checkNumZones),(dataSet)->NumZones >= 1))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
/* Here is a more specific check in Windows for a valid
|
||||||
|
pointer to an MFC Window object.
|
||||||
|
Note that GetSafeHwnd() works even if pWnd is NULL, because
|
||||||
|
it checks the 'this' pointer first */
|
||||||
|
# define VALID_WND(pWnd) (::IsWindow((pWnd)->GetSafeHwnd()))
|
||||||
|
|
||||||
|
#else /* !MSWIN */
|
||||||
|
# define VALID_WND(pWnd) /* Should not be used in Motif */
|
||||||
|
#endif /* MSWIN */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* Check for a non-zero length string */
|
||||||
|
#if defined MSWIN
|
||||||
|
# if defined NO_ASSERTS
|
||||||
|
# define VALID_NON_ZERO_LEN_STR(str) (VALID_REF(str) && !ISEMPTYSTRING(str))
|
||||||
|
# else
|
||||||
|
# define VALID_NON_ZERO_LEN_STR(str) \
|
||||||
|
(VALID_REF(str) && \
|
||||||
|
!IsBadReadPtr((const void*)(str),(UINT_PTR)(1+strlen((const char*)(str)))) && \
|
||||||
|
!ISEMPTYSTRING(str))
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define VALID_NON_ZERO_LEN_STR(str) (VALID_REF(str) && !ISEMPTYSTRING(str))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VALID_SET_INDEX(setIndex) (((SetIndex_t)setIndex)>=(SetIndex_t)1)
|
||||||
|
|
||||||
|
/* Check for valid stdio file handle */
|
||||||
|
#define VALID_FILE_HANDLE(stream) ((stream) != NULL)
|
||||||
|
|
||||||
|
/* To check colors and pen numbers */
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#define VALID_BASIC_COLOR(BColor) \
|
||||||
|
(FirstBasicColor<=(BColor) && (BColor)<=LastBasicColor)
|
||||||
|
#define VALID_CONTOUR_COLOR(Color) \
|
||||||
|
(ContourColorOffset<=(Color) && \
|
||||||
|
(Color)<ContourColorOffset+GeneralBase.Limits.MaxNumContourLevels+1)
|
||||||
|
#define VALID_PLOTTING_COLOR(Color) \
|
||||||
|
(VALID_BASIC_COLOR(Color) || VALID_CONTOUR_COLOR(Color))
|
||||||
|
#define VALID_INTERFACE_SPECIFIC_COLOR(BColor) \
|
||||||
|
(FirstInterfaceColor<=(BColor) && (BColor)<=LastInterfaceColor)
|
||||||
|
#define VALID_INTERFACE_COLOR(Color) \
|
||||||
|
(VALID_PLOTTING_COLOR(Color) || VALID_INTERFACE_SPECIFIC_COLOR(Color))
|
||||||
|
#define VALID_MULTICOLOR_COLOR(Color) \
|
||||||
|
(((Color) == MultiColor_C) || ((Color) == MultiColor2_C) || \
|
||||||
|
((Color) == MultiColor3_C) || ((Color) == MultiColor4_C) || \
|
||||||
|
((Color) == MultiColor5_C) || ((Color) == MultiColor6_C) || \
|
||||||
|
((Color) == MultiColor7_C) || ((Color) == MultiColor8_C))
|
||||||
|
#define VALID_RGB_COLOR(Color) \
|
||||||
|
((Color) == RGBColor_C)
|
||||||
|
#define VALID_ASSIGNABLE_COLOR(C) \
|
||||||
|
(VALID_BASIC_COLOR(C) || \
|
||||||
|
VALID_MULTICOLOR_COLOR(C) || \
|
||||||
|
VALID_RGB_COLOR(C))
|
||||||
|
#define VALID_PEN_OFFSET(PenOffset) \
|
||||||
|
(Black_C<=(PenOffset) && (PenOffset)<=NumPlotterPens)
|
||||||
|
#define VALID_PEN_OFFSET_FOR_OBJECT(PenOffset) \
|
||||||
|
(FirstObjectPen<=(PenOffset) && (PenOffset)<=LastObjectPen)
|
||||||
|
|
||||||
|
|
||||||
|
/* to check FE cells */
|
||||||
|
#define VALID_ELEMENT_TYPE(element_type) \
|
||||||
|
((element_type) == ZoneType_FETriangle || \
|
||||||
|
(element_type) == ZoneType_FEQuad || \
|
||||||
|
(element_type) == ZoneType_FETetra || \
|
||||||
|
(element_type) == ZoneType_FEBrick || \
|
||||||
|
(element_type) == ZoneType_FELineSeg)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test validity of zone and variable names. A valid name is one that has a
|
||||||
|
* valid reference, is not padded with spaces and is within the maximum
|
||||||
|
* specified length.
|
||||||
|
*/
|
||||||
|
#define VALID_NAME(Name, MaxLength) \
|
||||||
|
(VALID_REF(Name) && \
|
||||||
|
(ISEMPTYSTRING(Name) || \
|
||||||
|
(!isspace((Name)[0]) && !isspace((Name)[strlen(Name)-1]))) && \
|
||||||
|
strlen(Name) <= (MaxLength))
|
||||||
|
#define VALID_ZONE_NAME(Name) VALID_NAME((Name), MaxChrsZnTitle)
|
||||||
|
#define VALID_VAR_NAME(Name) VALID_NAME((Name), MaxChrsVarName)
|
||||||
|
|
||||||
|
|
||||||
|
/* Special test for lighting effect (don't allow "none" in some cases) */
|
||||||
|
#define VALID_LIGHTINGEFFECT(L) \
|
||||||
|
(((L) == LightingEffect_Paneled) || ((L) == LightingEffect_Gouraud))
|
||||||
|
|
||||||
|
|
||||||
|
/* type definition for assert failure notification function */
|
||||||
|
typedef void (*TAssertFailureNotifyFunc)(
|
||||||
|
const char *expression, /* text representation of the assertion */
|
||||||
|
const char *file_name, /* name of the file containing the assertion */
|
||||||
|
int line); /* line number in the file of the assertion */
|
||||||
|
|
||||||
|
#if !defined STD_ASSERTS
|
||||||
|
/* external function prototypes */
|
||||||
|
extern void TAssert(
|
||||||
|
const char *expression, /* text representation of the assertion */
|
||||||
|
const char *file_name, /* name of the file containing the assertion */
|
||||||
|
int line); /* line number in the file of the assertion */
|
||||||
|
|
||||||
|
extern TAssertFailureNotifyFunc InstallTAssertFailureNotify(
|
||||||
|
TAssertFailureNotifyFunc new_function); /* new notification function */
|
||||||
|
#endif /* !STD_ASSERTS */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
#if defined NO_ASSERTS
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
# define TASSERT(EXPR)
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
# define INVARIANT(EXPR)
|
||||||
|
# define REQUIRE(EXPR)
|
||||||
|
# define ENSURE(EXPR)
|
||||||
|
# define CHECK(EXPR)
|
||||||
|
# ifdef VERIFY
|
||||||
|
# undef VERIFY
|
||||||
|
# endif
|
||||||
|
# define VERIFY(EXPR) ((void)(EXPR))
|
||||||
|
/*
|
||||||
|
* Only define IGNORENOTIMPLEMENTED if building a "test" release build
|
||||||
|
* that you are fully aware may contain unimplemented features.
|
||||||
|
*/
|
||||||
|
# if defined IGNORENOTIMPLEMENTED
|
||||||
|
# define NOT_IMPLEMENTED() CHECK(FALSE)
|
||||||
|
# else
|
||||||
|
# if defined MSWIN
|
||||||
|
/*
|
||||||
|
* NOT_IMPLEMENTED is defined using a parameter, but should be called with none,
|
||||||
|
* this will then throw a warning and not break the compile. Unix doesn't pick
|
||||||
|
* up this warning, so break the compile under Unix
|
||||||
|
*/
|
||||||
|
# define NOT_IMPLEMENTED(x) TAssert("Not Implemented", __FILE__, __LINE__)
|
||||||
|
# endif
|
||||||
|
# if defined UNIXX
|
||||||
|
# define NOT_IMPLEMENTED() not implemented /* intentionally break the compile */
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#elif defined STD_ASSERTS
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
# define TASSERT(EXPR) assert(EXPR)
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
# define INVARIANT(EXPR) assert(EXPR)
|
||||||
|
# define REQUIRE(EXPR) assert(EXPR)
|
||||||
|
# define ENSURE(EXPR) assert(EXPR)
|
||||||
|
# define CHECK(EXPR) assert(EXPR)
|
||||||
|
# ifdef VERIFY
|
||||||
|
# undef VERIFY
|
||||||
|
# endif
|
||||||
|
# ifndef VERIFY
|
||||||
|
# if defined NDEBUG
|
||||||
|
# define VERIFY(EXPR) ((void)(EXPR))
|
||||||
|
# else
|
||||||
|
# define VERIFY(EXPR) assert(EXPR)
|
||||||
|
# endif
|
||||||
|
# endif /* VERIFY */
|
||||||
|
# define NOT_IMPLEMENTED() assert(!("Not Implemented"))
|
||||||
|
#else
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if defined (MSWIN)
|
||||||
|
#if defined CHECKED_BUILD
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
class AssertionLog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void initializeAssertLog(const std::string &fileName);
|
||||||
|
static bool isLoggingAssertions();
|
||||||
|
static void addAssertion(const std::string &message);
|
||||||
|
private:
|
||||||
|
static void writeOutAssertion(const std::string &message);
|
||||||
|
private:
|
||||||
|
static bool logAssertions;
|
||||||
|
static std::string logFileName;
|
||||||
|
static std::vector<std::string> assertList;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void TWinCheckedFailedLine(const char *Expr,
|
||||||
|
const char *FileName,
|
||||||
|
int LineNum);
|
||||||
|
|
||||||
|
#define TASSERT(EXPR)\
|
||||||
|
do { if (!(EXPR)) { TWinCheckedFailedLine(#EXPR,__FILE__,__LINE__); } } while (0)
|
||||||
|
#else
|
||||||
|
#define TASSERT(EXPR) ASSERT(EXPR) /* MFC assert.
|
||||||
|
Works in both release & debug builds */
|
||||||
|
#endif /* CHECKED_BUILD */
|
||||||
|
#else
|
||||||
|
#define TASSERT(EXPR) (void)((EXPR) || (TAssert(#EXPR, __FILE__, __LINE__), 0))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
# if defined NO_INVARIANTS
|
||||||
|
# define INVARIANT(EXPR)
|
||||||
|
# else
|
||||||
|
# define INVARIANT(EXPR) TASSERT(EXPR)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined NO_PRECONDITIONS
|
||||||
|
# define REQUIRE(EXPR)
|
||||||
|
# else
|
||||||
|
# define REQUIRE(EXPR) TASSERT(EXPR)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined NO_POSTCONDITIONS
|
||||||
|
# define ENSURE(EXPR)
|
||||||
|
# else
|
||||||
|
# define ENSURE(EXPR) TASSERT(EXPR)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined VERIFY
|
||||||
|
# undef VERIFY
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined NO_CHECKS
|
||||||
|
# define CHECK(EXPR)
|
||||||
|
# define VERIFY(EXPR) ((void)(EXPR))
|
||||||
|
# else
|
||||||
|
# define CHECK(EXPR) TASSERT(EXPR)
|
||||||
|
# if defined NDEBUG
|
||||||
|
# define VERIFY(EXPR) ((void)(EXPR))
|
||||||
|
# else
|
||||||
|
# define VERIFY(EXPR) TASSERT(EXPR)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined NICE_NOT_IMPLEMENTED
|
||||||
|
# define NOT_IMPLEMENTED() NiceNotImplemented()
|
||||||
|
# else
|
||||||
|
# define NOT_IMPLEMENTED() TASSERT(!("Not Implemented"))
|
||||||
|
# endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
#endif
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if !defined STD_ASSERTS
|
||||||
|
extern void TecplotMopupOnAssert(void);
|
||||||
|
#endif /* !STD_ASSERTS */
|
||||||
|
|
||||||
|
#if defined NICE_NOT_IMPLEMENTED
|
||||||
|
extern void NiceNotImplemented(void);
|
||||||
|
#endif
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
/* convenience macros for implication, P -> Q, and equivalence, P <-> Q. */
|
||||||
|
#define IMPLICATION(P,Q) (!(P) || (Q))
|
||||||
|
#define EQUIVALENCE(P,Q) ((P) == (Q))
|
||||||
|
|
||||||
|
/* BEGINREMOVEFROMADDON */
|
||||||
|
#if defined RLM
|
||||||
|
#define VALID_RLM_HANDLE(h) ((h) != NULL)
|
||||||
|
#endif /* RLM */
|
||||||
|
/* ENDREMOVEFROMADDON */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* TASSERT_H */
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "TECXXX.h"
|
||||||
@ -0,0 +1,698 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* TECXXX.h: Copyright (C) 1988-2008 Tecplot, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined TECXXX_H_
|
||||||
|
#define TECXXX_H_
|
||||||
|
|
||||||
|
#if !defined CRAY
|
||||||
|
# define TECFOREIGN112 tecforeign112
|
||||||
|
# define TECINI112 tecini112
|
||||||
|
# define TECZNE112 teczne112
|
||||||
|
# define TECDAT112 tecdat112
|
||||||
|
# define TECNOD112 tecnod112
|
||||||
|
# define TECGEO112 tecgeo112
|
||||||
|
# define TECTXT112 tectxt112
|
||||||
|
# define TECLAB112 teclab112
|
||||||
|
# define TECFIL112 tecfil112
|
||||||
|
# define TECEND112 tecend112
|
||||||
|
# define TECUSR112 tecusr112
|
||||||
|
# define TECAUXSTR112 tecauxstr112
|
||||||
|
# define TECZAUXSTR112 teczauxstr112
|
||||||
|
# define TECVAUXSTR112 tecvauxstr112
|
||||||
|
# define TECFACE112 tecface112
|
||||||
|
# define TECPOLY112 tecpoly112
|
||||||
|
|
||||||
|
# define TECFOREIGN111 tecforeign111
|
||||||
|
# define TECINI111 tecini111
|
||||||
|
# define TECZNE111 teczne111
|
||||||
|
# define TECDAT111 tecdat111
|
||||||
|
# define TECNOD111 tecnod111
|
||||||
|
# define TECGEO111 tecgeo111
|
||||||
|
# define TECTXT111 tectxt111
|
||||||
|
# define TECLAB111 teclab111
|
||||||
|
# define TECFIL111 tecfil111
|
||||||
|
# define TECEND111 tecend111
|
||||||
|
# define TECUSR111 tecusr111
|
||||||
|
# define TECAUXSTR111 tecauxstr111
|
||||||
|
# define TECZAUXSTR111 teczauxstr111
|
||||||
|
# define TECVAUXSTR111 tecvauxstr111
|
||||||
|
# define TECFACE111 tecface111
|
||||||
|
# define TECPOLY111 tecpoly111
|
||||||
|
|
||||||
|
# define TECFOREIGN110 tecforeign110
|
||||||
|
# define TECINI110 tecini110
|
||||||
|
# define TECZNE110 teczne110
|
||||||
|
# define TECDAT110 tecdat110
|
||||||
|
# define TECNOD110 tecnod110
|
||||||
|
# define TECGEO110 tecgeo110
|
||||||
|
# define TECTXT110 tectxt110
|
||||||
|
# define TECLAB110 teclab110
|
||||||
|
# define TECFIL110 tecfil110
|
||||||
|
# define TECEND110 tecend110
|
||||||
|
# define TECUSR110 tecusr110
|
||||||
|
# define TECAUXSTR110 tecauxstr110
|
||||||
|
# define TECZAUXSTR110 teczauxstr110
|
||||||
|
# define TECVAUXSTR110 tecvauxstr110
|
||||||
|
# define TECFACE110 tecface110
|
||||||
|
|
||||||
|
# define TECFOREIGN100 tecforeign100
|
||||||
|
# define TECINI100 tecini100
|
||||||
|
# define TECZNE100 teczne100
|
||||||
|
# define TECDAT100 tecdat100
|
||||||
|
# define TECNOD100 tecnod100
|
||||||
|
# define TECGEO100 tecgeo100
|
||||||
|
# define TECTXT100 tectxt100
|
||||||
|
# define TECLAB100 teclab100
|
||||||
|
# define TECFIL100 tecfil100
|
||||||
|
# define TECEND100 tecend100
|
||||||
|
# define TECUSR100 tecusr100
|
||||||
|
# define TECAUXSTR100 tecauxstr100
|
||||||
|
# define TECZAUXSTR100 teczauxstr100
|
||||||
|
# define TECVAUXSTR100 tecvauxstr100
|
||||||
|
# define TECFACE100 tecface100
|
||||||
|
|
||||||
|
# define TECINI tecini
|
||||||
|
# define TECZNE teczne
|
||||||
|
# define TECDAT tecdat
|
||||||
|
# define TECNOD tecnod
|
||||||
|
# define TECGEO tecgeo
|
||||||
|
# define TECTXT tectxt
|
||||||
|
# define TECLAB teclab
|
||||||
|
# define TECFIL tecfil
|
||||||
|
# define TECEND tecend
|
||||||
|
# define TECUSR tecusr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
#define INTEGER4 int
|
||||||
|
#define INTEGER2 short
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32
|
||||||
|
#if !defined MSWIN
|
||||||
|
#define MSWIN /* MSWIN */
|
||||||
|
#endif
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#if !defined (EXTERNC)
|
||||||
|
# if defined (__cplusplus)
|
||||||
|
# define EXTERNC extern "C"
|
||||||
|
# else
|
||||||
|
# define EXTERNC
|
||||||
|
# endif /* __cplusplus */
|
||||||
|
#endif /* EXTERN_C */
|
||||||
|
|
||||||
|
#if !defined (STDCALL)
|
||||||
|
# if defined MSWIN
|
||||||
|
# define STDCALL __stdcall
|
||||||
|
# else /* !MSWIN */
|
||||||
|
# define STDCALL
|
||||||
|
# endif /* MSWIN */
|
||||||
|
#endif /* STDCALL */
|
||||||
|
|
||||||
|
#if !defined (DLLEXPORT)
|
||||||
|
# if defined (MSWIN)
|
||||||
|
# define DLLEXPORT _declspec (dllexport)
|
||||||
|
# else
|
||||||
|
# define DLLEXPORT
|
||||||
|
# endif /* MSWIN */
|
||||||
|
#endif /* DLLEXPORT */
|
||||||
|
|
||||||
|
#if !defined (DLLIMPORT)
|
||||||
|
# if defined (MSWIN)
|
||||||
|
# define DLLIMPORT _declspec (dllimport)
|
||||||
|
# else
|
||||||
|
# define DLLIMPORT
|
||||||
|
# endif /* MSWIN */
|
||||||
|
#endif /* DLLIMPORT */
|
||||||
|
|
||||||
|
|
||||||
|
#if defined (TECPLOTKERNEL)
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else /* !TECPLOTKERNAL && !MAKEARCHIVE */
|
||||||
|
# define LIBCALL STDCALL
|
||||||
|
# define LIBFUNCTION EXTERNC DLLIMPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* V11.3 tecio functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
LIBFUNCTION void LIBCALL TECFOREIGN112(INTEGER4 *OutputForeignByteOrder);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECINI112(char *Title,
|
||||||
|
char *Variables,
|
||||||
|
char *FName,
|
||||||
|
char *ScratchDir,
|
||||||
|
INTEGER4 *FileType,
|
||||||
|
INTEGER4 *Debug,
|
||||||
|
INTEGER4 *VIsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZNE112(char *ZoneTitle,
|
||||||
|
INTEGER4 *ZoneType,
|
||||||
|
INTEGER4 *IMxOrNumPts,
|
||||||
|
INTEGER4 *JMxOrNumElements,
|
||||||
|
INTEGER4 *KMxOrNumFaces,
|
||||||
|
INTEGER4 *ICellMx,
|
||||||
|
INTEGER4 *JCellMx,
|
||||||
|
INTEGER4 *KCellMx,
|
||||||
|
double *SolutionTime,
|
||||||
|
INTEGER4 *StrandID,
|
||||||
|
INTEGER4 *ParentZone,
|
||||||
|
INTEGER4 *IsBlock,
|
||||||
|
INTEGER4 *NumFaceConnections,
|
||||||
|
INTEGER4 *FaceNeighborMode,
|
||||||
|
INTEGER4 *TotalNumFaceNodes,
|
||||||
|
INTEGER4 *NumConnectedBoundaryFaces,
|
||||||
|
INTEGER4 *TotalNumBoundaryConnections,
|
||||||
|
INTEGER4 *PassiveVarList,
|
||||||
|
INTEGER4 *ValueLocation,
|
||||||
|
INTEGER4 *ShareVarFromZone,
|
||||||
|
INTEGER4 *ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECDAT112(INTEGER4 *N,
|
||||||
|
void *FieldData,
|
||||||
|
INTEGER4 *IsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECNOD112(INTEGER4 *NData);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECEND112(void);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECLAB112(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECUSR112(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECGEO112(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
double *ZPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *Color,
|
||||||
|
INTEGER4 *FillColor,
|
||||||
|
INTEGER4 *IsFilled,
|
||||||
|
INTEGER4 *GeomType,
|
||||||
|
INTEGER4 *LinePattern,
|
||||||
|
double *PatternLength,
|
||||||
|
double *LineThickness,
|
||||||
|
INTEGER4 *NumEllipsePts,
|
||||||
|
INTEGER4 *ArrowheadStyle,
|
||||||
|
INTEGER4 *ArrowheadAttachment,
|
||||||
|
double *ArrowheadSize,
|
||||||
|
double *ArrowheadAngle,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
INTEGER4 *NumSegments,
|
||||||
|
INTEGER4 *NumSegPts,
|
||||||
|
float *XGeomData,
|
||||||
|
float *YGeomData,
|
||||||
|
float *ZGeomData,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECTXT112(double *XOrThetaPos,
|
||||||
|
double *YOrRPos,
|
||||||
|
double *ZOrUnusedPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *BFont,
|
||||||
|
INTEGER4 *FontHeightUnits,
|
||||||
|
double *FontHeight,
|
||||||
|
INTEGER4 *BoxType,
|
||||||
|
double *BoxMargin,
|
||||||
|
double *BoxLineThickness,
|
||||||
|
INTEGER4 *BoxColor,
|
||||||
|
INTEGER4 *BoxFillColor,
|
||||||
|
double *Angle,
|
||||||
|
INTEGER4 *Anchor,
|
||||||
|
double *LineSpacing,
|
||||||
|
INTEGER4 *TextColor,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
char *String,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFIL112(INTEGER4 *F);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECAUXSTR112(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZAUXSTR112(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECVAUXSTR112(INTEGER4 *Var,
|
||||||
|
char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFACE112(INTEGER4 *FaceConnections);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECPOLY112(INTEGER4 *FaceNodeCounts,
|
||||||
|
INTEGER4 *FaceNodes,
|
||||||
|
INTEGER4 *FaceLeftElems,
|
||||||
|
INTEGER4 *FaceRightElems,
|
||||||
|
INTEGER4 *FaceBndryConnectionCounts,
|
||||||
|
INTEGER4 *FaceBndryConnectionElems,
|
||||||
|
INTEGER4 *FaceBndryConnectionZones);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* V11.1 tecio functions TODO (JN): Tecplot's version is still in flux so the .1 may change
|
||||||
|
*/
|
||||||
|
|
||||||
|
LIBFUNCTION void LIBCALL TECFOREIGN111(INTEGER4 *OutputForeignByteOrder);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECINI111(char *Title,
|
||||||
|
char *Variables,
|
||||||
|
char *FName,
|
||||||
|
char *ScratchDir,
|
||||||
|
INTEGER4 *FileType,
|
||||||
|
INTEGER4 *Debug,
|
||||||
|
INTEGER4 *VIsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZNE111(char *ZoneTitle,
|
||||||
|
INTEGER4 *ZoneType,
|
||||||
|
INTEGER4 *IMxOrNumPts,
|
||||||
|
INTEGER4 *JMxOrNumElements,
|
||||||
|
INTEGER4 *KMxOrNumFaces,
|
||||||
|
INTEGER4 *ICellMx,
|
||||||
|
INTEGER4 *JCellMx,
|
||||||
|
INTEGER4 *KCellMx,
|
||||||
|
double *SolutionTime,
|
||||||
|
INTEGER4 *StrandID,
|
||||||
|
INTEGER4 *ParentZone,
|
||||||
|
INTEGER4 *IsBlock,
|
||||||
|
INTEGER4 *NumFaceConnections,
|
||||||
|
INTEGER4 *FaceNeighborMode,
|
||||||
|
INTEGER4 *TotalNumFaceNodes,
|
||||||
|
INTEGER4 *NumConnectedBoundaryFaces,
|
||||||
|
INTEGER4 *TotalNumBoundaryConnections,
|
||||||
|
INTEGER4 *PassiveVarList,
|
||||||
|
INTEGER4 *ValueLocation,
|
||||||
|
INTEGER4 *ShareVarFromZone,
|
||||||
|
INTEGER4 *ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECDAT111(INTEGER4 *N,
|
||||||
|
void *FieldData,
|
||||||
|
INTEGER4 *IsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECNOD111(INTEGER4 *NData);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECEND111(void);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECLAB111(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECUSR111(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECGEO111(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
double *ZPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *Color,
|
||||||
|
INTEGER4 *FillColor,
|
||||||
|
INTEGER4 *IsFilled,
|
||||||
|
INTEGER4 *GeomType,
|
||||||
|
INTEGER4 *LinePattern,
|
||||||
|
double *PatternLength,
|
||||||
|
double *LineThickness,
|
||||||
|
INTEGER4 *NumEllipsePts,
|
||||||
|
INTEGER4 *ArrowheadStyle,
|
||||||
|
INTEGER4 *ArrowheadAttachment,
|
||||||
|
double *ArrowheadSize,
|
||||||
|
double *ArrowheadAngle,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
INTEGER4 *NumSegments,
|
||||||
|
INTEGER4 *NumSegPts,
|
||||||
|
float *XGeomData,
|
||||||
|
float *YGeomData,
|
||||||
|
float *ZGeomData,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECTXT111(double *XOrThetaPos,
|
||||||
|
double *YOrRPos,
|
||||||
|
double *ZOrUnusedPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *BFont,
|
||||||
|
INTEGER4 *FontHeightUnits,
|
||||||
|
double *FontHeight,
|
||||||
|
INTEGER4 *BoxType,
|
||||||
|
double *BoxMargin,
|
||||||
|
double *BoxLineThickness,
|
||||||
|
INTEGER4 *BoxColor,
|
||||||
|
INTEGER4 *BoxFillColor,
|
||||||
|
double *Angle,
|
||||||
|
INTEGER4 *Anchor,
|
||||||
|
double *LineSpacing,
|
||||||
|
INTEGER4 *TextColor,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
char *String,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFIL111(INTEGER4 *F);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECAUXSTR111(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZAUXSTR111(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECVAUXSTR111(INTEGER4 *Var,
|
||||||
|
char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFACE111(INTEGER4 *FaceConnections);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECPOLY111(INTEGER4 *FaceNodeCounts,
|
||||||
|
INTEGER4 *FaceNodes,
|
||||||
|
INTEGER4 *FaceLeftElems,
|
||||||
|
INTEGER4 *FaceRightElems,
|
||||||
|
INTEGER4 *FaceBndryConnectionCounts,
|
||||||
|
INTEGER4 *FaceBndryConnectionElems,
|
||||||
|
INTEGER2 *FaceBndryConnectionZones);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* V11 tecio functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
LIBFUNCTION void LIBCALL TECFOREIGN110(INTEGER4 *OutputForeignByteOrder);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECINI110(char *Title,
|
||||||
|
char *Variables,
|
||||||
|
char *FName,
|
||||||
|
char *ScratchDir,
|
||||||
|
INTEGER4 *Debug,
|
||||||
|
INTEGER4 *VIsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZNE110(char *ZoneTitle,
|
||||||
|
INTEGER4 *ZoneType,
|
||||||
|
INTEGER4 *IMxOrNumPts,
|
||||||
|
INTEGER4 *JMxOrNumElements,
|
||||||
|
INTEGER4 *KMxOrNumFaces,
|
||||||
|
INTEGER4 *ICellMx,
|
||||||
|
INTEGER4 *JCellMx,
|
||||||
|
INTEGER4 *KCellMx,
|
||||||
|
double *SolutionTime,
|
||||||
|
INTEGER4 *StrandID,
|
||||||
|
INTEGER4 *ParentZone,
|
||||||
|
INTEGER4 *IsBlock,
|
||||||
|
INTEGER4 *NumFaceConnections,
|
||||||
|
INTEGER4 *FaceNeighborMode,
|
||||||
|
INTEGER4 *PassiveVarList,
|
||||||
|
INTEGER4 *ValueLocation,
|
||||||
|
INTEGER4 *ShareVarFromZone,
|
||||||
|
INTEGER4 *ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECDAT110(INTEGER4 *N,
|
||||||
|
void *FieldData,
|
||||||
|
INTEGER4 *IsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECNOD110(INTEGER4 *NData);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECEND110(void);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECLAB110(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECUSR110(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECGEO110(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
double *ZPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *Color,
|
||||||
|
INTEGER4 *FillColor,
|
||||||
|
INTEGER4 *IsFilled,
|
||||||
|
INTEGER4 *GeomType,
|
||||||
|
INTEGER4 *LinePattern,
|
||||||
|
double *PatternLength,
|
||||||
|
double *LineThickness,
|
||||||
|
INTEGER4 *NumEllipsePts,
|
||||||
|
INTEGER4 *ArrowheadStyle,
|
||||||
|
INTEGER4 *ArrowheadAttachment,
|
||||||
|
double *ArrowheadSize,
|
||||||
|
double *ArrowheadAngle,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
INTEGER4 *NumSegments,
|
||||||
|
INTEGER4 *NumSegPts,
|
||||||
|
float *XGeomData,
|
||||||
|
float *YGeomData,
|
||||||
|
float *ZGeomData,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECTXT110(double *XOrThetaPos,
|
||||||
|
double *YOrRPos,
|
||||||
|
double *ZOrUnusedPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *BFont,
|
||||||
|
INTEGER4 *FontHeightUnits,
|
||||||
|
double *FontHeight,
|
||||||
|
INTEGER4 *BoxType,
|
||||||
|
double *BoxMargin,
|
||||||
|
double *BoxLineThickness,
|
||||||
|
INTEGER4 *BoxColor,
|
||||||
|
INTEGER4 *BoxFillColor,
|
||||||
|
double *Angle,
|
||||||
|
INTEGER4 *Anchor,
|
||||||
|
double *LineSpacing,
|
||||||
|
INTEGER4 *TextColor,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
char *String,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFIL110(INTEGER4 *F);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECAUXSTR110(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZAUXSTR110(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECVAUXSTR110(INTEGER4 *Var,
|
||||||
|
char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFACE110(INTEGER4 *FaceConnections);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* V10 tecio functions kept for backward compatability.
|
||||||
|
*/
|
||||||
|
|
||||||
|
LIBFUNCTION void LIBCALL TECFOREIGN100(INTEGER4 *OutputForeignByteOrder);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECINI100(char *Title,
|
||||||
|
char *Variables,
|
||||||
|
char *FName,
|
||||||
|
char *ScratchDir,
|
||||||
|
INTEGER4 *Debug,
|
||||||
|
INTEGER4 *VIsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZNE100(char *ZoneTitle,
|
||||||
|
INTEGER4 *ZoneType,
|
||||||
|
INTEGER4 *IMxOrNumPts,
|
||||||
|
INTEGER4 *JMxOrNumElements,
|
||||||
|
INTEGER4 *KMxOrNumFaces,
|
||||||
|
INTEGER4 *ICellMx,
|
||||||
|
INTEGER4 *JCellMx,
|
||||||
|
INTEGER4 *KCellMx,
|
||||||
|
INTEGER4 *IsBlock,
|
||||||
|
INTEGER4 *NumFaceConnections,
|
||||||
|
INTEGER4 *FaceNeighborMode,
|
||||||
|
INTEGER4 *ValueLocation,
|
||||||
|
INTEGER4 *ShareVarFromZone,
|
||||||
|
INTEGER4 *ShareConnectivityFromZone);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECDAT100(INTEGER4 *N,
|
||||||
|
void *FieldData,
|
||||||
|
INTEGER4 *IsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECNOD100(INTEGER4 *NData);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECEND100(void);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECLAB100(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECUSR100(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECGEO100(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
double *ZPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *Color,
|
||||||
|
INTEGER4 *FillColor,
|
||||||
|
INTEGER4 *IsFilled,
|
||||||
|
INTEGER4 *GeomType,
|
||||||
|
INTEGER4 *LinePattern,
|
||||||
|
double *PatternLength,
|
||||||
|
double *LineThickness,
|
||||||
|
INTEGER4 *NumEllipsePts,
|
||||||
|
INTEGER4 *ArrowheadStyle,
|
||||||
|
INTEGER4 *ArrowheadAttachment,
|
||||||
|
double *ArrowheadSize,
|
||||||
|
double *ArrowheadAngle,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
INTEGER4 *NumSegments,
|
||||||
|
INTEGER4 *NumSegPts,
|
||||||
|
float *XGeomData,
|
||||||
|
float *YGeomData,
|
||||||
|
float *ZGeomData,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECTXT100(double *XOrThetaPos,
|
||||||
|
double *YOrRPos,
|
||||||
|
double *ZOrUnusedPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *BFont,
|
||||||
|
INTEGER4 *FontHeightUnits,
|
||||||
|
double *FontHeight,
|
||||||
|
INTEGER4 *BoxType,
|
||||||
|
double *BoxMargin,
|
||||||
|
double *BoxLineThickness,
|
||||||
|
INTEGER4 *BoxColor,
|
||||||
|
INTEGER4 *BoxFillColor,
|
||||||
|
double *Angle,
|
||||||
|
INTEGER4 *Anchor,
|
||||||
|
double *LineSpacing,
|
||||||
|
INTEGER4 *TextColor,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *Clipping,
|
||||||
|
char *String,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFIL100(INTEGER4 *F);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECAUXSTR100(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZAUXSTR100(char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECVAUXSTR100(INTEGER4 *Var,
|
||||||
|
char *Name,
|
||||||
|
char *Value);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFACE100(INTEGER4 *FaceConnections);
|
||||||
|
|
||||||
|
/* Old V9 functions retained for backward compatibility */
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECINI(char *Title,
|
||||||
|
char *Variables,
|
||||||
|
char *FName,
|
||||||
|
char *ScratchDir,
|
||||||
|
INTEGER4 *Debug,
|
||||||
|
INTEGER4 *VIsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECZNE(char *ZoneTitle,
|
||||||
|
INTEGER4 *IMx,
|
||||||
|
INTEGER4 *JMx,
|
||||||
|
INTEGER4 *KMx,
|
||||||
|
char *ZFormat,
|
||||||
|
char *DupList);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECDAT(INTEGER4 *N,
|
||||||
|
void *FieldData,
|
||||||
|
INTEGER4 *IsDouble);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECNOD(INTEGER4 *NData);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECEND(void);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECLAB(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECUSR(char *S);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECGEO(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
double *ZPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *Color,
|
||||||
|
INTEGER4 *FillColor,
|
||||||
|
INTEGER4 *IsFilled,
|
||||||
|
INTEGER4 *GeomType,
|
||||||
|
INTEGER4 *LinePattern,
|
||||||
|
double *PatternLength,
|
||||||
|
double *LineThickness,
|
||||||
|
INTEGER4 *NumEllipsePts,
|
||||||
|
INTEGER4 *ArrowheadStyle,
|
||||||
|
INTEGER4 *ArrowheadAttachment,
|
||||||
|
double *ArrowheadSize,
|
||||||
|
double *ArrowheadAngle,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
INTEGER4 *NumSegments,
|
||||||
|
INTEGER4 *NumSegPts,
|
||||||
|
float *XGeomData,
|
||||||
|
float *YGeomData,
|
||||||
|
float *ZGeomData,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECTXT(double *XPos,
|
||||||
|
double *YPos,
|
||||||
|
INTEGER4 *PosCoordMode,
|
||||||
|
INTEGER4 *AttachToZone,
|
||||||
|
INTEGER4 *Zone,
|
||||||
|
INTEGER4 *BFont,
|
||||||
|
INTEGER4 *FontHeightUnits,
|
||||||
|
double *FontHeight,
|
||||||
|
INTEGER4 *BoxType,
|
||||||
|
double *BoxMargin,
|
||||||
|
double *BoxLineThickness,
|
||||||
|
INTEGER4 *BoxColor,
|
||||||
|
INTEGER4 *BoxFillColor,
|
||||||
|
double *Angle,
|
||||||
|
INTEGER4 *Anchor,
|
||||||
|
double *LineSpacing,
|
||||||
|
INTEGER4 *TextColor,
|
||||||
|
INTEGER4 *Scope,
|
||||||
|
char *Text,
|
||||||
|
char *mfc);
|
||||||
|
|
||||||
|
LIBFUNCTION INTEGER4 LIBCALL TECFIL(INTEGER4 *F);
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
#endif /* TECXXX_H_ */
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined EXTERN
|
||||||
|
#undef EXTERN
|
||||||
|
#endif
|
||||||
|
#if defined TEXTMODULE
|
||||||
|
#define EXTERN
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _TEXT_H_INCLUDED
|
||||||
|
|
||||||
|
/* These macros for checking CoordSys_e and Units of text objects (i.e., those associated with the text tool). */
|
||||||
|
#define VALID_TEXT_COORDSYS(sys) (((sys)==CoordSys_Frame)||((sys)==CoordSys_Grid)||((sys)==CoordSys_Grid3D))
|
||||||
|
#define VALID_TEXT_UNITS(units) (((units)==Units_Grid)||((units)==Units_Frame)||((units)==Units_Point))
|
||||||
|
#define VALID_TEXT_COORDSYS_AND_UNITS(pos_sys, size_units) \
|
||||||
|
( VALID_TEXT_COORDSYS((pos_sys)) && \
|
||||||
|
VALID_TEXT_UNITS((size_units)) && \
|
||||||
|
! ((pos_sys) == CoordSys_Frame && (size_units) == Units_Grid) )
|
||||||
|
|
||||||
|
/* This is for any type of font in Tecplot. */
|
||||||
|
#define VALID_FONT_SIZEUNITS(units) (((units)==Units_Grid)||((units)==Units_Frame)||((units)==Units_Point)||(units)==Units_AxisPercentage)
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if 0 /* contract template */
|
||||||
|
#endif
|
||||||
|
#if 0 /* contract template */
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
@ -0,0 +1,362 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace strutil
|
||||||
|
{
|
||||||
|
|
||||||
|
#if defined MSWIN && !defined TECPLOTKERNEL
|
||||||
|
/**
|
||||||
|
* Stub function for non-TECPLOTKERNEL
|
||||||
|
*/
|
||||||
|
string LookUpTranslation(string& str)
|
||||||
|
{
|
||||||
|
return string(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for creating Utf8 string translations.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* String to translate.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* A new Utf8 translated string.
|
||||||
|
*/
|
||||||
|
static inline string* createUtf8StringTranslation(string& str)
|
||||||
|
{
|
||||||
|
#if defined MSWIN
|
||||||
|
string *result = new string(LookUpTranslation(str));
|
||||||
|
#else
|
||||||
|
string *result = new string(str);
|
||||||
|
#endif
|
||||||
|
ENSURE(VALID_REF(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
* Convenience function for creating wide string translations.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* String to translate.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* A new wide translated string.
|
||||||
|
*/
|
||||||
|
static inline wstring* createWideStringTranslation(string& str)
|
||||||
|
{
|
||||||
|
wstring *result = new wstring;
|
||||||
|
*result = StringToWString(LookUpTranslation(str));
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
* Convenience function for creating wide string with the given mode.
|
||||||
|
*
|
||||||
|
* @param mode
|
||||||
|
* Indicates if this string is to be translated or not.
|
||||||
|
* @param str
|
||||||
|
* String to translate.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* A new wide translated string.
|
||||||
|
*/
|
||||||
|
static inline wstring* createWideString(TranslatedString::Mode mode,
|
||||||
|
string& str)
|
||||||
|
{
|
||||||
|
REQUIRE(mode == TranslatedString::DoTranslate || mode == TranslatedString::DontTranslate);
|
||||||
|
|
||||||
|
wstring* result;
|
||||||
|
if (mode == TranslatedString::DoTranslate)
|
||||||
|
result = createWideStringTranslation(str);
|
||||||
|
else
|
||||||
|
result = new wstring(StringToWString(str));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void TranslatedString::init(TranslatedString::Mode mode,
|
||||||
|
const char* str,
|
||||||
|
const char* translatorNotes)
|
||||||
|
{
|
||||||
|
REQUIRE(mode == DoTranslate || mode == DontTranslate);
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(str));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(translatorNotes));
|
||||||
|
|
||||||
|
m_mode = mode;
|
||||||
|
m_isNull = (str == NULL);
|
||||||
|
if (!m_isNull)
|
||||||
|
m_string = str;
|
||||||
|
m_utf8String = NULL; // ...on demand resource
|
||||||
|
#if defined MSWIN
|
||||||
|
m_wideString = NULL; // ...on demand resource
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::TranslatedString()
|
||||||
|
{
|
||||||
|
init(DontTranslate, (const char*)NULL, (const char*)NULL);
|
||||||
|
ENSURE(this->isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString TranslatedString::null()
|
||||||
|
{
|
||||||
|
return dontTranslate(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::TranslatedString(TranslatedString::Mode mode,
|
||||||
|
const char* str,
|
||||||
|
const char* translatorNotes)
|
||||||
|
{
|
||||||
|
|
||||||
|
REQUIRE(mode == DoTranslate || mode == DontTranslate);
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(str));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(translatorNotes));
|
||||||
|
|
||||||
|
init(mode, str, translatorNotes);
|
||||||
|
ENSURE(this->isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::~TranslatedString()
|
||||||
|
{
|
||||||
|
delete m_utf8String;
|
||||||
|
#if defined MSWIN
|
||||||
|
delete m_wideString;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
bool TranslatedString::isValid() const
|
||||||
|
{
|
||||||
|
CHECK(IMPLICATION(m_isNull, m_string.length() == 0));
|
||||||
|
#if 0
|
||||||
|
/* TODO(DTO/RMS/CAM): 11/2/2007
|
||||||
|
* Code currently exists in Tecplot where we call translate() on a
|
||||||
|
* variable. This seems wrong and at times (PleaseWait() in
|
||||||
|
* particular) the variable passed is a NULL pointer which causes
|
||||||
|
* this assertion to fail. There is not enough time before v11.2
|
||||||
|
* release to remove all translate() calls to non-literal strings so
|
||||||
|
* we'll have to do this as a post release cleanup. For now just
|
||||||
|
* deactivate this assertion.
|
||||||
|
*/
|
||||||
|
CHECK(IMPLICATION(m_isNull, m_mode == DontTranslate));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
bool TranslatedString::isNull() const
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
return m_isNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
bool TranslatedString::isNullOrZeroLength() const
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
return m_isNull || m_string.length() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
const char* TranslatedString::c_str()
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
|
||||||
|
const char* result = NULL;
|
||||||
|
if (!isNull())
|
||||||
|
{
|
||||||
|
if (m_mode == DoTranslate)
|
||||||
|
{
|
||||||
|
if (m_utf8String == NULL)
|
||||||
|
m_utf8String = createUtf8StringTranslation(m_string);
|
||||||
|
result = m_utf8String->c_str();
|
||||||
|
}
|
||||||
|
else // ...if we aren't translating don't bother creating another Utf8 copy just use m_string
|
||||||
|
result = m_string.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(result == NULL || VALID_REF(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
const wchar_t *TranslatedString::c_wstr()
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
|
||||||
|
const wchar_t *result = NULL;
|
||||||
|
if (!isNull())
|
||||||
|
{
|
||||||
|
if (m_wideString == NULL)
|
||||||
|
m_wideString = createWideString(m_mode, m_string);
|
||||||
|
result = m_wideString->c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(result == NULL || VALID_REF(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::operator string()
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
REQUIRE(!isNull());
|
||||||
|
|
||||||
|
string* result;
|
||||||
|
if (m_mode == DoTranslate)
|
||||||
|
{
|
||||||
|
if (m_utf8String == NULL)
|
||||||
|
m_utf8String = createUtf8StringTranslation(m_string);
|
||||||
|
result = m_utf8String;
|
||||||
|
}
|
||||||
|
else // ...if we aren't translating don't bother creating another Utf8 copy just use m_string
|
||||||
|
result = &m_string;
|
||||||
|
|
||||||
|
return *result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::operator wstring()
|
||||||
|
{
|
||||||
|
INVARIANT(this->isValid());
|
||||||
|
REQUIRE(!isNull());
|
||||||
|
|
||||||
|
if (m_wideString == NULL)
|
||||||
|
m_wideString = createWideString(m_mode, m_string);
|
||||||
|
|
||||||
|
return *m_wideString;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString& TranslatedString::operator =(const TranslatedString& other)
|
||||||
|
{
|
||||||
|
REQUIRE(other.isValid());
|
||||||
|
|
||||||
|
if (this != &other) // ...only perform if not self assignment
|
||||||
|
{
|
||||||
|
m_mode = other.m_mode;
|
||||||
|
m_isNull = other.m_isNull;
|
||||||
|
m_string = other.m_string;
|
||||||
|
m_utf8String = (other.m_utf8String != NULL ? new string(*other.m_utf8String) : NULL);
|
||||||
|
#if defined MSWIN
|
||||||
|
m_wideString = (other.m_wideString != NULL ? new wstring(*other.m_wideString) : NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(this->isValid());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString::TranslatedString(const TranslatedString& other)
|
||||||
|
{
|
||||||
|
REQUIRE(other.isValid());
|
||||||
|
|
||||||
|
m_mode = other.m_mode;
|
||||||
|
m_isNull = other.m_isNull;
|
||||||
|
m_string = other.m_string;
|
||||||
|
m_utf8String = (other.m_utf8String != NULL ? new string(*other.m_utf8String) : NULL);
|
||||||
|
#if defined MSWIN
|
||||||
|
m_wideString = (other.m_wideString != NULL ? new wstring(*other.m_wideString) : NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENSURE(this->isValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString TranslatedString::translate(const char* str,
|
||||||
|
const char* translatorNotes)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(str));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(translatorNotes));
|
||||||
|
|
||||||
|
return TranslatedString(DoTranslate, str, translatorNotes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
TranslatedString TranslatedString::dontTranslate(const char* str)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(str));
|
||||||
|
|
||||||
|
return TranslatedString(DontTranslate, str, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,293 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TECPLOT_STRUTIL_TRANSLATEDSTRING
|
||||||
|
#define TECPLOT_STRUTIL_TRANSLATEDSTRING
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
#pragma warning(disable : 4181)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace tecplot
|
||||||
|
{
|
||||||
|
namespace strutil
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class responsible for translating strings for internationalization. This
|
||||||
|
* class is used both to perform the translation and to identify which strings
|
||||||
|
* are/aren't in need of translation.
|
||||||
|
*
|
||||||
|
* With the exception of the empty constructor all translated strings are
|
||||||
|
* created via static methods or inline helper functions named translate() and
|
||||||
|
* dontTranslate(). Translated strings created with a call to translate() are
|
||||||
|
* flagged as needing human translation and return the translated value at
|
||||||
|
* runtime. Translated strings created with a call to dontTranslate() are
|
||||||
|
* flagged as not needing human translation and return the non-translated value
|
||||||
|
* at runtime. Examples:
|
||||||
|
*
|
||||||
|
* ErrMsg(translate("Can I have %d cookies?", numCookies);
|
||||||
|
* ErrMsg(dontTranslate("%s"), errMsgString);
|
||||||
|
*
|
||||||
|
* Conversion methods exists for std::string so that they operate well
|
||||||
|
* together. Therefore you can pass translated strings to methods or functions
|
||||||
|
* that receive std::string or std::string references. Additionally you can
|
||||||
|
* perform std::string operations by casting the translated string to a
|
||||||
|
* std::string. For example:
|
||||||
|
*
|
||||||
|
* if (string(dialogTitle).size() != 0)
|
||||||
|
* ...do something useful
|
||||||
|
*
|
||||||
|
* We have intentionally not provided conversion methods for "const char*" (an
|
||||||
|
* internal representation of the object's string) because of the risk of the
|
||||||
|
* client using the pointer after the translated string object goes out of
|
||||||
|
* scope.
|
||||||
|
*
|
||||||
|
* @author David Ossorio
|
||||||
|
*/
|
||||||
|
class TranslatedString
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Enumeration describing available translation modes.
|
||||||
|
*/
|
||||||
|
typedef enum { DontTranslate, DoTranslate } Mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an empty translated string. It is equivalent to calling
|
||||||
|
* TranslatedString::null().
|
||||||
|
*/
|
||||||
|
TranslatedString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for creating a NULL translated string.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* NULL translated string.
|
||||||
|
*/
|
||||||
|
static TranslatedString null();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a translated string object and marks it as a string needing
|
||||||
|
* translation.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* Character string to translate.
|
||||||
|
* @param translatorNotes
|
||||||
|
* Optional notes for the human translator describing the meaning
|
||||||
|
* of the string.
|
||||||
|
*/
|
||||||
|
static TranslatedString translate(const char* str,
|
||||||
|
const char* translatorNotes = NULL);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a translated string object and marks it as a string not needing
|
||||||
|
* translation.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* Character string to translate. The str parameter can be a NULL
|
||||||
|
* pointer.
|
||||||
|
*/
|
||||||
|
static TranslatedString dontTranslate(const char* str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
|
virtual ~TranslatedString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the object's string is NULL.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* true if the object's string is NULL, false otherwise.
|
||||||
|
*/
|
||||||
|
virtual bool isNull() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the object's string is NULL or zero length.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* true if the object's string is NULL or zero length, false otherwise.
|
||||||
|
*/
|
||||||
|
virtual bool isNullOrZeroLength() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the internal representation of the object's string. Use this
|
||||||
|
* result carefully. When this object goes out of scope so does this
|
||||||
|
* references.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Pointer to the internal representation of the object's string.
|
||||||
|
*/
|
||||||
|
virtual const char* c_str();
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
* Returns the internal representation of the wide character version of the
|
||||||
|
* object's string. Use this result carefully. When this object goes out of
|
||||||
|
* scope so does this references.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Pointer to the internal representation of the object's string.
|
||||||
|
*/
|
||||||
|
virtual const wchar_t* c_wstr();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a copy of the object's string by this object. The result is
|
||||||
|
* translated or not depending on the platform and how it was created.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Copy of the object's string.
|
||||||
|
*/
|
||||||
|
virtual operator std::string();
|
||||||
|
|
||||||
|
#if defined MSWIN
|
||||||
|
/**
|
||||||
|
* Returns a copy of the wide character version of the object's string.
|
||||||
|
* The result is translated or not depending on the platform and how it was
|
||||||
|
* created.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Copy of the wide character version of the object's string.
|
||||||
|
*/
|
||||||
|
virtual operator std::wstring();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assignment operator.
|
||||||
|
*/
|
||||||
|
virtual TranslatedString& operator =(const TranslatedString& other);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy constructor.
|
||||||
|
*/
|
||||||
|
TranslatedString(const TranslatedString& other);
|
||||||
|
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
/**
|
||||||
|
* Used only for assertions.
|
||||||
|
*/
|
||||||
|
virtual bool isValid() const;
|
||||||
|
#endif /* !NO_ASSERTS */
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* Constructs a translated string. This is declared private to make sure
|
||||||
|
* clients use translate() or dontTranslate() so that Tecplot's translation
|
||||||
|
* parser can easily extract strings from the source code.
|
||||||
|
*
|
||||||
|
* @param mode
|
||||||
|
* Indicates if this string is to be translated or not at runtime.
|
||||||
|
* @param str
|
||||||
|
* Character string to translate.
|
||||||
|
* @param translatorNotes
|
||||||
|
* Optional notes for the human translator describing the meaning
|
||||||
|
* of the string.
|
||||||
|
*/
|
||||||
|
TranslatedString(TranslatedString::Mode mode,
|
||||||
|
const char* str,
|
||||||
|
const char* translatorNotes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method for initialize a translated string.
|
||||||
|
*
|
||||||
|
* @param mode
|
||||||
|
* Indicates if this string is to be translated or not at runtime.
|
||||||
|
* @param str
|
||||||
|
* Character string to translate.
|
||||||
|
* @param translatorNotes
|
||||||
|
* Optional notes for the human translator describing the meaning
|
||||||
|
* of the string.
|
||||||
|
*/
|
||||||
|
void init(TranslatedString::Mode mode,
|
||||||
|
const char* str,
|
||||||
|
const char* translatorNotes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private instance data.
|
||||||
|
*/
|
||||||
|
TranslatedString::Mode m_mode;
|
||||||
|
bool m_isNull;
|
||||||
|
std::string m_string;
|
||||||
|
std::string *m_utf8String;
|
||||||
|
#if defined MSWIN
|
||||||
|
std::wstring *m_wideString;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for creating a translated string object and marking it
|
||||||
|
* as a string needing translation.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* Character string to translate.
|
||||||
|
* @param translatorNotes
|
||||||
|
* Optional notes for the human translator describing the meaning
|
||||||
|
* of the string.
|
||||||
|
*/
|
||||||
|
inline TranslatedString translate(const char* str,
|
||||||
|
const char* translatorNotes = NULL)
|
||||||
|
{
|
||||||
|
return TranslatedString::translate(str, translatorNotes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for creating a translated string object and marking it
|
||||||
|
* as a string not needing translation.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* Character string to translate. The str parameter can be a NULL
|
||||||
|
* pointer.
|
||||||
|
*/
|
||||||
|
inline TranslatedString dontTranslate(const char* str)
|
||||||
|
{
|
||||||
|
return TranslatedString::dontTranslate(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience function for creating a translated string object and marks it as
|
||||||
|
* a string not needing translation.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* String to translate.
|
||||||
|
*/
|
||||||
|
inline TranslatedString dontTranslate(const std::string& str)
|
||||||
|
{
|
||||||
|
return TranslatedString::dontTranslate(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
@ -0,0 +1,161 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ALLOCMODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TRACK_MEMORY_USAGE
|
||||||
|
static size_t memInUse = 0;
|
||||||
|
static size_t memTotalHighMark = 0;
|
||||||
|
static size_t memCurrentHighMark = 0;
|
||||||
|
static size_t memSavedHighMark = 0;
|
||||||
|
Mutex_pa memMutex;
|
||||||
|
|
||||||
|
void initMemoryUsageTracking(void)
|
||||||
|
{
|
||||||
|
REQUIRE(!Thread_ThreadingIsInitialized());
|
||||||
|
Thread_InitMutex(&memMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanUpMemoryUsageTracking(void)
|
||||||
|
{
|
||||||
|
REQUIRE(!Thread_ThreadingIsInitialized());
|
||||||
|
Thread_FreeMutex(&memMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void trackMemoryClearHighMark(void)
|
||||||
|
{
|
||||||
|
memCurrentHighMark = memInUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
void trackMemorySaveHighMark(void)
|
||||||
|
{
|
||||||
|
memSavedHighMark = memCurrentHighMark;
|
||||||
|
}
|
||||||
|
|
||||||
|
void trackMemoryAlloc(size_t size)
|
||||||
|
{
|
||||||
|
REQUIRE(memInUse >= 0);
|
||||||
|
|
||||||
|
if (Thread_ThreadingIsInitialized())
|
||||||
|
Thread_LockMutex(memMutex);
|
||||||
|
|
||||||
|
memInUse += size;
|
||||||
|
if (memInUse > memTotalHighMark)
|
||||||
|
memTotalHighMark = memInUse;
|
||||||
|
if (memInUse > memCurrentHighMark)
|
||||||
|
memCurrentHighMark = memInUse;
|
||||||
|
|
||||||
|
if (Thread_ThreadingIsInitialized())
|
||||||
|
Thread_UnlockMutex(memMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void trackMemoryFree(size_t size)
|
||||||
|
{
|
||||||
|
if (Thread_ThreadingIsInitialized())
|
||||||
|
Thread_LockMutex(memMutex);
|
||||||
|
|
||||||
|
memInUse -= size;
|
||||||
|
|
||||||
|
if (Thread_ThreadingIsInitialized())
|
||||||
|
Thread_UnlockMutex(memMutex);
|
||||||
|
|
||||||
|
ENSURE(memInUse >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void getMemoryUsage(size_t* memoryInUse,
|
||||||
|
size_t* memoryCurrentHighMark,
|
||||||
|
size_t* memorySavedHighMark,
|
||||||
|
size_t* memoryTotalHighMark)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(memoryInUse));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(memoryCurrentHighMark));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(memorySavedHighMark));
|
||||||
|
REQUIRE(VALID_REF_OR_NULL(memoryTotalHighMark));
|
||||||
|
if (memoryInUse != NULL)
|
||||||
|
*memoryInUse = memInUse;
|
||||||
|
if (memoryCurrentHighMark != NULL)
|
||||||
|
*memoryCurrentHighMark = memCurrentHighMark;
|
||||||
|
if (memorySavedHighMark != NULL)
|
||||||
|
*memorySavedHighMark = memSavedHighMark;
|
||||||
|
if (memoryTotalHighMark != NULL)
|
||||||
|
*memoryTotalHighMark = memTotalHighMark;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN && defined ALLOC_HEAP
|
||||||
|
#define HEAPMIN 512
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN && defined ALLOC_HEAP
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void *MSWinAlloc(DWORD nSize)
|
||||||
|
{
|
||||||
|
long *pMem = NULL;
|
||||||
|
if (nSize < HEAPMIN)
|
||||||
|
pMem = (long *)malloc(sizeof(long) + nSize);
|
||||||
|
else
|
||||||
|
pMem = (long *)HeapAlloc(GetProcessHeap(), NULL, sizeof(long) + nSize);
|
||||||
|
if (pMem)
|
||||||
|
pMem[0] = nSize;
|
||||||
|
return (void *)&(pMem[1]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MSWIN && defined ALLOC_HEAP
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void MSWinFree(void *pMem)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(pMem));
|
||||||
|
if (pMem)
|
||||||
|
{
|
||||||
|
long *pMemLong = &(((long *)pMem)[-1]);
|
||||||
|
if (pMemLong[0] < HEAPMIN)
|
||||||
|
free((void *)pMemLong);
|
||||||
|
else
|
||||||
|
HeapFree(GetProcessHeap(), NULL, (void *)pMemLong);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,809 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. ********
|
||||||
|
******* All Rights Reserved. ********
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define AUXDATAMODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "STRUTIL.h"
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
#include "DATASET.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
#include "SET.h"
|
||||||
|
#include "AUXDATA.h"
|
||||||
|
|
||||||
|
using namespace tecplot::strutil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private auxiliary data item structure.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char *Name;
|
||||||
|
ArbParam_t Value;
|
||||||
|
AuxDataType_e Type;
|
||||||
|
Boolean_t Retain;
|
||||||
|
} AuxDataItem_s;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private auxiliary data item container structure.
|
||||||
|
*/
|
||||||
|
typedef struct _AuxData_s
|
||||||
|
{
|
||||||
|
/* invariant: ItemList is case-insensitive sorted by AuxDataItem->Name */
|
||||||
|
ArrayList_pa ItemList; /* <AuxDataItem_s *>[dynamic] */
|
||||||
|
} AuxData_s;
|
||||||
|
|
||||||
|
static Mutex_pa AuxDataMutex = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A valid auxiliary data name character must begin with a '_' or alpha
|
||||||
|
* character and may be followed by one or more '_', '.', alpha or digit
|
||||||
|
* characters.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataIsValidNameChar(char Char,
|
||||||
|
Boolean_t IsLeadChar)
|
||||||
|
{
|
||||||
|
Boolean_t IsValidNameChar;
|
||||||
|
|
||||||
|
REQUIRE("Char can be any value");
|
||||||
|
REQUIRE(VALID_BOOLEAN(IsLeadChar));
|
||||||
|
|
||||||
|
IsValidNameChar = (Char == '_' ||
|
||||||
|
isalpha(Char));
|
||||||
|
if (!IsLeadChar)
|
||||||
|
IsValidNameChar = (IsValidNameChar ||
|
||||||
|
Char == '.' ||
|
||||||
|
isdigit(Char));
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(IsValidNameChar));
|
||||||
|
return IsValidNameChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the auxiliary data name is valid. A valid auxiliary data name
|
||||||
|
* must begin with a '_' or alpha character and may be followed by one or
|
||||||
|
* more '_', '.', alpha or digit characters.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataIsValidName(const char *Name)
|
||||||
|
{
|
||||||
|
Boolean_t IsValidName;
|
||||||
|
const char *NPtr;
|
||||||
|
REQUIRE(VALID_REF(Name));
|
||||||
|
|
||||||
|
for (NPtr = Name, IsValidName = AuxDataIsValidNameChar(*NPtr, TRUE);
|
||||||
|
IsValidName && *NPtr != '\0';
|
||||||
|
NPtr++)
|
||||||
|
{
|
||||||
|
IsValidName = AuxDataIsValidNameChar(*NPtr, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(IsValidName));
|
||||||
|
return IsValidName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deallocates an auxiliary data item and its contents and sets the target to
|
||||||
|
* NULL.
|
||||||
|
*
|
||||||
|
* param AuxDataItem
|
||||||
|
* Reference to an auxiliary data item.
|
||||||
|
*/
|
||||||
|
static void AuxDataItemDealloc(AuxDataItem_s **AuxDataItem)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(AuxDataItem));
|
||||||
|
REQUIRE(VALID_REF(*AuxDataItem) || *AuxDataItem == NULL);
|
||||||
|
|
||||||
|
if (*AuxDataItem != NULL)
|
||||||
|
{
|
||||||
|
char *Name = (char *)(*AuxDataItem)->Name;
|
||||||
|
if (Name != NULL)
|
||||||
|
FREE_ARRAY(Name, "auxiliary name");
|
||||||
|
|
||||||
|
if ((*AuxDataItem)->Type == AuxDataType_String)
|
||||||
|
{
|
||||||
|
char *Value = (char *)(*AuxDataItem)->Value;
|
||||||
|
if (Value != NULL)
|
||||||
|
FREE_ARRAY(Value, "auxiliary value");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CHECK(FALSE);
|
||||||
|
|
||||||
|
FREE_ITEM(*AuxDataItem, "auxiliary data item");
|
||||||
|
*AuxDataItem = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(*AuxDataItem == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates an auxiliary data item.
|
||||||
|
*
|
||||||
|
* NOTE: Copies are made of the name and value.
|
||||||
|
*
|
||||||
|
* param Name
|
||||||
|
* Auxiliary data item's name (case insenstive).
|
||||||
|
* param Value
|
||||||
|
* Auxiliary data item's value.
|
||||||
|
* param Type
|
||||||
|
* Auxiliary data item's value type.
|
||||||
|
* param Retain
|
||||||
|
* Indicates if the auxiliary data item should persist. In other words
|
||||||
|
* copied, saved, etc.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* A new auxiliary data item or NULL if sufficient memory was not
|
||||||
|
* available.
|
||||||
|
*/
|
||||||
|
static AuxDataItem_s *AuxDataItemAlloc(const char *Name,
|
||||||
|
ArbParam_t Value,
|
||||||
|
AuxDataType_e Type,
|
||||||
|
Boolean_t Retain)
|
||||||
|
{
|
||||||
|
AuxDataItem_s *Result;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
REQUIRE(IMPLICATION(Type == AuxDataType_String,
|
||||||
|
(VALID_REF((char *)Value) ||
|
||||||
|
(char *)Value == NULL)));
|
||||||
|
REQUIRE(VALID_ENUM(Type, AuxDataType_e));
|
||||||
|
REQUIRE(VALID_BOOLEAN(Retain));
|
||||||
|
|
||||||
|
Result = ALLOC_ITEM(AuxDataItem_s, "auxiliary data item");
|
||||||
|
if (Result != NULL)
|
||||||
|
{
|
||||||
|
Boolean_t IsOk;
|
||||||
|
Result->Type = Type;
|
||||||
|
Result->Retain = Retain;
|
||||||
|
Result->Name = DupString(dontTranslate(Name));
|
||||||
|
IsOk = (Result->Name != NULL);
|
||||||
|
Result->Value = 0; /* to satisfy some compilers' uninitialized warnings */
|
||||||
|
if (IsOk && Type == AuxDataType_String)
|
||||||
|
{
|
||||||
|
char *strValue = (char *)Value;
|
||||||
|
if (strValue != NULL)
|
||||||
|
{
|
||||||
|
char *strCopy = DupString(dontTranslate(strValue));
|
||||||
|
Result->Value = (ArbParam_t)strCopy;
|
||||||
|
IsOk = (strCopy != NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Result->Value = (ArbParam_t)NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CHECK(FALSE);
|
||||||
|
|
||||||
|
if (!IsOk)
|
||||||
|
AuxDataItemDealloc(&Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(Result) || Result == NULL);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys an auxiliary data item list item. This is an item destructor
|
||||||
|
* callback for ArrayList's private data.
|
||||||
|
*
|
||||||
|
* param ItemRef
|
||||||
|
* Reference to the auxiliary data item to cleanup.
|
||||||
|
* param ClientData
|
||||||
|
* Not used.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE is a requirement
|
||||||
|
*/
|
||||||
|
static Boolean_t AuxDataItemListItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData)
|
||||||
|
{
|
||||||
|
AuxDataItem_s **AuxDataItemRef = (AuxDataItem_s **)ItemRef;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxDataItemRef));
|
||||||
|
REQUIRE(VALID_REF(*AuxDataItemRef) || *AuxDataItemRef == NULL);
|
||||||
|
|
||||||
|
if (*AuxDataItemRef != NULL)
|
||||||
|
AuxDataItemDealloc(AuxDataItemRef);
|
||||||
|
|
||||||
|
ENSURE(*AuxDataItemRef == NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroys an auxiliary data item. This is an item destructor
|
||||||
|
* callback for ArrayList's private data.
|
||||||
|
*
|
||||||
|
* param ItemRef
|
||||||
|
* Reference to the auxiliary data to cleanup.
|
||||||
|
* param ClientData
|
||||||
|
* Not used.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE is a requirement
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData)
|
||||||
|
{
|
||||||
|
AuxData_pa *AuxDataRef = (AuxData_pa *)ItemRef;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxDataRef));
|
||||||
|
REQUIRE(VALID_REF(*AuxDataRef) || *AuxDataRef == NULL);
|
||||||
|
|
||||||
|
if (*AuxDataRef != NULL)
|
||||||
|
AuxDataDealloc(AuxDataRef);
|
||||||
|
|
||||||
|
ENSURE(*AuxDataRef == NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duplicates an auxiliary data item if its Retain flag is TRUE or if directed
|
||||||
|
* by the callback data. This is an item duplicator callback for ArrayList.
|
||||||
|
*
|
||||||
|
* param TargetItemRef
|
||||||
|
* Reference to the auxiliary data item to receive duplicate.
|
||||||
|
* param SourceItemRef
|
||||||
|
* Reference to the auxiliary data item to duplicate.
|
||||||
|
* param ClientData
|
||||||
|
* Boolean indicating if the Retain flag should be considered.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the duplication was a success
|
||||||
|
* FALSE otherwise.
|
||||||
|
*/
|
||||||
|
static Boolean_t AuxDataItemDuplicator(void *TargetItemRef,
|
||||||
|
void *SourceItemRef,
|
||||||
|
ArbParam_t ClientData)
|
||||||
|
{
|
||||||
|
Boolean_t IsOk = TRUE;
|
||||||
|
AuxDataItem_s **TargetAuxDataItemRef = (AuxDataItem_s **)TargetItemRef;
|
||||||
|
AuxDataItem_s **SourceAuxDataItemRef = (AuxDataItem_s **)SourceItemRef;
|
||||||
|
Boolean_t ConsiderRetain;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(TargetAuxDataItemRef));
|
||||||
|
REQUIRE(VALID_REF(SourceAuxDataItemRef));
|
||||||
|
REQUIRE(VALID_REF(*SourceAuxDataItemRef) || *SourceAuxDataItemRef == NULL);
|
||||||
|
REQUIRE(VALID_BOOLEAN((Boolean_t)ClientData));
|
||||||
|
|
||||||
|
ConsiderRetain = (Boolean_t)ClientData;
|
||||||
|
|
||||||
|
/* duplicate the item */
|
||||||
|
if (*SourceAuxDataItemRef != NULL &&
|
||||||
|
(!ConsiderRetain || (*SourceAuxDataItemRef)->Retain))
|
||||||
|
{
|
||||||
|
*TargetAuxDataItemRef = AuxDataItemAlloc((*SourceAuxDataItemRef)->Name,
|
||||||
|
(*SourceAuxDataItemRef)->Value,
|
||||||
|
(*SourceAuxDataItemRef)->Type,
|
||||||
|
(*SourceAuxDataItemRef)->Retain);
|
||||||
|
IsOk = (*TargetAuxDataItemRef != NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*TargetAuxDataItemRef = NULL;
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(*TargetAuxDataItemRef) || *TargetAuxDataItemRef == NULL);
|
||||||
|
ENSURE(VALID_BOOLEAN(IsOk));
|
||||||
|
return IsOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deallocates an auxiliary data handle and sets the handle to NULL.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Reference to an auxiliary data handle or reference to NULL.
|
||||||
|
*/
|
||||||
|
void AuxDataDealloc(AuxData_pa *AuxData)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
REQUIRE(VALID_REF(*AuxData) || *AuxData == NULL);
|
||||||
|
|
||||||
|
if (*AuxData != NULL)
|
||||||
|
{
|
||||||
|
ArrayListDealloc(&(*AuxData)->ItemList, AuxDataItemListItemDestructor, 0);
|
||||||
|
FREE_ITEM(*AuxData, "auxiliary data container");
|
||||||
|
*AuxData = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(*AuxData == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates an auxiliary data handle.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Auxiliary data handle or NULL if sufficient memory was not available.
|
||||||
|
*/
|
||||||
|
AuxData_pa AuxDataAlloc(void)
|
||||||
|
{
|
||||||
|
AuxData_pa Result = ALLOC_ITEM(AuxData_s, "auxiliary data container");
|
||||||
|
if (Result != NULL)
|
||||||
|
{
|
||||||
|
Result->ItemList = ArrayListAlloc(0, ArrayListType_VoidPtr, NULL, 0);
|
||||||
|
if (Result->ItemList == NULL)
|
||||||
|
AuxDataDealloc(&Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(Result) || Result == NULL);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies the auxiliary data and all its members who's Retain flag is TRUE
|
||||||
|
* if the ConsiderRetain flag is TRUE otherwise it copies everything.
|
||||||
|
*/
|
||||||
|
AuxData_pa AuxDataCopy(AuxData_pa AuxData,
|
||||||
|
Boolean_t ConsiderRetain)
|
||||||
|
{
|
||||||
|
AuxData_pa Result;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
REQUIRE(VALID_BOOLEAN(ConsiderRetain));
|
||||||
|
|
||||||
|
Result = ALLOC_ITEM(AuxData_s, "auxiliary data container");
|
||||||
|
if (Result != NULL)
|
||||||
|
{
|
||||||
|
Result->ItemList = ArrayListCopy(AuxData->ItemList,
|
||||||
|
AuxDataItemDuplicator,
|
||||||
|
ConsiderRetain);
|
||||||
|
if (Result->ItemList != NULL)
|
||||||
|
{
|
||||||
|
if (ConsiderRetain)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Now pass through the array cleaning up the holes left by those
|
||||||
|
* auxiliary data item member who's Retain flag was FALSE and
|
||||||
|
* therefore left a VOID pointer because it was not copied.
|
||||||
|
*/
|
||||||
|
LgIndex_t ItemOffset = 0;
|
||||||
|
LgIndex_t ItemCount = ArrayListGetCount(Result->ItemList);
|
||||||
|
while (ItemOffset < ItemCount)
|
||||||
|
{
|
||||||
|
/* if there is more than one in a row remove them all at once */
|
||||||
|
if (ArrayListGetVoidPtr(Result->ItemList, ItemOffset) == NULL)
|
||||||
|
{
|
||||||
|
LgIndex_t BaseOffsetToRemove = ItemOffset;
|
||||||
|
LgIndex_t NumItemsToRemove = 1;
|
||||||
|
while (BaseOffsetToRemove + NumItemsToRemove < ItemCount &&
|
||||||
|
ArrayListGetVoidPtr(Result->ItemList,
|
||||||
|
BaseOffsetToRemove + NumItemsToRemove) == NULL)
|
||||||
|
NumItemsToRemove++;
|
||||||
|
|
||||||
|
/* delete the NULL items */
|
||||||
|
ArrayListDeleteItems(Result->ItemList,
|
||||||
|
BaseOffsetToRemove,
|
||||||
|
NumItemsToRemove,
|
||||||
|
NULL, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update ItemCount but leave ItemOffset alone as it is now
|
||||||
|
* indexing the next item to examine.
|
||||||
|
*/
|
||||||
|
ItemCount = ArrayListGetCount(Result->ItemList);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ItemOffset++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AuxDataDealloc(&Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(Result) || Result == NULL);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current number of auxiliary data items maintained by the auxiliary.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Handle to auxiliary data.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Number of items maintained by the auxiliary data.
|
||||||
|
*/
|
||||||
|
LgIndex_t AuxDataGetNumItems(AuxData_pa AuxData)
|
||||||
|
{
|
||||||
|
LgIndex_t NumItems;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
|
||||||
|
NumItems = ArrayListGetCount(AuxData->ItemList);
|
||||||
|
|
||||||
|
ENSURE(NumItems >= 0);
|
||||||
|
return NumItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the item index of the name if found or if not found the index where an
|
||||||
|
* auxiliary data item could be inserted.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Handle to auxiliary data.
|
||||||
|
* param Name
|
||||||
|
* Name used for the search (case insensitive).
|
||||||
|
* param ItemIndex
|
||||||
|
* Address to hold the index of the found item or the index where an
|
||||||
|
* auxiliary data item could be inserted.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the named item was found,
|
||||||
|
* FALSE otherwise.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataGetItemIndex(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
LgIndex_t *ItemIndex)
|
||||||
|
{
|
||||||
|
Boolean_t FoundItem = FALSE;
|
||||||
|
LgIndex_t Index;
|
||||||
|
LgIndex_t NumItems;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
REQUIRE(VALID_REF(ItemIndex));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that the current implementation just does a linear search
|
||||||
|
* though the array looking for the index of the item or if not
|
||||||
|
* found the index of the insertion point. This should be replaced
|
||||||
|
* with a binary search.
|
||||||
|
*/
|
||||||
|
NumItems = AuxDataGetNumItems(AuxData);
|
||||||
|
|
||||||
|
# if defined DO_LINEAR_SEARCH
|
||||||
|
{
|
||||||
|
for (Index = 0; Index < NumItems; Index++)
|
||||||
|
{
|
||||||
|
AuxDataItem_s *AuxDataItem =
|
||||||
|
(AuxDataItem_s *)ArrayListGetVoidPtr(AuxData->ItemList, Index);
|
||||||
|
int CompareResult = ustrcmp(AuxDataItem->Name, Name);
|
||||||
|
if (CompareResult >= 0)
|
||||||
|
{
|
||||||
|
FoundItem = (CompareResult == 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
{
|
||||||
|
int low, high;
|
||||||
|
low = 0;
|
||||||
|
high = NumItems - 1;
|
||||||
|
Index = 0;
|
||||||
|
while (low <= high)
|
||||||
|
{
|
||||||
|
AuxDataItem_s *AuxDataItem;
|
||||||
|
int CompareResult;
|
||||||
|
Index = (low + high) / 2;
|
||||||
|
AuxDataItem = (AuxDataItem_s *)ArrayListGetVoidPtr(AuxData->ItemList, Index);
|
||||||
|
CompareResult = ustrcmp(Name, AuxDataItem->Name);
|
||||||
|
if (CompareResult < 0)
|
||||||
|
high = Index - 1; /* If the new name is "less" than the one we're comparing to,
|
||||||
|
don't change Index since Index is already in the right spot */
|
||||||
|
else if (CompareResult > 0)
|
||||||
|
low = ++Index; /* If the new name it "greater" than the one we're comparing
|
||||||
|
against, we want to make sure its Index is greater than
|
||||||
|
the current name's index as well, that's why we increment Index here. */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FoundItem = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
*ItemIndex = Index;
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(FoundItem));
|
||||||
|
ENSURE(0 <= *ItemIndex &&
|
||||||
|
((FoundItem && *ItemIndex < NumItems) ||
|
||||||
|
(!FoundItem && *ItemIndex <= NumItems)));
|
||||||
|
return FoundItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the auxiliary data item at the specified index.
|
||||||
|
*
|
||||||
|
* NOTE: The name and value are a references, NOT copies.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Handle to auxiliary data.
|
||||||
|
* param Index
|
||||||
|
* Index of the auxiliary data item of interest.
|
||||||
|
* param Name
|
||||||
|
* Address to hold the auxiliary data item name.
|
||||||
|
* param Value
|
||||||
|
* Address to hold the auxiliary data item value.
|
||||||
|
* param Type
|
||||||
|
* Address to hold the auxiliary data item type.
|
||||||
|
* param Retain
|
||||||
|
* Address to hold the auxiliary data item retain flag.
|
||||||
|
*/
|
||||||
|
void AuxDataGetItemByIndex(AuxData_pa AuxData,
|
||||||
|
LgIndex_t Index,
|
||||||
|
const char **Name,
|
||||||
|
ArbParam_t *Value,
|
||||||
|
AuxDataType_e *Type,
|
||||||
|
Boolean_t *Retain)
|
||||||
|
{
|
||||||
|
AuxDataItem_s *AuxDataItem;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
REQUIRE(0 <= Index && Index < ArrayListGetCount(AuxData->ItemList));
|
||||||
|
REQUIRE(VALID_REF(Name));
|
||||||
|
REQUIRE(VALID_REF(Value));
|
||||||
|
REQUIRE(VALID_REF(Type));
|
||||||
|
REQUIRE(VALID_REF(Retain));
|
||||||
|
|
||||||
|
AuxDataItem = (AuxDataItem_s *)ArrayListGetVoidPtr(AuxData->ItemList, Index);
|
||||||
|
*Name = AuxDataItem->Name;
|
||||||
|
*Value = AuxDataItem->Value;
|
||||||
|
*Type = AuxDataItem->Type;
|
||||||
|
*Retain = AuxDataItem->Retain;
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(*Name) && AuxDataIsValidName(*Name));
|
||||||
|
ENSURE(IMPLICATION(*Type == AuxDataType_String,
|
||||||
|
(VALID_REF((char *)(*Value)) ||
|
||||||
|
(char *)(*Value) == NULL)));
|
||||||
|
ENSURE(VALID_ENUM(*Type, AuxDataType_e));
|
||||||
|
ENSURE(VALID_BOOLEAN(*Retain));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the auxiliary data item by the specified name if it exists.
|
||||||
|
*
|
||||||
|
* NOTE: The name and value are a references, NOT copies.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Handle to auxiliary data.
|
||||||
|
* param Name
|
||||||
|
* Name used for the search (case insensitive).
|
||||||
|
* param Value
|
||||||
|
* Address to hold the auxiliary data item value.
|
||||||
|
* param Type
|
||||||
|
* Address to hold the auxiliary data item type.
|
||||||
|
* param Retain
|
||||||
|
* Address to hold the auxiliary data item retain flag.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the an auxilary data item by the specified name was found,
|
||||||
|
* FALSE otherwise.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataGetItemByName(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
ArbParam_t *Value,
|
||||||
|
AuxDataType_e *Type,
|
||||||
|
Boolean_t *Retain)
|
||||||
|
{
|
||||||
|
Boolean_t FoundItem;
|
||||||
|
LgIndex_t ItemIndex;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
REQUIRE(VALID_REF(Value));
|
||||||
|
REQUIRE(VALID_REF(Type));
|
||||||
|
REQUIRE(VALID_REF(Retain));
|
||||||
|
|
||||||
|
FoundItem = AuxDataGetItemIndex(AuxData, Name, &ItemIndex);
|
||||||
|
if (FoundItem)
|
||||||
|
{
|
||||||
|
const char *SameName;
|
||||||
|
AuxDataGetItemByIndex(AuxData, ItemIndex, &SameName,
|
||||||
|
Value, Type, Retain);
|
||||||
|
CHECK(ustrcmp(Name, SameName) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(FoundItem));
|
||||||
|
ENSURE(IMPLICATION(FoundItem,
|
||||||
|
IMPLICATION(*Type == AuxDataType_String,
|
||||||
|
(VALID_REF((char *)(*Value)) ||
|
||||||
|
(char *)(*Value) == NULL))));
|
||||||
|
ENSURE(IMPLICATION(FoundItem,
|
||||||
|
VALID_ENUM(*Type, AuxDataType_e)));
|
||||||
|
ENSURE(IMPLICATION(FoundItem,
|
||||||
|
VALID_BOOLEAN(*Retain)));
|
||||||
|
return FoundItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a string value from AuxData and convert it to a boolean.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataGetBooleanItemByName(AuxData_pa AuxData, /* IN */
|
||||||
|
const char *Name, /* IN */
|
||||||
|
Boolean_t *Value, /* OUT */
|
||||||
|
AuxDataType_e *Type, /* OUT */
|
||||||
|
Boolean_t *Retain) /* OUT */
|
||||||
|
{
|
||||||
|
Boolean_t FoundItem;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
REQUIRE(VALID_REF(Value));
|
||||||
|
REQUIRE(VALID_REF(Type));
|
||||||
|
REQUIRE(VALID_REF(Retain));
|
||||||
|
|
||||||
|
ArbParam_t strValue;
|
||||||
|
FoundItem = AuxDataGetItemByName(AuxData,
|
||||||
|
Name,
|
||||||
|
&strValue,
|
||||||
|
Type,
|
||||||
|
Retain);
|
||||||
|
|
||||||
|
if (FoundItem &&
|
||||||
|
(ustrcmp((char *)strValue, "YES") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "YEP") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "Y") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "TRUE") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "T") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "ON") == 0 ||
|
||||||
|
ustrcmp((char *)strValue, "1") == 0))
|
||||||
|
{
|
||||||
|
*Value = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*Value = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(FoundItem));
|
||||||
|
ENSURE(VALID_BOOLEAN(*Value));
|
||||||
|
return FoundItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the auxiliary data item to the auxiliary data or replaces it if one
|
||||||
|
* already exists by the same name.
|
||||||
|
*
|
||||||
|
* NOTE: The auxiliary data makes copies of the name and value.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Auxiliary data handle.
|
||||||
|
* param Name
|
||||||
|
* Auxiliary data item's name (case insenstive).
|
||||||
|
* param Value
|
||||||
|
* Auxiliary data item's value.
|
||||||
|
* param Type
|
||||||
|
* Auxiliary data item's value type.
|
||||||
|
* param Retain
|
||||||
|
* Indicates if the auxiliary data item should persist.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the item was added to the auxiliary data.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataSetItem(AuxData_pa AuxData,
|
||||||
|
const char *Name,
|
||||||
|
ArbParam_t Value,
|
||||||
|
AuxDataType_e Type,
|
||||||
|
Boolean_t Retain)
|
||||||
|
{
|
||||||
|
Boolean_t IsOk;
|
||||||
|
AuxDataItem_s *AuxDataItem;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
REQUIRE(IMPLICATION(Type == AuxDataType_String,
|
||||||
|
(VALID_REF((char *)Value) ||
|
||||||
|
(char *)Value == NULL)));
|
||||||
|
REQUIRE(VALID_ENUM(Type, AuxDataType_e));
|
||||||
|
REQUIRE(VALID_BOOLEAN(Retain));
|
||||||
|
|
||||||
|
AuxDataItem = AuxDataItemAlloc(Name, Value, Type, Retain);
|
||||||
|
IsOk = (AuxDataItem != NULL);
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
LgIndex_t ItemIndex;
|
||||||
|
ArrayListItem_u ListItem;
|
||||||
|
|
||||||
|
/* add or replace the item to the list */
|
||||||
|
ListItem.VoidPtr = (void *)AuxDataItem;
|
||||||
|
if (!AuxDataGetItemIndex(AuxData, Name, &ItemIndex))
|
||||||
|
IsOk = ArrayListInsertItem(AuxData->ItemList, ItemIndex, ListItem);
|
||||||
|
else
|
||||||
|
IsOk = ArrayListSetItem(AuxData->ItemList, ItemIndex, ListItem,
|
||||||
|
AuxDataItemListItemDestructor, 0);
|
||||||
|
|
||||||
|
if (!IsOk)
|
||||||
|
AuxDataItemDealloc(&AuxDataItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(IsOk));
|
||||||
|
INVARIANT("AuxData->ItemList is case-insensitive sorted by AuxDataItem->Name");
|
||||||
|
return IsOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the auxiliary data item at the specified index.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Auxiliary data handle.
|
||||||
|
* param Index
|
||||||
|
* Index of the auxiliary data item of interest.
|
||||||
|
*/
|
||||||
|
void AuxDataDeleteItemByIndex(AuxData_pa AuxData,
|
||||||
|
LgIndex_t Index)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
REQUIRE(0 <= Index && Index < ArrayListGetCount(AuxData->ItemList));
|
||||||
|
|
||||||
|
ArrayListDeleteItem(AuxData->ItemList, Index, AuxDataItemListItemDestructor, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the auxiliary data item by the specified name if it exists.
|
||||||
|
*
|
||||||
|
* param AuxData
|
||||||
|
* Auxiliary data handle.
|
||||||
|
* param Name
|
||||||
|
* Name used for the search (case insensitive).
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* TRUE if the an auxilary data item by the specified name was found,
|
||||||
|
* FALSE otherwise.
|
||||||
|
*/
|
||||||
|
Boolean_t AuxDataDeleteItemByName(AuxData_pa AuxData,
|
||||||
|
const char *Name)
|
||||||
|
{
|
||||||
|
Boolean_t FoundItem;
|
||||||
|
LgIndex_t ItemIndex;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(AuxData));
|
||||||
|
REQUIRE(VALID_REF(Name) && AuxDataIsValidName(Name));
|
||||||
|
|
||||||
|
FoundItem = AuxDataGetItemIndex(AuxData, Name, &ItemIndex);
|
||||||
|
if (FoundItem)
|
||||||
|
AuxDataDeleteItemByIndex(AuxData, ItemIndex);
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(FoundItem));
|
||||||
|
return FoundItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
@ -0,0 +1,695 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DATAIOMODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "TranslatedString.h"
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
#ifdef MSWIN
|
||||||
|
/* Disable warning about conversion from long to short.
|
||||||
|
Even if we have disabled it in stdafx.h,
|
||||||
|
we still need to disable here also for
|
||||||
|
tecio, which includes this cpp file. */
|
||||||
|
|
||||||
|
#pragma warning (disable : 4244)
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Temp text and geom buffers.
|
||||||
|
*/
|
||||||
|
static Geom_s TempGeom;
|
||||||
|
static Text_s TempText;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "DATASET0.h"
|
||||||
|
#include "SET.h"
|
||||||
|
#include "FILESTREAM.h"
|
||||||
|
#include "DATAIO.h"
|
||||||
|
#include "DATAIO4.h"
|
||||||
|
#include "STRUTIL.h"
|
||||||
|
#include "AUXDATA.h"
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "DATASET.h"
|
||||||
|
#include "SYSTEM.h"
|
||||||
|
#include "Q_MSG.h"
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
using namespace tecplot::strutil;
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Multi-Purpose datafile header reader. This is designed so that
|
||||||
|
* not all parts of the header is loaded and so that the task of loading
|
||||||
|
* the header information is separated out from installing of that
|
||||||
|
* information into a dataset.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
Boolean_t ReadDataFileHeader(FileStream_s *FileStream,
|
||||||
|
short IVersion,
|
||||||
|
Boolean_t ShowDataIOStatus,
|
||||||
|
EntIndex_t *NumZones,
|
||||||
|
EntIndex_t *NumVars,
|
||||||
|
SmInteger_t *NumCustomLabelSets,
|
||||||
|
char **DataSetTitle,
|
||||||
|
Text_s **BaseText,
|
||||||
|
Geom_s **BaseGeom,
|
||||||
|
StringList_pa **CustomLabelBase,
|
||||||
|
StringList_pa *UserRec,
|
||||||
|
AuxData_pa *DataSetAuxData,
|
||||||
|
Set_pa **IsVarCellCentered, /* Create an Array dim by zones */
|
||||||
|
Boolean_t *HasText,
|
||||||
|
Boolean_t *HasGeoms,
|
||||||
|
ArrayList_pa *ZoneSpecList,
|
||||||
|
StringList_pa *VarNames,
|
||||||
|
ArrayList_pa *VarAuxDataList, /*<AuxData_pa>[NumVars]*/
|
||||||
|
Set_pa *IsRawFNAvailable, /* classic data only */
|
||||||
|
LgIndex_t **FNNumBndryConns, /* classic data only */
|
||||||
|
DataFileType_e *FileType)
|
||||||
|
{
|
||||||
|
Boolean_t IsOk = TRUE;
|
||||||
|
Boolean_t SentError = FALSE;
|
||||||
|
double X1;
|
||||||
|
int Pass;
|
||||||
|
FileOffset_t InitialFilePosition;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(FileStream) && VALID_REF(FileStream->File));
|
||||||
|
REQUIRE(IVersion > 0);
|
||||||
|
REQUIRE(VALID_BOOLEAN(ShowDataIOStatus));
|
||||||
|
REQUIRE(VALID_REF(NumZones));
|
||||||
|
REQUIRE(VALID_REF(NumVars));
|
||||||
|
REQUIRE(VALID_REF(DataSetTitle) || (DataSetTitle == NULL));
|
||||||
|
REQUIRE(VALID_REF(BaseText) || (BaseText == NULL));
|
||||||
|
REQUIRE(VALID_REF(BaseGeom) || (BaseGeom == NULL));
|
||||||
|
REQUIRE(VALID_REF(HasText) || (HasText == NULL));
|
||||||
|
REQUIRE(VALID_REF(HasGeoms) || (HasGeoms == NULL));
|
||||||
|
REQUIRE(VALID_REF(ZoneSpecList) || (ZoneSpecList == NULL));
|
||||||
|
REQUIRE(VALID_REF(VarNames) || (VarNames == NULL));
|
||||||
|
REQUIRE(VALID_REF(NumCustomLabelSets) || (NumCustomLabelSets == NULL));
|
||||||
|
REQUIRE(VALID_REF(UserRec) || (UserRec == NULL));
|
||||||
|
REQUIRE((VALID_REF(DataSetAuxData) &&
|
||||||
|
(VALID_REF(*DataSetAuxData) || *DataSetAuxData == NULL)) ||
|
||||||
|
DataSetAuxData == NULL);
|
||||||
|
REQUIRE((VALID_REF(VarAuxDataList) &&
|
||||||
|
(VALID_REF(*VarAuxDataList) || *VarAuxDataList == NULL)) ||
|
||||||
|
VarAuxDataList == NULL);
|
||||||
|
REQUIRE(VALID_REF(IsVarCellCentered) || (IsVarCellCentered == NULL));
|
||||||
|
REQUIRE((VALID_REF(CustomLabelBase) && VALID_REF(NumCustomLabelSets)) || (CustomLabelBase == NULL));
|
||||||
|
REQUIRE(VALID_REF(IsRawFNAvailable) || (IsRawFNAvailable == NULL));
|
||||||
|
REQUIRE(VALID_REF(FNNumBndryConns) || (FNNumBndryConns == NULL));
|
||||||
|
REQUIRE(VALID_REF(FileType) || (FileType == NULL));
|
||||||
|
|
||||||
|
if (DataSetTitle)
|
||||||
|
*DataSetTitle = NULL;
|
||||||
|
if (BaseText)
|
||||||
|
*BaseText = NULL;
|
||||||
|
if (BaseGeom)
|
||||||
|
*BaseGeom = NULL;
|
||||||
|
if (HasText)
|
||||||
|
*HasText = FALSE;
|
||||||
|
if (HasGeoms)
|
||||||
|
*HasGeoms = FALSE;
|
||||||
|
if (ZoneSpecList)
|
||||||
|
*ZoneSpecList = NULL;
|
||||||
|
if (VarNames)
|
||||||
|
*VarNames = NULL;
|
||||||
|
if (NumCustomLabelSets)
|
||||||
|
*NumCustomLabelSets = 0;
|
||||||
|
if (CustomLabelBase)
|
||||||
|
*CustomLabelBase = NULL;
|
||||||
|
if (DataSetAuxData != NULL)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Note unlike most of the other output only parameters that we nullify,
|
||||||
|
* DataSetAuxData is both an input and output parameter therefore we do
|
||||||
|
* not nullify it. The CHECK is here for clarity.
|
||||||
|
*/
|
||||||
|
CHECK(VALID_REF(*DataSetAuxData) || *DataSetAuxData == NULL);
|
||||||
|
}
|
||||||
|
if (VarAuxDataList != NULL)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Note unlike most of the other output only parameters that we nullify,
|
||||||
|
* VarAuxDataList is both an input and output parameter therefore we do
|
||||||
|
* not nullify it. The CHECK is here for clarity.
|
||||||
|
*/
|
||||||
|
CHECK(VALID_REF(*VarAuxDataList) || *VarAuxDataList == NULL);
|
||||||
|
}
|
||||||
|
if (UserRec)
|
||||||
|
*UserRec = NULL;
|
||||||
|
if (IsVarCellCentered)
|
||||||
|
*IsVarCellCentered = NULL;
|
||||||
|
|
||||||
|
if (IsRawFNAvailable)
|
||||||
|
*IsRawFNAvailable = NULL;
|
||||||
|
|
||||||
|
if (FNNumBndryConns)
|
||||||
|
*FNNumBndryConns = NULL;
|
||||||
|
|
||||||
|
if (FileType)
|
||||||
|
*FileType = DataFileType_Full;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pass 1 is used only to count up the number of zones and custom label sets,
|
||||||
|
* Also determine if there are any preset zone colors.
|
||||||
|
*/
|
||||||
|
|
||||||
|
InitialFilePosition = TP_FTELL(FileStream->File);
|
||||||
|
|
||||||
|
for (Pass = 1; IsOk && (Pass <= 2); Pass++)
|
||||||
|
{
|
||||||
|
if (Pass == 2)
|
||||||
|
{
|
||||||
|
if (TP_FSEEK(FileStream->File, InitialFilePosition, SEEK_SET) != 0)
|
||||||
|
IsOk = FALSE;
|
||||||
|
|
||||||
|
if (IsOk && (*NumZones > 0 && ZoneSpecList != NULL && *ZoneSpecList == NULL))
|
||||||
|
{
|
||||||
|
*ZoneSpecList = ArrayListAlloc(*NumZones, ArrayListType_VoidPtr,
|
||||||
|
ZoneOrVarListAdjustCapacityRequest, 0);
|
||||||
|
IsOk = (*ZoneSpecList != NULL);
|
||||||
|
}
|
||||||
|
if (IsOk && (CustomLabelBase != NULL &&
|
||||||
|
*CustomLabelBase == NULL &&
|
||||||
|
*NumCustomLabelSets > 0))
|
||||||
|
{
|
||||||
|
*CustomLabelBase = ALLOC_ARRAY(*NumCustomLabelSets, StringList_pa, "CustomLabel Sets");
|
||||||
|
IsOk = (*CustomLabelBase != NULL);
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
SmInteger_t N;
|
||||||
|
for (N = 0; N < *NumCustomLabelSets; N++)
|
||||||
|
(*CustomLabelBase)[N] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (IsOk && (UserRec != NULL && *UserRec == NULL))
|
||||||
|
{
|
||||||
|
*UserRec = StringListAlloc();
|
||||||
|
IsOk = (Boolean_t)(*UserRec != NULL);
|
||||||
|
}
|
||||||
|
if (IsOk && (DataSetAuxData != NULL && *DataSetAuxData == NULL))
|
||||||
|
{
|
||||||
|
*DataSetAuxData = AuxDataAlloc();
|
||||||
|
IsOk = (Boolean_t)(*DataSetAuxData != NULL);
|
||||||
|
}
|
||||||
|
if (IsOk && (VarAuxDataList != NULL && *VarAuxDataList == NULL) && *NumVars > 0)
|
||||||
|
{
|
||||||
|
*VarAuxDataList = ArrayListAlloc(0, ArrayListType_VoidPtr,
|
||||||
|
ZoneOrVarListAdjustCapacityRequest, 0);
|
||||||
|
IsOk = (*VarAuxDataList != NULL &&
|
||||||
|
ArrayListSetVoidPtr(*VarAuxDataList, *NumVars - 1, NULL));
|
||||||
|
}
|
||||||
|
if (IsOk &&
|
||||||
|
(*NumZones > 0) &&
|
||||||
|
(IsVarCellCentered != NULL) &&
|
||||||
|
(*IsVarCellCentered == NULL))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* First construct the array of sets...
|
||||||
|
*/
|
||||||
|
*IsVarCellCentered = ALLOC_ARRAY(*NumZones, Set_pa, "Array of IsVarCellCentered sets");
|
||||||
|
if (*IsVarCellCentered)
|
||||||
|
{
|
||||||
|
EntIndex_t Z;
|
||||||
|
for (Z = 0; IsOk && (Z < *NumZones); Z++)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Now allocate a set for each zone
|
||||||
|
*/
|
||||||
|
(*IsVarCellCentered)[Z] = AllocSet(FALSE);
|
||||||
|
IsOk = (Boolean_t)((*IsVarCellCentered)[Z] != NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
IsOk = FALSE;
|
||||||
|
}
|
||||||
|
if (IsOk && *NumZones > 0 && IsRawFNAvailable != NULL)
|
||||||
|
{
|
||||||
|
*IsRawFNAvailable = AllocSet(FALSE);
|
||||||
|
IsOk = (*IsRawFNAvailable != NULL);
|
||||||
|
}
|
||||||
|
if (IsOk && *NumZones > 0 && FNNumBndryConns != NULL)
|
||||||
|
{
|
||||||
|
*FNNumBndryConns = ALLOC_ARRAY(*NumZones, LgIndex_t, "Array of FNNumBndryConns");
|
||||||
|
IsOk = (*FNNumBndryConns != NULL);
|
||||||
|
if (IsOk)
|
||||||
|
for (LgIndex_t i = 0; i < *NumZones; i++)
|
||||||
|
(*FNNumBndryConns)[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NumCustomLabelSets != NULL)
|
||||||
|
*NumCustomLabelSets = 0;
|
||||||
|
|
||||||
|
EntIndex_t TotalNumZones = *NumZones; /* ...only meaningful for pass 2 */
|
||||||
|
|
||||||
|
*NumZones = 0;
|
||||||
|
*NumVars = 0;
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
char *S = NULL;
|
||||||
|
int INumVars;
|
||||||
|
|
||||||
|
IsOk = ReadInDataFileTypeTitleAndVarNames(FileStream,
|
||||||
|
IVersion,
|
||||||
|
((Pass == 2) ? &S : (char **)NULL),
|
||||||
|
((Pass == 2) ? FileType : (DataFileType_e *)NULL),
|
||||||
|
&INumVars,
|
||||||
|
((Pass == 2) ? VarNames : (StringList_pa *)NULL));
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
*NumVars = (EntIndex_t)INumVars;
|
||||||
|
|
||||||
|
if ((Pass == 2) && S && IsOk && DataSetTitle)
|
||||||
|
*DataSetTitle = S;
|
||||||
|
else if (S != NULL)
|
||||||
|
FREE_ARRAY(S, "data set title");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no dialog feedback */
|
||||||
|
LgIndex_t NumGeoms = 0;
|
||||||
|
LgIndex_t NumTexts = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
X1 = GetNextValue(FileStream, FieldDataType_Float, 0.0, 1000.0, &IsOk);
|
||||||
|
|
||||||
|
while (IsOk && (X1 != EndHeaderMarker))
|
||||||
|
{
|
||||||
|
if (X1 == ZoneMarker)
|
||||||
|
{
|
||||||
|
ZoneSpec_s *ZoneSpec = ZoneSpecAlloc();
|
||||||
|
Boolean_t OkToLoad = (Pass == 2 &&
|
||||||
|
IsVarCellCentered != NULL);
|
||||||
|
IsOk = (ZoneSpec != NULL);
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
Boolean_t LocalIsRawFNAvailable;
|
||||||
|
LgIndex_t LocalFNNumBndryConns;
|
||||||
|
IsOk = ReadInZoneHeader(FileStream, IVersion, ZoneSpec,
|
||||||
|
OkToLoad ? (*IsVarCellCentered)[*NumZones] : NULL,
|
||||||
|
*NumVars, &LocalIsRawFNAvailable,
|
||||||
|
&LocalFNNumBndryConns);
|
||||||
|
if (IsOk && OkToLoad && IsRawFNAvailable != NULL)
|
||||||
|
{
|
||||||
|
if (LocalIsRawFNAvailable)
|
||||||
|
IsOk = AddToSet(*IsRawFNAvailable, *NumZones, FALSE);
|
||||||
|
}
|
||||||
|
if (IsOk && OkToLoad && FNNumBndryConns != NULL)
|
||||||
|
(*FNNumBndryConns)[*NumZones] = LocalFNNumBndryConns;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsOk &&
|
||||||
|
ZoneSpecList != NULL &&
|
||||||
|
Pass == 2)
|
||||||
|
{
|
||||||
|
IsOk = (ZoneSpec->ParentZone == BAD_SET_VALUE ||
|
||||||
|
(ZoneSpec->ParentZone != *NumZones &&
|
||||||
|
(0 <= ZoneSpec->ParentZone && ZoneSpec->ParentZone < TotalNumZones)));
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
ArrayListItem_u CurZoneSpecItem;
|
||||||
|
CurZoneSpecItem.VoidPtr = (void *)ZoneSpec;
|
||||||
|
ArrayListSetItem(*ZoneSpecList, *NumZones,
|
||||||
|
CurZoneSpecItem,
|
||||||
|
ZoneSpecItemDestructor, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ZoneSpec->ParentZone == *NumZones)
|
||||||
|
ErrMsg(translate("Parent zone assignment for zone %d "
|
||||||
|
"may not be self referencing."),
|
||||||
|
*NumZones + 1);
|
||||||
|
else
|
||||||
|
ErrMsg(translate("Parent zone assignment for zone %d "
|
||||||
|
"must be to an existing zone within the datafile."),
|
||||||
|
*NumZones + 1);
|
||||||
|
ZoneSpecDealloc(&ZoneSpec);
|
||||||
|
SentError = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ZoneSpecDealloc(&ZoneSpec);
|
||||||
|
|
||||||
|
if (IsOk)
|
||||||
|
(*NumZones)++;
|
||||||
|
if (*NumZones > MaxNumZonesOrVars)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Exceeding Tecplot's current zone limit of %d. "
|
||||||
|
"Reduce the number of zones being loaded."), MaxNumZonesOrVars);
|
||||||
|
IsOk = FALSE;
|
||||||
|
SentError = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (X1 == GeomMarker)
|
||||||
|
{
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
IsOk = ReadInGeometry(FileStream,
|
||||||
|
IVersion,
|
||||||
|
FALSE,
|
||||||
|
&TempGeom,
|
||||||
|
5000);
|
||||||
|
#endif
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
if (Pass == 1)
|
||||||
|
{
|
||||||
|
if (HasGeoms)
|
||||||
|
*HasGeoms = TRUE;
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (X1 == TextMarker)
|
||||||
|
{
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
IsOk = ReadInText(FileStream,
|
||||||
|
IVersion,
|
||||||
|
FALSE,
|
||||||
|
&TempText,
|
||||||
|
200);
|
||||||
|
#endif
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
if (Pass == 1)
|
||||||
|
{
|
||||||
|
if (HasText)
|
||||||
|
*HasText = TRUE;
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (X1 == CustomLabelMarker)
|
||||||
|
{
|
||||||
|
Boolean_t OkToLoad;
|
||||||
|
|
||||||
|
OkToLoad = (Pass == 2) &&
|
||||||
|
NumCustomLabelSets &&
|
||||||
|
(*NumCustomLabelSets < MaxCustomLabelSets) &&
|
||||||
|
CustomLabelBase;
|
||||||
|
|
||||||
|
IsOk = ReadInCustomLabels(FileStream,
|
||||||
|
IVersion,
|
||||||
|
OkToLoad,
|
||||||
|
(OkToLoad ? &(*CustomLabelBase)[*NumCustomLabelSets] : NULL));
|
||||||
|
if (IsOk && NumCustomLabelSets)
|
||||||
|
(*NumCustomLabelSets)++;
|
||||||
|
}
|
||||||
|
else if (X1 == UserRecMarker)
|
||||||
|
{
|
||||||
|
Boolean_t OkToLoad;
|
||||||
|
char *CurUserRec = NULL;
|
||||||
|
|
||||||
|
OkToLoad = (Boolean_t)((Pass == 2) && UserRec);
|
||||||
|
|
||||||
|
IsOk = ReadInUserRec(FileStream,
|
||||||
|
IVersion,
|
||||||
|
500,
|
||||||
|
OkToLoad ? &CurUserRec : (char **)NULL);
|
||||||
|
if (IsOk && OkToLoad)
|
||||||
|
IsOk = StringListAppendString(*UserRec, CurUserRec);
|
||||||
|
if (CurUserRec)
|
||||||
|
FREE_ARRAY(CurUserRec, "temp user rec");
|
||||||
|
CurUserRec = NULL;
|
||||||
|
}
|
||||||
|
else if (X1 == DataSetAuxMarker)
|
||||||
|
{
|
||||||
|
Boolean_t OkToLoad;
|
||||||
|
CHECK(IVersion >= 101);
|
||||||
|
OkToLoad = (Pass == 2 &&
|
||||||
|
DataSetAuxData != NULL);
|
||||||
|
IsOk = ReadInAuxData(FileStream, IVersion,
|
||||||
|
OkToLoad ? *DataSetAuxData : NULL);
|
||||||
|
if (!IsOk)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Invalid DATASETAUXDATA record in binary datafile"));
|
||||||
|
SentError = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (X1 == VarAuxMarker)
|
||||||
|
{
|
||||||
|
Boolean_t OkToLoad;
|
||||||
|
LgIndex_t VarNum;
|
||||||
|
CHECK(IVersion >= 102);
|
||||||
|
OkToLoad = (Pass == 2 &&
|
||||||
|
VarAuxDataList != NULL);
|
||||||
|
VarNum = GetIoFileInt(FileStream, IVersion, 0, *NumVars - 1, &IsOk);
|
||||||
|
if (IsOk)
|
||||||
|
{
|
||||||
|
AuxData_pa VarAuxData;
|
||||||
|
if (OkToLoad)
|
||||||
|
{
|
||||||
|
VarAuxData = (AuxData_pa)ArrayListGetVoidPtr(*VarAuxDataList, VarNum);
|
||||||
|
if (VarAuxData == NULL)
|
||||||
|
{
|
||||||
|
VarAuxData = AuxDataAlloc();
|
||||||
|
IsOk = (VarAuxData != NULL &&
|
||||||
|
ArrayListSetVoidPtr(*VarAuxDataList, VarNum, VarAuxData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
VarAuxData = NULL;
|
||||||
|
|
||||||
|
IsOk = IsOk && ReadInAuxData(FileStream, IVersion, VarAuxData);
|
||||||
|
if (!IsOk)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Invalid VARAUXDATA record in binary datafile"));
|
||||||
|
SentError = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Invalid VARAUXDATA variable number association"));
|
||||||
|
SentError = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
IsOk = FALSE;
|
||||||
|
if (IsOk)
|
||||||
|
X1 = GetNextValue(FileStream, FieldDataType_Float, 0.0, 1000.0, &IsOk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Old plt files that did not contain data still contained variable name
|
||||||
|
* definitions in the header. This is no longer necessary and in fact can
|
||||||
|
* cause confusion in the data read options dialog. If the number of zones
|
||||||
|
* in the datafile is zero set the number of variables to 0 and dealloc the
|
||||||
|
* variable name list.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (IsOk && (*NumZones == 0) && (*NumVars > 0))
|
||||||
|
{
|
||||||
|
*NumVars = 0;
|
||||||
|
if (VarNames && *VarNames)
|
||||||
|
{
|
||||||
|
StringListDealloc(VarNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!IsOk)
|
||||||
|
{
|
||||||
|
if (ZoneSpecList && *ZoneSpecList)
|
||||||
|
ArrayListDealloc(ZoneSpecList, ZoneSpecItemDestructor, 0);
|
||||||
|
if (DataSetTitle && *DataSetTitle)
|
||||||
|
{
|
||||||
|
FREE_ARRAY(*DataSetTitle, "DataSetTitle");
|
||||||
|
*DataSetTitle = NULL;
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
if (VarNames && *VarNames)
|
||||||
|
{
|
||||||
|
StringListDealloc(VarNames);
|
||||||
|
}
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
if (UserRec && *UserRec)
|
||||||
|
StringListDealloc(UserRec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If there was an error, get rid of the auxiliary data list. */
|
||||||
|
if ((DataSetAuxData != NULL && *DataSetAuxData != NULL) &&
|
||||||
|
(!IsOk))
|
||||||
|
AuxDataDealloc(DataSetAuxData);
|
||||||
|
|
||||||
|
if (!IsOk && !SentError)
|
||||||
|
ErrMsg(translate("Invalid header in binary datafile"));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: Do not close the file. Some calling functions will continue
|
||||||
|
* to read from this point on.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENSURE((VarNames == NULL) || (*VarNames == NULL) || StringListValid(*VarNames));
|
||||||
|
ENSURE(IMPLICATION(UserRec != NULL,
|
||||||
|
(*UserRec == NULL ||
|
||||||
|
StringListValid(*UserRec))));
|
||||||
|
ENSURE(IMPLICATION(DataSetAuxData != NULL,
|
||||||
|
(*DataSetAuxData == NULL ||
|
||||||
|
VALID_REF(*DataSetAuxData))));
|
||||||
|
return (IsOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
|
||||||
|
Boolean_t OpenBinaryFileAndCheckMagicNumber(FileStream_s **FileStream,
|
||||||
|
char *FName,
|
||||||
|
FileOffset_t StartOffset,
|
||||||
|
short *IVersion)
|
||||||
|
{
|
||||||
|
Boolean_t Result = TRUE;
|
||||||
|
REQUIRE(VALID_REF(FileStream));
|
||||||
|
REQUIRE(*FileStream == NULL);
|
||||||
|
REQUIRE(VALID_REF(FName));
|
||||||
|
REQUIRE(StartOffset >= 0);
|
||||||
|
REQUIRE(VALID_REF(IVersion));
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
FILE *File = TP_FOPEN(FName, "rb");
|
||||||
|
if (File == NULL)
|
||||||
|
Result = FALSE;
|
||||||
|
#endif
|
||||||
|
if (Result)
|
||||||
|
{
|
||||||
|
*FileStream = FileStreamAlloc(File, TRUE);
|
||||||
|
Result = (*FileStream != NULL);
|
||||||
|
}
|
||||||
|
Result = Result && (TP_FSEEK((*FileStream)->File, StartOffset, SEEK_SET) == 0);
|
||||||
|
if (Result)
|
||||||
|
{
|
||||||
|
*IVersion = GetInputVersion(*FileStream);
|
||||||
|
/*
|
||||||
|
* After version 71 we started listing individual valid
|
||||||
|
* versions. Before that time we just listed ranges. Also,
|
||||||
|
* note that versions 72, 73, and 74 were invalid.
|
||||||
|
*/
|
||||||
|
Result = (/* past valid plt file version ranges follow: */
|
||||||
|
(40 <= *IVersion && *IVersion <= 71) ||
|
||||||
|
(*IVersion == 75) ||
|
||||||
|
(100 <= *IVersion && *IVersion <= TecplotBinaryFileVersion));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This check is put here to make sure that the above code gets visited
|
||||||
|
* when the TecplotBinaryFileVersion number changes. When the version
|
||||||
|
* changes the "past valid plt file version ranges" above and the number
|
||||||
|
* compared to the TecplotBinaryFileVersion below may need to be
|
||||||
|
* adjusted such as when we skip a consecutive number as we did between
|
||||||
|
* version 71 and 75, and between 75 and 100.
|
||||||
|
*/
|
||||||
|
CHECK(TecplotBinaryFileVersion == 112);
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_BOOLEAN(Result));
|
||||||
|
return (Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
#endif
|
||||||
|
#if !defined NO_ASSERTS
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-M 12/13/2005: ENGINE-P2 - no status feedback */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-H 12/12/2005: ENGINE: refactor to use just the Interrupted flag as-is */
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#if 0 /* we changed this behavior... not sure when */
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,283 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DATASETMODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "STRUTIL.h"
|
||||||
|
#include "AUXDATA.h"
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "SET.h"
|
||||||
|
#include "DATASET.h"
|
||||||
|
#include "FILESTREAM.h"
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
#include "DATASET0.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE /* TODO(RMS)-H 12/12/2005: ENGINE: refactor to use just the Interrupted flag as-is */
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
#if !defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanout the contents of the zone spec item but leaves the zone spec item.
|
||||||
|
* This effectively leaves the zone spec structure in the same state as calling
|
||||||
|
* ZoneSpecAlloc initially.
|
||||||
|
*
|
||||||
|
* param ZoneSpec
|
||||||
|
* Zone spec item to cleanup.
|
||||||
|
*/
|
||||||
|
void CleanoutZoneSpec(ZoneSpec_s *ZoneSpec)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(ZoneSpec));
|
||||||
|
|
||||||
|
if (ZoneSpec->Name != NULL)
|
||||||
|
FREE_ARRAY(ZoneSpec->Name, "ZoneSpec name");
|
||||||
|
if (ZoneSpec->AuxData != NULL)
|
||||||
|
AuxDataDealloc(&ZoneSpec->AuxData);
|
||||||
|
SetZoneSpecDefaults(ZoneSpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void ZoneSpecDealloc(ZoneSpec_s **ZoneSpec)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(ZoneSpec));
|
||||||
|
REQUIRE(VALID_REF(*ZoneSpec) || *ZoneSpec == NULL);
|
||||||
|
|
||||||
|
if (*ZoneSpec != NULL)
|
||||||
|
{
|
||||||
|
CleanoutZoneSpec(*ZoneSpec);
|
||||||
|
|
||||||
|
FREE_ITEM(*ZoneSpec, "ZoneSpec structure");
|
||||||
|
*ZoneSpec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(*ZoneSpec == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
Boolean_t ZoneSpecItemDestructor(void *ItemRef,
|
||||||
|
ArbParam_t ClientData)
|
||||||
|
{
|
||||||
|
ZoneSpec_s **ZoneSpecRef = (ZoneSpec_s **)ItemRef;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(ZoneSpecRef));
|
||||||
|
REQUIRE(VALID_REF(*ZoneSpecRef) || *ZoneSpecRef == NULL);
|
||||||
|
|
||||||
|
if (*ZoneSpecRef != NULL)
|
||||||
|
ZoneSpecDealloc(ZoneSpecRef);
|
||||||
|
|
||||||
|
ENSURE(*ZoneSpecRef == NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void SetZoneSpecDefaults(ZoneSpec_s *ZoneSpec)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(ZoneSpec));
|
||||||
|
ZoneSpec->Name = NULL;
|
||||||
|
ZoneSpec->UniqueID = INVALID_UNIQUE_ID;
|
||||||
|
ZoneSpec->ParentZone = BAD_SET_VALUE;
|
||||||
|
ZoneSpec->StrandID = STRAND_ID_STATIC;
|
||||||
|
ZoneSpec->SolutionTime = 0.0;
|
||||||
|
ZoneSpec->NumPtsI = 0;
|
||||||
|
ZoneSpec->NumPtsJ = 0;
|
||||||
|
ZoneSpec->NumPtsK = 0;
|
||||||
|
ZoneSpec->ICellDim = 0; // ...currently not used
|
||||||
|
ZoneSpec->JCellDim = 0; // ...currently not used
|
||||||
|
ZoneSpec->KCellDim = 0; // ...currently not used
|
||||||
|
ZoneSpec->Type = ZoneType_Ordered;
|
||||||
|
ZoneSpec->ZoneLoadInfo.PresetZoneColor = NoColor_C;
|
||||||
|
ZoneSpec->ZoneLoadInfo.IsInBlockFormat = TRUE;
|
||||||
|
ZoneSpec->AuxData = NULL;
|
||||||
|
ZoneSpec->BuildZoneOptInfo = TRUE;
|
||||||
|
|
||||||
|
/* classic data only */
|
||||||
|
ZoneSpec->FNMode = FaceNeighborMode_LocalOneToOne;
|
||||||
|
ZoneSpec->FNAreCellFaceNbrsSupplied = FALSE;
|
||||||
|
|
||||||
|
/* polytope data only */
|
||||||
|
ZoneSpec->NumFaceNodes = 0;
|
||||||
|
ZoneSpec->NumFaceBndryFaces = 0;
|
||||||
|
ZoneSpec->NumFaceBndryItems = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void ZoneSpecExcludeBndryConnsFromMetrics(ZoneSpec_s* ZoneSpec)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(ZoneSpec));
|
||||||
|
|
||||||
|
/* classic data face connectivity fixup (leave FNMode as-is) */
|
||||||
|
ZoneSpec->FNAreCellFaceNbrsSupplied = FALSE; // ...if we invalidate boundary connections CellFaceNbrs must now be auto-generated
|
||||||
|
|
||||||
|
/* polytope data face connectivity fixup */
|
||||||
|
ZoneSpec->NumFaceBndryFaces = 0;
|
||||||
|
ZoneSpec->NumFaceBndryItems = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
ZoneSpec_s *ZoneSpecAlloc(void)
|
||||||
|
{
|
||||||
|
ZoneSpec_s *Result;
|
||||||
|
|
||||||
|
Result = (ZoneSpec_s *)ALLOC_ITEM(ZoneSpec_s, "ZoneSpec structure");
|
||||||
|
if (Result != NULL)
|
||||||
|
SetZoneSpecDefaults(Result);
|
||||||
|
|
||||||
|
ENSURE(Result == NULL || VALID_REF(Result));
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjusts the capacity request as necessary to minimize memory reallocations
|
||||||
|
* for large lists. The adjusted capacity will be at least as big as requested
|
||||||
|
* however it may be larger if it is determined that the space requirement is
|
||||||
|
* growing faster.
|
||||||
|
*
|
||||||
|
* param ZoneOrVarArrayList
|
||||||
|
* Array list requesting the change in capacity.
|
||||||
|
* param CurrentCapacity
|
||||||
|
* Current capacity of the array list.
|
||||||
|
* param RequestedCapacity
|
||||||
|
* Capacity request or zero for default size.
|
||||||
|
* param ClientData
|
||||||
|
* Any client data needed for the adjustment.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Adjusted capacity that is at least as large as the request or zero if
|
||||||
|
* unable to satisfy the requested capacity.
|
||||||
|
*/
|
||||||
|
LgIndex_t ZoneOrVarListAdjustCapacityRequest(ArrayList_pa ZoneOrVarArrayList,
|
||||||
|
LgIndex_t CurrentCapacity,
|
||||||
|
LgIndex_t RequestedCapacity,
|
||||||
|
ArbParam_t ClientData)
|
||||||
|
{
|
||||||
|
LgIndex_t Result;
|
||||||
|
|
||||||
|
REQUIRE(ArrayListIsValid(ZoneOrVarArrayList));
|
||||||
|
REQUIRE((RequestedCapacity == 0 && CurrentCapacity == 0) ||
|
||||||
|
RequestedCapacity > CurrentCapacity);
|
||||||
|
REQUIRE(CurrentCapacity <= MaxNumZonesOrVars);
|
||||||
|
|
||||||
|
if (RequestedCapacity <= MaxNumZonesOrVars)
|
||||||
|
{
|
||||||
|
if (RequestedCapacity != 0 && CurrentCapacity == 0)
|
||||||
|
{
|
||||||
|
/* first allocation; assume the request is the desired capacityy */
|
||||||
|
Result = RequestedCapacity;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const LgIndex_t DEFAULT_CAPACITY = 32;
|
||||||
|
LgIndex_t BlockSize = MAX(DEFAULT_CAPACITY, CurrentCapacity / 2);
|
||||||
|
if (RequestedCapacity == 0)
|
||||||
|
Result = DEFAULT_CAPACITY;
|
||||||
|
else
|
||||||
|
Result = ((RequestedCapacity - 1) / BlockSize + 1) * BlockSize;
|
||||||
|
|
||||||
|
/* put a cap on the maximum */
|
||||||
|
if (Result > MaxNumZonesOrVars)
|
||||||
|
Result = MaxNumZonesOrVars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Result = 0; /* request exceeded maximum; unable to satisfy request */
|
||||||
|
|
||||||
|
ENSURE(Result == 0 || Result >= RequestedCapacity);
|
||||||
|
ENSURE(Result <= MaxNumZonesOrVars);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined USE_MACROS_FOR_FUNCTIONS
|
||||||
|
#endif
|
||||||
|
# if defined DEBUGUNIQUE
|
||||||
|
# endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,941 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* datautil.c:
|
||||||
|
*
|
||||||
|
* version 1.00 : 12/10/91 (cm) changes made for manual
|
||||||
|
* version 1.01 : 12/30/91 Get and ReturnHugeBlock are now ptr to function
|
||||||
|
* version 6.00 : 04/21/92 updated to match version 6 of tecplot.
|
||||||
|
* version 6.30 : 10/15/92 updated to match binary file version 6.3
|
||||||
|
* version 6.30a: 05/04/93 (cm) minor changes to prototypes
|
||||||
|
* version : 11/01/93 (cm) put in D4GW stuff
|
||||||
|
* version 6.30b: 12/27/93 (cm) fixed missing NumKPts in DumpZone
|
||||||
|
* version 6.30c: 12/27/93 (cm) put back in D4GW stuff
|
||||||
|
BEGIN CODELOG TECXXX
|
||||||
|
C 03/06/96 (BDP)
|
||||||
|
C Update to V7
|
||||||
|
C
|
||||||
|
C 03/14/97 (BDP)
|
||||||
|
C Added code to main tecplot source. Now can
|
||||||
|
C be built stand alone or added so TecUtil_ functions
|
||||||
|
C can access.
|
||||||
|
C 06/02/98 (bdp)
|
||||||
|
C v75 coding. Also removed Array of ZoneSpec_s
|
||||||
|
C structs in favor of zonenames, i,j,and k dimensions
|
||||||
|
C and zonetype array.
|
||||||
|
END CODELOG
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "SYSTEM.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "TECXXX.h"
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
#include "SET.h"
|
||||||
|
#include "DATASET.h"
|
||||||
|
#include "FILESTREAM.h"
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
#include "DATAIO.h"
|
||||||
|
#include "DATAIO4.h"
|
||||||
|
#include "DATAUTIL.h"
|
||||||
|
#include "STRLIST.h"
|
||||||
|
#include "Q_MSG.h"
|
||||||
|
#if defined MAKEARCHIVE
|
||||||
|
#define INITMODULE
|
||||||
|
#endif
|
||||||
|
#include "INPUT.h"
|
||||||
|
|
||||||
|
using namespace tecplot::strutil;
|
||||||
|
|
||||||
|
#if defined MAKEARCHIVE
|
||||||
|
#define ANGLEEPSILON 1.0e-10
|
||||||
|
|
||||||
|
void InitInputSpecs(void)
|
||||||
|
{
|
||||||
|
LineThicknessInputSpec.Type = Input_Double;
|
||||||
|
LineThicknessInputSpec.Min = 0.000001;
|
||||||
|
LineThicknessInputSpec.Max = 1.0;
|
||||||
|
LineThicknessInputSpec.InterfaceAdjust.ScaleFact = 100.0;
|
||||||
|
LineThicknessInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
PatternLengthInputSpec.Type = Input_Double;
|
||||||
|
PatternLengthInputSpec.Min = 0.0001;
|
||||||
|
PatternLengthInputSpec.Max = 1.0;
|
||||||
|
PatternLengthInputSpec.InterfaceAdjust.ScaleFact = 100.0;
|
||||||
|
PatternLengthInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
TextBoxMarginInputSpec.Type = Input_Double;
|
||||||
|
TextBoxMarginInputSpec.Min = 0.0;
|
||||||
|
TextBoxMarginInputSpec.Max = 20.0;
|
||||||
|
TextBoxMarginInputSpec.InterfaceAdjust.ScaleFact = 100.0;
|
||||||
|
TextBoxMarginInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
TextLineSpacingInputSpec.Type = Input_Double;
|
||||||
|
TextLineSpacingInputSpec.Min = 0.0;
|
||||||
|
TextLineSpacingInputSpec.Max = 5.0;
|
||||||
|
TextLineSpacingInputSpec.InterfaceAdjust.ScaleFact = 1.0;
|
||||||
|
TextLineSpacingInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
ArrowheadSizeInputSpec.Type = Input_Double;
|
||||||
|
ArrowheadSizeInputSpec.Min = 0.0;
|
||||||
|
ArrowheadSizeInputSpec.Max = 0.5;
|
||||||
|
ArrowheadSizeInputSpec.InterfaceAdjust.ScaleFact = 100.0;
|
||||||
|
ArrowheadSizeInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
TextAngleInputSpec.Type = Input_Double;
|
||||||
|
TextAngleInputSpec.Min = -PI - ANGLEEPSILON;
|
||||||
|
TextAngleInputSpec.Max = PI + ANGLEEPSILON;
|
||||||
|
TextAngleInputSpec.InterfaceAdjust.ScaleFact = DEGPERRADIANS;
|
||||||
|
TextAngleInputSpec.SuffixModifier = NULL;
|
||||||
|
|
||||||
|
ArrowheadAngleInputSpec.Type = Input_Double;
|
||||||
|
ArrowheadAngleInputSpec.Min = 1.0 / DEGPERRADIANS - ANGLEEPSILON;
|
||||||
|
ArrowheadAngleInputSpec.Max = PIOVER2 + ANGLEEPSILON;
|
||||||
|
ArrowheadAngleInputSpec.InterfaceAdjust.ScaleFact = DEGPERRADIANS;
|
||||||
|
ArrowheadAngleInputSpec.SuffixModifier = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void LocalReadBlock(FileStream_s *FileStream,
|
||||||
|
double *CurVPtr,
|
||||||
|
FieldDataType_e FieldDataTypeInFile,
|
||||||
|
HgIndex_t NumValues,
|
||||||
|
Boolean_t *IsOk)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(IsOk) && VALID_BOOLEAN(*IsOk));
|
||||||
|
REQUIRE(!(*IsOk) || VALID_REF(FileStream));
|
||||||
|
REQUIRE(!(*IsOk) || VALID_FIELD_DATA_TYPE(FieldDataTypeInFile));
|
||||||
|
|
||||||
|
if (*IsOk)
|
||||||
|
{
|
||||||
|
Boolean_t DoRead = (CurVPtr != NULL);
|
||||||
|
Boolean_t ReadByBlock = (FieldDataType_Double == FieldDataTypeInFile) || !DoRead;
|
||||||
|
if (ReadByBlock)
|
||||||
|
{
|
||||||
|
ReadPureBlock(FileStream,
|
||||||
|
DoRead,
|
||||||
|
(void *)CurVPtr,
|
||||||
|
FieldDataTypeInFile,
|
||||||
|
0,
|
||||||
|
NumValues,
|
||||||
|
IsOk);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LgIndex_t N;
|
||||||
|
for (N = 0; *IsOk && (N < NumValues); N++)
|
||||||
|
{
|
||||||
|
double D = GetNextValue(FileStream, FieldDataTypeInFile, -LARGEDOUBLE, LARGEDOUBLE, IsOk);
|
||||||
|
if (DoRead)
|
||||||
|
CurVPtr[N] = D;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* NOTE: ReadTec only allocates space for NodeMap and VDataBase
|
||||||
|
* if RawDataSpaceAllocated == FALSE and GetHeaderInfoOnly
|
||||||
|
* is FALSE.
|
||||||
|
*
|
||||||
|
* Also note that all data read in by ReadTec is currently
|
||||||
|
* limited to be in double precision.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Boolean_t STDCALL ReadTec(Boolean_t GetHeaderInfoOnly,
|
||||||
|
char *FName,
|
||||||
|
short *IVersion,
|
||||||
|
char **DataSetTitle,
|
||||||
|
EntIndex_t *NumZones,
|
||||||
|
EntIndex_t *NumVars,
|
||||||
|
StringList_pa *VarNames,
|
||||||
|
StringList_pa *ZoneNames,
|
||||||
|
LgIndex_t **NumPtsI,
|
||||||
|
LgIndex_t **NumPtsJ,
|
||||||
|
LgIndex_t **NumPtsK,
|
||||||
|
ZoneType_e **ZoneType,
|
||||||
|
StringList_pa *UserRec,
|
||||||
|
Boolean_t RawDataSpaceAllocated,
|
||||||
|
NodeMap_t ***NodeMap,
|
||||||
|
double ***VDataBase)
|
||||||
|
{
|
||||||
|
Boolean_t InputIsOk = FALSE;
|
||||||
|
ArrayList_pa ZoneSpecList = NULL;
|
||||||
|
LgIndex_t *FNNumBndryConns = NULL; /* [NumZones] */
|
||||||
|
FileStream_s *ReadTecFileStream = NULL;
|
||||||
|
Set_pa *IsVarCellCentered = NULL; /* [NumZones] */
|
||||||
|
|
||||||
|
REQUIRE(VALID_BOOLEAN(GetHeaderInfoOnly));
|
||||||
|
REQUIRE(VALID_NON_ZERO_LEN_STR(FName));
|
||||||
|
REQUIRE(VALID_REF(IVersion));
|
||||||
|
REQUIRE(VALID_REF(DataSetTitle) || DataSetTitle == NULL);
|
||||||
|
REQUIRE(VALID_REF(NumZones));
|
||||||
|
REQUIRE(VALID_REF(NumVars));
|
||||||
|
REQUIRE(VarNames == NULL || VALID_REF(VarNames));
|
||||||
|
REQUIRE(ZoneNames == NULL || VALID_REF(ZoneNames));
|
||||||
|
REQUIRE(NumPtsI == NULL || VALID_REF(NumPtsI));
|
||||||
|
REQUIRE(NumPtsJ == NULL || VALID_REF(NumPtsJ));
|
||||||
|
REQUIRE(NumPtsK == NULL || VALID_REF(NumPtsK));
|
||||||
|
REQUIRE(ZoneType == NULL || VALID_REF(ZoneType));
|
||||||
|
REQUIRE(UserRec == NULL || VALID_REF(UserRec));
|
||||||
|
REQUIRE(VALID_BOOLEAN(RawDataSpaceAllocated));
|
||||||
|
REQUIRE(IMPLICATION(!GetHeaderInfoOnly && RawDataSpaceAllocated,
|
||||||
|
VALID_REF(NodeMap) && VALID_REF(VDataBase)));
|
||||||
|
|
||||||
|
#if defined MAKEARCHIVE
|
||||||
|
InitInputSpecs();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
InputIsOk = OpenBinaryFileAndCheckMagicNumber(&ReadTecFileStream,
|
||||||
|
FName,
|
||||||
|
0,
|
||||||
|
IVersion);
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
InputIsOk = ReadDataFileHeader(ReadTecFileStream,
|
||||||
|
*IVersion,
|
||||||
|
FALSE,
|
||||||
|
NumZones,
|
||||||
|
NumVars,
|
||||||
|
(SmInteger_t *)NULL,
|
||||||
|
DataSetTitle,
|
||||||
|
(Text_s **)NULL,
|
||||||
|
(Geom_s **)NULL,
|
||||||
|
(StringList_pa **)NULL,
|
||||||
|
UserRec,
|
||||||
|
(AuxData_pa *)NULL,
|
||||||
|
&IsVarCellCentered,
|
||||||
|
(Boolean_t *)NULL,
|
||||||
|
(Boolean_t *)NULL,
|
||||||
|
&ZoneSpecList,
|
||||||
|
VarNames,
|
||||||
|
(ArrayList_pa *)NULL,
|
||||||
|
(Set_pa *)NULL,
|
||||||
|
&FNNumBndryConns,
|
||||||
|
(DataFileType_e *)NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
if (*NumZones == 0)
|
||||||
|
*NumVars = 0;
|
||||||
|
else if (*IVersion > 112)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This may not be true but we put it hear to remind us to make
|
||||||
|
* updates to this code when we change the version number.
|
||||||
|
*/
|
||||||
|
ErrMsg(translate("ReadTec does not yet support version %d "
|
||||||
|
"Tecplot binary data files."), *IVersion);
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
else if (!GetHeaderInfoOnly)
|
||||||
|
{
|
||||||
|
EntIndex_t Z;
|
||||||
|
for (Z = 0; Z < *NumZones && InputIsOk; Z++)
|
||||||
|
{
|
||||||
|
InputIsOk = (MemberCount(IsVarCellCentered[Z]) == 0);
|
||||||
|
if (!InputIsOk)
|
||||||
|
ErrMsg(translate("Cell centered data not supported by ReadTec."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsVarCellCentered != NULL)
|
||||||
|
{
|
||||||
|
EntIndex_t Z;
|
||||||
|
for (Z = 0; Z < *NumZones; Z++)
|
||||||
|
DeallocSet(&IsVarCellCentered[Z]);
|
||||||
|
FREE_ARRAY(IsVarCellCentered, "Array of IsVarCellCentered sets");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
EntIndex_t Z;
|
||||||
|
/*
|
||||||
|
* Allocate space for the zone info pieces.
|
||||||
|
*/
|
||||||
|
if (ZoneNames)
|
||||||
|
*ZoneNames = StringListAlloc();
|
||||||
|
if (NumPtsI)
|
||||||
|
*NumPtsI = ALLOC_ARRAY(*NumZones, LgIndex_t, "numptsi");
|
||||||
|
if (NumPtsJ)
|
||||||
|
*NumPtsJ = ALLOC_ARRAY(*NumZones, LgIndex_t, "numptsj");
|
||||||
|
if (NumPtsK)
|
||||||
|
*NumPtsK = ALLOC_ARRAY(*NumZones, LgIndex_t, "numptsk");
|
||||||
|
if (ZoneType)
|
||||||
|
*ZoneType = ALLOC_ARRAY(*NumZones, ZoneType_e, "zonetype");
|
||||||
|
for (Z = 0; Z < *NumZones; Z++)
|
||||||
|
{
|
||||||
|
ZoneSpec_s *ZoneSpec = GetZoneSpec(ZoneSpecList, Z);
|
||||||
|
if (ZoneSpec != NULL)
|
||||||
|
{
|
||||||
|
if (ZoneNames && *ZoneNames)
|
||||||
|
StringListAppendString(*ZoneNames, ZoneSpec->Name);
|
||||||
|
|
||||||
|
if (NumPtsI && *NumPtsI)
|
||||||
|
(*NumPtsI)[Z] = ZoneSpec->NumPtsI;
|
||||||
|
|
||||||
|
if (NumPtsJ && *NumPtsJ)
|
||||||
|
(*NumPtsJ)[Z] = ZoneSpec->NumPtsJ;
|
||||||
|
|
||||||
|
if (NumPtsK && *NumPtsK)
|
||||||
|
(*NumPtsK)[Z] = ZoneSpec->NumPtsK;
|
||||||
|
|
||||||
|
if (ZoneType && *ZoneType)
|
||||||
|
(*ZoneType)[Z] = ZoneSpec->Type;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ZoneNames && *ZoneNames)
|
||||||
|
StringListAppendString(*ZoneNames, NULL);
|
||||||
|
|
||||||
|
if (NumPtsI && *NumPtsI)
|
||||||
|
(*NumPtsI)[Z] = 0;
|
||||||
|
|
||||||
|
if (NumPtsJ && *NumPtsJ)
|
||||||
|
(*NumPtsJ)[Z] = 0;
|
||||||
|
|
||||||
|
if (NumPtsK && *NumPtsK)
|
||||||
|
(*NumPtsK)[Z] = 0;
|
||||||
|
|
||||||
|
if (ZoneType && *ZoneType)
|
||||||
|
(*ZoneType)[Z] = ZoneType_Invalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!GetHeaderInfoOnly && InputIsOk && (*NumZones > 0))
|
||||||
|
{
|
||||||
|
EntIndex_t *VarSharesFromZone = NULL; /* [NumVars] */
|
||||||
|
Boolean_t *IsVarPassive = NULL; /* [NumVars] */
|
||||||
|
EntIndex_t *ConnectivitySharesFromZone = NULL; /* [NumZones] */
|
||||||
|
FieldDataType_e *VarType = NULL;
|
||||||
|
int CurZone;
|
||||||
|
int CurVar;
|
||||||
|
LgIndex_t NumIPts = 0;
|
||||||
|
LgIndex_t NumJPts = 0;
|
||||||
|
LgIndex_t NumKPts = 0;
|
||||||
|
LgIndex_t TotalNumPts;
|
||||||
|
LgIndex_t I, J;
|
||||||
|
|
||||||
|
if ((*NumZones > 0) && !RawDataSpaceAllocated)
|
||||||
|
{
|
||||||
|
*VDataBase = ALLOC_ARRAY(*NumZones * (*NumVars), double *, "vdatabase array");
|
||||||
|
if (*VDataBase == NULL)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Cannot allocate space for field data"));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int I;
|
||||||
|
for (I = 0; I < *NumZones*(*NumVars); I++)
|
||||||
|
(*VDataBase)[I] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
*NodeMap = ALLOC_ARRAY(*NumZones, NodeMap_t *, "nodemap array");
|
||||||
|
if (*NodeMap == NULL)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Cannot allocate space for nodemap"));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int I;
|
||||||
|
for (I = 0; I < *NumZones; I++)
|
||||||
|
(*NodeMap)[I] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
VarType = ALLOC_ARRAY(*NumVars + 1, FieldDataType_e, "Var Type");
|
||||||
|
VarSharesFromZone = ALLOC_ARRAY(*NumVars + 1, EntIndex_t, "VarSharesFromZone");
|
||||||
|
IsVarPassive = ALLOC_ARRAY(*NumVars + 1, Boolean_t, "IsVarPassive");
|
||||||
|
|
||||||
|
ConnectivitySharesFromZone = ALLOC_ARRAY(*NumZones, EntIndex_t, "ConnectivitySharesFromZone");
|
||||||
|
InputIsOk = (VarType != NULL &&
|
||||||
|
VarSharesFromZone != NULL &&
|
||||||
|
IsVarPassive != NULL &&
|
||||||
|
ConnectivitySharesFromZone != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* for each zone */
|
||||||
|
for (CurZone = 0; CurZone < *NumZones && InputIsOk; CurZone++)
|
||||||
|
{
|
||||||
|
double X1 = GetNextValue(ReadTecFileStream, FieldDataType_Float, 0.0, 1000.0, &InputIsOk);
|
||||||
|
if (InputIsOk && (X1 == ZoneMarker))
|
||||||
|
{
|
||||||
|
ZoneSpec_s *CurZoneSpec = GetZoneSpec(ZoneSpecList, CurZone);
|
||||||
|
Boolean_t ZoneIsFinite = (CurZoneSpec->Type != ZoneType_Ordered);
|
||||||
|
Boolean_t ZoneIsFEPoly = (CurZoneSpec->Type == ZoneType_FEPolygon ||
|
||||||
|
CurZoneSpec->Type == ZoneType_FEPolyhedron);
|
||||||
|
Boolean_t InBlockFormat = CurZoneSpec->ZoneLoadInfo.IsInBlockFormat;
|
||||||
|
for (J = 0; J < *NumVars; J++)
|
||||||
|
{
|
||||||
|
VarSharesFromZone[J] = -1; /* eumulate DupVar: no DupVar */
|
||||||
|
VarType[J] = FieldDataType_Float;
|
||||||
|
IsVarPassive[J] = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dupvars */
|
||||||
|
if (*IVersion > 45 && *IVersion < 101 && InputIsOk)
|
||||||
|
{
|
||||||
|
EntIndex_t NumDupVars, ZZ;
|
||||||
|
|
||||||
|
NumDupVars = (EntIndex_t)GetIoFileInt(ReadTecFileStream, *IVersion, 0, (LgIndex_t) * NumVars, &InputIsOk);
|
||||||
|
for (J = 0; J < NumDupVars; J++)
|
||||||
|
{
|
||||||
|
ZZ = (EntIndex_t)GetIoFileInt(ReadTecFileStream, *IVersion, 0, *NumVars, &InputIsOk) - 1;
|
||||||
|
VarSharesFromZone[ZZ] = CurZone - 1; /* emulate DupVar: share from previous zone */
|
||||||
|
}
|
||||||
|
/* Can't duplicate from the first zone */
|
||||||
|
if ((NumDupVars > 0) && (CurZone == 0))
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Cannot duplicate variables from the first zone since there are "
|
||||||
|
"no previous zones to duplicate from."));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get the data type for each variable */
|
||||||
|
if (*IVersion >= 70 && InputIsOk)
|
||||||
|
{
|
||||||
|
for (J = 0; J < *NumVars; J++)
|
||||||
|
{
|
||||||
|
VarType[J] = (FieldDataType_e)GetIoFileInt(ReadTecFileStream, *IVersion,
|
||||||
|
0,
|
||||||
|
(LgIndex_t)FieldDataType_Bit,
|
||||||
|
&InputIsOk);
|
||||||
|
if (!InputIsOk)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Invalid data type - binary input file corrupted"));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
NumIPts = CurZoneSpec->NumPtsI;
|
||||||
|
NumJPts = CurZoneSpec->NumPtsJ;
|
||||||
|
NumKPts = CurZoneSpec->NumPtsK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ZoneIsFinite)
|
||||||
|
TotalNumPts = NumIPts;
|
||||||
|
else
|
||||||
|
TotalNumPts = (NumIPts * NumJPts * NumKPts);
|
||||||
|
|
||||||
|
for (CurVar = 0; CurVar < *NumVars && InputIsOk; CurVar++)
|
||||||
|
{
|
||||||
|
if (!RawDataSpaceAllocated && TotalNumPts >= 1)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The calling program did not allocate space for the
|
||||||
|
* data so do it here.
|
||||||
|
*/
|
||||||
|
(*VDataBase)[CurVar+CurZone*(*NumVars)] =
|
||||||
|
ALLOC_ARRAY(TotalNumPts, double, "raw data");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*IVersion >= 105 && InputIsOk)
|
||||||
|
{
|
||||||
|
/* passive variables */
|
||||||
|
if ((Boolean_t)GetIoFileInt(ReadTecFileStream, *IVersion, 0, 1, &InputIsOk) && InputIsOk)
|
||||||
|
{
|
||||||
|
for (CurVar = 0; CurVar < *NumVars && InputIsOk; CurVar++)
|
||||||
|
{
|
||||||
|
IsVarPassive[CurVar] = (Boolean_t)GetIoFileInt(ReadTecFileStream,
|
||||||
|
*IVersion,
|
||||||
|
0, 1, &InputIsOk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*IVersion >= 101 && InputIsOk)
|
||||||
|
{
|
||||||
|
/* variable sharing: equivalent to DupVar for ReadTec */
|
||||||
|
if ((Boolean_t)GetIoFileInt(ReadTecFileStream, *IVersion, 0, 1, &InputIsOk) && InputIsOk)
|
||||||
|
{
|
||||||
|
for (CurVar = 0; CurVar < *NumVars && InputIsOk; CurVar++)
|
||||||
|
{
|
||||||
|
EntIndex_t SharedZone = GetIoFileInt(ReadTecFileStream, *IVersion,
|
||||||
|
-1, MaxNumZonesOrVars - 1,
|
||||||
|
&InputIsOk);
|
||||||
|
if (SharedZone != -1 && InputIsOk)
|
||||||
|
VarSharesFromZone[CurVar] = SharedZone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* face neighbor or FE node connectivity sharing */
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
EntIndex_t SharedZone = GetIoFileInt(ReadTecFileStream, *IVersion,
|
||||||
|
-1, MaxNumZonesOrVars - 1,
|
||||||
|
&InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
ConnectivitySharesFromZone[CurZone] = SharedZone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Non-shared variable min/max (but not for Zombie zones).
|
||||||
|
*/
|
||||||
|
if (*IVersion >= 103 && InputIsOk)
|
||||||
|
{
|
||||||
|
for (CurVar = 0; CurVar < *NumVars && InputIsOk; CurVar++)
|
||||||
|
{
|
||||||
|
if (VarSharesFromZone[CurVar] == -1 && !IsVarPassive[CurVar])
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Currently ReadTec doesn't do anything with the
|
||||||
|
* min/max values.
|
||||||
|
*/
|
||||||
|
GetNextValue(ReadTecFileStream, FieldDataType_Double,
|
||||||
|
-LARGEDOUBLE, LARGEDOUBLE,
|
||||||
|
&InputIsOk);
|
||||||
|
GetNextValue(ReadTecFileStream, FieldDataType_Double,
|
||||||
|
-LARGEDOUBLE, LARGEDOUBLE,
|
||||||
|
&InputIsOk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InBlockFormat)
|
||||||
|
{
|
||||||
|
CurVar = -1;
|
||||||
|
while (InputIsOk && ((CurVar + 1) < *NumVars))
|
||||||
|
{
|
||||||
|
CurVar++;
|
||||||
|
if ((CurVar < *NumVars) && (TotalNumPts > 0))
|
||||||
|
{
|
||||||
|
double *CurVPtr = (*VDataBase)[CurVar+CurZone*(*NumVars)];
|
||||||
|
J = 0;
|
||||||
|
if (VarSharesFromZone[CurVar] != -1)
|
||||||
|
{
|
||||||
|
LgIndex_t M;
|
||||||
|
EntIndex_t SourceZone = VarSharesFromZone[CurVar];
|
||||||
|
double *SourceVPtr = (*VDataBase)[CurVar+SourceZone*(*NumVars)];
|
||||||
|
for (M = 0; M < TotalNumPts; M++)
|
||||||
|
CurVPtr[M] = SourceVPtr[M];
|
||||||
|
}
|
||||||
|
else if (!IsVarPassive[CurVar])
|
||||||
|
{
|
||||||
|
LocalReadBlock(ReadTecFileStream,
|
||||||
|
CurVPtr,
|
||||||
|
VarType[CurVar],
|
||||||
|
TotalNumPts,
|
||||||
|
&InputIsOk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!InputIsOk)
|
||||||
|
ErrMsg(translate("Invalid raw data section of binary file"));
|
||||||
|
}
|
||||||
|
else if (TotalNumPts > 0)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Zone is not empty and is in POINT format
|
||||||
|
*/
|
||||||
|
J = -1;
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
LgIndex_t N;
|
||||||
|
N = 0;
|
||||||
|
while (InputIsOk && (N < TotalNumPts))
|
||||||
|
{
|
||||||
|
EntIndex_t CurVar;
|
||||||
|
for (CurVar = 0; InputIsOk && (CurVar < *NumVars); CurVar++)
|
||||||
|
{
|
||||||
|
double *CurVPtr = (*VDataBase)[CurVar+CurZone*(*NumVars)];
|
||||||
|
if (VarSharesFromZone[CurVar] != -1)
|
||||||
|
{
|
||||||
|
EntIndex_t SourceZone = VarSharesFromZone[CurVar];
|
||||||
|
double *SourceVPtr = (*VDataBase)[CurVar+SourceZone*(*NumVars)];
|
||||||
|
CurVPtr[N] = SourceVPtr[N];
|
||||||
|
}
|
||||||
|
else if (!IsVarPassive[CurVar])
|
||||||
|
{
|
||||||
|
double D = GetNextValue(ReadTecFileStream,
|
||||||
|
VarType[CurVar],
|
||||||
|
-LARGEDOUBLE,
|
||||||
|
LARGEDOUBLE,
|
||||||
|
&InputIsOk);
|
||||||
|
|
||||||
|
if (InputIsOk && CurVPtr)
|
||||||
|
CurVPtr[N] = D;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!InputIsOk)
|
||||||
|
ErrMsg(translate("Binary datafile corrupted!"));
|
||||||
|
N++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk && *IVersion < 101)
|
||||||
|
{
|
||||||
|
if (ZoneIsFinite)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Pre-version 101 had FE connectivity sharing,
|
||||||
|
* FECONNECT, information here.
|
||||||
|
*/
|
||||||
|
Boolean_t DupConnectivity;
|
||||||
|
if (*IVersion > 61)
|
||||||
|
DupConnectivity = GetIoFileInt(ReadTecFileStream, *IVersion, 0, 1, &InputIsOk);
|
||||||
|
else
|
||||||
|
DupConnectivity = FALSE;
|
||||||
|
|
||||||
|
if (DupConnectivity)
|
||||||
|
ConnectivitySharesFromZone[CurZone] = CurZone - 1; /* previous zone */
|
||||||
|
else
|
||||||
|
ConnectivitySharesFromZone[CurZone] = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ConnectivitySharesFromZone[CurZone] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk && ZoneIsFinite && !ZoneIsFEPoly)
|
||||||
|
{
|
||||||
|
Boolean_t SkipNodemap;
|
||||||
|
NodeMap_t *NM = NULL;
|
||||||
|
NodeMap_t *ONM = NULL;
|
||||||
|
/*
|
||||||
|
* Allocate the nodemap ptr if necessary Note that if
|
||||||
|
* RawDataSpaceAllocated is TRUE then (*NodeMap)[CurZone]
|
||||||
|
* can either contain a valid address (read the connectivity
|
||||||
|
* list) or be NULL (skip the list).
|
||||||
|
*/
|
||||||
|
if (!RawDataSpaceAllocated && NumKPts*NumJPts >= 1)
|
||||||
|
{
|
||||||
|
(*NodeMap)[CurZone] = ALLOC_ARRAY(NumKPts * NumJPts, NodeMap_t, "node map");
|
||||||
|
if ((*NodeMap)[CurZone] == NULL)
|
||||||
|
ErrMsg(translate("Cannot allocate space for connectivity list",
|
||||||
|
"See the Tecplot User's Manual for a definition of 'connectivity list'"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
NM = (*NodeMap)[CurZone];
|
||||||
|
|
||||||
|
SkipNodemap = (NM == NULL);
|
||||||
|
|
||||||
|
if (InputIsOk && ConnectivitySharesFromZone[CurZone] != -1)
|
||||||
|
{
|
||||||
|
EntIndex_t SourceZone = ConnectivitySharesFromZone[CurZone];
|
||||||
|
if (SourceZone >= CurZone)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Zone %d is attempting to share connectivity "
|
||||||
|
"with a zone that has not yet been loaded."),
|
||||||
|
CurZone + 1);
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ONM = (*NodeMap)[SourceZone];
|
||||||
|
if (ONM == NULL)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Zone %d is attempting to share connectivity "
|
||||||
|
"with a zone that is not finite element."),
|
||||||
|
CurZone + 1);
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
/* load the FE node connectivity */
|
||||||
|
for (J = 0; J < NumJPts; J++)
|
||||||
|
for (I = 0; I < NumKPts; I++)
|
||||||
|
{
|
||||||
|
LgIndex_t M;
|
||||||
|
LgIndex_t L = J * NumKPts + I;
|
||||||
|
if (ConnectivitySharesFromZone[CurZone] != -1)
|
||||||
|
M = ONM[L];
|
||||||
|
else
|
||||||
|
M = GetNextI(ReadTecFileStream, &InputIsOk) - 1;
|
||||||
|
if (!SkipNodemap)
|
||||||
|
NM[L] = M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip over the face neighbor connectivity */
|
||||||
|
if (*IVersion >= 101 && InputIsOk)
|
||||||
|
{
|
||||||
|
EntIndex_t SharedZone = ConnectivitySharesFromZone[CurZone];
|
||||||
|
if (SharedZone == -1 && FNNumBndryConns[CurZone] != 0)
|
||||||
|
{
|
||||||
|
LgIndex_t Connection = 0;
|
||||||
|
while (Connection < FNNumBndryConns[CurZone] && InputIsOk)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Face neighbor connection have the following format for both
|
||||||
|
* ASCII and binary:
|
||||||
|
*
|
||||||
|
* FaceNeighborMode_LocalOneToOne 3 cz,fz,cz
|
||||||
|
* FaceNeighborMode_LocalOneToMany nz+4 cz,fz,oz,nz,cz1,cz2,...,czn
|
||||||
|
* FaceNeighborMode_GlobalOneToOne 4 cz,fz,ZZ,CZ
|
||||||
|
* FaceNeighborMode_GlobalOneToMany 2*nz+4 cz,fz,oz,nz,ZZ1,CZ1,ZZ2,CZ2,...,ZZn,CZn
|
||||||
|
*
|
||||||
|
* Where:
|
||||||
|
* cz = cell in current zone
|
||||||
|
* fz = face of cell in current zone
|
||||||
|
* oz = face obsuration flag (only applies to one-to-many):
|
||||||
|
* 0 = face partially obscured
|
||||||
|
* 1 = face entirely obscured
|
||||||
|
* nz = number of cell or zone/cell associations (only applies to one-to-many)
|
||||||
|
* ZZ = remote Zone
|
||||||
|
* CZ = cell in remote zone
|
||||||
|
*/
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk); /* read cz */
|
||||||
|
if (!InputIsOk)
|
||||||
|
ErrMsg(translate("Unexpected end-of-file while reading face neighbor data."));
|
||||||
|
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk); /* read fz */
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* read FaceNeighborMode_LocalOneToOne: cz ||
|
||||||
|
* FaceNeighborMode_LocalOneToMany: oz ||
|
||||||
|
* FaceNeighborMode_GlobalOneToOne: ZZ ||
|
||||||
|
* FaceNeighborMode_GlobalOneToMany: oz
|
||||||
|
*/
|
||||||
|
if (CurZoneSpec->FNMode == FaceNeighborMode_LocalOneToOne)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_LocalOneToMany)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToOne)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToMany)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else
|
||||||
|
CHECK(FALSE);
|
||||||
|
|
||||||
|
if (CurZoneSpec->FNMode != FaceNeighborMode_LocalOneToOne && InputIsOk)
|
||||||
|
{
|
||||||
|
LgIndex_t NumAssociations = 0;
|
||||||
|
/*
|
||||||
|
* read FaceNeighborMode_LocalOneToMany: nz ||
|
||||||
|
* FaceNeighborMode_GlobalOneToOne: CZ ||
|
||||||
|
* FaceNeighborMode_GlobalOneToMany: nz
|
||||||
|
*/
|
||||||
|
if (CurZoneSpec->FNMode == FaceNeighborMode_LocalOneToMany)
|
||||||
|
NumAssociations = GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToOne)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToMany)
|
||||||
|
NumAssociations = GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
else
|
||||||
|
CHECK(FALSE);
|
||||||
|
|
||||||
|
if (CurZoneSpec->FNMode != FaceNeighborMode_GlobalOneToOne && InputIsOk)
|
||||||
|
{
|
||||||
|
LgIndex_t Assoc;
|
||||||
|
if (CurZoneSpec->FNMode == FaceNeighborMode_LocalOneToMany)
|
||||||
|
for (Assoc = 0; Assoc < NumAssociations && InputIsOk; Assoc++)
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk); /* read czn */
|
||||||
|
else if (CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToMany)
|
||||||
|
for (Assoc = 0; Assoc < NumAssociations && InputIsOk; Assoc++)
|
||||||
|
{
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk); /* read ZZn */
|
||||||
|
(void)GetNextI(ReadTecFileStream, &InputIsOk); /* read CZn */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CHECK(FALSE);
|
||||||
|
|
||||||
|
if (InputIsOk)
|
||||||
|
Connection += NumAssociations;
|
||||||
|
}
|
||||||
|
else if (InputIsOk) /* CurZoneSpec->FNMode == FaceNeighborMode_GlobalOneToOne */
|
||||||
|
Connection += 1;
|
||||||
|
}
|
||||||
|
else if (InputIsOk) /* CurZoneSpec->FNMode == FaceNeighborMode_LocalOneToOne */
|
||||||
|
Connection += 1;
|
||||||
|
|
||||||
|
if (!InputIsOk)
|
||||||
|
ErrMsg(translate("Corrupt input file: invalid face neighbors."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}/* face neighbor connectivity */
|
||||||
|
/* skip over face map section */
|
||||||
|
if (ZoneIsFEPoly &&
|
||||||
|
*IVersion >= 110 &&
|
||||||
|
ConnectivitySharesFromZone[CurZone] != -1 &&
|
||||||
|
InputIsOk)
|
||||||
|
{
|
||||||
|
if (!InBlockFormat)
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Poly zones must be in block format"));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
HgIndex_t NumFaces = CurZoneSpec->NumPtsK;
|
||||||
|
if (*IVersion == 110) // ...version 111 moved these to the zone header
|
||||||
|
{
|
||||||
|
CurZoneSpec->NumFaceNodes = GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
CurZoneSpec->NumFaceBndryFaces = GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
CurZoneSpec->NumFaceBndryItems = GetNextI(ReadTecFileStream, &InputIsOk);
|
||||||
|
}
|
||||||
|
HgIndex_t TotalNumFaceNodes = CurZoneSpec->NumFaceNodes;
|
||||||
|
HgIndex_t TotalNumBndryFaces = CurZoneSpec->NumFaceBndryFaces;
|
||||||
|
HgIndex_t TotalNumBndryItems = CurZoneSpec->NumFaceBndryItems;
|
||||||
|
if (CurZoneSpec->Type == ZoneType_FEPolyhedron)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, NumFaces + 1, &InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, TotalNumFaceNodes, &InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, NumFaces, &InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, NumFaces, &InputIsOk);
|
||||||
|
if (TotalNumBndryFaces > 0)
|
||||||
|
{
|
||||||
|
if (InputIsOk)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, TotalNumBndryFaces + 1, &InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, TotalNumBndryItems, &InputIsOk);
|
||||||
|
if (InputIsOk)
|
||||||
|
{
|
||||||
|
if (*IVersion >= 112)
|
||||||
|
ReadInt32Block(ReadTecFileStream, FALSE, NULL, 0, TotalNumBndryItems, &InputIsOk);
|
||||||
|
else
|
||||||
|
ReadInt16Block(ReadTecFileStream, FALSE, NULL, 0, TotalNumBndryItems, &InputIsOk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}/* face map section */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrMsg(translate("Corrupt input file"));
|
||||||
|
InputIsOk = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VarSharesFromZone)
|
||||||
|
FREE_ARRAY(VarSharesFromZone, "VarSharesFromZone");
|
||||||
|
if (IsVarPassive)
|
||||||
|
FREE_ARRAY(IsVarPassive, "IsVarPassive");
|
||||||
|
if (ConnectivitySharesFromZone)
|
||||||
|
FREE_ARRAY(ConnectivitySharesFromZone, "ConnectivitySharesFromZone");
|
||||||
|
if (VarType)
|
||||||
|
FREE_ARRAY(VarType, "VarType");
|
||||||
|
|
||||||
|
if (!InputIsOk && !RawDataSpaceAllocated)
|
||||||
|
{
|
||||||
|
int I;
|
||||||
|
if (*VDataBase)
|
||||||
|
{
|
||||||
|
for (I = 0; I < *NumZones*(*NumVars); I++)
|
||||||
|
{
|
||||||
|
if ((*VDataBase)[I])
|
||||||
|
FREE_ARRAY((*VDataBase)[I], "vdatabase array");
|
||||||
|
}
|
||||||
|
FREE_ARRAY(*VDataBase, "vdatabase pointer array");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (*NodeMap)
|
||||||
|
{
|
||||||
|
for (I = 0; I < *NumZones; I++)
|
||||||
|
{
|
||||||
|
if ((*NodeMap)[I])
|
||||||
|
FREE_ARRAY((*NodeMap)[I], "connectivity list");
|
||||||
|
}
|
||||||
|
FREE_ARRAY(*NodeMap, "connectivity pointer array");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /*Reading Raw Data*/
|
||||||
|
|
||||||
|
if (FNNumBndryConns != NULL)
|
||||||
|
FREE_ARRAY(FNNumBndryConns, "FNNumBndryConns");
|
||||||
|
if (ZoneSpecList)
|
||||||
|
ArrayListDealloc(&ZoneSpecList, ZoneSpecItemDestructor, 0);
|
||||||
|
|
||||||
|
if (ReadTecFileStream)
|
||||||
|
{
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
TP_FCLOSE(ReadTecFileStream->File);
|
||||||
|
free(ReadTecFileStream);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return (InputIsOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void * STDCALL TecAlloc(size_t size)
|
||||||
|
{
|
||||||
|
return (void *)ALLOC_ARRAY(size, char, "TecAlloc");
|
||||||
|
}
|
||||||
|
|
||||||
|
void STDCALL TecFree(void *ptr)
|
||||||
|
{
|
||||||
|
/* Hack to remove delete warning... */
|
||||||
|
char *Tmp = (char *)ptr;
|
||||||
|
FREE_ARRAY(Tmp, "TecAlloc");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FILESTREAMMODULE
|
||||||
|
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "SYSTEM.h"
|
||||||
|
#include "FILESTREAM.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
FileStream_s *FileStreamAlloc(FILE *File,
|
||||||
|
Boolean_t IsByteOrderNative)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(File) || File == NULL);
|
||||||
|
|
||||||
|
FileStream_s *Result = ALLOC_ITEM(FileStream_s, "FileStream");
|
||||||
|
if (Result != NULL)
|
||||||
|
{
|
||||||
|
Result->File = File;
|
||||||
|
Result->IsByteOrderNative = IsByteOrderNative;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(VALID_REF(Result) || Result == NULL);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void FileStreamDealloc(FileStream_s **FileStream)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(FileStream));
|
||||||
|
REQUIRE(VALID_REF(*FileStream) || *FileStream == NULL);
|
||||||
|
|
||||||
|
if (*FileStream != NULL)
|
||||||
|
{
|
||||||
|
FREE_ITEM(*FileStream, "FileStream");
|
||||||
|
*FileStream = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ENSURE(*FileStream == NULL);
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
******* ********
|
||||||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
*****************************************************************
|
||||||
|
*****************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GEOM2MODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
|
||||||
|
#include "GEOM.h"
|
||||||
|
#include "TEXT.h"
|
||||||
|
#include "STRUTIL.h"
|
||||||
|
#include "GEOM2.h"
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
#include "DATASET0.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
# if 0 /* 3D geometry arrowheads are not drawn at this time. */
|
||||||
|
#endif
|
||||||
|
# if 0 /* 3D geometry arrowheads are not drawn at this time. */
|
||||||
|
# endif
|
||||||
|
#if 0
|
||||||
|
#endif
|
||||||
|
# ifndef NO_ASSERTS
|
||||||
|
# endif
|
||||||
|
# ifndef NO_ASSERTS
|
||||||
|
# endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
|
|
||||||
|
FieldDataType_e GetGeomFieldDataType(Geom_s const* Geom)
|
||||||
|
{
|
||||||
|
FieldDataType_e Result;
|
||||||
|
|
||||||
|
REQUIRE(VALID_REF(Geom));
|
||||||
|
REQUIRE(VALID_REF(Geom->GeomData.Generic.V1Base));
|
||||||
|
|
||||||
|
Result = Geom->DataType;
|
||||||
|
|
||||||
|
ENSURE(VALID_GEOM_FIELD_DATA_TYPE(Result));
|
||||||
|
/*
|
||||||
|
* Check that the geom's field data arrays (if they exist)
|
||||||
|
* have the same type as the geometry.
|
||||||
|
*/
|
||||||
|
ENSURE(IMPLICATION(VALID_REF(Geom->GeomData.Generic.V1Base), Result == GetFieldDataType(Geom->GeomData.Generic.V1Base)));
|
||||||
|
ENSURE(IMPLICATION(VALID_REF(Geom->GeomData.Generic.V2Base), Result == GetFieldDataType(Geom->GeomData.Generic.V2Base)));
|
||||||
|
ENSURE(IMPLICATION(VALID_REF(Geom->GeomData.Generic.V3Base), Result == GetFieldDataType(Geom->GeomData.Generic.V3Base)));
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
@ -0,0 +1,415 @@
|
|||||||
|
/*
|
||||||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||||||
|
*
|
||||||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||||||
|
*
|
||||||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||||||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||||||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||||||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||||||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||||||
|
* purpose of maintaining the converter. However, no authority is granted
|
||||||
|
* to alter the TecIO source code in any form or manner.
|
||||||
|
*
|
||||||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||||||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||||||
|
*
|
||||||
|
* Tecplot, Inc.
|
||||||
|
* 3535 Factoria Blvd, Ste. 550
|
||||||
|
* Bellevue, WA 98006, USA
|
||||||
|
* Phone: +1 425 653 1200
|
||||||
|
* http://www.tecplot.com/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "MASTER.h"
|
||||||
|
|
||||||
|
#define TECPLOTENGINEMODULE
|
||||||
|
|
||||||
|
/*
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
******* ********
|
||||||
|
****** (C) 1988-2008 Tecplot, Inc. *******
|
||||||
|
******* ********
|
||||||
|
******************************************************************
|
||||||
|
******************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define Q_MSGMODULE
|
||||||
|
#include "GLOBAL.h"
|
||||||
|
#include "TASSERT.h"
|
||||||
|
#include "Q_UNICODE.h"
|
||||||
|
#include "ALLOC.h"
|
||||||
|
#include "ARRLIST.h"
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif
|
||||||
|
#if defined MSWIN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "STRUTIL.h"
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using std::string;
|
||||||
|
using namespace tecplot::strutil;
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MAXCHARACTERSPERLINE 60
|
||||||
|
/*
|
||||||
|
* Wrap a string so it contains at most CharactersPerLine
|
||||||
|
* characters. Embedded newlines are left alone. Spaces
|
||||||
|
* following newlines are also left alone.
|
||||||
|
*/
|
||||||
|
Boolean_t WrapString(const char *OldString,
|
||||||
|
char **NewString)
|
||||||
|
{
|
||||||
|
size_t L;
|
||||||
|
if (OldString == NULL)
|
||||||
|
return (FALSE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Assume Old string has ample spaces. Will only be
|
||||||
|
* replacing some spaces with newlines and removing
|
||||||
|
* other spaces. New string can be allocated to be
|
||||||
|
* same length as old string.
|
||||||
|
*/
|
||||||
|
|
||||||
|
L = strlen(OldString);
|
||||||
|
*NewString = ALLOC_ARRAY(L + 1, char, "new error message string");
|
||||||
|
if (*NewString == NULL)
|
||||||
|
return (FALSE);
|
||||||
|
|
||||||
|
strcpy(*NewString, OldString);
|
||||||
|
|
||||||
|
if (L > MAXCHARACTERSPERLINE)
|
||||||
|
{
|
||||||
|
char *LineStart = *NewString;
|
||||||
|
char *LastWord = *NewString;
|
||||||
|
char *WPtr = *NewString;
|
||||||
|
while (WPtr && (*WPtr != '\0'))
|
||||||
|
{
|
||||||
|
size_t CurLen;
|
||||||
|
/*
|
||||||
|
* Find next hard newline. If there is one befor the
|
||||||
|
* line should be chopped then reset the Last Word to
|
||||||
|
* be at the first word after the newline.
|
||||||
|
*/
|
||||||
|
WPtr = strchr(LineStart, '\n');
|
||||||
|
if (WPtr && ((WPtr - LineStart) < MAXCHARACTERSPERLINE))
|
||||||
|
{
|
||||||
|
WPtr++;
|
||||||
|
while (*WPtr == '\n')
|
||||||
|
WPtr++;
|
||||||
|
LineStart = WPtr;
|
||||||
|
/*
|
||||||
|
* Skip over trailing spaces. Special handling to
|
||||||
|
* allow indent after hard newline.
|
||||||
|
*/
|
||||||
|
while (*WPtr == ' ')
|
||||||
|
WPtr++;
|
||||||
|
LastWord = WPtr;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Find next "word"
|
||||||
|
*/
|
||||||
|
WPtr = strchr(LastWord, ' ');
|
||||||
|
if (WPtr != NULL)
|
||||||
|
{
|
||||||
|
while (*WPtr == ' ')
|
||||||
|
WPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (WPtr == NULL)
|
||||||
|
{
|
||||||
|
CurLen = strlen(LineStart);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CurLen = WPtr - LineStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurLen > MAXCHARACTERSPERLINE)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Line is too long. Back up to previous
|
||||||
|
* word and replace preceeding space with
|
||||||
|
* a newline.
|
||||||
|
*/
|
||||||
|
if (LastWord == LineStart)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Bad news, line has very long word.
|
||||||
|
*/
|
||||||
|
if (WPtr && (*WPtr != '\0'))
|
||||||
|
{
|
||||||
|
*(WPtr - 1) = '\n';
|
||||||
|
LastWord = WPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(LastWord - 1) = '\n';
|
||||||
|
}
|
||||||
|
LineStart = LastWord;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LastWord = WPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void SendWarningToFile(FILE *F,
|
||||||
|
const char *S)
|
||||||
|
{
|
||||||
|
char *S2;
|
||||||
|
REQUIRE(VALID_REF(F));
|
||||||
|
REQUIRE(VALID_REF(S));
|
||||||
|
if (WrapString(S, &S2))
|
||||||
|
{
|
||||||
|
fprintf(F, "Warning: %s\n", S2);
|
||||||
|
FREE_ARRAY(S2, "temp warning string");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the warning message. Note that the Format string can be the only
|
||||||
|
* argument, in which case it is essentially the warning message itself.
|
||||||
|
*
|
||||||
|
* param Format
|
||||||
|
* C Format string or a simple message.
|
||||||
|
* param ...
|
||||||
|
* Zero or more variable arguments. The number of arguments must correspond
|
||||||
|
* to the placeholders in the format string.
|
||||||
|
*/
|
||||||
|
void Warning(TranslatedString Format,
|
||||||
|
...) /* zero or more arguments */
|
||||||
|
{
|
||||||
|
REQUIRE(!Format.isNull());
|
||||||
|
|
||||||
|
static Boolean_t InWarning = FALSE; /* ...used to prevent recursive deadlock */
|
||||||
|
if (!InWarning)
|
||||||
|
{
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
InWarning = TRUE;
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Attempt to format the string. Failing that simply use the original format
|
||||||
|
* string argument which, if we ran out of memory while formatting, is
|
||||||
|
* probably just an warning message saying that we ran out of memory in some
|
||||||
|
* previous operation anyway.
|
||||||
|
*/
|
||||||
|
Boolean_t cleanUp = TRUE;
|
||||||
|
|
||||||
|
va_list Arguments;
|
||||||
|
va_start(Arguments, Format);
|
||||||
|
char* message = vFormatString(Format.c_str(), Arguments);
|
||||||
|
va_end(Arguments);
|
||||||
|
|
||||||
|
if (message == NULL)
|
||||||
|
{
|
||||||
|
cleanUp = FALSE; // ...this boolean allows us to "carefully" cast away the const'ness
|
||||||
|
message = (char*)Format.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#ifdef MSWIN
|
||||||
|
#endif
|
||||||
|
#if defined UNIXX
|
||||||
|
#endif
|
||||||
|
#if defined MSWIN
|
||||||
|
#endif
|
||||||
|
#else /* !TECPLOTKERNEL */
|
||||||
|
{
|
||||||
|
SendWarningToFile(stderr, message);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (cleanUp)
|
||||||
|
FREE_ARRAY(message, "message");
|
||||||
|
}
|
||||||
|
InWarning = FALSE;
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void SendErrToFile(FILE *File,
|
||||||
|
const char *Msg)
|
||||||
|
{
|
||||||
|
char *FormattedMsg;
|
||||||
|
REQUIRE(VALID_REF(File));
|
||||||
|
REQUIRE(VALID_REF(Msg));
|
||||||
|
if (WrapString(Msg, &FormattedMsg))
|
||||||
|
{
|
||||||
|
fprintf(File, "Err: %s\n", FormattedMsg);
|
||||||
|
FREE_ARRAY(FormattedMsg, "temp error string");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(File, "Err: %s\n", Msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fall-back ErrMsg procedure when nothing else works */
|
||||||
|
static void DefaultErrMsg(const char *Msg)
|
||||||
|
{
|
||||||
|
REQUIRE(VALID_REF(Msg));
|
||||||
|
|
||||||
|
#ifdef MSWIN
|
||||||
|
#ifdef TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
MessageBox(NULL, Msg, "Error", MB_OK | MB_ICONERROR);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
SendErrToFile(stderr, Msg);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PostErrorMessage(TranslatedString Format,
|
||||||
|
va_list Arguments)
|
||||||
|
{
|
||||||
|
REQUIRE(!Format.isNull());
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to format the string. Failing that simply use the original format
|
||||||
|
* string argument which, if we ran out of memory while formatting, is
|
||||||
|
* probably just an error message saying that we ran out of memory in some
|
||||||
|
* previous operation anyway.
|
||||||
|
*/
|
||||||
|
Boolean_t cleanUp = TRUE;
|
||||||
|
char* messageString = vFormatString(Format.c_str(), Arguments);
|
||||||
|
if (messageString == NULL)
|
||||||
|
{
|
||||||
|
cleanUp = FALSE; // ...this boolean allows us to "carefully" cast away the const'ness
|
||||||
|
messageString = (char*)Format.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#ifdef MSWIN
|
||||||
|
#endif
|
||||||
|
#if defined UNIXX
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else /* !TECPLOTKERNEL */
|
||||||
|
{
|
||||||
|
DefaultErrMsg(messageString);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* cleanup if we allocated the string */
|
||||||
|
if (cleanUp)
|
||||||
|
FREE_ARRAY(messageString, "messageString");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTES:
|
||||||
|
* This function is thread safe in that it may be safely called by multiple
|
||||||
|
* threads however when running interactively only the first error message is
|
||||||
|
* queued for display on idle. In batch mode all messages are sent to the
|
||||||
|
* batch log file.
|
||||||
|
*/
|
||||||
|
void vErrMsg(TranslatedString Format,
|
||||||
|
va_list Arguments)
|
||||||
|
{
|
||||||
|
REQUIRE(!Format.isNull());
|
||||||
|
|
||||||
|
static Boolean_t InErrMsg = FALSE; /* ...used to prevent recursive deadlock */
|
||||||
|
if (!InErrMsg)
|
||||||
|
{
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
InErrMsg = TRUE;
|
||||||
|
{
|
||||||
|
PostErrorMessage(Format, Arguments);
|
||||||
|
}
|
||||||
|
InErrMsg = FALSE;
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the error message. Note that the Format string can be the only
|
||||||
|
* argument, in which case it is essentially the error message itself.
|
||||||
|
*
|
||||||
|
* @param Format
|
||||||
|
* C Format string or a simple message.
|
||||||
|
* @param ...
|
||||||
|
* Zero or more variable arguments. The number of arguments must correspond
|
||||||
|
* to the placeholders in the format string.
|
||||||
|
*/
|
||||||
|
void ErrMsg(TranslatedString Format,
|
||||||
|
...) /* zero or more arguments */
|
||||||
|
{
|
||||||
|
REQUIRE(!Format.isNull());
|
||||||
|
|
||||||
|
va_list Arguments;
|
||||||
|
va_start(Arguments, Format);
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#else
|
||||||
|
PostErrorMessage(Format, Arguments);
|
||||||
|
#endif
|
||||||
|
va_end(Arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined TECPLOTKERNEL
|
||||||
|
/* CORE SOURCE CODE REMOVED */
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif
|
||||||
|
#if defined MSWIN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif
|
||||||
|
#if defined MSWIN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif /* MOTIF */
|
||||||
|
#if defined MSWIN
|
||||||
|
#endif
|
||||||
|
#if defined MOTIF
|
||||||
|
#endif /* MOTIF */
|
||||||
|
#endif
|
||||||
|
#if !defined ENGINE
|
||||||
|
#endif
|
||||||
|
#endif /* TECPLOTKERNEL */
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user