ParMooN
 All Classes Functions Variables Friends Pages
AnsatzLinConst.h
1 // Navier-Stokes problem, solution in ansatz space
2 // velocity pw linear, pressure constant
3 //
4 // u(x,y) = (y+z,5x-3z,-x-2y)^T
5 // p(x,y) = 0
6 
7 void ExampleFile()
8 {
9  OutPut("Example: AnsatzLinConst.h" << endl) ;
10  TDatabase::ParamDB->INTERNAL_PROJECT_PRESSURE=0;
11 }
12 
13 // ========================================================================
14 // exact solution
15 // ========================================================================
16 void ExactU1(double x, double y, double z, double *values)
17 {
18  values[0] = y+z;
19  values[1] = 0;
20  values[2] = 1;
21  values[3] = 1;
22  values[4] = 0;
23 }
24 
25 void ExactU2(double x, double y, double z, double *values)
26 {
27  values[0] = 5*x-3*z;
28  values[1] = 5;
29  values[2] = 0;
30  values[3] = -3;
31  values[4] = 0;
32 }
33 
34 void ExactU3(double x, double y, double z, double *values)
35 {
36  values[0] = -x-2*y;
37  values[1] = -1;
38  values[2] = -2;
39  values[3] = 0;
40  values[4] = 0;
41 }
42 
43 void ExactP(double x, double y, double z, double *values)
44 {
45  values[0] = 100*x*x + 100*y*y +100*z*z;
46  values[1] = 200*x;
47  values[2] = 200*y;
48  values[3] = 200*z;
49  values[4] = 0;
50 }
51 // void ExactNull(double x, double y, double z, double *values)
52 // {
53 // values[0] =0;
54 // values[1] =0;
55 // values[2] =0;
56 // values[3] =0;
57 // values[4] =0;
58 // }
59 
60 // kind of boundary condition (for FE space needed)
61 void BoundCondition(int CompID, double x, double y, double z, BoundCond &cond)
62 {
63  cond = DIRICHLET;
64 // cond = NEUMANN;
65 }
66 
67 // value of boundary condition
68 void U1BoundValue(int CompID, double x, double y, double z, double &value)
69 {
70  value = y+z;
71 }
72 
73 // value of boundary condition
74 void U2BoundValue(int CompID, double x, double y, double z, double &value)
75 {
76  value = 5*x-3*z;
77 }
78 
79 // value of boundary condition
80 void U3BoundValue(int CompID, double x, double y, double z, double &value)
81 {
82  value = -x-2*y ;
83 }
84 
85 // ========================================================================
86 // coefficients for Stokes form: A, B1, B2, f1, f2
87 // ========================================================================
88 void LinCoeffs(int n_points, double *X, double *Y, double *Z,
89  double **parameters, double **coeffs)
90 {
91  static double eps = 1/TDatabase::ParamDB->RE_NR;
92  int i;
93  double *coeff, x, y, z;
94 
95  if (TDatabase::ParamDB->FLOW_PROBLEM_TYPE==STOKES)
96  {
97  for(i=0;i<n_points;i++)
98  {
99  coeff = coeffs[i];
100 
101  coeff[0] = eps;
102  coeff[1] = 0; // f1
103  coeff[2] = 0; // f2
104  coeff[3] = 0; // f3
105  }
106  }
107  else
108  {
109  for(i=0;i<n_points;i++)
110  {
111  coeff = coeffs[i];
112 
113  x = X[i];
114  y = Y[i];
115  z = Z[i];
116  coeff[0] = eps;
117  coeff[1] = 4*x-2*y-3*z; // f1
118  coeff[2] = 3*x+11*y+5*z; // f2
119  coeff[3] = -10*x-y+5*z; // f3
120  }
121  }
122 
123 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134