5 OutPut(
"Example: import3Dmesh.h" << endl);
8 void GridBoundCondition(
double x,
double y,
double z, BoundCond &cond)
13 void SolidBoundCondition(
double x,
double y,
double z, BoundCond &cond)
18 void FluidBoundCondition(
double x,
double y,
double z, BoundCond &cond)
23 void Exact(
double x,
double y,
double z,
double *values)
33 void InitialCondition(
double x,
double y,
double z,
double *values)
40 void BoundCondition(
double x,
double y,
double z, BoundCond &cond)
51 if(x< 240 && y<-72. && z>191)
59 void BoundValue(
double x,
double y,
double z,
double &value)
64 void BilinearCoeffs(
int n_points,
double *X,
double *Y,
double *Z,
double **parameters,
double **coeffs)
72 double rhsfact, alpha, char_L, beam_r, DimlessBeam_r;
73 double xp=0., yp=0., zp=0., SourceCoord, Sourceradius;
78 xp=2.922130000000000e+02;
79 zp=1.583800000000000e+02;
92 Region_ID = coeffs[0][1];
93 DimlessBeam_r = beam_r/char_L;
116 for(i=0;i<n_points;i++)
138 Sourceradius = sqrt( (x-xp)*(x-xp) + (z-zp)*(z-zp));
145 Sourceradius = sqrt( (x-xp)*(x-xp) + (z-zp)*(z-zp));
152 if(Sourceradius<=DimlessBeam_r)
154 coeff[5] = rhsfact*exp(alpha*SourceCoord*char_L);
167 void ReadAdditionalNModes(
char *NODE, tetgenio &InAddPts)
169 int i, N_Vertices, index, N_Atribude, BDMarker;
171 std::ifstream dat(NODE);
175 cerr <<
"cannot open '" << NODE <<
"' for input" << endl;
179 dat.getline (line, 99);
180 dat >> N_Vertices >> N_Atribude >> BDMarker;
181 dat.getline (line, 99);
183 InAddPts.numberofpoints = N_Vertices;
184 InAddPts.pointlist =
new double[3*N_Vertices];
187 for(i=0;i<N_Vertices; i++)
189 dat.getline (line, 99);
190 dat >> index >> InAddPts.pointlist[3*i] >> InAddPts.pointlist[3*i+1] >> InAddPts.pointlist[3*i+2];
191 cout<< i <<
" vert X: " <<InAddPts.pointlist[3*i] <<
" vert Y: " <<InAddPts.pointlist[3*i+1] <<
" vert Z: " <<InAddPts.pointlist[3*i+2] <<endl;
198 void ReadMeditMeshWithCells(
char *SMESH, tetgenio &In)
200 int i, j, k, dimension, N_FVert, N_Faces, N_Vertices, N_CVert, N_Cells;
201 int BDComp_Min=10000000;
208 tetgenio::polygon *P;
210 std::ifstream dat(SMESH);
214 cerr <<
"cannot open '" << SMESH <<
"' for input" << endl;
223 if ( (!strcmp(line,
"Dimension")) || (!strcmp(line,
"dimension")) || (!strcmp(line,
"DIMENSION")))
225 dat.getline (line, 99);
230 dat.getline (line, 99);
235 cerr <<
"dimension: " << dimension << endl;
244 if ( (!strcmp(line,
"Vertices")) || (!strcmp(line,
"vertices")) || (!strcmp(line,
"VERTICES")) )
246 dat.getline (line, 99);
251 dat.getline (line, 99);
254 In.numberofpoints = N_Vertices;
255 In.pointlist =
new double[3*N_Vertices];
258 for(i=0;i<N_Vertices; i++)
260 dat.getline (line, 99);
261 dat >> x >> In.pointlist[3*i+1] >> In.pointlist[3*i+2];
263 In.pointlist[3*i] = x - 3.606596999999999830777142;
266 if(i==1062 || i==916 || i==341 || i==914 || i==162 || i==1063 || i==1061)
267 cout<< i <<
" vert X: " <<In.pointlist[3*i] <<
" vert Y: " <<In.pointlist[3*i+1] <<
" vert Z: " <<In.pointlist[3*i+2] <<endl;
276 if ( (!strcmp(line,
"Triangles")) || (!strcmp(line,
"triangles")) || (!strcmp(line,
"TRIANGLES")) )
279 dat.getline (line, 99);
283 else if ( (!strcmp(line,
"Quadrilaterals")) || (!strcmp(line,
"quadrilaterals")) || (!strcmp(line,
"QUADRILATERALS")) )
286 dat.getline (line, 99);
292 dat.getline (line, 99);
295 In.numberoffacets = N_Faces;
296 In.facetlist =
new tetgenio::facet[In.numberoffacets];
297 In.facetmarkerlist =
new int[In.numberoffacets];
299 for(i=0;i<N_Faces; i++)
301 dat.getline (line, 99);
303 F = &In.facetlist[i];
305 F->numberofpolygons = 1;
306 F->polygonlist =
new tetgenio::polygon[F->numberofpolygons];
307 F->numberofholes = 0;
309 P = &F->polygonlist[0];
311 P->numberofvertices = N_FVert;
312 P->vertexlist =
new int[P->numberofvertices];
314 for(j=0;j<N_FVert;j++)
317 P->vertexlist[j] = k-1;
320 dat >> In.facetmarkerlist[i];
322 if(BDComp_Min > In.facetmarkerlist[i])
323 BDComp_Min=In.facetmarkerlist[i];
330 for(i=0;i<N_Faces; i++)
331 In.facetmarkerlist[i] -= BDComp_Min;
339 if ( (!strcmp(line,
"Tetrahedron")) || (!strcmp(line,
"tetrahedron")) || (!strcmp(line,
"TETRAHEDRON")) )
342 dat.getline (line, 99);
347 dat.getline (line, 99);
350 In.numberoftetrahedra = N_Cells;
351 In.numberofcorners = N_CVert;
352 In.numberoftetrahedronattributes = 1;
353 In.tetrahedronlist =
new int[N_Cells * 4];
354 In.tetrahedronattributelist =
new REAL[N_Cells];
355 In.tetrahedronvolumelist =
new REAL[N_Cells];
357 for(i=0; i<N_Cells; i++)
359 dat.getline (line, 99);
360 plist = &(In.tetrahedronlist[i * 4]);
362 for(j=0;j<N_CVert;j++)
369 dat >> In.tetrahedronattributelist[i];
382 void ReadMeditMesh(
char *SMESH, tetgenio &In)
384 int i, j, k, dimension, N_FVert, N_Faces, N_Vertices;
385 int BDComp_Min=10000000;
389 tetgenio::polygon *P;
391 std::ifstream dat(SMESH);
395 cerr <<
"cannot open '" << SMESH <<
"' for input" << endl;
404 if ( (!strcmp(line,
"Dimension")) || (!strcmp(line,
"dimension")) || (!strcmp(line,
"DIMENSION")))
406 dat.getline (line, 99);
411 dat.getline (line, 99);
416 cerr <<
"dimension: " << dimension << endl;
425 if ( (!strcmp(line,
"Vertices")) || (!strcmp(line,
"vertices")) || (!strcmp(line,
"VERTICES")) )
427 dat.getline (line, 99);
432 dat.getline (line, 99);
435 In.numberofpoints = N_Vertices;
436 In.pointlist =
new double[3*N_Vertices];
439 for(i=0;i<N_Vertices; i++)
441 dat.getline (line, 99);
442 dat >> In.pointlist[3*i] >> In.pointlist[3*i+1] >> In.pointlist[3*i+2];
452 if ( (!strcmp(line,
"Triangles")) || (!strcmp(line,
"triangles")) || (!strcmp(line,
"TRIANGLES")) )
455 dat.getline (line, 99);
459 else if ( (!strcmp(line,
"Quadrilaterals")) || (!strcmp(line,
"quadrilaterals")) || (!strcmp(line,
"QUADRILATERALS")) )
462 dat.getline (line, 99);
468 dat.getline (line, 99);
471 In.numberoffacets = N_Faces;
472 In.facetlist =
new tetgenio::facet[In.numberoffacets];
473 In.facetmarkerlist =
new int[In.numberoffacets];
475 for(i=0;i<N_Faces; i++)
477 dat.getline (line, 99);
479 F = &In.facetlist[i];
481 F->numberofpolygons = 1;
482 F->polygonlist =
new tetgenio::polygon[F->numberofpolygons];
483 F->numberofholes = 0;
485 P = &F->polygonlist[0];
487 P->numberofvertices = N_FVert;
488 P->vertexlist =
new int[P->numberofvertices];
490 for(j=0;j<N_FVert;j++)
493 P->vertexlist[j] = k-1;
496 dat >> In.facetmarkerlist[i];
498 if(BDComp_Min > In.facetmarkerlist[i])
499 BDComp_Min=In.facetmarkerlist[i];
506 for(i=0;i<N_Faces; i++)
507 In.facetmarkerlist[i] -= BDComp_Min;
516 void DeleteDomain(
TDomain *&Domain)
518 int i, j, k, N_Cells, N_RootCells;
519 int CurrVertex, N_Faces, N_Vertices, ID;
520 TBaseCell **CellTree, **SurfCellTree, *cell;
529 VertexDel =
new TVertex*[8*N_RootCells];
532 for(i=0;i<N_Cells;i++)
537 for(j=0;j<N_Faces;j++)
541 VertexDel[CurrVertex++] = cell->
GetVertex(j);
546 for(k=0;k<CurrVertex;k++)
553 VertexDel[CurrVertex++] = cell->
GetVertex(j);
558 for(k=0;k<CurrVertex;k++)
559 if(VertexDel[k]==cell->
GetVertex((j+1)%N_Vertices))
565 VertexDel[CurrVertex++] = cell->
GetVertex((j+1)%N_Vertices);
569 for(k=0;k<CurrVertex;k++)
570 if(VertexDel[k]==cell->
GetVertex((j+2)%N_Vertices))
576 VertexDel[CurrVertex++] = cell->
GetVertex((j+2)%N_Vertices);
581 for(k=0;k<CurrVertex;k++)
582 if(VertexDel[k]==cell->
GetVertex((j+4)%N_Vertices))
588 VertexDel[CurrVertex++] = cell->
GetVertex((j+4)%N_Vertices);
594 for(i=0;i<CurrVertex;i++)
597 OutPut(CurrVertex<<
" vertices were deleted"<<endl);
600 for(i=0;i<N_RootCells;i++)
603 OutPut(N_RootCells<<
" cells were deleted"<<endl);
606 void getboundarytag(
int a,
int b,
int c,
int NBdfaces,
int *Bdfaces,
int &CompID)
608 int i,a1,b1,c1,marker;
609 for(i=0;i<NBdfaces;i++)
614 marker = Bdfaces[4*i+3];
615 if((a==a1||a==b1||a==c1)&&(b==a1||b==b1||b==c1)&&(c==a1||c==b1||c==c1))
623 void TetrameshCreate(
TDomain *&Domain)
625 int i, j, k, l, dimension, N_Vertices, NBdfaces, *Bdfaces, BoundaryMarker;
626 int N_Faces, N_RootCells, neib0marker, neib1marker;
627 int v1, v2, v3, v4, CellMarker, RefLevel=0, *Tetrahedrals, *PointNeighb, maxEpV, *Tetrahedrals_temp;
628 int a, b, c, Neib[2], Neighb_tmp, CurrNeib, len1, len2, len3, CurrComp=0, N_Points ;
629 int N_Cells, MaxLen, jj, CompID=0;
630 const int *EdgeVertex, *TmpFV, *TmpLen;
631 double X, Y, Z, DispX, DispY, DispZ;
632 double Xmin = 1e10, Xmax = -1e10, Ymin = 1e10, Ymax = -1e10;
633 double Zmin = 1e10, Zmax = -1e10, T[4]={0,0,0,0}, S[4]={0,0,0,0};
634 double StartX, StartY, StartZ, BoundX, BoundY, BoundZ;
635 char *MESH, line[100];
638 TBaseCell **CellTree, *cell, *neib0, *neib1;
644 std::ifstream dat(MESH);
648 cerr <<
"cannot open '" << MESH <<
"' for input" << endl;
655 if ( (!strcmp(line,
"Dimension")) || (!strcmp(line,
"dimension")) || (!strcmp(line,
"DIMENSION")))
657 dat.getline (line, 99);
661 dat.getline (line, 99);
666 cerr <<
"dimension: " << dimension << endl;
673 if ( (!strcmp(line,
"Vertices")) || (!strcmp(line,
"vertices")) || (!strcmp(line,
"VERTICES")) )
675 dat.getline (line, 99);
679 dat.getline (line, 99);
681 cout <<
"N_Vertices "<<N_Vertices<<endl;
682 NewVertices =
new TVertex*[N_Vertices];
684 for(i=0;i<N_Vertices; i++)
686 dat.getline (line, 99);
688 NewVertices[i] =
new TVertex(X, Y, Z);
689 if (X > Xmax) Xmax = X;
690 if (X < Xmin) Xmin = X;
691 if (Y > Ymax) Ymax = Y;
692 if (Y < Ymin) Ymin = Y;
693 if (Z > Zmax) Zmax = Z;
694 if (Z < Zmin) Zmin = Z;
700 BoundX = Xmax - Xmin;
701 BoundY = Ymax - Ymin;
702 BoundZ = Zmax - Zmin;
704 Domain->SetBoundBox(StartX, StartY, StartZ, BoundX, BoundY, BoundZ);
708 if ( (!strcmp(line,
"Triangles")) || (!strcmp(line,
"triangles")) || (!strcmp(line,
"TRIANGLES")) )
710 dat.getline (line, 99);
715 dat.getline (line, 99);
717 cout<<
"number of boundary faces "<<NBdfaces<<endl;
718 Bdfaces =
new int[4*NBdfaces];
720 for(i=0;i<NBdfaces;i++)
722 dat.getline (line, 99);
723 dat >> v1 >> v2 >> v3 >> BoundaryMarker;
725 Bdfaces[4*i + 1] = v2;
726 Bdfaces[4*i + 2] = v3;
727 Bdfaces[4*i + 3] = BoundaryMarker;
734 if ( (!strcmp(line,
"Tetrahedra")) || (!strcmp(line,
"tetrahedra")) || (!strcmp(line,
"TETRAHEDRA")) )
736 dat.getline (line, 99);
741 dat.getline (line, 99);
744 cout <<
"number of root cells "<<N_RootCells <<endl;
746 Tetrahedrals =
new int[4*N_RootCells];
748 for (i=0;i<N_RootCells;i++)
750 dat.getline (line, 99);
751 dat >> v1 >> v2 >> v3 >> v4 >> CellMarker;
752 Tetrahedrals[4*i ] = v1-1;
753 Tetrahedrals[4*i + 1] = v2-1;
754 Tetrahedrals[4*i + 2] = v3-1;
755 Tetrahedrals[4*i + 3] = v4-1;
760 CellTree[i]->
SetVertex(0, NewVertices[Tetrahedrals[4*i ]]);
761 CellTree[i]->
SetVertex(1, NewVertices[Tetrahedrals[4*i + 1]]);
762 CellTree[i]->
SetVertex(2, NewVertices[Tetrahedrals[4*i + 2]]);
763 CellTree[i]->
SetVertex(3, NewVertices[Tetrahedrals[4*i + 3]]);
765 ((
TMacroCell *) CellTree[i])->SetSubGridID(0);
778 PointNeighb =
new int[N_Vertices];
779 memset(PointNeighb, 0, N_Vertices*SizeOfInt);
781 for (i=0;i<4*N_RootCells;i++)
782 PointNeighb[Tetrahedrals[i]]++;
785 for (i=0;i<N_Vertices;i++)
786 if (PointNeighb[i] > maxEpV) maxEpV = PointNeighb[i];
787 delete [] PointNeighb;
788 cout<<
"maximum edges per vertex "<< maxEpV<<endl;
789 PointNeighb =
new int[++maxEpV * N_Vertices];
790 memset(PointNeighb, 0, maxEpV*N_Vertices*SizeOfInt);
794 for(i=0;i<4*N_RootCells;i++)
796 j = Tetrahedrals[i]*maxEpV;
798 PointNeighb[j + PointNeighb[j]] = i / 4;
804 for(i=0;i<N_Cells;i++)
813 Tetrahedrals_temp = Tetrahedrals+4*i;
814 for(jj=0;jj<N_Faces;jj++)
817 N_Points = TmpLen[jj];
820 cerr <<
"Only Tria faces are allowed!!! N_FVert: " << N_Points << endl;
823 a = Tetrahedrals_temp[TmpFV[jj*MaxLen]];
824 b = Tetrahedrals_temp[TmpFV[jj*MaxLen + 1]];
825 c = Tetrahedrals_temp[TmpFV[jj*MaxLen + 2]];
829 len1 = PointNeighb[a*maxEpV];
830 len2 = PointNeighb[b*maxEpV];
831 len3 = PointNeighb[c*maxEpV];
833 for (j=1;j<=len1;j++)
835 Neighb_tmp = PointNeighb[a*maxEpV + j];
836 for (k=1;k<=len2;k++)
838 if(Neighb_tmp == PointNeighb[b*maxEpV + k])
841 if(Neighb_tmp == PointNeighb[c*maxEpV + l])
843 Neib[CurrNeib++] = Neighb_tmp;
850 neib0 = coll->
GetCell(Neib[0]);
851 neib1 = coll->
GetCell(Neib[1]);
854 if(neib0marker==neib1marker)
858 getboundarytag(a,b,c, NBdfaces, Bdfaces, CompID);
860 bdface->
GetTSofXYZ(NewVertices[a]->GetX(), NewVertices[a]->GetY(), NewVertices[a]->GetZ(), T[1], S[1]);
861 bdface->
GetTSofXYZ(NewVertices[b]->GetX(), NewVertices[b]->GetY(), NewVertices[b]->GetZ(), T[2], S[2]);
862 bdface->
GetTSofXYZ(NewVertices[c]->GetX(), NewVertices[c]->GetY(), NewVertices[c]->GetZ(), T[3], S[3]);
872 getboundarytag(a,b,c, NBdfaces, Bdfaces, CompID);
881 cout <<
"chek 11.5 "<< i<<endl;
882 cerr<<
"Error: could not set parameter values"<<endl;
883 OutPut(NewVertices[a]<<endl);
884 OutPut(NewVertices[b]<<endl);
885 OutPut(NewVertices[c]<<endl);
893 cerr <<
"Error !!!!!!!! not enough neighbours!" << endl;
894 Joint =
new TJointEqN(CellTree[Neib[0]], CellTree[Neib[1]]);
899 if (Tetrahedrals[4*Neib[0]+j] == a)
break;
902 if (Tetrahedrals[4*Neib[0]+k] == b)
break;
905 if (Tetrahedrals[4*Neib[0]+l] == c)
break;
906 l = l*100 + k*10 + j;
910 case 210:
case 21:
case 102:
911 case 120:
case 12:
case 201:
914 case 310:
case 31:
case 103:
915 case 130:
case 13:
case 301:
918 case 321:
case 132:
case 213:
919 case 231:
case 123:
case 312:
922 case 230:
case 23:
case 302:
923 case 320:
case 32:
case 203:
928 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
931 CellTree[Neib[0]]->
SetJoint(j, Joint);
938 if (Tetrahedrals[4*Neib[1]+j] == a)
break;
942 if (Tetrahedrals[4*Neib[1]+k] == b)
break;
946 if (Tetrahedrals[4*Neib[1]+l] == c)
break;
948 l = l*100 + k*10 + j;
951 case 210:
case 21:
case 102:
952 case 120:
case 12:
case 201:
955 case 310:
case 31:
case 103:
956 case 130:
case 13:
case 301:
959 case 321:
case 132:
case 213:
960 case 231:
case 123:
case 312:
963 case 230:
case 23:
case 302:
964 case 320:
case 32:
case 203:
969 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
972 CellTree[Neib[1]]->
SetJoint(j, Joint);
975 if (Joint->
GetType() == InterfaceJoint3D || Joint->
GetType() == IsoInterfaceJoint3D)
981 if (Joint->
GetType() == JointEqN)
985 delete [] PointNeighb;
986 cout<<
"tetrameshcreatesuccessful " <<
"\n";
989 void TetrameshGen(
TDomain *&Domain)
994 int i, j, k, l, N_Coord, *N_FVerts, N_Faces, *Facets;
995 int N, N_RootCells, N_Cells, CurrVertex, N_Vertices, ID, N_G, RefLevel=0;
996 int CurrNeib, len1, len2, len3, maxEpV = 0, a, b, c, Neib[2], Neighb_tmp, CurrComp;
997 int *Tetrahedrals, *PointNeighb, dimension;
998 int *Facelist, *Facemarkerlist;
1000 double *Coordinates, N_x, N_y, N_z;
1002 double Xmin = 1e10, Xmax = -1e10, Ymin = 1e10, Ymax = -1e10;
1003 double Zmin = 1e10, Zmax = -1e10, T[4]={0,0,0,0}, S[4]={0,0,0,0};
1004 double StartX, StartY, StartZ, BoundX, BoundY, BoundZ;
1010 TVertex **VertexDel, **NewVertices, **NewSurfVertices;
1019 char *SMESH, line[100];
1026 MPI_Comm_rank(Comm, &rank);
1027 MPI_Comm_size(Comm, &size);
1040 std::ostringstream opts;
1043 opts.seekp(std::ios::beg);
1063 ReadMeditMesh(SMESH, In);
1070 tetrahedralize((
char*)opts.str().c_str(), &In, &Out);
1085 VertexDel =
new TVertex*[8*N_RootCells];
1088 for(i=0;i<N_Cells;i++)
1093 for(j=0;j<N_Faces;j++)
1097 VertexDel[CurrVertex++] = cell->
GetVertex(j);
1102 for(k=0;k<CurrVertex;k++)
1109 VertexDel[CurrVertex++] = cell->
GetVertex(j);
1114 for(k=0;k<CurrVertex;k++)
1115 if(VertexDel[k]==cell->
GetVertex((j+1)%N_Vertices))
1121 VertexDel[CurrVertex++] = cell->
GetVertex((j+1)%N_Vertices);
1125 for(k=0;k<CurrVertex;k++)
1126 if(VertexDel[k]==cell->
GetVertex((j+2)%N_Vertices))
1132 VertexDel[CurrVertex++] = cell->
GetVertex((j+2)%N_Vertices);
1137 for(k=0;k<CurrVertex;k++)
1138 if(VertexDel[k]==cell->
GetVertex((j+4)%N_Vertices))
1144 VertexDel[CurrVertex++] = cell->
GetVertex((j+4)%N_Vertices);
1150 for(i=0;i<CurrVertex;i++)
1151 delete VertexDel[i];
1152 delete [] VertexDel;
1153 OutPut(CurrVertex<<
" vertices were deleted"<<endl);
1157 for(i=0;i<N_RootCells;i++)
1160 OutPut(N_RootCells<<
" cells were deleted"<<endl);
1167 N_RootCells = Out.numberoftetrahedra;
1168 N_G = Out.numberofpoints;
1171 Coordinates = Out.pointlist;
1172 Tetrahedrals = Out.tetrahedronlist;
1178 MPI_Bcast(&N_RootCells, 1, MPI_INT, 0, Comm);
1179 MPI_Bcast(&N_G, 1, MPI_INT, 0, Comm);
1184 Coordinates =
new double [3*N_G];
1185 Tetrahedrals =
new int[4*N_RootCells];
1188 MPI_Bcast(Coordinates, 3*N_G, MPI_DOUBLE, 0, Comm);
1189 MPI_Bcast(Tetrahedrals, 4*N_RootCells, MPI_INT, 0, Comm);
1193 NewVertices =
new TVertex*[N_G];
1197 NewVertices[i] =
new TVertex(Coordinates[3*i], Coordinates[3*i+1], Coordinates[3*i+2]);
1200 if (Coordinates[3*i] > Xmax) Xmax = Coordinates[3*i];
1201 if (Coordinates[3*i] < Xmin) Xmin = Coordinates[3*i];
1202 if (Coordinates[3*i+1] > Ymax) Ymax = Coordinates[3*i+1];
1203 if (Coordinates[3*i+1] < Ymin) Ymin = Coordinates[3*i+1];
1204 if (Coordinates[3*i+2] > Zmax) Zmax = Coordinates[3*i+2];
1205 if (Coordinates[3*i+2] < Zmin) Zmin = Coordinates[3*i+2];
1211 BoundX = Xmax - Xmin;
1212 BoundY = Ymax - Ymin;
1213 BoundZ = Zmax - Zmin;
1215 Domain->SetBoundBox(StartX, StartY, StartZ, BoundX, BoundY, BoundZ);
1226 for (i=0;i<N_RootCells;i++)
1230 CellTree[i]->
SetVertex(0, NewVertices[Tetrahedrals[4*i ]]);
1231 CellTree[i]->
SetVertex(1, NewVertices[Tetrahedrals[4*i + 1]]);
1232 CellTree[i]->
SetVertex(2, NewVertices[Tetrahedrals[4*i + 2]]);
1233 CellTree[i]->
SetVertex(3, NewVertices[Tetrahedrals[4*i + 3]]);
1236 ((
TMacroCell *) CellTree[i])->SetSubGridID(0);
1250 PointNeighb =
new int[N_G];
1254 cout<<
"numberofpoints "<<N_G<<endl;
1255 memset(PointNeighb, 0, N_G *SizeOfInt);
1257 for (i=0;i<4*N_RootCells;i++)
1258 PointNeighb[Tetrahedrals[i]]++;
1261 if (PointNeighb[i] > maxEpV) maxEpV = PointNeighb[i];
1262 delete [] PointNeighb;
1267 cout<<
"maxEpV "<< maxEpV<<endl;
1269 PointNeighb =
new int[++maxEpV * N_G];
1271 memset(PointNeighb, 0, maxEpV*N_G*SizeOfInt);
1278 for(i=0;i<4*N_RootCells;i++)
1280 j = Tetrahedrals[i]*maxEpV;
1283 PointNeighb[j + PointNeighb[j]] = i / 4;
1299 N_G = Out.numberoftrifaces;
1300 Facelist = Out.trifacelist;
1301 Facemarkerlist = Out.trifacemarkerlist;
1305 MPI_Bcast(&N_G, 1, MPI_INT, 0, Comm);
1309 Facelist =
new int [3*N_G];
1310 Facemarkerlist =
new int[N_G];
1314 MPI_Bcast(Facelist, 3*N_G, MPI_INT, 0, Comm);
1315 MPI_Bcast(Facemarkerlist, N_G, MPI_INT, 0, Comm);
1319 cout<<
"numberoftrifaces "<<N_G<<endl;
1324 b = Facelist[3*i+1];
1325 c = Facelist[3*i+2];
1333 len1 = PointNeighb[a*maxEpV];
1334 len2 = PointNeighb[b*maxEpV];
1335 len3 = PointNeighb[c*maxEpV];
1338 for (j=1;j<=len1;j++)
1340 Neighb_tmp = PointNeighb[a*maxEpV + j];
1341 for (k=1;k<=len2;k++)
1343 if (Neighb_tmp == PointNeighb[b*maxEpV + k])
1345 for (l=1;l<=len3;l++)
1346 if (Neighb_tmp == PointNeighb[c*maxEpV + l])
1348 Neib[CurrNeib++] = Neighb_tmp;
1353 if (CurrNeib == 2)
break;
1357 if (Facemarkerlist[i])
1360 CurrComp = Facemarkerlist[i] - 1;
1371 NewVertices[a]->
GetY(), T[1], S[1]) ||
1373 NewVertices[b]->
GetY(), T[2], S[2]) ||
1375 NewVertices[c]->
GetY(), T[3], S[3]) )
1377 cerr<<
"Error: could not set parameter values"<<endl;
1378 OutPut(NewVertices[a]<<endl);
1379 OutPut(NewVertices[b]<<endl);
1380 OutPut(NewVertices[c]<<endl);
1388 CellTree[Neib[0]], CellTree[Neib[1]] );
1391 CellTree[Neib[0]], CellTree[Neib[1]] );
1405 cerr <<
"Error !!!!!!!! not enough neighbours!" << endl;
1407 Joint =
new TJointEqN(CellTree[Neib[0]], CellTree[Neib[1]]);
1414 if (Tetrahedrals[4*Neib[0]+j] == a)
break;
1418 if (Tetrahedrals[4*Neib[0]+k] == b)
break;
1422 if (Tetrahedrals[4*Neib[0]+l] == c)
break;
1424 l = l*100 + k*10 + j;
1428 case 210:
case 21:
case 102:
1429 case 120:
case 12:
case 201:
1432 case 310:
case 31:
case 103:
1433 case 130:
case 13:
case 301:
1436 case 321:
case 132:
case 213:
1437 case 231:
case 123:
case 312:
1440 case 230:
case 23:
case 302:
1441 case 320:
case 32:
case 203:
1446 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
1449 CellTree[Neib[0]]->
SetJoint(j, Joint);
1455 if (Tetrahedrals[4*Neib[1]+j] == a)
break;
1459 if (Tetrahedrals[4*Neib[1]+k] == b)
break;
1463 if (Tetrahedrals[4*Neib[1]+l] == c)
break;
1465 l = l*100 + k*10 + j;
1471 case 210:
case 21:
case 102:
1472 case 120:
case 12:
case 201:
1475 case 310:
case 31:
case 103:
1476 case 130:
case 13:
case 301:
1479 case 321:
case 132:
case 213:
1480 case 231:
case 123:
case 312:
1483 case 230:
case 23:
case 302:
1484 case 320:
case 32:
case 203:
1489 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
1492 CellTree[Neib[1]]->
SetJoint(j, Joint);
1495 if (Joint->
GetType() == InterfaceJoint3D ||
1496 Joint->
GetType() == IsoInterfaceJoint3D)
1502 if (Joint->
GetType() == JointEqN)
1516 delete [] Tetrahedrals ;
1517 delete [] Coordinates;
1519 delete [] Facemarkerlist;
1522 delete [] PointNeighb;
1526 void TetraGen(
TDomain *&Domain)
1531 int i, j, k, l, N_Coord, *N_FVerts, N_Faces, *Facets;
1532 int N, N_RootCells, N_Cells, CurrVertex, N_Vertices, ID, N_G, RefLevel=0;
1533 int CurrNeib, len1, len2, len3, maxEpV = 0, a, b, c, Neib[2], Neighb_tmp, CurrComp;
1534 int *Tetrahedrals, *PointNeighb, dimension;
1535 int jj, N_Points, MaxLen, *Tetrahedrals_loc;
1536 const int *EdgeVertex, *TmpFV, *TmpLen;
1538 double *Coordinates, N_x, N_y, N_z;
1540 double Xmin = 1e10, Xmax = -1e10, Ymin = 1e10, Ymax = -1e10;
1541 double Zmin = 1e10, Zmax = -1e10, T[4]={0,0,0,0}, S[4]={0,0,0,0};
1542 double StartX, StartY, StartZ, BoundX, BoundY, BoundZ;
1548 TVertex **VertexDel, **NewVertices, **NewSurfVertices;
1558 char *SMESH, line[100];
1564 MPI_Comm_rank(Comm, &rank);
1565 MPI_Comm_size(Comm, &size);
1575 std::ostringstream opts;
1578 opts.seekp(std::ios::beg);
1598 ReadMeditMesh(SMESH, In);
1605 tetrahedralize((
char*)opts.str().c_str(), &In, &Out);
1614 DeleteDomain(Domain);
1620 N_RootCells = Out.numberoftetrahedra;
1621 N_G = Out.numberofpoints;
1623 Coordinates = Out.pointlist;
1624 Tetrahedrals = Out.tetrahedronlist;
1628 MPI_Bcast(&N_RootCells, 1, MPI_INT, 0, Comm);
1629 MPI_Bcast(&N_G, 1, MPI_INT, 0, Comm);
1632 Coordinates =
new double [3*N_G];
1633 Tetrahedrals =
new int[4*N_RootCells];
1635 MPI_Bcast(Coordinates, 3*N_G, MPI_DOUBLE, 0, Comm);
1636 MPI_Bcast(Tetrahedrals, 4*N_RootCells, MPI_INT, 0, Comm);
1640 NewVertices =
new TVertex*[N_G];
1644 NewVertices[i] =
new TVertex(Coordinates[3*i], Coordinates[3*i+1], Coordinates[3*i+2]);
1646 if (Coordinates[3*i] > Xmax) Xmax = Coordinates[3*i];
1647 if (Coordinates[3*i] < Xmin) Xmin = Coordinates[3*i];
1648 if (Coordinates[3*i+1] > Ymax) Ymax = Coordinates[3*i+1];
1649 if (Coordinates[3*i+1] < Ymin) Ymin = Coordinates[3*i+1];
1650 if (Coordinates[3*i+2] > Zmax) Zmax = Coordinates[3*i+2];
1651 if (Coordinates[3*i+2] < Zmin) Zmin = Coordinates[3*i+2];
1658 BoundX = Xmax - Xmin;
1659 BoundY = Ymax - Ymin;
1660 BoundZ = Zmax - Zmin;
1662 Domain->SetBoundBox(StartX, StartY, StartZ, BoundX, BoundY, BoundZ);
1672 for (i=0;i<N_RootCells;i++)
1676 CellTree[i]->
SetVertex(0, NewVertices[Tetrahedrals[4*i ]]);
1677 CellTree[i]->
SetVertex(1, NewVertices[Tetrahedrals[4*i + 1]]);
1678 CellTree[i]->
SetVertex(2, NewVertices[Tetrahedrals[4*i + 2]]);
1679 CellTree[i]->
SetVertex(3, NewVertices[Tetrahedrals[4*i + 3]]);
1681 ((
TMacroCell *) CellTree[i])->SetSubGridID(0);
1692 PointNeighb =
new int[N_G];
1696 cout<<
"numberofpoints "<<N_G<<endl;
1697 memset(PointNeighb, 0, N_G *SizeOfInt);
1699 for (i=0;i<4*N_RootCells;i++)
1700 PointNeighb[Tetrahedrals[i]]++;
1703 if (PointNeighb[i] > maxEpV) maxEpV = PointNeighb[i];
1704 delete [] PointNeighb;
1709 cout<<
"maxEpV "<< maxEpV<<endl;
1710 PointNeighb =
new int[++maxEpV * N_G];
1711 memset(PointNeighb, 0, maxEpV*N_G*SizeOfInt);
1717 for(i=0;i<4*N_RootCells;i++)
1719 j = Tetrahedrals[i]*maxEpV;
1722 PointNeighb[j + PointNeighb[j]] = i / 4;
1728 for (i=0;i<N_Cells;i++)
1734 Tetrahedrals_loc = Tetrahedrals+4*i;
1736 for(jj=0;jj<N_Faces;jj++)
1740 N_Points = TmpLen[jj];
1744 cerr <<
"Only Tria faces are allowed!!! N_FVert: " << N_Points << endl;
1749 a = Tetrahedrals_loc[TmpFV[jj*MaxLen]];
1750 b = Tetrahedrals_loc[TmpFV[jj*MaxLen + 1]];
1751 c = Tetrahedrals_loc[TmpFV[jj*MaxLen + 2]];
1757 len1 = PointNeighb[a*maxEpV];
1758 len2 = PointNeighb[b*maxEpV];
1759 len3 = PointNeighb[c*maxEpV];
1762 for (j=1;j<=len1;j++)
1764 Neighb_tmp = PointNeighb[a*maxEpV + j];
1765 for (k=1;k<=len2;k++)
1767 if (Neighb_tmp == PointNeighb[b*maxEpV + k])
1769 for (l=1;l<=len3;l++)
1770 if (Neighb_tmp == PointNeighb[c*maxEpV + l])
1772 Neib[CurrNeib++] = Neighb_tmp;
1777 if (CurrNeib == 2)
break;
1788 NewVertices[a]->
GetY(), T[1], S[1]) ||
1790 NewVertices[b]->
GetY(), T[2], S[2]) ||
1792 NewVertices[c]->
GetY(), T[3], S[3]) )
1794 cerr<<
"Error: could not set parameter values"<<endl;
1795 OutPut(NewVertices[a]<<endl);
1796 OutPut(NewVertices[b]<<endl);
1797 OutPut(NewVertices[c]<<endl);
1805 CellTree[Neib[0]], CellTree[Neib[1]] );
1808 CellTree[Neib[0]], CellTree[Neib[1]] );
1822 cerr <<
"Error !!!!!!!! not enough neighbours!" << endl;
1824 Joint =
new TJointEqN(CellTree[Neib[0]], CellTree[Neib[1]]);
1830 if (Tetrahedrals[4*Neib[0]+j] == a)
break;
1834 if (Tetrahedrals[4*Neib[0]+k] == b)
break;
1838 if (Tetrahedrals[4*Neib[0]+l] == c)
break;
1840 l = l*100 + k*10 + j;
1846 case 210:
case 21:
case 102:
1847 case 120:
case 12:
case 201:
1850 case 310:
case 31:
case 103:
1851 case 130:
case 13:
case 301:
1854 case 321:
case 132:
case 213:
1855 case 231:
case 123:
case 312:
1858 case 230:
case 23:
case 302:
1859 case 320:
case 32:
case 203:
1864 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
1867 CellTree[Neib[0]]->
SetJoint(j, Joint);
1873 if (Tetrahedrals[4*Neib[1]+j] == a)
break;
1877 if (Tetrahedrals[4*Neib[1]+k] == b)
break;
1881 if (Tetrahedrals[4*Neib[1]+l] == c)
break;
1883 l = l*100 + k*10 + j;
1887 case 210:
case 21:
case 102:
1888 case 120:
case 12:
case 201:
1891 case 310:
case 31:
case 103:
1892 case 130:
case 13:
case 301:
1895 case 321:
case 132:
case 213:
1896 case 231:
case 123:
case 312:
1899 case 230:
case 23:
case 302:
1900 case 320:
case 32:
case 203:
1905 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
1908 CellTree[Neib[1]]->
SetJoint(j, Joint);
1911 if (Joint->
GetType() == InterfaceJoint3D ||
1912 Joint->
GetType() == IsoInterfaceJoint3D)
1918 if (Joint->
GetType() == JointEqN)
1926 cout<<
"numberoftrifaces after "<<N_G<<endl;
1938 delete [] Tetrahedrals ;
1939 delete [] Coordinates;
1944 delete [] PointNeighb;
1955 void TetraGenWithInputCells(
TDomain *&Domain)
1960 int i, j, k, l, N_Coord, *N_FVerts, N_Faces, *Facets;
1961 int N, N_RootCells, N_Cells, CurrVertex, N_Vertices, ID, N_G, RefLevel=0;
1962 int CurrNeib, len1, len2, len3, maxEpV = 0, a, b, c, Neib[2], Neighb_tmp, CurrComp;
1963 int *Tetrahedrals, *PointNeighb, dimension;
1964 int jj, N_Points, MaxLen, *Tetrahedrals_loc;
1965 const int *EdgeVertex, *TmpFV, *TmpLen;
1966 double *TetRegionlist;
1968 double *Coordinates, N_x, N_y, N_z;
1970 double Xmin = 1e10, Xmax = -1e10, Ymin = 1e10, Ymax = -1e10;
1971 double Zmin = 1e10, Zmax = -1e10, T[4]={0,0,0,0}, S[4]={0,0,0,0};
1972 double StartX, StartY, StartZ, BoundX, BoundY, BoundZ;
1974 tetgenio In, Out, InAddPts;
1978 TVertex **VertexDel, **NewVertices, **NewSurfVertices;
1988 char *SMESH, *NODE, line[100];
1995 MPI_Comm_rank(Comm, &rank);
1996 MPI_Comm_size(Comm, &size);
2006 std::ostringstream opts;
2009 opts.seekp(std::ios::beg);
2038 ReadMeditMeshWithCells(SMESH, In);
2050 tetrahedralize((
char*)opts.str().c_str(), &In, &Out);
2060 DeleteDomain(Domain);
2066 N_RootCells = Out.numberoftetrahedra;
2067 N_G = Out.numberofpoints;
2069 Coordinates = Out.pointlist;
2070 Tetrahedrals = Out.tetrahedronlist;
2071 TetRegionlist = Out.tetrahedronattributelist;
2075 MPI_Bcast(&N_RootCells, 1, MPI_INT, 0, Comm);
2076 MPI_Bcast(&N_G, 1, MPI_INT, 0, Comm);
2080 Coordinates =
new double [3*N_G];
2081 Tetrahedrals =
new int[4*N_RootCells];
2082 TetRegionlist =
new double [N_RootCells];
2085 MPI_Bcast(Coordinates, 3*N_G, MPI_DOUBLE, 0, Comm);
2086 MPI_Bcast(Tetrahedrals, 4*N_RootCells, MPI_INT, 0, Comm);
2087 MPI_Bcast(TetRegionlist, N_RootCells, MPI_DOUBLE, 0, Comm);
2091 NewVertices =
new TVertex*[N_G];
2095 NewVertices[i] =
new TVertex(Coordinates[3*i], Coordinates[3*i+1], Coordinates[3*i+2]);
2098 if (Coordinates[3*i] > Xmax) Xmax = Coordinates[3*i];
2099 if (Coordinates[3*i] < Xmin) Xmin = Coordinates[3*i];
2100 if (Coordinates[3*i+1] > Ymax) Ymax = Coordinates[3*i+1];
2101 if (Coordinates[3*i+1] < Ymin) Ymin = Coordinates[3*i+1];
2102 if (Coordinates[3*i+2] > Zmax) Zmax = Coordinates[3*i+2];
2103 if (Coordinates[3*i+2] < Zmin) Zmin = Coordinates[3*i+2];
2110 BoundX = Xmax - Xmin;
2111 BoundY = Ymax - Ymin;
2112 BoundZ = Zmax - Zmin;
2113 Domain->SetBoundBox(StartX, StartY, StartZ, BoundX, BoundY, BoundZ);
2123 for (i=0;i<N_RootCells;i++)
2126 CellTree[i]->
SetVertex(0, NewVertices[Tetrahedrals[4*i ]]);
2127 CellTree[i]->
SetVertex(1, NewVertices[Tetrahedrals[4*i + 1]]);
2128 CellTree[i]->
SetVertex(2, NewVertices[Tetrahedrals[4*i + 2]]);
2129 CellTree[i]->
SetVertex(3, NewVertices[Tetrahedrals[4*i + 3]]);
2131 ((
TMacroCell *) CellTree[i])->SetSubGridID(0);
2145 PointNeighb =
new int[N_G];
2149 cout<<
"numberofpoints "<<N_G<<endl;
2150 memset(PointNeighb, 0, N_G *SizeOfInt);
2152 for (i=0;i<4*N_RootCells;i++)
2153 PointNeighb[Tetrahedrals[i]]++;
2156 if (PointNeighb[i] > maxEpV) maxEpV = PointNeighb[i];
2157 delete [] PointNeighb;
2162 cout<<
"maxEpV "<< maxEpV<<endl;
2164 PointNeighb =
new int[++maxEpV * N_G];
2166 memset(PointNeighb, 0, maxEpV*N_G*SizeOfInt);
2172 for(i=0;i<4*N_RootCells;i++)
2174 j = Tetrahedrals[i]*maxEpV;
2177 PointNeighb[j + PointNeighb[j]] = i / 4;
2184 for (i=0;i<N_Cells;i++)
2190 Tetrahedrals_loc = Tetrahedrals+4*i;
2192 for(jj=0;jj<N_Faces;jj++)
2196 N_Points = TmpLen[jj];
2200 cerr <<
"Only Tria faces are allowed!!! N_FVert: " << N_Points << endl;
2205 a = Tetrahedrals_loc[TmpFV[jj*MaxLen]];
2206 b = Tetrahedrals_loc[TmpFV[jj*MaxLen + 1]];
2207 c = Tetrahedrals_loc[TmpFV[jj*MaxLen + 2]];
2215 len1 = PointNeighb[a*maxEpV];
2216 len2 = PointNeighb[b*maxEpV];
2217 len3 = PointNeighb[c*maxEpV];
2220 for (j=1;j<=len1;j++)
2222 Neighb_tmp = PointNeighb[a*maxEpV + j];
2223 for (k=1;k<=len2;k++)
2225 if (Neighb_tmp == PointNeighb[b*maxEpV + k])
2227 for (l=1;l<=len3;l++)
2228 if (Neighb_tmp == PointNeighb[c*maxEpV + l])
2230 Neib[CurrNeib++] = Neighb_tmp;
2235 if (CurrNeib == 2)
break;
2246 NewVertices[a]->
GetY(), T[1], S[1]) ||
2248 NewVertices[b]->
GetY(), T[2], S[2]) ||
2250 NewVertices[c]->
GetY(), T[3], S[3]) )
2252 cerr<<
"Error: could not set parameter values"<<endl;
2253 OutPut(NewVertices[a]<<endl);
2254 OutPut(NewVertices[b]<<endl);
2255 OutPut(NewVertices[c]<<endl);
2263 CellTree[Neib[0]], CellTree[Neib[1]] );
2266 CellTree[Neib[0]], CellTree[Neib[1]] );
2280 cerr <<
"Error !!!!!!!! not enough neighbours!" << endl;
2282 Joint =
new TJointEqN(CellTree[Neib[0]], CellTree[Neib[1]]);
2288 if (Tetrahedrals[4*Neib[0]+j] == a)
break;
2292 if (Tetrahedrals[4*Neib[0]+k] == b)
break;
2296 if (Tetrahedrals[4*Neib[0]+l] == c)
break;
2298 l = l*100 + k*10 + j;
2303 case 210:
case 21:
case 102:
2304 case 120:
case 12:
case 201:
2307 case 310:
case 31:
case 103:
2308 case 130:
case 13:
case 301:
2311 case 321:
case 132:
case 213:
2312 case 231:
case 123:
case 312:
2315 case 230:
case 23:
case 302:
2316 case 320:
case 32:
case 203:
2321 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
2324 CellTree[Neib[0]]->
SetJoint(j, Joint);
2330 if (Tetrahedrals[4*Neib[1]+j] == a)
break;
2334 if (Tetrahedrals[4*Neib[1]+k] == b)
break;
2338 if (Tetrahedrals[4*Neib[1]+l] == c)
break;
2340 l = l*100 + k*10 + j;
2346 case 210:
case 21:
case 102:
2347 case 120:
case 12:
case 201:
2350 case 310:
case 31:
case 103:
2351 case 130:
case 13:
case 301:
2354 case 321:
case 132:
case 213:
2355 case 231:
case 123:
case 312:
2358 case 230:
case 23:
case 302:
2359 case 320:
case 32:
case 203:
2364 Error(
"Unable to set the face !!!!!!!!!!!!" << endl);
2367 CellTree[Neib[1]]->
SetJoint(j, Joint);
2370 if (Joint->
GetType() == InterfaceJoint3D ||
2371 Joint->
GetType() == IsoInterfaceJoint3D)
2377 if (Joint->
GetType() == JointEqN)
2385 cout<<
"numberoftrifaces after "<<N_G<<endl;
2396 delete [] Tetrahedrals ;
2397 delete [] Coordinates;
2398 delete [] TetRegionlist;
2402 delete [] PointNeighb;
void SetMapType()
Definition: Joint.C:107
void GetTreeInfo(TBaseCell **&celltree, int &N_rootcells)
get tree of cells
Definition: Domain.h:176
virtual int GetTSofXYZ(double X, double Y, double Z, double &T, double &S)=0
JointType GetType()
Definition: Joint.h:75
TBaseCell * GetCell(int i) const
return Cell with index i in Cells-array
Definition: Collection.h:50
int GetN_Faces()
return the number of faces of the cell
Definition: BaseCell.h:190
TBoundComp2D * GetBdComp(int i)
Definition: BoundPart.h:49
int SetJoint(int J_i, TJoint *J)
set the pointer to face J_i to J
Definition: BaseCell.h:168
double P0
Definition: Database.h:533
int GetFaceVertex(const int *&TmpFV, const int *&TmpLen, int &MaxLen)
Definition: ShapeDesc.h:124
contains the boundary description, the virtual cell tree and macro grid
Definition: Domain.h:36
void SetClipBoard(int value)
set value in ClipBoard
Definition: BaseCell.h:263
int SetParam(TDomain *domain)
Definition: Iterator.C:17
static TIterator ** IteratorDB
Definition: Database.h:1131
Definition: IsoBoundFace.h:18
TShapeDesc * GetShapeDesc() const
return shape descriptor of refinement descriptor
Definition: BaseCell.h:134
store cells in an array, used by cell iterators
Definition: Collection.h:18
virtual TVertex * GetVertex(int Vert_i)=0
return the pointer to vertex with number i
represent a unit of the macro grid
Definition: MacroCell.h:15
Definition: JointEqN.h:20
int GetN_Cells() const
return number of cells
Definition: Collection.h:46
Definition: ShapeDesc.h:29
TJoint * GetJoint(int J_i)
return the pointer to face with number i
Definition: BaseCell.h:175
MPI_Comm Comm
Definition: Database.h:978
TBoundPart * GetBdPart(int i)
get i-th boundary part
Definition: Domain.h:172
Definition: BoundComp3D.h:17
double GetY() const
Definition: Vertex.h:99
int GetN_Vertices()
return the number of vertices of the cell
Definition: BaseCell.h:179
Definition: BoundPart.h:21
void SetTreeInfo(TBaseCell **celltree, int N_rootcells)
set tree of cells
Definition: Domain.h:183
bool IsFreeBoundary() const
Definition: BoundComp.h:57
TCollection * GetCollection(Iterators it, int level)
produce a collection with all cells returned by iterator it
Definition: Domain.C:1982
Definition: IsoInterfaceJoint3D.h:19
information for finite element data structure
Definition: BaseCell.h:25
static TRefDesc ** RefDescDB
Definition: Database.h:1125
void SetRegionID(int val)
set region number to this cell
Definition: BaseCell.h:347
Definition: BoundFace.h:18
double GetZ() const
Definition: Vertex.h:103
double GetX() const
Definition: Vertex.h:96
virtual int SetVertex(int Vert_i, TVertex *Vert)=0
set the pointer of vertex Vert_i to Vert
represent geometric information of the cell
Definition: GridCell.h:15
void SetAsLayerCell(int val)
set as LayerCell cell
Definition: BaseCell.h:355
int GetRegionID() const
set region number to this cell
Definition: BaseCell.h:351
Definition: BdSphere.h:18
static TParamDB * ParamDB
Definition: Database.h:1134
Definition: InterfaceJoint3D.h:18