6 OutPut(
"Example: Benchmark_FlowPastCylinder" << endl) ;
12 #include <BoundEdge.h>
13 #include <BoundComp.h>
19 void ExactU1(
double x,
double y,
double *values)
27 void ExactU2(
double x,
double y,
double *values)
35 void ExactP(
double x,
double y,
double *values)
46 void BoundCondition(
int i,
double t, BoundCond &cond)
51 void U1BoundValue(
int BdComp,
double Param,
double &value)
57 case 1: value=1.2*Param*(1.0-Param);
61 case 3: value=1.2*Param*(1.0-Param) ;
65 default: cout <<
"wrong boundary part number: " << BdComp << endl;
69 void U2BoundValue(
int BdComp,
double Param,
double &value)
72 if(BdComp>4) cout <<
"wrong boundary part number: " << BdComp << endl;
78 void LinCoeffs(
int n_points,
double *x,
double *y,
79 double **parameters,
double **coeffs)
83 double *coeff, *param, tau1x, tau1y, tau2x, tau2y, tau3x, tau3y, nondim;
84 nondim = (beta-1.0)*eps*nu;
88 for(i=0;i<n_points;i++)
92 param = parameters[i];
112 void ExactS1(
double x,
double y,
double *values)
120 void ExactS2(
double x,
double y,
double *values)
128 void ExactS3(
double x,
double y,
double *values)
139 void BoundCondition_CST(
int i,
double t, BoundCond &cond)
145 void S1BoundValue(
int BdComp,
double Param,
double &value)
152 case 1: value= (pow(Wei*1.2*(1.0-(2.0*Param))/0.41,2) * 2.0 )+1.0;
156 case 3: value=(pow(Wei*1.2*(1.0-(2.0*(1.0-Param)))/0.41,2)* 2.0 )+1.0;
160 default: cout <<
"wrong boundary part number" << endl;
165 void S2BoundValue(
int BdComp,
double Param,
double &value)
172 case 1: value=Wei*1.2*(1.0-(2.0*Param))/0.41;
176 case 3: value=Wei*1.2*(1.0-(2.0*(1.0-Param)))/0.41;
180 default: cout <<
"wrong boundary part number" << endl;
188 void S3BoundValue(
int BdComp,
double Param,
double &value)
191 if(BdComp>4) cout <<
"wrong boundary part number: " << BdComp << endl;
194 void LinCoeffs_CST(
int n_points,
double *X,
double *Y,
195 double **parameters,
double **coeffs)
202 for(i=0;i<n_points;i++)
219 double &cd,
double &cl)
222 int N_Points,N_Edges,comp,ed_nr;
223 double *weights, *xi, *eta;
224 double X[MaxN_QuadPoints_2D];
225 double Y[MaxN_QuadPoints_2D];
226 double AbsDetjk[MaxN_QuadPoints_2D];
227 int N_LocalUsedElements;
228 FE2D LocalUsedElements[2], CurrentElement;
230 double **OrigFEValues, *Orig;
231 bool SecondDer[2] = { FALSE, FALSE };
234 int *UGlobalNumbers, *UBeginIndex;
235 int *PGlobalNumbers, *PBeginIndex;
236 int *N_BaseFunct, N_Cells;
237 BaseFunct2D BaseFunct, *BaseFuncts;
240 double value, value1, value2, value3;
241 double FEFunctValues[MaxN_BaseFunctions2D];
242 double FEFunctValues1[MaxN_BaseFunctions2D];
243 double FEFunctValues2[MaxN_BaseFunctions2D];
244 double FEFunctValues3[MaxN_BaseFunctions2D];
245 int N_DerivativesU = 3;
246 double *Derivatives[MaxN_BaseFunctions2D];
247 MultiIndex2D NeededDerivatives[3] = { D00, D10, D01 };
257 int N_DOF_Circ, *DOF_Circ;
258 char VString[] =
"v";
276 aux =
new double [MaxN_QuadPoints_2D*10];
277 for(j=0;j<MaxN_QuadPoints_2D;j++)
278 Derivatives[j] = aux + j*10;
282 memset(v,0,N_*SizeOfDouble);
291 for(i=0;i<N_Cells;i++)
295 for(j=0;j<N_Edges;j++)
298 if ((joint->
GetType() == BoundaryEdge)||
299 (joint->
GetType() == IsoBoundEdge))
304 comp=BoundComp->
GetID();
307 FEEle = USpace->
GetFE2D(i,cell);
312 DOF = UGlobalNumbers + UBeginIndex[i];
313 for (k=0;k<N_DOF_Circ;k++)
314 v[DOF[DOF_Circ[k]]] = 1;
328 for(i=0;i<N_Cells;i++)
335 N_LocalUsedElements = 2;
336 LocalUsedElements[0] = USpace->
GetFE2D(i, cell);
337 LocalUsedElements[1] = PSpace->
GetFE2D(i, cell);
342 TFEDatabase2D::GetOrig(N_LocalUsedElements, LocalUsedElements, Coll, cell, SecondDer, N_Points, xi, eta, weights, X, Y, AbsDetjk);
345 CurrentElement = LocalUsedElements[1];
346 BaseFunct = BaseFuncts[CurrentElement];
347 N_ = N_BaseFunct[CurrentElement];
349 DOF = PGlobalNumbers + PBeginIndex[i];
351 FEFunctValues[l] = p[DOF[l]];
355 for(j=0;j<N_Points;j++)
357 Orig = OrigFEValues[j];
360 value += FEFunctValues[l] * Orig[l];
362 Derivatives[j][0] = value;
366 CurrentElement = LocalUsedElements[0];
367 BaseFunct = BaseFuncts[CurrentElement];
368 N_ = N_BaseFunct[CurrentElement];
370 DOF = UGlobalNumbers + UBeginIndex[i];
373 FEFunctValues1[l] = u1[DOF[l]];
374 FEFunctValues2[l] = u2[DOF[l]];
375 FEFunctValues3[l] = v[DOF[l]];
378 for(k=0;k<N_DerivativesU;k++)
381 NeededDerivatives[k]);
382 for(j=0;j<N_Points;j++)
384 Orig = OrigFEValues[j];
390 value1 += FEFunctValues1[l] * Orig[l];
391 value2 += FEFunctValues2[l] * Orig[l];
392 value3 += FEFunctValues3[l] * Orig[l];
394 Derivatives[j][k+1] = value1;
395 Derivatives[j][k+4] = value2;
396 Derivatives[j][k+7] = value3;
401 for(j=0;j<N_Points;j++)
403 Der = Derivatives[j];
406 value1 = nu*(Der[2]*Der[8]+Der[3]*Der[9]);
408 value1 += (Der[1]*Der[2]+Der[4]*Der[3])*Der[7];
410 value1 -= Der[0]*Der[8];
412 value2 = nu*(Der[5]*Der[8]+Der[6]*Der[9]);
413 value2 += (Der[1]*Der[5]+Der[4]*Der[6])*Der[7];
414 value2 -= Der[0]*Der[9];
416 cd += AbsDetjk[j]*weights[j] * value1;
417 cl += AbsDetjk[j]*weights[j] * value2;
425 delete Derivatives[0];
double * GetValues()
Definition: FEFunction2D.h:67
static TFE2D * GetFE2D(FE2D FE)
Definition: FEDatabase2D.h:353
int GetLength()
Definition: FEFunction2D.h:63
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
Definition: FESpace2D.h:28
double RE_NR
Definition: Database.h:313
static double ** GetOrigElementValues(BaseFunct1D BaseFunct, MultiIndex1D MultiIndex)
Definition: FEDatabase2D.h:300
store cells in an array, used by cell iterators
Definition: Collection.h:18
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
FE2D GetFE2D(int i, TBaseCell *cell)
Definition: FESpace2D.C:1184
TFEDesc2D * GetFEDesc2D() const
Definition: FE2D.h:97
int ** GetJointDOF() const
Definition: FEDesc2D.h:86
static BaseFunct2D * GetBaseFunct2D_IDFromFE2D()
Definition: FEDatabase2D.h:417
static int * GetN_BaseFunctFromFE2D()
Definition: FEDatabase2D.h:421
int GetID() const
Definition: BoundComp.h:49
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
Definition: BoundEdge.h:19
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
Definition: FEDesc2D.h:15
int * GetBeginIndex() const
Definition: FESpace.h:142
int GetN_JointDOF() const
Definition: FEDesc2D.h:61
static TParamDB * ParamDB
Definition: Database.h:1134
Definition: FEFunction2D.h:24