ParMooN
 All Classes Functions Variables Friends Pages
Bsp1.h
1 // Navier-Stokes problem, Poiseuille-Problem
2 //
3 // u(x,y) = (sin(t)*sin(Pi*x)*sin(Pi*y), sin(t)*cos(Pi*x)*cos(Pi*y))
4 // p(x,y) = sin(t)*(sin(Pi*x)+cos(Pi*y)-2/Pi)
5 
6 void ExampleFile()
7 {
8  OutPut("Example: Bsp1.h" << endl) ;
9 }
10 
11 // ========================================================================
12 // initial solution
13 // ========================================================================
14 void InitialU1(double x, double y, double *values)
15 {
16  double t=TDatabase::TimeDB->CURRENTTIME;
17 
18  values[0] = sin(t)*sin(Pi*x)*sin(Pi*y);
19 
20 // cout << " InitialU1 " << values[0] <<endl;
21 }
22 
23 void InitialU2(double x, double y, double *values)
24 {
25  double t=TDatabase::TimeDB->CURRENTTIME;
26 
27  values[0] = sin(t)*cos(Pi*x)*cos(Pi*y);
28 }
29 
30 void InitialP(double x, double y, double *values)
31 {
32  double t=TDatabase::TimeDB->CURRENTTIME;
33 
34  values[0] = sin(t)*(sin(Pi*x)+cos(Pi*y)-2/Pi);
35 }
36 
37 
38 // ========================================================================
39 // exact solution
40 // ========================================================================
41 void ExactU1(double x, double y, double *values)
42 {
43  double t1, t2, t4, t5, t6, t15;
44  double t=TDatabase::TimeDB->CURRENTTIME;
45 
46  t1 = sin(t);
47  t2 = 0.3141592653589793E1*x;
48  t4 = t1*sin(t2);
49  t5 = 0.3141592653589793E1*y;
50  t6 = sin(t5);
51  t15 = 0.3141592653589793E1*0.3141592653589793E1;
52 
53  values[0] = t4*t6;
54  values[1] = t1*cos(t2)*0.3141592653589793E1*t6;
55  values[2] = t4*cos(t5)*0.3141592653589793E1;
56  values[3] = -2.0*t4*t15*t6;
57 }
58 
59 void ExactU2(double x, double y, double *values)
60 {
61  double t1, t2, t4, t5, t6, t15;
62  double t=TDatabase::TimeDB->CURRENTTIME;
63 
64  t1 = sin(t);
65  t2 = 0.3141592653589793E1*x;
66  t4 = t1*cos(t2);
67  t5 = 0.3141592653589793E1*y;
68  t6 = cos(t5);
69  t15 = 0.3141592653589793E1*0.3141592653589793E1;
70 
71  values[0] = t4*t6;
72  values[1] = -t1*sin(t2)*t6*0.3141592653589793E1;
73  values[2] = -t4*0.3141592653589793E1*sin(t5);
74  values[3] = -2.0*t4*t15*t6;
75 }
76 
77 void ExactP(double x, double y, double *values)
78 {
79  double t1, t2, t4;
80  double t = TDatabase::TimeDB->CURRENTTIME;
81 
82  t1 = sin(t);
83  t2 = 0.3141592653589793E1*x;
84  t4 = 0.3141592653589793E1*y;
85 
86  values[0] = t1*(sin(t2)+cos(t4)-2.0/0.3141592653589793E1);
87  values[1] = t1*cos(t2)*0.3141592653589793E1;
88  values[2] = -t1*sin(t4)*0.3141592653589793E1;
89 }
90 
91 // ========================================================================
92 // boundary conditions
93 // ========================================================================
94 void BoundCondition(int i, double t, BoundCond &cond)
95 {
96  cond = DIRICHLET;
97 }
98 
99 void U1BoundValue(int BdComp, double Param, double &value)
100 {
101  value = 0;
102 }
103 
104 void U2BoundValue(int BdComp, double Param, double &value)
105 {
106  double t = TDatabase::TimeDB->CURRENTTIME;
107 
108  switch(BdComp)
109  {
110  case 0: value=sin(t)*cos(Pi*Param);
111  break;
112  case 1: value=-sin(t)*cos(Pi*Param);
113  break;
114  case 2: value=-sin(t)*cos(Pi*(1-Param));
115  break;
116  case 3: value=sin(t)*cos(Pi*(1-Param));
117  break;
118  default: cout << "wrong boundary part number" << endl;
119  break;
120  }
121 }
122 
123 // ========================================================================
124 // coefficients for Stokes form: A, B1, B2, f1, f2
125 // ========================================================================
126 void LinCoeffs(int n_points, double *X, double *Y, double **parameters, double **coeffs)
127 {
128  static double nu = 1/TDatabase::ParamDB->RE_NR;
129  double t = TDatabase::TimeDB->CURRENTTIME;
130  double t1, t2, t3, t5, t6, t8, t9, t10, t14, t16;
131  double t17, t22, t23, t27, t36, t39, t41;
132  int i;
133  double *coeff, x, y;
134  static double a=1;
135 
136  for(i=0;i<n_points;i++)
137  {
138  coeff = coeffs[i];
139  x = X[i];
140  y = Y[i];
141 
142  coeff[0] = nu;
143 
144  t1 = cos(t);
145  t2 = 0.3141592653589793E1*x;
146  t3 = sin(t2);
147  t5 = 0.3141592653589793E1*y;
148  t6 = sin(t5);
149  t8 = sin(t);
150  t9 = nu*t8;
151  t10 = 0.3141592653589793E1*0.3141592653589793E1;
152  t14 = t8*t8;
153  t16 = t6*t6;
154  t17 = cos(t2);
155  t22 = cos(t5);
156  t23 = t22*t22;
157  t27 = a*t8;
158  t36 = t3*t3;
159  t39 = t6*t22*0.3141592653589793E1;
160  t41 = t17*t17;
161 
162 // /*
163  // Stokes
164  coeff[1] = t1*t3*t6+2.0*t9*t3*t10*t6+t27*t17*0.3141592653589793E1;
165  coeff[2] = t1*t17*t22+2.0*t9*t17*t10*t22-t27*t6*0.3141592653589793E1;
166 // */
167 
168 // // Navier-Stokes
169 // coeff[1] = t1*t3*t6+2.0*t9*t3*t10*t6
170 // +t14*t3*t16*t17*0.3141592653589793E1
171 // +t14*t17*t23*t3*0.3141592653589793E1
172 // +t27*t17*0.3141592653589793E1;
173 // coeff[2] = t1*t17*t22+2.0*t9*t17*t10*t22
174 // -t14*t36*t39-t14*t41*t39
175 // -t27*t6*0.3141592653589793E1;
176  }
177 }
static TTimeDB * TimeDB
Definition: Database.h:1137
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134