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