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