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