12 OutPut(
"Example: Sin4.h" << endl);
16 void Exact(
double x,
double y,
double z,
double *values)
21 values[0] = sin(t)*(sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)+1);
22 values[1] = sin(t)*2*Pi*(cos(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z));
23 values[2] = sin(t)*2*Pi*(sin(2*Pi*x)*cos(2*Pi*y)*sin(2*Pi*z));
24 values[3] = sin(t)*2*Pi*(sin(2*Pi*x)*sin(2*Pi*y)*cos(2*Pi*z));
25 values[4] = sin(t)*4*Pi*Pi*(-sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)
26 -sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)
27 -sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z));
31 void InitialCondition(
double x,
double y,
double z,
double *values)
37 void BoundCondition(
double x,
double y,
double z, BoundCond &cond)
46 void BoundValue(
double x,
double y,
double z,
double &value)
54 void BilinearCoeffs(
int n_points,
double *X,
double *Y,
double *Z,
55 double **parameters,
double **coeffs)
60 double x, y, z, c, a[3], b[3], s[3], h;
68 for(i=0;i<n_points;i++)
88 coeff[5] = cos(t)*(sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)+1)
89 -coeff[0] * (sin(t)*4*Pi*Pi*(-sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)
90 -sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)
91 -sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)))
92 +coeff[1] * sin(t)*2*Pi*(cos(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z))
93 +coeff[2] * sin(t)*2*Pi*(sin(2*Pi*x)*cos(2*Pi*y)*sin(2*Pi*z))
94 +coeff[3] * sin(t)*2*Pi*(sin(2*Pi*x)*sin(2*Pi*y)*cos(2*Pi*z))
95 +coeff[4] * sin(t)*(sin(2*Pi*x)*sin(2*Pi*y)*sin(2*Pi*z)+1);
107 int &N_neum_to_diri,
int* &neum_to_diri,
108 double* &neum_to_diri_x,
double* &neum_to_diri_y,
double* &neum_to_diri_z)
110 const int max_entries = 50000;
111 int i, j, N_, min_val;
112 int N_Cells, N_V, diri_counter = 0, found, diri_counter_1 = 0;
113 int *global_numbers, *begin_index, *dof;
114 int boundary_vertices[8], tmp_diri[max_entries];
115 double x[8], y[8], z[8], eps = 1e-6, tmp_x[max_entries], tmp_y[max_entries], tmp_z[max_entries];
129 for(i=0;i<N_Cells;i++)
137 boundary_vertices[j] = 0;
141 if ((fabs(x[j])<eps)||(fabs(y[j])<eps)||(fabs(x[j]-1)<eps)||(fabs(y[j]-1)<eps)
142 ||(fabs(z[j])<eps)||(fabs(z[j]-1)<eps))
145 boundary_vertices[j] = 1;
154 CurrentElement = fespace->
GetFE3D(i, cell);
158 dof = global_numbers+begin_index[i];
159 switch(CurrentElement)
168 if (boundary_vertices[j])
170 if (CurrentElement==C_P1_3D_T_A)
171 tmp_diri[diri_counter] = dof[j];
174 if ((j==0)||(j==1)||(j==4)||(j==5))
176 tmp_diri[diri_counter] = dof[j];
181 tmp_diri[diri_counter] = dof[3];
183 tmp_diri[diri_counter] = dof[2];
185 tmp_diri[diri_counter] = dof[7];
187 tmp_diri[diri_counter] = dof[6];
190 if (diri_counter > max_entries)
192 OutPut(
"tmp_diri too short !!!"<<endl);
195 tmp_x[diri_counter] = x[j];
196 tmp_y[diri_counter] = y[j];
197 tmp_z[diri_counter] = z[j];
199 OutPut(j<<
" " << tmp_x[diri_counter-1] <<
" " << x[j] << endl);
204 OutPut(
"CheckNeumannNodesForVelocity not implemented for element "
205 << CurrentElement << endl);
206 OutPut(
"code can be run without CheckNeumannNodesForVelocity, just delete the exit" << endl);
212 for (i=0;i<diri_counter;i++)
214 if (tmp_diri[i] == -1)
217 for (j=i+1;j<diri_counter;j++)
219 if (tmp_diri[i] == tmp_diri[j])
226 OutPut(
"CheckNeumannNodesForVelocity: N_neum_to_diri " << diri_counter_1 << endl);
227 N_neum_to_diri = diri_counter_1;
229 neum_to_diri =
new int[diri_counter_1];
231 neum_to_diri_x =
new double[diri_counter_1];
232 neum_to_diri_y =
new double[diri_counter_1];
233 neum_to_diri_z =
new double[diri_counter_1];
235 for (i=0;i<diri_counter_1;i++)
237 min_val = tmp_diri[0];
239 for (j=1;j<diri_counter;j++)
241 if ((tmp_diri[j]>0) && ((tmp_diri[j] < min_val) ||
244 min_val = tmp_diri[j];
248 neum_to_diri[i] = tmp_diri[found];
249 neum_to_diri_x[i] = tmp_x[found];
250 neum_to_diri_y[i] = tmp_y[found];
251 neum_to_diri_z[i] = tmp_z[found];
252 tmp_diri[found] = -1;
255 for (i=0;i<diri_counter_1;i++)
257 OutPut(i <<
" " << neum_to_diri[i] <<
" " << neum_to_diri_x[i] <<
258 " " << neum_to_diri_y[i] <<
" " << neum_to_diri_z[i] << endl);
FE3D GetFE3D(int i, TBaseCell *cell)
Definition: FESpace3D.C:412
TBaseCell * GetCell(int i) const
return Cell with index i in Cells-array
Definition: Collection.h:50
static int * GetN_BaseFunctFromFE3D()
Definition: FEDatabase3D.h:369
static TTimeDB * TimeDB
Definition: Database.h:1137
Definition: FESpace3D.h:22
double RE_NR
Definition: Database.h:313
store cells in an array, used by cell iterators
Definition: Collection.h:18
virtual TVertex * GetVertex(int Vert_i)=0
return the pointer to vertex with number i
int GetN_Cells() const
return number of cells
Definition: Collection.h:46
void GetCoords(double &x, double &y, double &z) const
Definition: Vertex.h:106
int GetN_Vertices()
return the number of vertices of the cell
Definition: BaseCell.h:179
information for finite element data structure
Definition: BaseCell.h:25
int * GetGlobalNumbers() const
Definition: FESpace.h:135
int * GetBeginIndex() const
Definition: FESpace.h:142
static TParamDB * ParamDB
Definition: Database.h:1134