ParMooN
 All Classes Functions Variables Friends Pages
SinCos.h
1 // Stationary Conformation-Stress tensor problem with sine and cosine functions
2 //
3 
4 void ExampleFile()
5 {
6 
7  OutPut("Example: SinCos_CST_Oldroyd.h ") ;
8 }
9 
10 // ========================================================================
11 // exact solution
12 // ========================================================================
13 void ExactU1(double x, double y, double *values)
14 {
15  values[0] = sin(Pi*x);
16  values[1] = Pi*cos(Pi*x);
17  values[2] = 0;
18  values[3] = -Pi*Pi*sin(Pi*x);
19 }
20 
21 void ExactU2(double x, double y, double *values)
22 {
23  values[0] = -Pi*y*cos(Pi*x);
24  values[1] = Pi*Pi*y*sin(Pi*x);
25  values[2] = -Pi*cos(Pi*x);
26  values[3] = Pi*Pi*Pi*y*cos(Pi*x);
27 }
28 
29 void ExactP(double x, double y, double *values)
30 {
31  values[0] = sin(Pi*x)*cos(Pi*y);
32  values[1] = Pi*cos(Pi*x)*cos(Pi*y);
33  values[2] = -Pi*sin(Pi*x)*sin(Pi*y);
34  values[3] = -Pi*Pi*sin(Pi*x)*cos(Pi*y)-Pi*Pi*sin(Pi*x)*cos(Pi*y);
35 }
36 
37 // void InitialU1(double x, double y, double *values)
38 // {
39 // values[0] = sin(Pi*x);
40 // }
41 //
42 // void InitialU2(double x, double y, double *values)
43 // {
44 // values[0] = -Pi*y*cos(Pi*x);
45 // }
46 //
47 // void InitialP(double x, double y, double *values)
48 // {
49 // values[0] = sin(Pi*x)*cos(Pi*y);
50 // }
51 
52 // ========================================================================
53 // boundary conditions
54 // ========================================================================
55 void BoundCondition(int i, double t, BoundCond &cond)
56 {
57  cond = DIRICHLET;
58  TDatabase::ParamDB->INTERNAL_PROJECT_PRESSURE=1;
59 }
60 
61 void U1BoundValue(int BdComp, double Param, double &value)
62 {
63  switch(BdComp)
64  {
65  case 0: value=sin(Pi*Param);
66  break;
67  case 1: value=sin(Pi);
68  break;
69  case 2: value=sin(Pi*(1-Param));
70  break;
71  case 3: value=0;
72  break;
73  default: cout << "wrong boundary part number" << endl;
74  break;
75  }
76  return;
77 }
78 
79 void U2BoundValue(int BdComp, double Param, double &value)
80 {
81  switch(BdComp)
82  {
83  case 0: value=0;
84  break;
85  case 1: value=Pi*Param;
86  break;
87  case 2: value=-Pi*cos(Pi*(1-Param));
88  break;
89  case 3: value=-Pi*(1-Param);
90  break;
91  default: cout << "wrong boundary part number" << endl;
92  break;
93  }
94  return;
95 }
96 
97 // ========================================================================
98 // coefficients for Stokes form: A, B1, B2, f1, f2
99 // ========================================================================
100 void LinCoeffs(int n_points, double *X, double *Y,
101  double **parameters, double **coeffs)
102 {
103  double nu=1./TDatabase::ParamDB->RE_NR;
104  int i;
105  double *coeff, x, y;
106  double u1, u1x, u1y, u1lap, u2, u2x, u2y, u2lap, px, py;
107 
108  for(i=0;i<n_points;i++)
109  {
110  coeff = coeffs[i];
111 
112  x = X[i];
113  y = Y[i];
114 
115  coeff[0] = nu;
116  // prescribed solution
117  u1 = sin(Pi*x);
118  u1x = Pi*cos(Pi*x);
119  u1y = 0;
120  u1lap = -Pi*Pi*sin(Pi*x);
121  u2 = -Pi*y*cos(Pi*x);
122  u2x = Pi*Pi*y*sin(Pi*x);
123  u2y = -Pi*cos(Pi*x);
124  u2lap = Pi*Pi*Pi*y*cos(Pi*x);
125  px = Pi*cos(Pi*x)*cos(Pi*y);
126  py = -Pi*sin(Pi*x)*sin(Pi*y);
127 
128  coeff[1] = -nu*u1lap+u1*u1x+u2*u1y+px;
129  coeff[2] = -nu*u2lap+u1*u2x+u2*u2y+py;
130 
131  coeff[3] = u1;
132  coeff[4] = u2;
133  /*coeff[5] = px;
134  coeff[6] = py;
135  coeff[7] = u1y;
136  coeff[8] = u2y;*/
137  }
138 }
139 
140 // ========================================================================
141 // exact solution
142 // ========================================================================
143 void ExactS1(double x, double y, double *values)
144 {
145  values[0] = sin(Pi*x);
146  values[1] = Pi*cos(Pi*x);
147  values[2] = 0;
148  values[3] = -Pi*Pi*sin(Pi*x);
149 }
150 
151 void ExactS2(double x, double y, double *values)
152 {
153  values[0] = -Pi*y*cos(Pi*x);
154  values[1] = Pi*Pi*y*sin(Pi*x);
155  values[2] = -Pi*cos(Pi*x);
156  values[3] = Pi*Pi*Pi*y*cos(Pi*x);
157 }
158 
159 
160 
161 void ExactS3(double x, double y, double *values)
162 {
163  values[0] = sin(Pi*x)*cos(Pi*y);
164  values[1] = Pi*cos(Pi*x)*cos(Pi*y);
165  values[2] = -Pi*sin(Pi*x)*sin(Pi*y);
166  values[3] = -Pi*Pi*sin(Pi*x)*cos(Pi*y)-Pi*Pi*sin(Pi*x)*cos(Pi*y);
167 }
168 
169 // void InitialS1(double x, double y, double *values)
170 // {
171 // values[0] = sin(Pi*x);
172 // }
173 //
174 // void InitialS2(double x, double y, double *values)
175 // {
176 // values[0] = -Pi*y*cos(Pi*x);
177 // }
178 //
179 // void InitialS3(double x, double y, double *values)
180 // {
181 // values[0] = sin(Pi*x)*cos(Pi*y);
182 // }
183 
184 // ========================================================================
185 // boundary conditions
186 // ========================================================================
187 void BoundCondition_CST(int i, double t, BoundCond &cond)
188 {
189  cond = DIRICHLET;
190 
191 }
192 
193 void S1BoundValue(int BdComp, double Param, double &value)
194 {
195  switch(BdComp)
196  {
197  case 0: value=sin(Pi*Param);
198  break;
199  case 1: value=0;
200  break;
201  case 2: value=sin(Pi*(1-Param));
202  break;
203  case 3: value=0;
204  break;
205  default: cout << "wrong boundary part number" << endl;
206  break;
207  }
208  return;
209 }
210 
211 void S2BoundValue(int BdComp, double Param, double &value)
212 {
213  switch(BdComp)
214  {
215  case 0: value=0;
216  break;
217  case 1: value=Pi*Param;
218  break;
219  case 2: value=-Pi*cos(Pi*(1-Param));
220  break;
221  case 3: value=-Pi*(1-Param);
222  break;
223  default: cout << "wrong boundary part number" << endl;
224  break;
225  }
226  return;
227 }
228 
229 
230 
231 void S3BoundValue(int BdComp, double Param, double &value)
232 {
233  switch(BdComp)
234  {
235  case 0: value=sin(Pi*Param);
236  break;
237  case 1: value=0;
238  break;
239  case 2: value=-sin(Pi*(1-Param));
240  break;
241  case 3: value=0;
242  break;
243  default: cout << "wrong boundary part number" << endl;
244  break;
245  }
246  return;
247 }
248 
249 
250 void LinCoeffs_CST(int n_points, double *X, double *Y,
251  double **parameters, double **coeffs)
252 {
253  double nu=1./TDatabase::ParamDB->WEI_NR;
254 
255  int i;
256  double *coeff, x, y;
257  double u1, u1x, u1y, u2, u2x, u2y, tau1, tau2, tau3, tau1x, tau1y, tau2x, tau2y, tau3x, tau3y;
258 
259  for(i=0;i<n_points;i++)
260  {
261  coeff = coeffs[i];
262 
263  x = X[i];
264  y = Y[i];
265 
266 
267  // prescribed solution
268  u1 = sin(Pi*x);
269  u1x = Pi*cos(Pi*x);
270  u1y = 0;
271  u2 = -Pi*y*cos(Pi*x);
272  u2x = Pi*Pi*y*sin(Pi*x);
273  u2y = -Pi*cos(Pi*x);
274  tau1 = sin(Pi*x);
275  tau1x = Pi*cos(Pi*x);
276  tau1y = 0;
277  tau2 = -Pi*y*cos(Pi*x);
278  tau2x = Pi*Pi*y*sin(Pi*x);
279  tau2y = -Pi*cos(Pi*x);
280 
281  tau3 = sin(Pi*x)*cos(Pi*y);
282  tau3x = Pi*cos(Pi*x)*cos(Pi*y);
283  tau3y = -Pi*sin(Pi*x)*sin(Pi*y);
284 
285  coeff[0] = nu;
286  coeff[1] = (u1*tau1x) + (u2*tau1y) - 2*(tau1*u1x + tau2*u1y) + nu*(tau1);
287  coeff[2] = (u1*tau2x) + (u2*tau2y) - (tau1*u2x + tau3*u1y) + (nu*tau2);
288  coeff[3] = (u1*tau3x) + (u2*tau3y) - 2*(tau2*u2x + tau3*u2y) + nu*(tau3);
289 
290 
291  }
292 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134