ParMooN
 All Classes Functions Variables Friends Pages
SinCos.h
1 // Navier-Stokes problem with sine and cosine functions
2 //
3 
4 void ExampleFile()
5 {
6  TDatabase::ParamDB->INTERNAL_PROBLEM_IDENTITY = OSEEN_PROBLEM;
7  OutPut("Example: SinCos.h with INTERNAL_PROBLEM_IDENTITY " <<
8  TDatabase::ParamDB->INTERNAL_PROBLEM_IDENTITY << endl) ;
9 }
10 
11 // ========================================================================
12 // exact solution
13 // ========================================================================
14 void ExactU1(double x, double y, double *values)
15 {
16  values[0] = sin(Pi*x);
17  values[1] = Pi*cos(Pi*x);
18  values[2] = 0;
19  values[3] = -Pi*Pi*sin(Pi*x);
20 }
21 
22 void ExactU2(double x, double y, double *values)
23 {
24  values[0] = -Pi*y*cos(Pi*x);
25  values[1] = Pi*Pi*y*sin(Pi*x);
26  values[2] = -Pi*cos(Pi*x);
27  values[3] = Pi*Pi*Pi*y*cos(Pi*x);
28 }
29 
30 void ExactP(double x, double y, double *values)
31 {
32  values[0] = sin(Pi*x)*cos(Pi*y);
33  values[1] = Pi*cos(Pi*x)*cos(Pi*y);
34  values[2] = -Pi*sin(Pi*x)*sin(Pi*y);
35  values[3] = -Pi*Pi*sin(Pi*x)*cos(Pi*y)-Pi*Pi*sin(Pi*x)*cos(Pi*y);
36 }
37 
38 void InitialU1(double x, double y, double *values)
39 {
40  values[0] = sin(Pi*x);
41 }
42 
43 void InitialU2(double x, double y, double *values)
44 {
45  values[0] = -Pi*y*cos(Pi*x);
46 }
47 
48 void InitialP(double x, double y, double *values)
49 {
50  values[0] = sin(Pi*x)*cos(Pi*y);
51 }
52 
53 // ========================================================================
54 // boundary conditions
55 // ========================================================================
56 void BoundCondition(int i, double t, BoundCond &cond)
57 {
58  cond = DIRICHLET;
59  TDatabase::ParamDB->INTERNAL_PROJECT_PRESSURE=1;
60 }
61 
62 void U1BoundValue(int BdComp, double Param, double &value)
63 {
64  switch(BdComp)
65  {
66  case 0: value=sin(Pi*Param);
67  break;
68  case 1: value=sin(Pi);
69  break;
70  case 2: value=sin(Pi*(1-Param));
71  break;
72  case 3: value=0;
73  break;
74  default: cout << "wrong boundary part number" << endl;
75  break;
76  }
77  return;
78 }
79 
80 void U2BoundValue(int BdComp, double Param, double &value)
81 {
82  switch(BdComp)
83  {
84  case 0: value=0;
85  break;
86  case 1: value=Pi*Param;
87  break;
88  case 2: value=-Pi*cos(Pi*(1-Param));
89  break;
90  case 3: value=-Pi*(1-Param);
91  break;
92  default: cout << "wrong boundary part number" << endl;
93  break;
94  }
95  return;
96 }
97 
98 // ========================================================================
99 // coefficients for Stokes form: A, B1, B2, f1, f2
100 // ========================================================================
101 void LinCoeffs(int n_points, double *X, double *Y,
102  double **parameters, double **coeffs)
103 {
104  double nu=1./TDatabase::ParamDB->RE_NR;
105  int i;
106  double *coeff, x, y;
107  double u1, u1x, u1y, u1lap, u2, u2x, u2y, u2lap, px, py;
108 
109  for(i=0;i<n_points;i++)
110  {
111  coeff = coeffs[i];
112 
113  x = X[i];
114  y = Y[i];
115 
116  coeff[0] = nu;
117  // prescribed solution
118  u1 = sin(Pi*x);
119  u1x = Pi*cos(Pi*x);
120  u1y = 0;
121  u1lap = -Pi*Pi*sin(Pi*x);
122  u2 = -Pi*y*cos(Pi*x);
123  u2x = Pi*Pi*y*sin(Pi*x);
124  u2y = -Pi*cos(Pi*x);
125  u2lap = Pi*Pi*Pi*y*cos(Pi*x);
126  px = Pi*cos(Pi*x)*cos(Pi*y);
127  py = -Pi*sin(Pi*x)*sin(Pi*y);
128 
129  coeff[1] = -nu*u1lap+u1*u1x+u2*u1y+px;
130  coeff[2] = -nu*u2lap+u1*u2x+u2*u2y+py;
131 
132  coeff[3] = u1;
133  coeff[4] = u2;
134  /*coeff[5] = px;
135  coeff[6] = py;
136  coeff[7] = u1y;
137  coeff[8] = u2y;*/
138  }
139 }
double RE_NR
Definition: Database.h:313
static TParamDB * ParamDB
Definition: Database.h:1134