ParMooN
 All Classes Functions Variables Friends Pages
Bsp3.h
1 // time dependent Navier-Stokes problem 3D, ansatz
2 //
3 //u1(t,x,y,z) = exp(-t)*(y^2+z)
4 //u2(t,x,y,z) = t^4*(x-2*z^2)
5 //u3(t,x,y,z) = exp(-50*t)*(2*x*y+y)
6 //p(t,x,y,z) = t^3*(x+2*y+3*z)-3*t^3
7 
8 void ExampleFile()
9 {
10  OutPut("Example: Bsp3.h" << endl);
11 }
12 
13 // ========================================================================
14 // initial solution
15 // ========================================================================
16 void InitialU1(double x, double y, double z, double *values)
17 {
18  double t=TDatabase::TimeDB->CURRENTTIME;
19 
20 values[0] = exp(-t)*(y*y+z);
21 values[1] = 0;
22 values[2] = 2*exp(-t)*y;
23 values[3] = exp(-t);
24 values[4] = 2*exp(-t);
25 }
26 
27 void InitialU2(double x, double y, double z, double *values)
28 {
29  double t=TDatabase::TimeDB->CURRENTTIME;
30 
31 values[0] = t*t*t*t*(x-2*z*z);
32 values[1] = t*t*t*t;
33 values[2] = 0;
34 values[3] = -4*t*t*t*t*z;
35 values[4] = -4*t*t*t*t;
36 }
37 
38 void InitialU3(double x, double y, double z, double *values)
39 {
40  double t=TDatabase::TimeDB->CURRENTTIME;
41 
42 values[0] = exp(-50*t)*(2*x*y+y);
43 values[1] = 2*exp(-50*t)*y;
44 values[2] = exp(-50*t)*(2*x+1);
45 values[3] = 0;
46 values[4] = 0;
47 }
48 
49 void InitialP(double x, double y, double z, double *values)
50 {
51  double t=TDatabase::TimeDB->CURRENTTIME;
52 
53 values[0] = t*t*t*(x+2*y+3*z)-3*t*t*t;
54 values[1] = t*t*t;
55 values[2] = 2*t*t*t;
56 values[3] = 3*t*t*t;
57 values[4] = 0;
58 }
59 
60 // ========================================================================
61 // exact solution
62 // ========================================================================
63 void ExactU1(double x, double y, double z, double *values)
64 {
65  double t=TDatabase::TimeDB->CURRENTTIME;
66 
67 values[0] = exp(-t)*(y*y+z);
68 values[1] = 0;
69 values[2] = 2*exp(-t)*y;
70 values[3] = exp(-t);
71 values[4] = 2*exp(-t);
72 }
73 
74 void ExactU2(double x, double y, double z, double *values)
75 {
76  double t=TDatabase::TimeDB->CURRENTTIME;
77 
78 values[0] = t*t*t*t*(x-2*z*z);
79 values[1] = t*t*t*t;
80 values[2] = 0;
81 values[3] = -4*t*t*t*t*z;
82 values[4] = -4*t*t*t*t;
83 }
84 
85 void ExactU3(double x, double y, double z, double *values)
86 {
87  double t=TDatabase::TimeDB->CURRENTTIME;
88 
89 values[0] = exp(-50*t)*(2*x*y+y);
90 values[1] = 2*exp(-50*t)*y;
91 values[2] = exp(-50*t)*(2*x+1);
92 values[3] = 0;
93 values[4] = 0;
94 }
95 
96 void ExactP(double x, double y, double z, double *values)
97 {
98  double t=TDatabase::TimeDB->CURRENTTIME;
99 
100 values[0] = t*t*t*(x+2*y+3*z)-3*t*t*t;
101 values[1] = t*t*t;
102 values[2] = 2*t*t*t;
103 values[3] = 3*t*t*t;
104 values[4] = 0;
105 }
106 
107 // ========================================================================
108 // boundary conditions
109 // ========================================================================
110 // kind of boundary condition (for FE space needed)
111 void BoundCondition(int CompID, double x, double y, double z, BoundCond &cond)
112 {
113  cond = DIRICHLET;
114 }
115 
116 // value of boundary condition
117 void U1BoundValue(int CompID, double x, double y, double z, double &value)
118 {
119 double t=TDatabase::TimeDB->CURRENTTIME;
120 value = exp(-t)*(y*y+z);
121 }
122 
123 void U2BoundValue(int CompID, double x, double y, double z, double &value)
124 {
125 double t=TDatabase::TimeDB->CURRENTTIME;
126 value = t*t*t*t*(x-2*z*z);
127 }
128 
129 void U3BoundValue(int CompID, double x, double y, double z, double &value)
130 {
131 double t=TDatabase::TimeDB->CURRENTTIME;
132 value = exp(-50*t)*(2*x*y+y);
133 }
134 
135 void U1BoundValue_diff(int CompID, double x, double y, double z, double &value)
136 {
137 double t=TDatabase::TimeDB->CURRENTTIME;
138 value = -exp(-t)*(y*y+z);
139 }
140 
141 void U2BoundValue_diff(int CompID, double x, double y, double z, double &value)
142 {
143 double t=TDatabase::TimeDB->CURRENTTIME;
144 value = 4*t*t*t*(x-2*z*z);
145 }
146 
147 void U3BoundValue_diff(int CompID, double x, double y, double z, double &value)
148 {
149 double t=TDatabase::TimeDB->CURRENTTIME;
150 value = -50*exp(-50*t)*(2*x*y+y);
151 }
152 
153 // ========================================================================
154 // coefficients for Stokes form: A, B1, B2, f1, f2
155 // ========================================================================
156 void LinCoeffs(int n_points, double *X, double *Y, double *Z,
157  double **parameters, double **coeffs)
158 {
159  static double eps = 1/TDatabase::ParamDB->RE_NR;
160  int i;
161  double *coeff, x, y, z;
162  double t=TDatabase::TimeDB->CURRENTTIME;
163  for(i=0;i<n_points;i++)
164  {
165  coeff = coeffs[i];
166 
167  x = X[i];
168  y = Y[i];
169  z = Z[i];
170  coeff[0] = eps;
171  coeff[1] = -exp(-t)*(y*y+z)-2*eps*exp(-t)+2*t*t*t*t*(x-2*z*z)*exp(-t)*y+exp(-50*t)*(2*x*y+y)*exp(-t)+t*t*t;
172  coeff[2] = 4*t*t*t*(x-2*z*z)+4*eps*t*t*t*t+exp(-t)*(y*y+z)*t*t*t*t-4*exp(-50*t)*(2*x*y+y)*t*t*t*t*z+2*t*t*t;
173  coeff[3] = -50*exp(-50*t)*(2*x*y+y)+2*exp(-t)*(y*y+z)*exp(-50*t)*y+t*t*t*t*(x-2*z*z)*exp(-50*t)*(2*x+1)+3*t*t*t;
174  coeff[4] = exp(-t)*(y*y+z)+2*eps*exp(-t)+8*t*t*t*(x-2*z*z)*exp(-t)*y-2*t*t*t*t*(x-2*z*z)*exp(-t)*y-51*exp(-50*t)*(2*x*y+y)*exp(-t)+3*t*t;
175  coeff[5] = 12*t*t*(x-2*z*z)+16*eps*t*t*t-exp(-t)*(y*y+z)*t*t*t*t+4*exp(-t)*(y*y+z)*t*t*t+200*exp(-50*t)*(2*x*y+y)*t*t*t*t*z-16*exp(-50*t)*(2*x*y+y)*t*t*t*z+6*t*t;
176  coeff[6] = 2500*exp(-50*t)*(2*x*y+y)-102*exp(-t)*(y*y+z)*exp(-50*t)*y+4*t*t*t*(x-2*z*z)*exp(-50*t)*(2*x+1)-50*t*t*t*t*(x-2*z*z)*exp(-50*t)*(2*x+1)+9*t*t;
177  }
178 }
static TTimeDB * TimeDB
Definition: Database.h:1137
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134