This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/applications/utilities/postProcessing/dataConversion/foamToTecplot360/tecio/examples/pyramid/pyramid.cpp
2010-08-25 22:42:57 +01:00

222 lines
7.1 KiB
C++

/* 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 */