ParMooN
 All Classes Functions Variables Friends Pages
SinSinSolution.h
1 // Bechmark for Darcy problem, exact solution is
2 //
3 
4 void ExampleFile()
5 {
6  OutPut("Example: SinSinSolution.h" << endl) ;
7 }
8 
9 // ========================================================================
10 // exact solution
11 // ========================================================================
12 void ExactU1(double x, double y, double *values)
13 {
14  values[0] = -2*Pi*cos(2*Pi*x)*sin(2*Pi*y);
15  values[1] = 4*Pi*Pi*sin(2*Pi*x)*sin(2*Pi*y);
16  values[2] = -4*Pi*Pi*cos(2*Pi*x)*cos(2*Pi*y);
17  values[3] = 0;
18 }
19 
20 void ExactU2(double x, double y, double *values)
21 {
22  values[0] = -2*Pi*sin(2*Pi*x)*cos(2*Pi*y);
23  values[1] = -4*Pi*Pi*cos(2*Pi*x)*cos(2*Pi*y);
24  values[2] = 4*Pi*Pi*sin(2*Pi*x)*sin(2*Pi*y);
25  values[3] = 0;
26 }
27 
28 void ExactP(double x, double y, double *values)
29 {
30  values[0] = sin(2*Pi*x)*sin(2*Pi*y);
31  values[1] = 2*Pi*cos(2*Pi*x)*sin(2*Pi*y);
32  values[2] = 2*Pi*sin(2*Pi*x)*cos(2*Pi*y);
33  values[3] = 0.;
34 }
35 
36 // ========================================================================
37 // boundary conditions
38 // ========================================================================
39 void BoundCondition(int bdComp, double t, BoundCond &cond)
40 {
41  cond = (bdComp == 0 || bdComp == 3) ? NEUMANN : DIRICHLET;
42 }
43 
44 // u \cdot n
45 void FluxBoundValue(int bdComp, double t, double &value)
46 {
47  switch(bdComp)
48  {
49  case 0:
50  {
51  value = 0; // Neumann
52  //value = 2*Pi*sin(2*Pi*t); // Dirichlet
53  break;
54  }
55  case 1:
56  {
57  //value = 0; // Neumann
58  value = -2*Pi*sin(2*Pi*t); // Drichlet
59  break;
60  }
61  case 2:
62  {
63  //value = 0; // Neumann
64  value = -2*Pi*sin(2*Pi*(1-t)); // Dirichlet
65  break;
66  }
67  case 3:
68  {
69  value = 0; // Neumann
70  //value = 2*Pi*sin(2*Pi*(1-t)); // Dirichlet
71  break;
72  }
73  default: cout << "wrong boundary part number" << endl;
74 
75  break;
76  }
77 }
78 
79 
80 // ========================================================================
81 // coefficients for Stokes form: A, B1, B2, f1, f2
82 // ========================================================================
83 void LinCoeffs(int n_points, double *X, double *Y,
84  double **parameters, double **coeffs)
85 {
86  const double eps = 1.0/TDatabase::ParamDB->SIGMA_PERM;
87  for(int i = 0; i < n_points; i++)
88  {
89  coeffs[i][0] = eps;
90  // RHS for exact solution
91  coeffs[i][1] = 0; // f1
92  coeffs[i][2] = 0; // f2
93  coeffs[i][3] = 8*Pi*Pi*sin(2*Pi*X[i])*sin(2*Pi*Y[i]); // g
94  }
95 }
96 
97 
static TParamDB * ParamDB
Definition: Database.h:1134