ParMooN
 All Classes Functions Variables Friends Pages
DrivenCavity3D.h
1 // Navier-Stokes problem, Driven cavity with SLIP_FRICTION_PENETRATION_RESISTANCE
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 
21 // ========================================================================
22 // exact solution
23 // ========================================================================
24 void ExactU1(double x, double y, double z, double *values)
25 {
26  values[0] = 0;
27  values[1] = 0;
28  values[2] = 0;
29  values[3] = 0;
30  values[4] = 0;
31 }
32 
33 void ExactU2(double x, double y, double z, double *values)
34 {
35  values[0] = 0;
36  values[1] = 0;
37  values[2] = 0;
38  values[3] = 0;
39  values[4] = 0;
40 }
41 
42 void ExactU3(double x, double y, double z, double *values)
43 {
44  values[0] = 0;
45  values[1] = 0;
46  values[2] = 0;
47  values[3] = 0;
48  values[4] = 0;
49 }
50 
51 void ExactP(double x, double y, double z, double *values)
52 {
53  values[0] = 0;
54  values[1] = 0;
55  values[2] = 0;
56  values[3] = 0;
57  values[4] = 0;
58 }
59 
60 // kind of boundary condition (for FE space needed)
61 void BoundCondition(int CompID, double x, double y, double z, BoundCond &cond)
62 {
63  switch(CompID)
64  {
65  case 0:
66  case 1:
67  case 2:
68  case 3:
69  case 4:
70  cond = SLIP_FRICTION_PENETRATION_RESISTANCE;
71  TDatabase::ParamDB->INTERNAL_SLIP_WITH_FRICTION=1;
72 // cond = DIRICHLET;
73  break;
74 
75  case 5:
76  cond = DIRICHLET;
77  break;
78  default: cout << "wrong boundary part number: " << CompID << endl;
79  }
80 }
81 
82 // value of boundary condition
83 void U1BoundValue(int CompID, double x, double y, double z, double &value)
84 {
85  double eps = 1e-8;
86 
87  if(TDatabase::ParamDB->MESH_TYPE==1)
88  {
89  switch(CompID)
90  {
91  case 0:
92  value=0;
93  break;
94  case 1:
95  value=0;
96  break;
97  case 2:
98  value=0;
99  break;
100  case 3:
101  value=0;
102  break;
103  case 4:
104  value=0;
105  break;
106  case 5:
107  if (fabs(y)==1)
108  {
109  if ((fabs(x)>eps)&&(fabs(1-x)>eps)&&(fabs(z)>eps)&&(fabs(1-z)>eps))
110  value = 1.0;
111  else
112  value = 0.0;
113  }
114  else
115  { value =0.0 ;}
116  break;
117  default:
118  cout << "wrong boundary part number" << endl;
119  break;
120  }
121  }
122  else
123  {
124  if (fabs(y)==1)
125  {
126 
127  if ((fabs(x)>eps)&&(fabs(1-x)>eps)&&(fabs(z)>eps)&&(fabs(1-z)>eps))
128  { value = 1.0;
129 // cout << "test BC 1 " <<endl;
130 
131  }
132  else
133  value = 0.0;
134  }
135  else
136  { value =0.0 ; }
137  }
138 }
139 
140 // value of boundary condition
141 void U2BoundValue(int CompID, double x, double y, double z, double &value)
142 {
143  value = 0;
144 }
145 
146 // value of boundary condition
147 void U3BoundValue(int CompID, double x, double y, double z, double &value)
148 {
149  value = 0;
150 }
151 
152 // ========================================================================
153 // coefficients for Stokes form: A, B1, B2, f1, f2
154 // ========================================================================
155 void LinCoeffs(int n_points, double *x, double *y, double *z,
156  double **parameters, double **coeffs)
157 {
158  static double eps = 1./TDatabase::ParamDB->RE_NR;
159  int i;
160  double *coeff;
161 
162  for(i=0;i<n_points;i++)
163  {
164  coeff = coeffs[i];
165 
166  coeff[0] = eps;
167  coeff[1] = 0; // f1
168  coeff[2] = 0; // f2
169  coeff[3] = 0; // f3
170  }
171 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134