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