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/gridsolution/gridsolution.cpp
2010-08-25 22:42:57 +01:00

376 lines
11 KiB
C++

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