ParMooN
 All Classes Functions Variables Friends Pages
Poiseuille2.h
1 
2 // u(x,y) = (4*y*(1-y), 0)
3 // p(x,y) = x-1/2
4 
5 void ExampleFile()
6 {
7  OutPut("Example: Poiseuille_CST_Geisekus.h" << endl) ;
8 }
9 
10 // ========================================================================
11 // exact solution
12 // ========================================================================
13 void ExactU1(double x, double y, double *values)
14 {
15  values[0] = 4*y*(1-y);
16  values[1] = 0;
17  values[2] = 4-8*y;
18  values[3] = -8;
19 }
20 
21 void ExactU2(double x, double y, double *values)
22 {
23  values[0] = 0;
24  values[1] = 0;
25  values[2] = 0;
26  values[3] = 0;
27 }
28 
29 void ExactP(double x, double y, double *values)
30 {
31  values[0] = x-0.5;
32  values[1] = 1;
33  values[2] = 0;
34  values[3] = 0;
35 }
36 
37 // ========================================================================
38 // boundary conditions
39 // ========================================================================
40 void BoundCondition(int i, double t, BoundCond &cond)
41 {
42  cond = DIRICHLET;
43 }
44 
45 void U1BoundValue(int BdComp, double Param, double &value)
46 {
47  switch(BdComp)
48  {
49  case 0: value=0;
50  break;
51  case 1: value=4*Param*(1-Param);
52  break;
53  case 2: value=0;
54  break;
55  case 3: value=4*Param*(1-Param);
56  break;
57  default: cout << "wrong boundary part number" << endl;
58  break;
59  }
60 }
61 
62 
63 
64 void U2BoundValue(int BdComp, double Param, double &value)
65 {
66  switch(BdComp)
67  {
68  case 0: value=0;
69  break;
70  case 1: value=0;
71  break;
72  case 2: value=0;
73  break;
74  case 3: value=0;
75  break;
76  default: cout << "wrong boundary part number" << endl;
77  break;
78  }
79 }
80 
81 // ========================================================================
82 // coefficients for Stokes form: A, B1, B2, f1, f2
83 // ========================================================================
84 void LinCoeffs(int n_points, double *x, double *y,
85  double **parameters, double **coeffs)
86 {
87  static double eps = 1./TDatabase::ParamDB->RE_NR;
88  int i;
89  double *coeff;
90 
91  for(i=0;i<n_points;i++)
92  {
93  coeff = coeffs[i];
94 
95  coeff[0] = eps;
96  coeff[1] = 1+8*eps; // f1
97  coeff[2] = 0; // f2
98  }
99 }
100 
101 // ========================================================================
102 // exact solution
103 // ========================================================================
104 void ExactS1(double x, double y, double *values)
105 {
106  values[0] = x+3.0;
107  values[1] = 1;
108  values[2] = 0;
109  values[3] = 0;
110 }
111 
112 void ExactS2(double x, double y, double *values)
113 {
114  values[0] = y;
115  values[1] = 0;
116  values[2] = 1;
117  values[3] = 0;
118 }
119 
120 void ExactS3(double x, double y, double *values)
121 {
122  values[0] = (x*y) + 5.0;
123  values[1] = y;
124  values[2] = x;
125  values[3] = 0;
126 }
127 
128 // ========================================================================
129 // boundary conditions
130 // ========================================================================
131 void BoundCondition_CST(int i, double t, BoundCond &cond)
132 {
133  cond = DIRICHLET;
134 
135 }
136 
137 void S1BoundValue(int BdComp, double Param, double &value)
138 {
139  switch(BdComp)
140  {
141  case 0: value=Param + 3.0;
142  break;
143  case 1: value=1 + 3.0;
144  break;
145  case 2: value=(1-Param) + 3.0;
146  break;
147  case 3: value=0 + 3.0;
148  break;
149  default: cout << "wrong boundary part number" << endl;
150  break;
151  }
152  return;
153 }
154 
155 
156 
157 void S2BoundValue(int BdComp, double Param, double &value)
158 {
159  switch(BdComp)
160  {
161  case 0: value=0;
162  break;
163  case 1: value=Param;
164  break;
165  case 2: value=1;
166  break;
167  case 3: value=(1-Param);
168  break;
169  default: cout << "wrong boundary part number" << endl;
170  break;
171  }
172  return;
173 }
174 
175 void S3BoundValue(int BdComp, double Param, double &value)
176 {
177  switch(BdComp)
178  {
179  case 0: value=0 + 5.0;
180  break;
181  case 1: value=Param + 5.0;
182  break;
183  case 2: value=(1-Param) + 5.0;
184  break;
185  case 3: value=0 + 5.0;
186  break;
187  default: cout << "wrong boundary part number" << endl;
188  break;
189  }
190  return;
191 }
192 
193 // ========================================================================
194 // coefficients for Stokes form: A, B1, B2, f1, f2
195 // ========================================================================
196 void LinCoeffs_CST(int n_points, double *X, double *Y,
197  double **parameters, double **coeffs)
198 {
199  double nu=1./TDatabase::ParamDB->WEI_NR, alpha = TDatabase::ParamDB->P2;
200  int i;
201  double *coeff, *param, x, y;
202  double u1, u1x, u1y, u2, u2x, u2y, tau1, tau2, tau3, tau1x, tau1y, tau2x, tau2y, tau3x, tau3y;
203 
204  for(i=0;i<n_points;i++)
205  {
206  coeff = coeffs[i];
207 
208  x = X[i];
209  y = Y[i];
210  param = parameters[i];
211 
212  u1 = 4*y*(1-y);
213  u2 = 0;
214  u1x = 0;
215  u2x = 0;
216  u1y = 4-8*y;
217  u2y = 0;
218 
219  tau1 = x + 3.0;
220  tau1x = 1;
221  tau1y = 0;
222  tau2 = y;
223  tau2x = 0;
224  tau2y = 1;
225  tau3 = (x*y) + 5.0;
226  tau3x = y;
227  tau3y = x;
228 
229  coeff[0] = nu;
230  coeff[1] = (u1*tau1x) + (u2*tau1y) + ((1-(2.0*alpha))*nu*(tau1)) - (2*(tau1*u1x + tau2*u1y)) + (alpha*nu*((tau1*tau1) + (tau2*tau2)));
231 
232  coeff[2] = (u1*tau2x) + (u2*tau2y) + ((1-(2.0*alpha))*nu*(tau2)) - (tau1*u2x + tau3*u1y) + (alpha*nu*((tau1*tau2) + (tau2*tau3)));
233 
234  coeff[3] = (u1*tau3x) + (u2*tau3y) + ((1-(2.0*alpha))*nu*(tau3)) - (2*(tau2*u2x + tau3*u2y)) + (alpha*nu*((tau2*tau2) + (tau3*tau3)));
235 
236  coeff[4] = alpha;
237 
238 
239  }
240 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134