ParMooN
 All Classes Functions Variables Friends Pages
DrivenCavity3D.h
1 // Navier-Stokes problem, Driven cavity
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: DrivenCavity3D.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  cond = DIRICHLET;
83 }
84 
85 // value of boundary condition
86 void U1BoundValue(int CompID, double x, double y, double z, double &value)
87 {
88  double eps = 1e-8;
89 
90  if(TDatabase::ParamDB->MESH_TYPE==1){
91  switch(CompID)
92  {
93 
94  case 0:
95  value=0;
96  break;
97  case 5:
98 
99  if (fabs(y)==1)
100  {
101  if ((fabs(x)>eps)&&(fabs(1-x)>eps)&&(fabs(z)>eps)&&(fabs(1-z)>eps))
102  value = 1.0;
103  else
104  value = 0.0;
105  }
106  else
107  value =0.0 ;
108 // value =1.0 ;
109  break;
110  case 2:
111  value=0;
112  break;
113  case 3:
114  value=0;
115  break;
116  case 4:
117  value=0;
118  break;
119  case 1:
120  value=0;
121  break;
122  default:
123  cout << "wrong boundary part number" << endl;
124  break;
125  }
126  }
127  else{
128  if (fabs(y)==1)
129  {
130  if ((fabs(x)>eps)&&(fabs(1-x)>eps)&&(fabs(z)>eps)&&(fabs(1-z)>eps))
131  value = 1.0;
132  else
133  value = 0.0;
134  }
135  else
136  value =0.0 ;}
137 }
138 
139 // value of boundary condition
140 void U2BoundValue(int CompID, double x, double y, double z, double &value)
141 {
142  value = 0;
143 }
144 
145 // value of boundary condition
146 void U3BoundValue(int CompID, double x, double y, double z, double &value)
147 {
148  value = 0;
149 }
150 
151 // ========================================================================
152 // coefficients for Stokes form: A, B1, B2, f1, f2
153 // ========================================================================
154 void LinCoeffs(int n_points, double *x, double *y, double *z,
155  double **parameters, double **coeffs)
156 {
157  static double eps = 1/TDatabase::ParamDB->RE_NR;
158  int i;
159  double *coeff;
160 
161  for(i=0;i<n_points;i++)
162  {
163  coeff = coeffs[i];
164 
165  coeff[0] = eps;
166  coeff[1] = 0; // f1
167  coeff[2] = 0; // f2
168  coeff[3] = 0; // f3
169  }
170 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134