6 OutPut(
"Example: Hemker_VMS" << endl) ;
13 #include <BoundEdge.h>
14 #include <BoundComp.h>
18 #include <MainUtilities.h>
21 #include <MacroCell.h>
22 #include <BoundEdge.h>
23 #include <IsoBoundEdge.h>
25 #include <IsoInterfaceJoint.h>
30 #include <QuadAffin.h>
31 #include <QuadBilinear.h>
32 #include <QuadIsoparametric.h>
33 #include <TriaAffin.h>
34 #include <TriaIsoparametric.h>
45 void ExactU1(
double x,
double y,
double *values)
53 void ExactU2(
double x,
double y,
double *values)
61 void ExactP(
double x,
double y,
double *values)
72 void BoundCondition(
int i,
double t, BoundCond &cond)
77 void U1BoundValue(
int BdComp,
double Param,
double &value)
83 case 1: value=1.5*(1.0 - (0.25*pow(-2+4*Param,2)));
87 case 3: value=1.5*(1.0 - (0.25*pow(2-4*Param,2))) ;
91 default: cout <<
"wrong boundary part number: " << BdComp << endl;
95 void U2BoundValue(
int BdComp,
double Param,
double &value)
98 if(BdComp>4) cout <<
"wrong boundary part number: " << BdComp << endl;
104 void LinCoeffs(
int n_points,
double *x,
double *y,
105 double **parameters,
double **coeffs)
109 double *coeff, nondim;
114 for(i=0;i<n_points;i++)
127 void ExactS1(
double x,
double y,
double *values)
135 void ExactS2(
double x,
double y,
double *values)
143 void ExactS3(
double x,
double y,
double *values)
154 void BoundCondition_CST(
int i,
double t, BoundCond &cond)
160 void S1BoundValue(
int BdComp,
double Param,
double &value)
171 case 3: value=(pow(1.5*Wei*(-1+2*Param),2) * 2.0 )+1.0;
179 void S2BoundValue(
int BdComp,
double Param,
double &value)
190 case 3: value=1.5*Wei*(-1+2*Param);
201 void S3BoundValue(
int BdComp,
double Param,
double &value)
220 void LinCoeffs_CST(
int n_points,
double *X,
double *Y,
221 double **parameters,
double **coeffs)
228 for(i=0;i<n_points;i++)
245 void ExactD1(
double x,
double y,
double *values)
253 void ExactD2(
double x,
double y,
double *values)
261 void ExactD3(
double x,
double y,
double *values)
272 void BoundCondition_DFT(
int i,
double t, BoundCond &cond)
278 void D1BoundValue(
int BdComp,
double Param,
double &value)
292 default: cout <<
"wrong boundary part number" << endl;
298 void D2BoundValue(
int BdComp,
double Param,
double &value)
304 case 1: value=0.75*(-2*Param+1);
308 case 3: value=0.75*(2*Param-1);
312 default: cout <<
"wrong boundary part number" << endl;
320 void D3BoundValue(
int BdComp,
double Param,
double &value)
334 default: cout <<
"wrong boundary part number" << endl;
341 void LinCoeffs_DFT(
int n_points,
double *X,
double *Y,
342 double **parameters,
double **coeffs)
345 double *coeff, x, y, *param;
346 double u1x, u1y, u2x, u2y;
348 for(i=0;i<n_points;i++)
374 double &cd,
double &cl)
377 int N_Points,N_Edges,comp,ed_nr;
378 double *weights, *xi, *eta;
379 double X[MaxN_QuadPoints_2D];
380 double Y[MaxN_QuadPoints_2D];
381 double AbsDetjk[MaxN_QuadPoints_2D];
382 int N_LocalUsedElements;
383 FE2D LocalUsedElements[3], CurrentElement;
385 double **OrigFEValues, *Orig;
386 bool SecondDer[3] = { FALSE, FALSE, FALSE };
387 double *u1, *u2, *p, *tau1, *tau2, *tau3;
389 int *UGlobalNumbers, *UBeginIndex;
390 int *PGlobalNumbers, *PBeginIndex;
391 int *TauGlobalNumbers, *TauBeginIndex;
392 int *N_BaseFunct, N_Cells;
393 BaseFunct2D BaseFunct, *BaseFuncts;
396 double value, value1, value2, value3, value4, value5, value6;
397 double FEFunctValues[MaxN_BaseFunctions2D];
398 double FEFunctValues1[MaxN_BaseFunctions2D];
399 double FEFunctValues2[MaxN_BaseFunctions2D];
400 double FEFunctValues3[MaxN_BaseFunctions2D];
401 double FEFunctValues4[MaxN_BaseFunctions2D];
402 double FEFunctValues5[MaxN_BaseFunctions2D];
403 double FEFunctValues6[MaxN_BaseFunctions2D];
406 int N_DerivativesU = 3;
407 double *Derivatives[MaxN_BaseFunctions2D];
408 MultiIndex2D NeededDerivatives[3] = { D00, D10, D01 };
419 int N_DOF_Circ, *DOF_Circ;
420 char VString[] =
"v";
445 aux =
new double [MaxN_QuadPoints_2D*10];
446 for(j=0;j<MaxN_QuadPoints_2D;j++)
447 Derivatives[j] = aux + j*10;
451 memset(v,0,N_*SizeOfDouble);
460 for(i=0;i<N_Cells;i++)
464 for(j=0;j<N_Edges;j++)
467 if ((joint->
GetType() == BoundaryEdge)||
468 (joint->
GetType() == IsoBoundEdge))
473 comp=BoundComp->
GetID();
476 FEEle = USpace->
GetFE2D(i,cell);
481 DOF = UGlobalNumbers + UBeginIndex[i];
482 for (k=0;k<N_DOF_Circ;k++)
483 v[DOF[DOF_Circ[k]]] = 1;
497 for(i=0;i<N_Cells;i++)
504 N_LocalUsedElements = 3;
505 LocalUsedElements[0] = USpace->
GetFE2D(i, cell);
506 LocalUsedElements[1] = PSpace->
GetFE2D(i, cell);
507 LocalUsedElements[2] = TauSpace->
GetFE2D(i, cell);
512 TFEDatabase2D::GetOrig(N_LocalUsedElements, LocalUsedElements, Coll, cell, SecondDer, N_Points, xi, eta, weights, X, Y, AbsDetjk);
515 CurrentElement = LocalUsedElements[1];
516 BaseFunct = BaseFuncts[CurrentElement];
517 N_ = N_BaseFunct[CurrentElement];
519 DOF = PGlobalNumbers + PBeginIndex[i];
521 FEFunctValues[l] = p[DOF[l]];
525 for(j=0;j<N_Points;j++)
527 Orig = OrigFEValues[j];
530 value += FEFunctValues[l] * Orig[l];
532 Derivatives[j][0] = value;
536 CurrentElement = LocalUsedElements[0];
537 BaseFunct = BaseFuncts[CurrentElement];
538 N_ = N_BaseFunct[CurrentElement];
540 DOF = UGlobalNumbers + UBeginIndex[i];
543 FEFunctValues1[l] = u1[DOF[l]];
544 FEFunctValues2[l] = u2[DOF[l]];
545 FEFunctValues3[l] = v[DOF[l]];
548 for(k=0;k<N_DerivativesU;k++)
551 NeededDerivatives[k]);
552 for(j=0;j<N_Points;j++)
554 Orig = OrigFEValues[j];
560 value1 += FEFunctValues1[l] * Orig[l];
561 value2 += FEFunctValues2[l] * Orig[l];
562 value3 += FEFunctValues3[l] * Orig[l];
564 Derivatives[j][k+1] = value1;
565 Derivatives[j][k+4] = value2;
566 Derivatives[j][k+7] = value3;
572 CurrentElement = LocalUsedElements[2];
573 BaseFunct = BaseFuncts[CurrentElement];
574 N_ = N_BaseFunct[CurrentElement];
576 DOF = TauGlobalNumbers + TauBeginIndex[i];
579 FEFunctValues4[l] = tau1[DOF[l]];
580 FEFunctValues5[l] = tau2[DOF[l]];
581 FEFunctValues6[l] = tau3[DOF[l]];
586 for(j=0;j<N_Points;j++)
588 Orig = OrigFEValues[j];
594 value4 += FEFunctValues4[l] * Orig[l];
595 value5 += FEFunctValues5[l] * Orig[l];
596 value6 += FEFunctValues6[l] * Orig[l];
598 Derivatives[j][10] = value4;
599 Derivatives[j][11] = value5;
600 Derivatives[j][12] = value6;
607 for(j=0;j<N_Points;j++)
609 Der = Derivatives[j];
612 value1 = beta*nu*(Der[2]*Der[8]+Der[3]*Der[9]);
616 value1 -= Der[0]*Der[8];
618 value1 += (1.0-beta)*nu*wei*(Der[10]*Der[8] + Der[11]*Der[9]);
620 value2 = beta*nu*(Der[5]*Der[8]+Der[6]*Der[9]);
622 value2 -= Der[0]*Der[9];
623 value2 += (1.0-beta)*nu*wei*(Der[11]*Der[8] + Der[12]*Der[9]);
625 cd += AbsDetjk[j]*weights[j] * value1;
626 cl += AbsDetjk[j]*weights[j] * value2;
634 delete Derivatives[0];
643 void TriaReMeshGen(
TDomain *&Domain)
645 int j, ID, k, N_G, *PartMarker, *PointNeighb, maxEpV=0;
646 int a, b, len1, len2, Neighb_tmp, BDpart;
647 int i, temp, N_Cells, N_RootCells, CurrVertex, N_Joints, N_Vertices;
648 int N_Interface_Vert, N_Verti, N_Hori, N_SlipBound_Vert, N_BDVertices;
649 int CurrComp, In_Index, *Triangles, Neib[2], CurrNeib;
651 double deviation, hi, x0, y0, x, y, phi1, phi2;
652 double T_a, T_b, C_x, C_y, s, theta;
654 double *Coordinates, *Hole_List;
656 double Xi[4] = {-20., 20., 20.,-20.};
657 double Yi[4] = {-2.,-2., 2., 2.};
663 TVertex **VertexDel, **NewVertices;
671 std::ostringstream opts;
674 Out.pointlist = NULL;
675 Out.pointattributelist = NULL;
676 Out.pointmarkerlist = NULL;
677 Out.trianglelist = NULL;
678 Out.triangleattributelist = NULL;
679 Out.trianglearealist = NULL;
680 Out.neighborlist = NULL;
681 Out.segmentlist = NULL;
682 Out.segmentmarkerlist = NULL;
684 Out.regionlist = NULL;
686 Out.edgemarkerlist = NULL;
689 opts.seekp(std::ios::beg);
719 N_SlipBound_Vert = 2*N_Hori + 2*N_Verti;
721 N_BDVertices = N_Interface_Vert+N_SlipBound_Vert;
722 In.numberofpoints = N_BDVertices;
723 In.pointlist =
new double[2*In.numberofpoints];
724 In.pointmarkerlist =
new int[In.numberofpoints];
725 In.numberofpointattributes = 0;
727 In.numberofsegments = In.numberofpoints;
728 In.segmentlist =
new int[2*In.numberofsegments];
729 In.segmentmarkerlist =
new int[In.numberofsegments];
730 In.numberofregions = 0;
731 In.regionlist = NULL;
733 In.numberofholes = 1;
736 Hole_List =
new double[2* In.numberofholes];
739 In.holelist = Hole_List;
744 hi = (Xi[1] - Xi[0])/(
double)N_Hori;
750 for(i=0;i<N_Hori;i++)
752 x = x0 + (double)i*hi;
753 In.pointlist[2*In_Index] = x;
754 In.pointlist[2*In_Index+1] = y0;
756 In.pointmarkerlist[In_Index] = CurrComp;
757 In.segmentlist[2*In_Index] = In_Index;
758 In.segmentlist[2*In_Index+1] = In_Index+1;
759 In.segmentmarkerlist[In_Index] = CurrComp;
765 hi = (Yi[2] - Yi[1])/(
double)N_Verti;
770 for(i=0;i<N_Verti;i++)
772 y = y0 + (double)i*hi;
773 In.pointlist[2*In_Index] = x0;
774 In.pointlist[2*In_Index+1] = y;
776 In.pointmarkerlist[In_Index] = CurrComp;
777 In.segmentlist[2*In_Index] = In_Index;
778 In.segmentlist[2*In_Index+1] = In_Index+1;
779 In.segmentmarkerlist[In_Index] = CurrComp;
787 hi = (Xi[3] - Xi[2])/(
double)N_Hori;
792 for(i=0;i<N_Hori;i++)
794 x = x0 + (double)i*hi;
795 In.pointlist[2*In_Index] = x;
796 In.pointlist[2*In_Index+1] = y0;
798 In.pointmarkerlist[In_Index] = CurrComp;
799 In.segmentlist[2*In_Index] = In_Index;
800 In.segmentlist[2*In_Index+1] = In_Index+1;
801 In.segmentmarkerlist[In_Index] = CurrComp;
809 hi = (Yi[0] - Yi[3])/(
double)N_Verti;
814 for(i=0;i<N_Verti;i++)
816 y = y0 + (double)i*hi;
817 In.pointlist[2*In_Index] = x0;
818 In.pointlist[2*In_Index+1] = y;
820 In.pointmarkerlist[In_Index] = CurrComp;
821 In.segmentlist[2*In_Index] = In_Index;
822 In.segmentlist[2*In_Index+1] = In_Index+1;
823 In.segmentmarkerlist[In_Index] = CurrComp;
829 In.segmentlist[2*(In_Index-1)+1] = 0;
840 phi1 = 0.000000E+0000;
845 s = (phi2- phi1)/(
double)N_Interface_Vert;
851 for(i=0;i<N_Interface_Vert;i++)
853 theta = phi1 + (double)i*s;
857 In.pointlist[2*In_Index] = T_a*cos(theta);;
858 In.pointlist[2*In_Index+1] = T_b*sin(theta);
874 In.pointmarkerlist[In_Index] = CurrComp;
875 In.segmentlist[2*In_Index] = In_Index;
876 In.segmentlist[2*In_Index+1] = In_Index+1;
877 In.segmentmarkerlist[In_Index] = CurrComp;
881 In.segmentlist[2*(In_Index-1)+1] = temp;
885 if(Out.pointlist!=NULL) {
886 free(Out.pointlist); Out.pointlist = NULL;}
887 if(Out.pointattributelist!=NULL) {
888 free(Out.pointattributelist); Out.pointattributelist = NULL;}
889 if(Out.pointmarkerlist!=NULL) {
890 free(Out.pointmarkerlist); Out.pointmarkerlist = NULL;}
891 if(Out.trianglelist!=NULL) {
892 free(Out.trianglelist); Out.trianglelist = NULL;}
893 if(Out.triangleattributelist!=NULL) {
894 free(Out.triangleattributelist); Out.triangleattributelist = NULL;}
895 if(Out.trianglearealist!=NULL) {
896 free(Out.trianglearealist); Out.trianglearealist = NULL;}
897 if(Out.neighborlist!=NULL) {
898 free(Out.neighborlist); Out.neighborlist = NULL;}
899 if(Out.segmentlist!=NULL) {
900 free(Out.segmentlist); Out.segmentlist = NULL;}
901 if(Out.segmentmarkerlist!=NULL) {
902 free(Out.segmentmarkerlist); Out.segmentmarkerlist = NULL;}
903 if(Out.holelist!=NULL) {
904 free(Out.holelist); Out.holelist = NULL;}
905 if(Out.regionlist!=NULL) {
906 free(Out.regionlist); Out.regionlist = NULL;}
907 if(Out.edgelist!=NULL) {
908 free(Out.edgelist); Out.edgelist = NULL;}
909 if(Out.edgemarkerlist!=NULL) {
910 free(Out.edgemarkerlist); Out.edgemarkerlist = NULL;}
911 if(Out.normlist!=NULL) {
912 free(Out.normlist); Out.normlist = NULL;}
915 triangulate((
char*)opts.str().c_str(), &In, &Out, (
struct triangulateio *)NULL);
923 VertexDel =
new TVertex*[3*N_RootCells];
927 for(i=0;i<N_Cells;i++)
932 for(j=0;j<N_Joints;j++)
936 VertexDel[CurrVertex] = cell->
GetVertex(j);
942 for(k=0;k<CurrVertex;k++)
949 VertexDel[CurrVertex] = cell->
GetVertex(j);
955 for(k=0;k<CurrVertex;k++)
956 if(VertexDel[k]==cell->
GetVertex((j+1)%N_Vertices))
962 VertexDel[CurrVertex] = cell->
GetVertex((j+1)%N_Vertices);
967 for(i=0;i<CurrVertex;i++)
971 OutPut(CurrVertex<<
" vertices were deleted"<<endl);
974 for(i=0;i<N_RootCells;i++)
976 OutPut(N_RootCells<<
" cells were deleted"<<endl);
983 UpdateBound[0]->
SetParams(Xi[0], Yi[0], Xi[1]-Xi[0],Yi[1]-Yi[0]);
984 UpdateBound[1]->
SetParams(Xi[1], Yi[1], Xi[2]-Xi[1],Yi[2]-Yi[1]);
985 UpdateBound[2]->
SetParams(Xi[2], Yi[2], Xi[3]-Xi[2],Yi[3]-Yi[2]);
986 UpdateBound[3]->
SetParams(Xi[3], Yi[3], Xi[0]-Xi[3],Yi[0]-Yi[3]);
990 UpdateIntface->
SetParams(C_x, C_y, T_a, T_b, phi1, phi2);
993 N_RootCells = Out.numberoftriangles;
996 Coordinates = Out.pointlist;
997 Triangles = Out.trianglelist;
998 PartMarker =
new int[Out.numberofpoints];
1001 N_G = Out.numberofpoints;
1002 NewVertices =
new TVertex*[N_G];
1005 NewVertices[i] =
new TVertex(Coordinates[2*i], Coordinates[2*i+1]);
1031 for (i=0;i<N_RootCells;i++)
1035 CellTree[i]->
SetVertex(0, NewVertices[Out.trianglelist[3*i ]]);
1036 CellTree[i]->
SetVertex(1, NewVertices[Out.trianglelist[3*i + 1]]);
1037 CellTree[i]->
SetVertex(2, NewVertices[Out.trianglelist[3*i + 2]]);
1039 ((
TMacroCell *) CellTree[i])->SetSubGridID(0);
1052 N_G = Out.numberofpoints;
1053 PointNeighb =
new int[N_G];
1055 memset(PointNeighb, 0, N_G *SizeOfInt);
1057 for (i=0;i<3*N_RootCells;i++)
1058 PointNeighb[Triangles[i]]++;
1063 if (PointNeighb[i] > maxEpV) maxEpV = PointNeighb[i];
1064 delete [] PointNeighb;
1066 PointNeighb =
new int[++maxEpV * N_G];
1068 memset(PointNeighb, 0, maxEpV * N_G *SizeOfInt);
1073 for(i=0;i<3*N_RootCells;i++)
1075 j = Triangles[i]*maxEpV;
1077 PointNeighb[j + PointNeighb[j]] = i / 3;
1081 N_G = Out.numberofedges;
1084 a = Out.edgelist[2*i];
1085 b = Out.edgelist[2*i+1];
1090 len1 = PointNeighb[a*maxEpV];
1091 len2 = PointNeighb[b*maxEpV];
1094 for (j=1;j<=len1;j++)
1096 Neighb_tmp = PointNeighb[a*maxEpV + j];
1097 for (k=1;k<=len2;k++)
1098 if (Neighb_tmp == PointNeighb[b*maxEpV + k])
1100 Neib[CurrNeib++] = Neighb_tmp;
1103 if (CurrNeib == 2)
break;
1110 if (Out.edgemarkerlist[i])
1112 CurrComp = Out.edgemarkerlist[i] - 1;
1113 if (CurrComp >= 100000) CurrComp -= 100000;
1121 NewVertices[a]->GetX(), NewVertices[a]->GetY(), T_a) ||
1123 NewVertices[b]->GetX(), NewVertices[b]->GetY(), T_b))
1125 cerr<<
"Error: could not set parameter values"<<endl;
1126 OutPut(NewVertices[a]<<endl);
1127 OutPut(NewVertices[b]<<endl);
1139 if(BDpart==1 && CurrComp==0 && fabs(T_a)==0 ) T_a=1;
1150 T_a, T_b, CellTree[Neib[0]], CellTree[Neib[1]]);
1155 T_a, T_b, CellTree[Neib[0]], CellTree[Neib[1]]);
1174 cerr <<
"Error!!!!!!!! not enough neighbours!" << endl;
1176 Joint =
new TJointEqN(CellTree[Neib[0]], CellTree[Neib[1]]);
1181 if (Triangles[3*Neib[0]+j] == a)
break;
1185 if (Triangles[3*Neib[0]+k] == b)
break;
1205 CellTree[Neib[0]]->
SetJoint(j, Joint);
1211 if (Triangles[3*Neib[1]+j] == a)
break;
1215 if (Triangles[3*Neib[1]+k] == b)
break;
1235 CellTree[Neib[1]]->
SetJoint(j, Joint);
1238 if (Joint->
GetType() == InterfaceJoint ||
1239 Joint->
GetType() == IsoInterfaceJoint)
1244 delete [] NewVertices;
1245 delete [] PointNeighb;
1246 delete [] In.pointlist;
1247 delete [] In.pointmarkerlist;
1248 delete [] In.segmentlist;
1249 delete [] In.segmentmarkerlist;
1251 if(Out.pointlist!=NULL) {
1252 free(Out.pointlist); Out.pointlist = NULL;}
1253 if(Out.pointattributelist!=NULL) {
1254 free(Out.pointattributelist); Out.pointattributelist = NULL;}
1255 if(Out.pointmarkerlist!=NULL) {
1256 free(Out.pointmarkerlist); Out.pointmarkerlist = NULL;}
1257 if(Out.trianglelist!=NULL) {
1258 free(Out.trianglelist); Out.trianglelist = NULL;}
1259 if(Out.triangleattributelist!=NULL) {
1260 free(Out.triangleattributelist); Out.triangleattributelist = NULL;}
1261 if(Out.trianglearealist!=NULL) {
1262 free(Out.trianglearealist); Out.trianglearealist = NULL;}
1263 if(Out.neighborlist!=NULL) {
1264 free(Out.neighborlist); Out.neighborlist = NULL;}
1265 if(Out.segmentlist!=NULL) {
1266 free(Out.segmentlist); Out.segmentlist = NULL;}
1267 if(Out.segmentmarkerlist!=NULL) {
1268 free(Out.segmentmarkerlist); Out.segmentmarkerlist = NULL;}
1269 if(Out.holelist!=NULL) {
1270 free(Out.holelist); Out.holelist = NULL;}
1271 if(Out.regionlist!=NULL) {
1272 free(Out.regionlist); Out.regionlist = NULL;}
1273 if(Out.edgelist!=NULL) {
1274 free(Out.edgelist); Out.edgelist = NULL;}
1275 if(Out.edgemarkerlist!=NULL) {
1276 free(Out.edgemarkerlist); Out.edgemarkerlist = NULL;}
1277 if(Out.normlist!=NULL) {
1278 free(Out.normlist); Out.normlist = NULL;}
double * GetValues()
Definition: FEFunction2D.h:67
virtual int GetTofXY(double X, double Y, double &T)=0
static TFE2D * GetFE2D(FE2D FE)
Definition: FEDatabase2D.h:353
int GetLength()
Definition: FEFunction2D.h:63
void GetTreeInfo(TBaseCell **&celltree, int &N_rootcells)
get tree of cells
Definition: Domain.h:176
TCollection * GetCollection() const
Definition: FESpace.h:131
JointType GetType()
Definition: Joint.h:75
TBaseCell * GetCell(int i) const
return Cell with index i in Cells-array
Definition: Collection.h:50
TBoundComp2D * GetBoundComp() const
Definition: BoundEdge.h:77
int GetBdPartID(int BdCompID)
get boundary part of BdCompID
Definition: Domain.C:88
void SetParams(double xmid, double ymid, double radius_a, double radius_b, double phi1, double phi2)
Definition: BdCircle.C:21
Definition: IsoBoundEdge.h:18
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
contains the boundary description, the virtual cell tree and macro grid
Definition: Domain.h:36
void SetParams(double xstart, double ystart, double delx, double dely)
Definition: BdLine.C:21
Definition: FESpace2D.h:28
double RE_NR
Definition: Database.h:313
int SetParam(TDomain *domain)
Definition: Iterator.C:17
static double ** GetOrigElementValues(BaseFunct1D BaseFunct, MultiIndex1D MultiIndex)
Definition: FEDatabase2D.h:300
static TIterator ** IteratorDB
Definition: Database.h:1131
store cells in an array, used by cell iterators
Definition: Collection.h:18
int GetN_Joints()
return the number of joints
Definition: BaseCell.h:185
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
TJoint * GetJoint(int J_i)
return the pointer to face with number i
Definition: BaseCell.h:175
TFESpace2D * GetFESpace2D()
Definition: FEFunction2D.h:59
TBoundPart * GetBdPart(int i)
get i-th boundary part
Definition: Domain.h:172
FE2D GetFE2D(int i, TBaseCell *cell)
Definition: FESpace2D.C:1184
TFEDesc2D * GetFEDesc2D() const
Definition: FE2D.h:97
int GetN_Vertices()
return the number of vertices of the cell
Definition: BaseCell.h:179
int ** GetJointDOF() const
Definition: FEDesc2D.h:86
static BaseFunct2D * GetBaseFunct2D_IDFromFE2D()
Definition: FEDatabase2D.h:417
Definition: BoundPart.h:21
void SetTreeInfo(TBaseCell **celltree, int N_rootcells)
set tree of cells
Definition: Domain.h:183
static int * GetN_BaseFunctFromFE2D()
Definition: FEDatabase2D.h:421
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
int GetID() const
Definition: BoundComp.h:49
Definition: BdCircle.h:18
information for finite element data structure
Definition: BaseCell.h:25
int * GetGlobalNumbers() const
Definition: FESpace.h:135
int GetN_Edges()
return the number of edges of the cell
Definition: BaseCell.h:182
static TRefDesc ** RefDescDB
Definition: Database.h:1125
Definition: BoundEdge.h:19
Definition: IsoInterfaceJoint.h:18
Definition: BoundComp.h:27
static RefTrans2D GetOrig(int N_LocalUsedElements, FE2D *LocalUsedElements, TCollection *Coll, TBaseCell *cell, bool *Needs2ndDer, int &N_Points, double *&xi, double *&eta, double *&weights, double *X, double *Y, double *absdetjk)
Definition: FEDatabase2D.C:1765
virtual int SetVertex(int Vert_i, TVertex *Vert)=0
set the pointer of vertex Vert_i to Vert
Definition: FEDesc2D.h:15
represent geometric information of the cell
Definition: GridCell.h:15
int * GetBeginIndex() const
Definition: FESpace.h:142
int GetN_JointDOF() const
Definition: FEDesc2D.h:61
Definition: InterfaceJoint.h:18
static TParamDB * ParamDB
Definition: Database.h:1134
int GetLocalBdCompID(int BdCompID)
get local number of boundary component
Definition: Domain.C:98
Definition: FEFunction2D.h:24