16#include <distances_VDF.h>
18void moy_2D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double& u)
23 num1 = domaine.elem_faces(elem, 1);
24 num2 = domaine.elem_faces(elem, 3);
28 num1 = domaine.elem_faces(elem, 0);
29 num2 = domaine.elem_faces(elem, 2);
33 Cerr <<
"valeur de iori " << iori <<
" impossible en 2D" << finl;
37 u = 0.5 * (vit(num1) + vit(num2));
40double norm_2D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double& u)
43 moy_2D_vit(vit, elem, iori, domaine, v);
52double norm_2D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double u_paroi,
double v_paroi,
double& u)
61 Cerr <<
"valeur de iori " << iori <<
" impossible en 2D" << finl;
67 moy_2D_vit(vit, elem, iori, domaine, v);
86void moy_3D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double& val1,
double& val2)
88 int num1, num2, num3, num4;
91 num1 = domaine.elem_faces(elem, 1);
92 num2 = domaine.elem_faces(elem, 4);
93 num3 = domaine.elem_faces(elem, 2);
94 num4 = domaine.elem_faces(elem, 5);
98 num1 = domaine.elem_faces(elem, 0);
99 num2 = domaine.elem_faces(elem, 3);
100 num3 = domaine.elem_faces(elem, 2);
101 num4 = domaine.elem_faces(elem, 5);
105 num1 = domaine.elem_faces(elem, 0);
106 num2 = domaine.elem_faces(elem, 3);
107 num3 = domaine.elem_faces(elem, 1);
108 num4 = domaine.elem_faces(elem, 4);
112 Cerr <<
"valeur de iori " << iori <<
" impossible en 3D" << finl;
114 num1 = num2 = num3 = num4 = -1;
116 val1 = 0.5 * (vit(num1) + vit(num2));
117 val2 = 0.5 * (vit(num3) + vit(num4));
120double norm_3D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double& val1,
double& val2)
122 moy_3D_vit(vit, elem, iori, domaine, val1, val2);
123 double v1 = std::fabs(val1);
124 double v2 = std::fabs(val2);
125 double norm_vit = sqrt(v1 * v1 + v2 * v2);
126 val1 = v1 / (norm_vit + DMINFLOAT);
127 val2 = v2 / (norm_vit + DMINFLOAT);
131double norm_3D_vit(
const DoubleVect& vit,
int elem,
int iori,
const Domaine_VDF& domaine,
double u_paroi,
double v_paroi,
double w_paroi,
double& val1,
double& val2)
133 double v1, v2, norm_vit;
134 moy_3D_vit(vit, elem, iori, domaine, val1, val2);
154 Cerr <<
"valeur de iori " << iori <<
" impossible en 3D" << finl;
158 norm_vit = sqrt(v1 * v1 + v2 * v2);
159 val1 = v1 / (norm_vit + DMINFLOAT);
160 val2 = v2 / (norm_vit + DMINFLOAT);
164double norm_vit(
const DoubleVect& vit,
int elem,
int ori,
const Domaine_VDF& domaine,
const ArrOfDouble& vit_paroi, ArrOfDouble& val)
167 return norm_3D_vit(vit, elem, ori, domaine, vit_paroi[0], vit_paroi[1], vit_paroi[2], val[0], val[1]);
169 return norm_2D_vit(vit, elem, ori, domaine, vit_paroi[0], vit_paroi[1], val[0]);
173void calcul_interne2D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& rot)
175 const IntTab& elem_faces = domaine_VDF.
elem_faces();
176 double delta_x_0, delta_x_1, delta_y_0, delta_y_1;
177 double delta_x, delta_y;
178 double deriv_vx, deriv_uy;
190 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
191 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
195 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1), n) + delta_x * val(elem_faces(num_elem, 1), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1), n));
196 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 3), n) + delta_x * val(elem_faces(num_elem, 3), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 3), n));
197 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
199 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0), n) + delta_y * val(elem_faces(num_elem, 0), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0), n));
200 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2), n) + delta_y * val(elem_faces(num_elem, 2), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2), n));
201 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
203 rot(num_elem,n) = deriv_vx - deriv_uy;
207void calcul_bord2D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& rot)
209 const IntTab& elem_faces = domaine_VDF.
elem_faces();
210 double delta_x_0, delta_x_1, delta_y_0, delta_y_1;
211 double delta_x, delta_y;
212 double deriv_vx, deriv_uy;
222 if ((elx0 == -1) || (elx1 == -1))
229 deriv_vx = (val(elem_faces(elx1, 1), n) - val(elem_faces(num_elem, 1), n) + val(elem_faces(elx1, 3), n) - val(elem_faces(num_elem, 3), n));
230 deriv_vx *= 0.5 / delta_x_1;
239 deriv_vx = (val(elem_faces(num_elem, 1), n) - val(elem_faces(elx0, 1), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(elx0, 3), n));
240 deriv_vx *= 0.5 / delta_x_0;
248 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
249 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1), n) + delta_x * val(elem_faces(num_elem, 1), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1), n));
250 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 3), n) + delta_x * val(elem_faces(num_elem, 3), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 3), n));
251 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
255 if ((ely0 == -1) || (ely1 == -1))
262 deriv_uy = (val(elem_faces(ely1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(ely1, 2), n) - val(elem_faces(num_elem, 2), n));
263 deriv_uy *= 0.5 / delta_y_1;
272 deriv_uy = (val(elem_faces(num_elem, 0), n) - val(elem_faces(ely0, 0), n) + val(elem_faces(num_elem, 2), n) - val(elem_faces(ely0, 2), n));
273 deriv_uy *= 0.5 / delta_y_0;
281 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
283 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0), n) + delta_y * val(elem_faces(num_elem, 0), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0), n));
284 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2), n) + delta_y * val(elem_faces(num_elem, 2), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2), n));
285 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
289 rot(num_elem,n) = deriv_vx - deriv_uy;
293void calrotord2centelemdim2(DoubleTab& rot,
const DoubleTab& val,
const Domaine_VDF& domaine_VDF,
int nb_elem,
const IntTab& face_voisins,
const IntTab& elem_faces)
297 int elx0, elx1, ely0, ely1;
299 for (
int num_elem = 0; num_elem < nb_elem; num_elem++)
301 elx0 = face_voisins(elem_faces(num_elem, 0), 0);
302 elx1 = face_voisins(elem_faces(num_elem, 2), 1);
303 ely0 = face_voisins(elem_faces(num_elem, 1), 0);
304 ely1 = face_voisins(elem_faces(num_elem, 3), 1);
306 if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1))
309 calcul_interne2D(num_elem, elx0, elx1, ely0, ely1, domaine_VDF, val, rot);
311 calcul_bord2D(num_elem, elx0, elx1, ely0, ely1, domaine_VDF, val, rot);
316void calcul_interne3D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
int elz0,
int elz1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& rot)
318 const IntTab& elem_faces = domaine_VDF.
elem_faces();
319 double delta_x_0, delta_x_1, delta_y_0, delta_y_1, delta_z_0, delta_z_1;
320 double delta_x, delta_y, delta_z;
321 double deriv_wy, deriv_vz, deriv_uz, deriv_wx, deriv_vx, deriv_uy;
339 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
340 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
341 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
343 for (
int n=0; n<N; n++)
345 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1), n) + delta_z * val(elem_faces(num_elem, 1), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1), n));
346 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4), n) + delta_z * val(elem_faces(num_elem, 4), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4), n));
347 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
349 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2), n) + delta_y * val(elem_faces(num_elem, 2), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2), n));
350 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5), n) + delta_y * val(elem_faces(num_elem, 5), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5), n));
351 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
353 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0), n) + delta_z * val(elem_faces(num_elem, 0), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0), n));
354 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3), n) + delta_z * val(elem_faces(num_elem, 3), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3), n));
355 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
357 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2), n) + delta_x * val(elem_faces(num_elem, 2), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2), n));
358 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5), n) + delta_x * val(elem_faces(num_elem, 5), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5), n));
359 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
361 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1), n) + delta_x * val(elem_faces(num_elem, 1), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1), n));
362 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4), n) + delta_x * val(elem_faces(num_elem, 4), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4), n));
363 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
365 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0), n) + delta_y * val(elem_faces(num_elem, 0), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0), n));
366 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3), n) + delta_y * val(elem_faces(num_elem, 3), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3), n));
367 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
369 rot(num_elem, N*0+n) = deriv_wy - deriv_vz;
370 rot(num_elem, N*1+n) = deriv_uz - deriv_wx;
371 rot(num_elem, N*2+n) = deriv_vx - deriv_uy;
376void calcul_bord3D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
int elz0,
int elz1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& rot)
378 const IntTab& elem_faces = domaine_VDF.
elem_faces();
379 double delta_x_0, delta_x_1, delta_y_0, delta_y_1, delta_z_0, delta_z_1;
380 double delta_x, delta_y, delta_z;
381 double deriv_wy, deriv_vz, deriv_uz, deriv_wx, deriv_vx, deriv_uy;
392 for (
int n=0; n<N; n++)
397 if ((elx0 == -1) || (elx1 == -1))
404 deriv_vx = (val(elem_faces(elx1, 1), n) - val(elem_faces(num_elem, 1), n) + val(elem_faces(elx1, 4), n) - val(elem_faces(num_elem, 4), n));
405 deriv_vx *= 0.5 / delta_x_1;
406 deriv_wx = (val(elem_faces(elx1, 2), n) - val(elem_faces(num_elem, 2), n) + val(elem_faces(elx1, 5), n) - val(elem_faces(num_elem, 5), n));
407 deriv_wx *= 0.5 / delta_x_1;
418 deriv_vx = (val(elem_faces(num_elem, 1), n) - val(elem_faces(elx0, 1), n) + val(elem_faces(num_elem, 4), n) - val(elem_faces(elx0, 4), n));
419 deriv_vx *= 0.5 / delta_x_0;
420 deriv_wx = (val(elem_faces(num_elem, 2), n) - val(elem_faces(elx0, 2), n) + val(elem_faces(num_elem, 5), n) - val(elem_faces(elx0, 5), n));
421 deriv_wx *= 0.5 / delta_x_0;
424 if ((ely0 == -1) || (ely1 == -1))
431 deriv_uy = (val(elem_faces(ely1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(ely1, 3), n) - val(elem_faces(num_elem, 3), n));
432 deriv_uy *= 0.5 / delta_y_1;
433 deriv_wy = (val(elem_faces(ely1, 2), n) - val(elem_faces(num_elem, 2), n) + val(elem_faces(ely1, 5), n) - val(elem_faces(num_elem, 5), n));
434 deriv_wy *= 0.5 / delta_y_1;
445 deriv_uy = (val(elem_faces(num_elem, 0), n) - val(elem_faces(ely0, 0), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(ely0, 3), n));
446 deriv_uy *= 0.5 / delta_y_0;
447 deriv_wy = (val(elem_faces(num_elem, 2), n) - val(elem_faces(ely0, 2), n) + val(elem_faces(num_elem, 5), n) - val(elem_faces(ely0, 5), n));
448 deriv_wy *= 0.5 / delta_y_0;
455 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
457 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0), n) + delta_y * val(elem_faces(num_elem, 0), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0), n));
458 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3), n) + delta_y * val(elem_faces(num_elem, 3), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3), n));
459 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
461 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2), n) + delta_y * val(elem_faces(num_elem, 2), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2), n));
462 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5), n) + delta_y * val(elem_faces(num_elem, 5), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5), n));
463 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
466 if ((elz0 == -1) || (elz1 == -1))
473 deriv_uz = (val(elem_faces(elz1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(elz1, 3), n) - val(elem_faces(num_elem, 3), n));
474 deriv_uz *= 0.5 / delta_z_1;
475 deriv_vz = (val(elem_faces(elz1, 1), n) - val(elem_faces(num_elem, 1), n) + val(elem_faces(elz1, 4), n) - val(elem_faces(num_elem, 4), n));
476 deriv_vz *= 0.5 / delta_z_1;
487 deriv_uz = (val(elem_faces(num_elem, 0), n) - val(elem_faces(elz0, 0), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(elz0, 3), n));
488 deriv_uz *= 0.5 / delta_z_0;
489 deriv_vz = (val(elem_faces(num_elem, 1), n) - val(elem_faces(elz0, 1), n) + val(elem_faces(num_elem, 4), n) - val(elem_faces(elz0, 4), n));
490 deriv_vz *= 0.5 / delta_z_0;
497 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
499 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0), n) + delta_z * val(elem_faces(num_elem, 0), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0), n));
500 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3), n) + delta_z * val(elem_faces(num_elem, 3), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3), n));
501 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
503 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1), n) + delta_z * val(elem_faces(num_elem, 1), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1), n));
504 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4), n) + delta_z * val(elem_faces(num_elem, 4), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4), n));
505 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
509 else if ((ely0 == -1) || (ely1 == -1))
517 deriv_uy = (val(elem_faces(ely1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(ely1, 3), n) - val(elem_faces(num_elem, 3), n));
518 deriv_uy *= 0.5 / delta_y_1;
519 deriv_wy = (val(elem_faces(ely1, 2), n) - val(elem_faces(num_elem, 2), n) + val(elem_faces(ely1, 5), n) - val(elem_faces(num_elem, 5), n));
520 deriv_wy *= 0.5 / delta_y_1;
531 deriv_uy = (val(elem_faces(num_elem, 0), n) - val(elem_faces(ely0, 0), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(ely0, 3), n));
532 deriv_uy *= 0.5 / delta_y_0;
533 deriv_wy = (val(elem_faces(num_elem, 2), n) - val(elem_faces(ely0, 2), n) + val(elem_faces(num_elem, 5), n) - val(elem_faces(ely0, 5), n));
534 deriv_wy *= 0.5 / delta_y_0;
539 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
541 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2), n) + delta_x * val(elem_faces(num_elem, 2), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2), n));
542 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5), n) + delta_x * val(elem_faces(num_elem, 5), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5), n));
543 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
545 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1), n) + delta_x * val(elem_faces(num_elem, 1), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1), n));
546 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4), n) + delta_x * val(elem_faces(num_elem, 4), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4), n));
547 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
549 if ((elz0 == -1) || (elz1 == -1))
556 deriv_uz = (val(elem_faces(elz1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(elz1, 3), n) - val(elem_faces(num_elem, 3), n));
557 deriv_uz *= 0.5 / delta_z_1;
558 deriv_vz = (val(elem_faces(elz1, 1), n) - val(elem_faces(num_elem, 1), n) + val(elem_faces(elz1, 4), n) - val(elem_faces(num_elem, 4), n));
559 deriv_vz *= 0.5 / delta_z_1;
570 deriv_uz = (val(elem_faces(num_elem, 0), n) - val(elem_faces(elz0, 0), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(elz0, 3), n));
571 deriv_uz *= 0.5 / delta_z_0;
572 deriv_vz = (val(elem_faces(num_elem, 1), n) - val(elem_faces(elz0, 1), n) + val(elem_faces(num_elem, 4), n) - val(elem_faces(elz0, 4), n));
573 deriv_vz *= 0.5 / delta_z_0;
580 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
582 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0), n) + delta_z * val(elem_faces(num_elem, 0), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0), n));
583 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3), n) + delta_z * val(elem_faces(num_elem, 3), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3), n));
584 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
586 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1), n) + delta_z * val(elem_faces(num_elem, 1), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1), n));
587 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4), n) + delta_z * val(elem_faces(num_elem, 4), n) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4), n));
588 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
591 else if ((elz0 == -1) || (elz1 == -1))
598 deriv_uz = (val(elem_faces(elz1, 0), n) - val(elem_faces(num_elem, 0), n) + val(elem_faces(elz1, 3), n) - val(elem_faces(num_elem, 3), n));
599 deriv_uz *= 0.5 / delta_z_1;
600 deriv_vz = (val(elem_faces(elz1, 1), n) - val(elem_faces(num_elem, 1), n) + val(elem_faces(elz1, 4), n) - val(elem_faces(num_elem, 4), n));
601 deriv_vz *= 0.5 / delta_z_1;
612 deriv_uz = (val(elem_faces(num_elem, 0), n) - val(elem_faces(elz0, 0), n) + val(elem_faces(num_elem, 3), n) - val(elem_faces(elz0, 3), n));
613 deriv_uz *= 0.5 / delta_z_0;
614 deriv_vz = (val(elem_faces(num_elem, 1), n) - val(elem_faces(elz0, 1), n) + val(elem_faces(num_elem, 4), n) - val(elem_faces(elz0, 4), n));
615 deriv_vz *= 0.5 / delta_z_0;
620 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
622 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2), n) + delta_x * val(elem_faces(num_elem, 2), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2), n));
623 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5), n) + delta_x * val(elem_faces(num_elem, 5), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5), n));
624 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
626 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1), n) + delta_x * val(elem_faces(num_elem, 1), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1), n));
627 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4), n) + delta_x * val(elem_faces(num_elem, 4), n) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4), n));
628 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
632 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
634 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2), n) + delta_y * val(elem_faces(num_elem, 2), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2), n));
635 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5), n) + delta_y * val(elem_faces(num_elem, 5), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5), n));
636 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
638 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0), n) + delta_y * val(elem_faces(num_elem, 0), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0), n));
639 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3), n) + delta_y * val(elem_faces(num_elem, 3), n) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3), n));
640 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
643 rot(num_elem, N*0+n) = deriv_wy - deriv_vz;
644 rot(num_elem, N*1+n) = deriv_uz - deriv_wx;
645 rot(num_elem, N*2+n) = deriv_vx - deriv_uy;
649void calrotord2centelemdim3(DoubleTab& rot,
const DoubleTab& val,
const Domaine_VDF& domaine_VDF,
int nb_elem,
const IntTab& face_voisins,
const IntTab& elem_faces)
653 int elx0, elx1, ely0, ely1, elz0, elz1;
655 for (
int num_elem = 0; num_elem < nb_elem; num_elem++)
658 elx0 = face_voisins(elem_faces(num_elem, 0), 0);
659 elx1 = face_voisins(elem_faces(num_elem, 3), 1);
660 ely0 = face_voisins(elem_faces(num_elem, 1), 0);
661 ely1 = face_voisins(elem_faces(num_elem, 4), 1);
662 elz0 = face_voisins(elem_faces(num_elem, 2), 0);
663 elz1 = face_voisins(elem_faces(num_elem, 5), 1);
665 if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1) && (elz0 != -1) && (elz1 != -1))
668 calcul_interne3D(num_elem, elx0, elx1, ely0, ely1, elz0, elz1, domaine_VDF, val, rot);
670 calcul_bord3D(num_elem, elx0, elx1, ely0, ely1, elz0, elz1, domaine_VDF, val, rot);
679void calcul_dscald_interne2D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& dscald)
681 const IntTab& elem_faces = domaine_VDF.
elem_faces();
682 double delta_x_0, delta_x_1, delta_y_0, delta_y_1;
683 double delta_x, delta_y;
684 double delta_xbis, delta_ybis;
685 double deriv_ux, deriv_uy, deriv_vx, deriv_vy;
692 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
693 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
694 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
695 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
697 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
698 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
700 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
701 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
703 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1)) + delta_x * val(elem_faces(num_elem, 1)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1)));
704 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 3)) + delta_x * val(elem_faces(num_elem, 3)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 3)));
705 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
707 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0)) + delta_y * val(elem_faces(num_elem, 0)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0)));
708 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2)) + delta_y * val(elem_faces(num_elem, 2)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2)));
709 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
711 deriv_ux = (1. / delta_xbis) * (val(elem_faces(num_elem, 0)) - val(elem_faces(num_elem, 2)));
712 deriv_vy = (1. / delta_ybis) * (val(elem_faces(num_elem, 1)) - val(elem_faces(num_elem, 3)));
714 dscald[num_elem] = 4. * (deriv_ux * deriv_ux + deriv_vy * deriv_vy) + 2. * ((deriv_uy + deriv_vx) * (deriv_uy + deriv_vx));
718void calcul_dscald_interne3D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
int elz0,
int elz1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& dscald)
720 const IntTab& elem_faces = domaine_VDF.
elem_faces();
721 double delta_x_0, delta_x_1, delta_y_0, delta_y_1, delta_z_0, delta_z_1;
722 double delta_x, delta_y, delta_z;
723 double delta_xbis, delta_ybis, delta_zbis;
724 double deriv_ux, deriv_uy, deriv_uz, deriv_vx, deriv_vy, deriv_vz;
725 double deriv_wx, deriv_wy, deriv_wz;
737 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
738 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
739 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
740 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
741 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
742 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
744 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
745 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
746 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
748 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
749 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
750 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
752 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1)) + delta_z * val(elem_faces(num_elem, 1)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1)));
753 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4)) + delta_z * val(elem_faces(num_elem, 4)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4)));
754 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
756 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2)) + delta_y * val(elem_faces(num_elem, 2)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2)));
757 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5)) + delta_y * val(elem_faces(num_elem, 5)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5)));
758 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
760 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0)) + delta_z * val(elem_faces(num_elem, 0)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0)));
761 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3)) + delta_z * val(elem_faces(num_elem, 3)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3)));
762 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
764 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2)) + delta_x * val(elem_faces(num_elem, 2)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2)));
765 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5)) + delta_x * val(elem_faces(num_elem, 5)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5)));
766 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
768 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1)) + delta_x * val(elem_faces(num_elem, 1)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1)));
769 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4)) + delta_x * val(elem_faces(num_elem, 4)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4)));
770 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
772 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0)) + delta_y * val(elem_faces(num_elem, 0)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0)));
773 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3)) + delta_y * val(elem_faces(num_elem, 3)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3)));
774 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
776 deriv_ux = (1. / delta_xbis) * val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 0));
777 deriv_vy = (1. / delta_ybis) * val(elem_faces(num_elem, 4)) - val(elem_faces(num_elem, 1));
778 deriv_wz = (1. / delta_zbis) * val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2));
780 dscald[num_elem] = 4. * (deriv_ux * deriv_ux + deriv_vy * deriv_vy + deriv_wz * deriv_wz)
781 + 2. * ((deriv_uy + deriv_vx) * (deriv_uy + deriv_vx) + (deriv_wx + deriv_uz) * (deriv_wx + deriv_uz) + (deriv_wy + deriv_vz) * (deriv_wy + deriv_vz));
787void calcul_dscald_bord2D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& dscald)
789 const IntTab& elem_faces = domaine_VDF.
elem_faces();
790 double delta_x_0, delta_x_1, delta_y_0, delta_y_1;
791 double delta_x, delta_y;
792 double delta_xbis, delta_ybis;
793 double deriv_ux, deriv_vx, deriv_uy, deriv_vy;
801 if ((elx0 == -1) || (elx1 == -1))
807 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
808 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
810 deriv_vx = (val(elem_faces(elx1, 1)) - val(elem_faces(num_elem, 1)) + val(elem_faces(elx1, 3)) - val(elem_faces(num_elem, 3)));
811 deriv_vx *= 0.5 / delta_x_1;
812 deriv_ux = (val(elem_faces(num_elem, 2)) - val(elem_faces(num_elem, 0)));
813 deriv_ux *= (1. / delta_xbis);
824 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
825 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
827 deriv_vx = (val(elem_faces(num_elem, 1)) - val(elem_faces(elx0, 1)) + val(elem_faces(num_elem, 3)) - val(elem_faces(elx0, 3)));
828 deriv_vx *= 0.5 / delta_x_0;
829 deriv_ux = (val(elem_faces(num_elem, 2)) - val(elem_faces(num_elem, 0)));
830 deriv_ux *= (1. / delta_xbis);
835 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
836 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
837 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
838 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
840 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1)) + delta_x * val(elem_faces(num_elem, 1)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1)));
841 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 3)) + delta_x * val(elem_faces(num_elem, 3)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 3)));
842 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
843 deriv_ux = (val(elem_faces(num_elem, 2)) - val(elem_faces(num_elem, 0)));
844 deriv_ux *= (1. / delta_xbis);
848 if ((ely0 == -1) || (ely1 == -1))
854 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
855 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
857 deriv_uy = (val(elem_faces(ely1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(ely1, 2)) - val(elem_faces(num_elem, 2)));
858 deriv_uy *= 0.5 / delta_y_1;
859 deriv_vy = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 1)));
860 deriv_vy *= (1. / delta_ybis);
871 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
872 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
874 deriv_uy = (val(elem_faces(num_elem, 0)) - val(elem_faces(ely0, 0)) + val(elem_faces(num_elem, 2)) - val(elem_faces(ely0, 2)));
875 deriv_uy *= 0.5 / delta_y_0;
876 deriv_vy = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 1)));
877 deriv_vy *= (1. / delta_ybis);
882 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
883 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
884 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
885 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
887 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0)) + delta_y * val(elem_faces(num_elem, 0)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0)));
888 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2)) + delta_y * val(elem_faces(num_elem, 2)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2)));
889 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
890 deriv_vy = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 1)));
891 deriv_vy *= (1. / delta_ybis);
895 dscald[num_elem] = 4. * (deriv_ux * deriv_ux + deriv_vy * deriv_vy) + 2. * ((deriv_uy + deriv_vx) * (deriv_uy + deriv_vx));
899void calcul_dscald_bord3D(
int num_elem,
int elx0,
int elx1,
int ely0,
int ely1,
int elz0,
int elz1,
const Domaine_VDF& domaine_VDF,
const DoubleTab& val, DoubleTab& dscald)
901 const IntTab& elem_faces = domaine_VDF.
elem_faces();
902 double delta_x_0, delta_x_1, delta_y_0, delta_y_1, delta_z_0, delta_z_1;
903 double delta_x, delta_y, delta_z;
904 double delta_xbis, delta_ybis, delta_zbis;
905 double deriv_ux, deriv_uy, deriv_uz, deriv_vx, deriv_vy, deriv_vz;
906 double deriv_wx, deriv_wy, deriv_wz;
920 if ((elx0 == -1) || (elx1 == -1))
926 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
927 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
929 deriv_vx = (val(elem_faces(elx1, 1)) - val(elem_faces(num_elem, 1)) + val(elem_faces(elx1, 4)) - val(elem_faces(num_elem, 4)));
930 deriv_vx *= 0.5 / delta_x_1;
931 deriv_wx = (val(elem_faces(elx1, 2)) - val(elem_faces(num_elem, 2)) + val(elem_faces(elx1, 5)) - val(elem_faces(num_elem, 5)));
932 deriv_wx *= 0.5 / delta_x_1;
933 deriv_ux = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 0)));
934 deriv_ux *= (1. / delta_xbis);
945 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
946 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
948 deriv_vx = (val(elem_faces(num_elem, 1)) - val(elem_faces(elx0, 1)) + val(elem_faces(num_elem, 4)) - val(elem_faces(elx0, 4)));
949 deriv_vx *= 0.5 / delta_x_0;
950 deriv_wx = (val(elem_faces(num_elem, 2)) - val(elem_faces(elx0, 2)) + val(elem_faces(num_elem, 5)) - val(elem_faces(elx0, 5)));
951 deriv_wx *= 0.5 / delta_x_0;
952 deriv_ux = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 0)));
953 deriv_ux *= (1. / delta_xbis);
956 if ((ely0 == -1) || (ely1 == -1))
962 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
963 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
965 deriv_uy = (val(elem_faces(ely1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(ely1, 3)) - val(elem_faces(num_elem, 3)));
966 deriv_uy *= 0.5 / delta_y_1;
967 deriv_wy = (val(elem_faces(ely1, 2)) - val(elem_faces(num_elem, 2)) + val(elem_faces(ely1, 5)) - val(elem_faces(num_elem, 5)));
968 deriv_wy *= 0.5 / delta_y_1;
969 deriv_vy = (val(elem_faces(num_elem, 4)) - val(elem_faces(num_elem, 1)));
970 deriv_vy *= (1. / delta_ybis);
981 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
982 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
984 deriv_uy = (val(elem_faces(num_elem, 0)) - val(elem_faces(ely0, 0)) + val(elem_faces(num_elem, 3)) - val(elem_faces(ely0, 3)));
985 deriv_uy *= 0.5 / delta_y_0;
986 deriv_wy = (val(elem_faces(num_elem, 2)) - val(elem_faces(ely0, 2)) + val(elem_faces(num_elem, 5)) - val(elem_faces(ely0, 5)));
987 deriv_wy *= 0.5 / delta_y_0;
988 deriv_vy = (val(elem_faces(num_elem, 4)) - val(elem_faces(num_elem, 1)));
989 deriv_vy *= (1. / delta_ybis);
994 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
995 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
996 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
997 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
999 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0)) + delta_y * val(elem_faces(num_elem, 0)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0)));
1000 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3)) + delta_y * val(elem_faces(num_elem, 3)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3)));
1001 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
1003 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2)) + delta_y * val(elem_faces(num_elem, 2)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2)));
1004 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5)) + delta_y * val(elem_faces(num_elem, 5)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5)));
1005 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
1006 deriv_vy = (val(elem_faces(num_elem, 4)) - val(elem_faces(num_elem, 1)));
1007 deriv_vy *= (1. / delta_ybis);
1010 if ((elz0 == -1) || (elz1 == -1))
1016 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
1017 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1019 deriv_uz = (val(elem_faces(elz1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(elz1, 3)) - val(elem_faces(num_elem, 3)));
1020 deriv_uz *= 0.5 / delta_z_1;
1021 deriv_vz = (val(elem_faces(elz1, 1)) - val(elem_faces(num_elem, 1)) + val(elem_faces(elz1, 4)) - val(elem_faces(num_elem, 4)));
1022 deriv_vz *= 0.5 / delta_z_1;
1023 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1024 deriv_wz *= (1. / delta_zbis);
1035 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
1036 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1038 deriv_uz = (val(elem_faces(num_elem, 0)) - val(elem_faces(elz0, 0)) + val(elem_faces(num_elem, 3)) - val(elem_faces(elz0, 3)));
1039 deriv_uz *= 0.5 / delta_z_0;
1040 deriv_vz = (val(elem_faces(num_elem, 1)) - val(elem_faces(elz0, 1)) + val(elem_faces(num_elem, 4)) - val(elem_faces(elz0, 4)));
1041 deriv_vz *= 0.5 / delta_z_0;
1042 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1043 deriv_wz *= (1. / delta_zbis);
1048 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
1049 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
1050 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
1051 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1053 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0)) + delta_z * val(elem_faces(num_elem, 0)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0)));
1054 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3)) + delta_z * val(elem_faces(num_elem, 3)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3)));
1055 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
1057 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1)) + delta_z * val(elem_faces(num_elem, 1)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1)));
1058 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4)) + delta_z * val(elem_faces(num_elem, 4)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4)));
1059 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
1060 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1061 deriv_wz *= (1. / delta_zbis);
1065 else if ((ely0 == -1) || (ely1 == -1))
1072 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
1073 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
1075 deriv_uy = (val(elem_faces(ely1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(ely1, 3)) - val(elem_faces(num_elem, 3)));
1076 deriv_uy *= 0.5 / delta_y_1;
1077 deriv_wy = (val(elem_faces(ely1, 2)) - val(elem_faces(num_elem, 2)) + val(elem_faces(ely1, 5)) - val(elem_faces(num_elem, 5)));
1078 deriv_wy *= 0.5 / delta_y_1;
1079 deriv_vy = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 1)));
1080 deriv_vy *= (1. / delta_ybis);
1091 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
1092 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
1094 deriv_uy = (val(elem_faces(num_elem, 0)) - val(elem_faces(ely0, 0)) + val(elem_faces(num_elem, 3)) - val(elem_faces(ely0, 3)));
1095 deriv_uy *= 0.5 / delta_y_0;
1096 deriv_wy = (val(elem_faces(num_elem, 2)) - val(elem_faces(ely0, 2)) + val(elem_faces(num_elem, 5)) - val(elem_faces(ely0, 5)));
1097 deriv_wy *= 0.5 / delta_y_0;
1098 deriv_vy = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 1)));
1099 deriv_vy *= (1. / delta_ybis);
1102 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
1103 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
1104 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
1105 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
1107 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2)) + delta_x * val(elem_faces(num_elem, 2)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2)));
1108 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5)) + delta_x * val(elem_faces(num_elem, 5)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5)));
1109 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
1111 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1)) + delta_x * val(elem_faces(num_elem, 1)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1)));
1112 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4)) + delta_x * val(elem_faces(num_elem, 4)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4)));
1113 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
1114 deriv_ux = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 0)));
1115 deriv_ux *= (1. / delta_xbis);
1117 if ((elz0 == -1) || (elz1 == -1))
1123 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
1124 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1126 deriv_uz = (val(elem_faces(elz1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(elz1, 3)) - val(elem_faces(num_elem, 3)));
1127 deriv_uz *= 0.5 / delta_z_1;
1128 deriv_vz = (val(elem_faces(elz1, 1)) - val(elem_faces(num_elem, 1)) + val(elem_faces(elz1, 4)) - val(elem_faces(num_elem, 4)));
1129 deriv_vz *= 0.5 / delta_z_1;
1130 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1131 deriv_wz *= (1. / delta_zbis);
1142 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
1143 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1145 deriv_uz = (val(elem_faces(num_elem, 0)) - val(elem_faces(elz0, 0)) + val(elem_faces(num_elem, 3)) - val(elem_faces(elz0, 3)));
1146 deriv_uz *= 0.5 / delta_z_0;
1147 deriv_vz = (val(elem_faces(num_elem, 1)) - val(elem_faces(elz0, 1)) + val(elem_faces(num_elem, 4)) - val(elem_faces(elz0, 4)));
1148 deriv_vz *= 0.5 / delta_z_0;
1149 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1150 deriv_wz *= (1. / delta_zbis);
1155 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
1156 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
1157 delta_z = (delta_z_1 - delta_z_0) * (delta_z_1 + delta_z_0) / (delta_z_1 * delta_z_0);
1158 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1160 deriv_uz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 0)) + delta_z * val(elem_faces(num_elem, 0)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 0)));
1161 deriv_uz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 3)) + delta_z * val(elem_faces(num_elem, 3)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 3)));
1162 deriv_uz *= 0.5 / (delta_z_0 + delta_z_1);
1164 deriv_vz = (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 1)) + delta_z * val(elem_faces(num_elem, 1)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 1)));
1165 deriv_vz += (delta_z_0 / delta_z_1 * val(elem_faces(elz1, 4)) + delta_z * val(elem_faces(num_elem, 4)) - delta_z_1 / delta_z_0 * val(elem_faces(elz0, 4)));
1166 deriv_vz *= 0.5 / (delta_z_0 + delta_z_1);
1167 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1168 deriv_wz *= (1. / delta_zbis);
1171 else if ((elz0 == -1) || (elz1 == -1))
1177 delta_z_1 = domaine_VDF.
dist_elem(elz1, num_elem, 2);
1178 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1180 deriv_uz = (val(elem_faces(elz1, 0)) - val(elem_faces(num_elem, 0)) + val(elem_faces(elz1, 3)) - val(elem_faces(num_elem, 3)));
1181 deriv_uz *= 0.5 / delta_z_1;
1182 deriv_vz = (val(elem_faces(elz1, 1)) - val(elem_faces(num_elem, 1)) + val(elem_faces(elz1, 4)) - val(elem_faces(num_elem, 4)));
1183 deriv_vz *= 0.5 / delta_z_1;
1184 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1185 deriv_wz *= (1. / delta_zbis);
1196 delta_z_0 = domaine_VDF.
dist_elem(num_elem, elz0, 2);
1197 delta_zbis = domaine_VDF.
dim_elem(num_elem, 2);
1199 deriv_uz = (val(elem_faces(num_elem, 0)) - val(elem_faces(elz0, 0)) + val(elem_faces(num_elem, 3)) - val(elem_faces(elz0, 3)));
1200 deriv_uz *= 0.5 / delta_z_0;
1201 deriv_vz = (val(elem_faces(num_elem, 1)) - val(elem_faces(elz0, 1)) + val(elem_faces(num_elem, 4)) - val(elem_faces(elz0, 4)));
1202 deriv_vz *= 0.5 / delta_z_0;
1203 deriv_wz = (val(elem_faces(num_elem, 5)) - val(elem_faces(num_elem, 2)));
1204 deriv_wz *= (1. / delta_zbis);
1207 delta_x_0 = domaine_VDF.
dist_elem(num_elem, elx0, 0);
1208 delta_x_1 = domaine_VDF.
dist_elem(elx1, num_elem, 0);
1209 delta_x = (delta_x_1 - delta_x_0) * (delta_x_1 + delta_x_0) / (delta_x_1 * delta_x_0);
1210 delta_xbis = domaine_VDF.
dim_elem(num_elem, 0);
1212 deriv_wx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 2)) + delta_x * val(elem_faces(num_elem, 2)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 2)));
1213 deriv_wx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 5)) + delta_x * val(elem_faces(num_elem, 5)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 5)));
1214 deriv_wx *= 0.5 / (delta_x_0 + delta_x_1);
1216 deriv_vx = (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 1)) + delta_x * val(elem_faces(num_elem, 1)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 1)));
1217 deriv_vx += (delta_x_0 / delta_x_1 * val(elem_faces(elx1, 4)) + delta_x * val(elem_faces(num_elem, 4)) - delta_x_1 / delta_x_0 * val(elem_faces(elx0, 4)));
1218 deriv_vx *= 0.5 / (delta_x_0 + delta_x_1);
1219 deriv_ux = (val(elem_faces(num_elem, 3)) - val(elem_faces(num_elem, 0)));
1220 deriv_ux *= (1. / delta_xbis);
1222 delta_y_0 = domaine_VDF.
dist_elem(num_elem, ely0, 1);
1223 delta_y_1 = domaine_VDF.
dist_elem(ely1, num_elem, 1);
1224 delta_y = (delta_y_1 - delta_y_0) * (delta_y_1 + delta_y_0) / (delta_y_1 * delta_y_0);
1225 delta_ybis = domaine_VDF.
dim_elem(num_elem, 1);
1227 deriv_wy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 2)) + delta_y * val(elem_faces(num_elem, 2)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 2)));
1228 deriv_wy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 5)) + delta_y * val(elem_faces(num_elem, 5)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 5)));
1229 deriv_wy *= 0.5 / (delta_y_0 + delta_y_1);
1231 deriv_uy = (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 0)) + delta_y * val(elem_faces(num_elem, 0)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 0)));
1232 deriv_uy += (delta_y_0 / delta_y_1 * val(elem_faces(ely1, 3)) + delta_y * val(elem_faces(num_elem, 3)) - delta_y_1 / delta_y_0 * val(elem_faces(ely0, 3)));
1233 deriv_uy *= 0.5 / (delta_y_0 + delta_y_1);
1234 deriv_vy = (val(elem_faces(num_elem, 4)) - val(elem_faces(num_elem, 1)));
1235 deriv_ux *= (1. / delta_ybis);
1238 dscald[num_elem] = 4. * (deriv_ux * deriv_ux + deriv_vy * deriv_vy + deriv_wz * deriv_wz)
1239 + 2. * ((deriv_uy + deriv_vx) * (deriv_uy + deriv_vx) + (deriv_wx + deriv_uz) * (deriv_wx + deriv_uz) + (deriv_wy + deriv_vz) * (deriv_wy + deriv_vz));
1243void caldscaldcentelemdim2(DoubleTab& dscald,
const DoubleTab& val,
const Domaine_VDF& domaine_VDF,
int nb_elem,
const IntTab& face_voisins,
const IntTab& elem_faces)
1247 int elx0, elx1, ely0, ely1;
1249 for (
int num_elem = 0; num_elem < nb_elem; num_elem++)
1252 elx0 = face_voisins(elem_faces(num_elem, 0), 0);
1253 elx1 = face_voisins(elem_faces(num_elem, 2), 1);
1254 ely0 = face_voisins(elem_faces(num_elem, 1), 0);
1255 ely1 = face_voisins(elem_faces(num_elem, 3), 1);
1257 if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1))
1260 calcul_dscald_interne2D(num_elem, elx0, elx1, ely0, ely1, domaine_VDF, val, dscald);
1262 calcul_dscald_bord2D(num_elem, elx0, elx1, ely0, ely1, domaine_VDF, val, dscald);
1267void caldscaldcentelemdim3(DoubleTab& dscald,
const DoubleTab& val,
const Domaine_VDF& domaine_VDF,
int nb_elem,
const IntTab& face_voisins,
const IntTab& elem_faces)
1271 int elx0, elx1, ely0, ely1, elz0, elz1;
1273 for (
int num_elem = 0; num_elem < nb_elem; num_elem++)
1276 elx0 = face_voisins(elem_faces(num_elem, 0), 0);
1277 elx1 = face_voisins(elem_faces(num_elem, 3), 1);
1278 ely0 = face_voisins(elem_faces(num_elem, 1), 0);
1279 ely1 = face_voisins(elem_faces(num_elem, 4), 1);
1280 elz0 = face_voisins(elem_faces(num_elem, 2), 0);
1281 elz1 = face_voisins(elem_faces(num_elem, 5), 1);
1283 if ((elx0 != -1) && (elx1 != -1) && (ely0 != -1) && (ely1 != -1) && (elz0 != -1) && (elz1 != -1))
1286 calcul_dscald_interne3D(num_elem, elx0, elx1, ely0, ely1, elz0, elz1, domaine_VDF, val, dscald);
1288 calcul_dscald_bord3D(num_elem, elx0, elx1, ely0, ely1, elz0, elz1, domaine_VDF, val, dscald);
double dim_elem(int, int) const
double dist_elem_period(int, int, int) const
double dist_elem(int, int, int) const
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const