6 OutPut(
"Example: Benchmark_FlowPastCylinder_DEVSS" << 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, nondim;
90 for(i=0;i<n_points;i++)
103 void ExactS1(
double x,
double y,
double *values)
111 void ExactS2(
double x,
double y,
double *values)
119 void ExactS3(
double x,
double y,
double *values)
130 void BoundCondition_CST(
int i,
double t, BoundCond &cond)
136 void S1BoundValue(
int BdComp,
double Param,
double &value)
143 case 1: value= (pow(Wei*1.2*(1.0-(2.0*Param))/0.41,2) * 2.0 )+1.0;
147 case 3: value=(pow(Wei*1.2*(1.0-(2.0*(1.0-Param)))/0.41,2)* 2.0 )+1.0;
151 default: cout <<
"wrong boundary part number" << endl;
156 void S2BoundValue(
int BdComp,
double Param,
double &value)
163 case 1: value=Wei*1.2*(1.0-(2.0*Param))/0.41;
167 case 3: value=Wei*1.2*(1.0-(2.0*(1.0-Param)))/0.41;
171 default: cout <<
"wrong boundary part number" << endl;
179 void S3BoundValue(
int BdComp,
double Param,
double &value)
182 if(BdComp>4) cout <<
"wrong boundary part number: " << BdComp << endl;
185 void LinCoeffs_CST(
int n_points,
double *X,
double *Y,
186 double **parameters,
double **coeffs)
193 for(i=0;i<n_points;i++)
210 void ExactD1(
double x,
double y,
double *values)
218 void ExactD2(
double x,
double y,
double *values)
226 void ExactD3(
double x,
double y,
double *values)
237 void BoundCondition_DFT(
int i,
double t, BoundCond &cond)
243 void D1BoundValue(
int BdComp,
double Param,
double &value)
257 default: cout <<
"wrong boundary part number" << endl;
263 void D2BoundValue(
int BdComp,
double Param,
double &value)
269 case 1: value=0.6*(1-2*Param)/0.41;
273 case 3: value=0.6*(1-2*(1-Param))/0.41;
277 default: cout <<
"wrong boundary part number" << endl;
285 void D3BoundValue(
int BdComp,
double Param,
double &value)
299 default: cout <<
"wrong boundary part number" << endl;
306 void LinCoeffs_DFT(
int n_points,
double *X,
double *Y,
307 double **parameters,
double **coeffs)
310 double *coeff, x, y, *param;
311 double u1x, u1y, u2x, u2y;
313 for(i=0;i<n_points;i++)
340 double &cd,
double &cl)
343 int N_Points,N_Edges,comp,ed_nr;
344 double *weights, *xi, *eta;
345 double X[MaxN_QuadPoints_2D];
346 double Y[MaxN_QuadPoints_2D];
347 double AbsDetjk[MaxN_QuadPoints_2D];
348 int N_LocalUsedElements;
349 FE2D LocalUsedElements[3], CurrentElement;
351 double **OrigFEValues, *Orig;
352 bool SecondDer[3] = { FALSE, FALSE, FALSE };
353 double *u1, *u2, *p, *tau1, *tau2, *tau3;
355 int *UGlobalNumbers, *UBeginIndex;
356 int *PGlobalNumbers, *PBeginIndex;
357 int *TauGlobalNumbers, *TauBeginIndex;
358 int *N_BaseFunct, N_Cells;
359 BaseFunct2D BaseFunct, *BaseFuncts;
362 double value, value1, value2, value3, value4, value5, value6;
363 double FEFunctValues[MaxN_BaseFunctions2D];
364 double FEFunctValues1[MaxN_BaseFunctions2D];
365 double FEFunctValues2[MaxN_BaseFunctions2D];
366 double FEFunctValues3[MaxN_BaseFunctions2D];
367 double FEFunctValues4[MaxN_BaseFunctions2D];
368 double FEFunctValues5[MaxN_BaseFunctions2D];
369 double FEFunctValues6[MaxN_BaseFunctions2D];
372 int N_DerivativesU = 3;
373 double *Derivatives[MaxN_BaseFunctions2D];
374 MultiIndex2D NeededDerivatives[3] = { D00, D10, D01 };
385 int N_DOF_Circ, *DOF_Circ;
386 char VString[] =
"v";
411 aux =
new double [MaxN_QuadPoints_2D*13];
412 for(j=0;j<MaxN_QuadPoints_2D;j++)
413 Derivatives[j] = aux + j*13;
417 memset(v,0,N_*SizeOfDouble);
426 for(i=0;i<N_Cells;i++)
430 for(j=0;j<N_Edges;j++)
433 if ((joint->
GetType() == BoundaryEdge)||
434 (joint->
GetType() == IsoBoundEdge))
439 comp=BoundComp->
GetID();
442 FEEle = USpace->
GetFE2D(i,cell);
447 DOF = UGlobalNumbers + UBeginIndex[i];
448 for (k=0;k<N_DOF_Circ;k++)
449 v[DOF[DOF_Circ[k]]] = 1;
463 for(i=0;i<N_Cells;i++)
470 N_LocalUsedElements = 3;
471 LocalUsedElements[0] = USpace->
GetFE2D(i, cell);
472 LocalUsedElements[1] = PSpace->
GetFE2D(i, cell);
473 LocalUsedElements[2] = TauSpace->
GetFE2D(i, cell);
478 TFEDatabase2D::GetOrig(N_LocalUsedElements, LocalUsedElements, Coll, cell, SecondDer, N_Points, xi, eta, weights, X, Y, AbsDetjk);
481 CurrentElement = LocalUsedElements[1];
482 BaseFunct = BaseFuncts[CurrentElement];
483 N_ = N_BaseFunct[CurrentElement];
485 DOF = PGlobalNumbers + PBeginIndex[i];
487 FEFunctValues[l] = p[DOF[l]];
491 for(j=0;j<N_Points;j++)
493 Orig = OrigFEValues[j];
496 value += FEFunctValues[l] * Orig[l];
498 Derivatives[j][0] = value;
502 CurrentElement = LocalUsedElements[0];
503 BaseFunct = BaseFuncts[CurrentElement];
504 N_ = N_BaseFunct[CurrentElement];
506 DOF = UGlobalNumbers + UBeginIndex[i];
509 FEFunctValues1[l] = u1[DOF[l]];
510 FEFunctValues2[l] = u2[DOF[l]];
511 FEFunctValues3[l] = v[DOF[l]];
514 for(k=0;k<N_DerivativesU;k++)
517 NeededDerivatives[k]);
518 for(j=0;j<N_Points;j++)
520 Orig = OrigFEValues[j];
526 value1 += FEFunctValues1[l] * Orig[l];
527 value2 += FEFunctValues2[l] * Orig[l];
528 value3 += FEFunctValues3[l] * Orig[l];
530 Derivatives[j][k+1] = value1;
531 Derivatives[j][k+4] = value2;
532 Derivatives[j][k+7] = value3;
538 CurrentElement = LocalUsedElements[2];
539 BaseFunct = BaseFuncts[CurrentElement];
540 N_ = N_BaseFunct[CurrentElement];
542 DOF = TauGlobalNumbers + TauBeginIndex[i];
545 FEFunctValues4[l] = tau1[DOF[l]];
546 FEFunctValues5[l] = tau2[DOF[l]];
547 FEFunctValues6[l] = tau3[DOF[l]];
552 for(j=0;j<N_Points;j++)
554 Orig = OrigFEValues[j];
560 value4 += FEFunctValues4[l] * Orig[l];
561 value5 += FEFunctValues5[l] * Orig[l];
562 value6 += FEFunctValues6[l] * Orig[l];
564 Derivatives[j][10] = value4;
565 Derivatives[j][11] = value5;
566 Derivatives[j][12] = value6;
572 for(j=0;j<N_Points;j++)
574 Der = Derivatives[j];
577 value1 = beta*nu*(Der[2]*Der[8]+Der[3]*Der[9]);
579 value1 += (Der[1]*Der[2]+Der[4]*Der[3])*Der[7];
581 value1 -= Der[0]*Der[8];
583 value1 += (1.0-beta)*nu*wei*(Der[10]*Der[8] + Der[11]*Der[9]);
585 value2 = beta*nu*(Der[5]*Der[8]+Der[6]*Der[9]);
586 value2 += (Der[1]*Der[5]+Der[4]*Der[6])*Der[7];
587 value2 -= Der[0]*Der[9];
588 value2 += (1.0-beta)*nu*wei*(Der[11]*Der[8] + Der[12]*Der[9]);
590 cd += AbsDetjk[j]*weights[j] * value1;
591 cl += AbsDetjk[j]*weights[j] * value2;
599 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