ParMooN
 All Classes Functions Variables Friends Pages
Channel3D.h
1 // Navier-Stokes problem, 3D Channel flow
2 //
3 // u(x,y) = unknown
4 // p(x,y) = unknown
5 
6 void ExampleFile()
7 {
8 #ifdef _MPI
9  int rank;
10  MPI_Comm_rank(TDatabase::ParamDB->Comm, &rank);
11 
12  if(rank==TDatabase::ParamDB->Par_P0)
13 #endif
14  {
15  OutPut("Example: Channel3D.h " << endl);
16  }
17 
18 }
19 
20 void InitialU1(double x, double y, double z, double *values)
21 {
22  values[0] = 0;
23 }
24 
25 void InitialU2(double x, double y, double z, double *values)
26 {
27  values[0] = 0;
28 }
29 
30 void InitialU3(double x, double y, double z, double *values)
31 {
32  values[0] = 0;
33 }
34 
35 void InitialP(double x, double y, double z, double *values)
36 {
37  values[0] = 0;
38 }
39 
40 // ========================================================================
41 // exact solution
42 // ========================================================================
43 void ExactU1(double x, double y, double z, double *values)
44 {
45  values[0] = 0;
46  values[1] = 0;
47  values[2] = 0;
48  values[3] = 0;
49  values[4] = 0;
50 }
51 
52 void ExactU2(double x, double y, double z, double *values)
53 {
54  values[0] = 0;
55  values[1] = 0;
56  values[2] = 0;
57  values[3] = 0;
58  values[4] = 0;
59 }
60 
61 void ExactU3(double x, double y, double z, double *values)
62 {
63  values[0] = 0;
64  values[1] = 0;
65  values[2] = 0;
66  values[3] = 0;
67  values[4] = 0;
68 }
69 
70 void ExactP(double x, double y, double z, double *values)
71 {
72  values[0] = 0;
73  values[1] = 0;
74  values[2] = 0;
75  values[3] = 0;
76  values[4] = 0;
77 }
78 
79 // kind of boundary condition (for FE space needed)
80 void BoundCondition(int CompID, double x, double y, double z, BoundCond &cond)
81 {
82 
83  TDatabase::ParamDB->INTERNAL_PROJECT_PRESSURE = 0;
84 
85 
86  if(TDatabase::ParamDB->MESH_TYPE==0)
87  {
88  if(x==1)
89  cond = NEUMANN;
90  else if
91  (x==0)
92  cond = DIRICHLET;
93  else if
94  (y==0)
95  cond = DIRICHLET;
96  else if
97  (y==1)
98  cond = DIRICHLET;
99  else if
100  (z==0)
101  cond = DIRICHLET;
102  else if
103  (z==1)
104  cond = DIRICHLET;
105 
106  }
107  else
108  {
109  switch(CompID)
110  {
111 
112  case 0: case 1: case 2: case 3: case 5:
113  cond = DIRICHLET;
114  break;
115 
116  case 4:
117  cond = NEUMANN;
118  break;
119 
120  default:
121  cout << "wrong boundary part number" << endl;
122  break;
123 
124  }
125  }
126 
127 }
128 
129 // value of boundary condition
130 void U1BoundValue(int CompID, double x, double y, double z, double &value)
131 {
132 
133 
134  if(TDatabase::ParamDB->MESH_TYPE==0)
135  {
136  if(x==0)
137  value=y*(1-y)*z*(1-z);
138  else if
139  (x==1)
140  value=0;
141  else if
142  (y==0)
143  value=0;
144  else if
145  (y==1)
146  value=0;
147  else if
148  (z==0)
149  value=0;
150  else if
151  (z==1)
152  value=0;
153  }
154  else
155  {
156 // cout<<"here in drivencavity.h"<<endl;
157  switch(CompID)
158  {
159 
160  case 0:
161  value=0;
162  break;
163  case 1:
164  value=0;
165  break;
166  case 2:
167  value=y*(1-y)*z*(1-z);
168 // value=1;
169  break;
170  case 3:
171  value=0;
172  break;
173  case 4:
174  value=0;
175  break;
176  case 5:
177  value=0;
178  break;
179  default:
180  cout << "wrong boundary part number" << endl;
181  break;
182  }
183 }
184 
185 }
186 
187 // value of boundary condition
188 void U2BoundValue(int CompID, double x, double y, double z, double &value)
189 {
190  value = 0;
191 }
192 
193 // value of boundary condition
194 void U3BoundValue(int CompID, double x, double y, double z, double &value)
195 {
196  value = 0;
197 }
198 
199 // ========================================================================
200 // coefficients for Stokes form: A, B1, B2, f1, f2
201 // ========================================================================
202 void LinCoeffs(int n_points, double *x, double *y, double *z,
203  double **parameters, double **coeffs)
204 {
205  static double eps = 1/TDatabase::ParamDB->RE_NR;
206  int i;
207  double *coeff;
208 
209  for(i=0;i<n_points;i++)
210  {
211  coeff = coeffs[i];
212 
213  coeff[0] = eps;
214  coeff[1] = 0; // f1
215  coeff[2] = 0; // f2
216  coeff[3] = 0; // f3
217  }
218 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134