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