ParMooN
 All Classes Functions Variables Friends Pages
SinCos_DFT.h
1 // Deformation tensor problem in DEVSS with sine and cosine functions for velocity
2 //
3 
4 void ExampleFile()
5 {
6 
7  OutPut("Example: SinCos_DFT.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 
38 // ========================================================================
39 // boundary conditions
40 // ========================================================================
41 void BoundCondition(int i, double t, BoundCond &cond)
42 {
43  cond = DIRICHLET;
44  TDatabase::ParamDB->INTERNAL_PROJECT_PRESSURE=1;
45 }
46 
47 void U1BoundValue(int BdComp, double Param, double &value)
48 {
49  switch(BdComp)
50  {
51  case 0: value=sin(Pi*Param);
52  break;
53  case 1: value=sin(Pi);
54  break;
55  case 2: value=sin(Pi*(1-Param));
56  break;
57  case 3: value=0;
58  break;
59  default: cout << "wrong boundary part number" << endl;
60  break;
61  }
62  return;
63 }
64 
65 void U2BoundValue(int BdComp, double Param, double &value)
66 {
67  switch(BdComp)
68  {
69  case 0: value=0;
70  break;
71  case 1: value=Pi*Param;
72  break;
73  case 2: value=-Pi*cos(Pi*(1-Param));
74  break;
75  case 3: value=-Pi*(1-Param);
76  break;
77  default: cout << "wrong boundary part number" << endl;
78  break;
79  }
80  return;
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  double nu=1./TDatabase::ParamDB->RE_NR;
90  int i;
91  double *coeff, x, y;
92  double u1, u1x, u1y, u1lap, u2, u2x, u2y, u2lap, px, py;
93 
94  for(i=0;i<n_points;i++)
95  {
96  coeff = coeffs[i];
97 
98  x = X[i];
99  y = Y[i];
100 
101  coeff[0] = nu;
102  // prescribed solution
103  u1 = sin(Pi*x);
104  u1x = Pi*cos(Pi*x);
105  u1y = 0;
106  u1lap = -Pi*Pi*sin(Pi*x);
107  u2 = -Pi*y*cos(Pi*x);
108  u2x = Pi*Pi*y*sin(Pi*x);
109  u2y = -Pi*cos(Pi*x);
110  u2lap = Pi*Pi*Pi*y*cos(Pi*x);
111  px = Pi*cos(Pi*x)*cos(Pi*y);
112  py = -Pi*sin(Pi*x)*sin(Pi*y);
113 
114  coeff[1] = -nu*u1lap+u1*u1x+u2*u1y+px;
115  coeff[2] = -nu*u2lap+u1*u2x+u2*u2y+py;
116 
117  coeff[3] = u1;
118  coeff[4] = u2;
119  /*coeff[5] = px;
120  coeff[6] = py;
121  coeff[7] = u1y;
122  coeff[8] = u2y;*/
123  }
124 }
125 
126 // ========================================================================
127 // exact solution
128 // ========================================================================
129 void ExactD1(double x, double y, double *values)
130 {
131  values[0] = Pi*cos(Pi*x);
132  values[1] = -Pi*Pi*sin(Pi*x);
133  values[2] = 0;
134  values[3] = -Pi*Pi*Pi*cos(Pi*x);
135 }
136 
137 void ExactD2(double x, double y, double *values)
138 {
139  values[0] = 0.5*Pi*Pi*y*sin(Pi*x);
140  values[1] = 0.5*Pi*Pi*Pi*y*cos(Pi*x);
141  values[2] = 0.5*Pi*Pi*sin(Pi*x);
142  values[3] = -0.5*Pi*Pi*Pi*Pi*y*sin(Pi*x);
143 }
144 
145 void ExactD3(double x, double y, double *values)
146 {
147  values[0] = -Pi*cos(Pi*x);
148  values[1] = Pi*Pi*sin(Pi*x);
149  values[2] = 0;
150  values[3] = Pi*Pi*Pi*cos(Pi*x);
151 }
152 
153 // ========================================================================
154 // boundary conditions
155 // ========================================================================
156 void BoundCondition_DFT(int i, double t, BoundCond &cond)
157 {
158  cond = DIRICHLET;
159 
160 }
161 
162 void D1BoundValue(int BdComp, double Param, double &value)
163 {
164  switch(BdComp)
165  {
166  case 0: value=Pi*cos(Pi*Param);
167  break;
168  case 1: value=Pi*cos(Pi);
169  break;
170  case 2: value=Pi*cos(Pi*(1-Param));
171  break;
172  case 3: value=Pi;
173  break;
174  default: cout << "wrong boundary part number" << endl;
175  break;
176  }
177  return;
178 }
179 
180 void D2BoundValue(int BdComp, double Param, double &value)
181 {
182  switch(BdComp)
183  {
184  case 0: value=0;
185  break;
186  case 1: value=0.5*Pi*Pi*Param*sin(Pi);
187  break;
188  case 2: value=0.5*Pi*Pi*sin(Pi*(1-Param));
189  break;
190  case 3: value=0;
191  break;
192  default: cout << "wrong boundary part number" << endl;
193  break;
194  }
195  return;
196 }
197 
198 
199 
200 void D3BoundValue(int BdComp, double Param, double &value)
201 {
202 switch(BdComp)
203  {
204  case 0: value=-Pi*cos(Pi*Param);
205  break;
206  case 1: value=-Pi*cos(Pi);
207  break;
208  case 2: value=-Pi*cos(Pi*(1-Param));
209  break;
210  case 3: value=-Pi;
211  break;
212  default: cout << "wrong boundary part number" << endl;
213  break;
214  }
215  return;
216 }
217 
218 
219 void LinCoeffs_DFT(int n_points, double *X, double *Y,
220  double **parameters, double **coeffs)
221 {
222  int i;
223  double *coeff, x, y, *param;
224  double u1x, u1y, u2x, u2y;
225 
226  for(i=0;i<n_points;i++)
227  {
228  coeff = coeffs[i];
229 
230  x = X[i];
231  y = Y[i];
232 
233  coeff[0] = 1;
234 
235 
236  }
237 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134