17#include <Modele_turbulence_scal_LES_dyn_VDF.h>
18#include <Convection_Diffusion_std.h>
19#include <Op_Dift_VDF_base.h>
21#include <Probleme_base.h>
22#include <Milieu_base.h>
24#include <Champ_Uniforme.h>
25#include <Modele_turbulence_hyd_LES_SMAGO_DYN_VDF.h>
26#include <Pb_Thermohydraulique_Turbulent_QC.h>
27#include <Fluide_Dilatable_base.h>
30#include <Modifier_pour_fluide_dilatable.h>
66 les_motcles[0] =
"STABILISE";
68 Motcles les_motcles_stabilise(4);
70 les_motcles_stabilise[0] =
"6_points";
71 les_motcles_stabilise[1] =
"plans_paralleles";
72 les_motcles_stabilise[2] =
"moy_euler";
73 les_motcles_stabilise[3] =
"moy_lagrange";
77 int rang = les_motcles.
search(motlu);
84 rang2 = les_motcles_stabilise.
search(motlutmp);
96 if (motlutmp ==
"Nb_points")
103 Cerr <<
"le mot clef stablise plans_paralleles doit necessairement etre suivi de Nb_points !!!\n" << finl;
122 Cerr <<
"Erreur a la lecture des donnees dans : " <<
que_suis_je() << finl;
123 Cerr << motlutmp <<
" n'est pas compris; Les mots compris sont : " << finl;
124 Cerr << les_motcles_stabilise;
151 DoubleTab& lambda_t = conductivite_turbulente_->valeurs();
155 for (
int i = 0; i < lambda_t.
size(); i++)
156 lambda_t(i) *= tab_Cp(Ccp ? 0 : i);
157 if (
equation().probleme().is_dilatable())
158 multiplier_par_rho_si_dilatable(lambda_t, le_milieu);
161 lambda_t *= tab_rho(0, 0) * tab_Cp(0, 0);
172 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_diffusivite_turbulente la_diffusivite_turbulente before", alpha_t);
178 le_dom_VDF->domaine().creer_tableau_elements(
model_coeff);
203 le_dom_VDF->domaine().creer_tableau_elements(Sij_grid_scale);
205 DoubleTab Sij_test_scale(Sij_grid_scale);
237 calculer_Mj(S_grid_scale_norme, S_test_scale_norme, grad_teta, filt_grad_teta, l, Mj);
241 for (
int element_number = 0; element_number < le_dom_VDF->domaine().nb_elem(); element_number++)
242 alpha_t(element_number) =
model_coeff(element_number) * l(element_number) * l(element_number) * S_grid_scale_norme(element_number);
248 const RefObjU& modele_turbulence_hydr = eq_NS_turb.
get_modele(TURBULENCE);
251 double temps = champ.
temps();
261 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_filter_coeff INPUT coeff",coeff);
262 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
263 const IntTab& face_voisins = domaine_VDF.
face_voisins();
265 const IntTab& elem_faces = domaine_VDF.
elem_faces();
267 int num0, num1, num2, num3, num4, num5;
268 int f0, f1, f2, f3, f4, f5;
270 DoubleTab temp1(filt_coeff);
271 DoubleTab temp2(filt_coeff);
275 for (element_number = 0; element_number < nb_elem; element_number++)
277 f0 = elem_faces(element_number, 0);
278 num0 = face_voisins(f0, 0);
279 f2 = elem_faces(element_number, 2);
280 num2 = face_voisins(f2, 1);
281 if ((num0 == -1) || (num2 == -1))
282 temp1(element_number) = coeff(element_number);
285 temp1(element_number) = 0.25 * (coeff(num0) + 2.0 * coeff(element_number) + coeff(num2));
289 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_filter_coeff temp1 2D",temp1);
290 for (element_number = 0; element_number < nb_elem; element_number++)
292 f1 = elem_faces(element_number, 1);
293 num1 = face_voisins(f1, 0);
294 f3 = elem_faces(element_number, 3);
295 num3 = face_voisins(f3, 1);
296 if ((num1 == -1) || (num3 == -1))
297 filt_coeff(element_number) = temp1(element_number);
300 filt_coeff(element_number) = 0.25 * (temp1(num1) + 2.0 * temp1(element_number) + temp1(num3));
307 for (element_number = 0; element_number < nb_elem; element_number++)
309 f0 = elem_faces(element_number, 0);
310 num0 = face_voisins(f0, 0);
311 f3 = elem_faces(element_number, 3);
312 num3 = face_voisins(f3, 1);
313 if ((num0 == -1) || (num3 == -1))
314 temp1(element_number) = coeff(element_number);
317 temp1(element_number) = 0.25 * (coeff(num0) + 2.0 * coeff(element_number) + coeff(num3));
321 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_filter_coeff temp1 3D",temp1);
322 for (element_number = 0; element_number < nb_elem; element_number++)
324 f1 = elem_faces(element_number, 1);
325 num1 = face_voisins(f1, 0);
326 f4 = elem_faces(element_number, 4);
327 num4 = face_voisins(f4, 1);
328 if ((num1 == -1) || (num4 == -1))
329 temp2(element_number) = temp1(element_number);
332 temp2(element_number) = 0.25 * (temp1(num1) + 2.0 * temp1(element_number) + temp1(num4));
336 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_filter_coeff temp2 3D",temp2);
337 for (element_number = 0; element_number < nb_elem; element_number++)
339 f2 = elem_faces(element_number, 2);
340 num2 = face_voisins(f2, 0);
341 f5 = elem_faces(element_number, 5);
342 num5 = face_voisins(f5, 1);
343 if ((num2 == -1) || (num5 == -1))
344 filt_coeff(element_number) = temp2(element_number);
347 filt_coeff(element_number) = 0.25 * (temp2(num2) + 2.0 * temp2(element_number) + temp2(num5));
352 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_filter_coeff OUTPUT filt_coeff",filt_coeff);
358 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Lj INPUT teta",teta);
359 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Lj INPUT filt_teta",filt_teta);
360 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Lj INPUT vel",vel);
361 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Lj INPUT filt_vel",filt_vel);
362 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
367 DoubleTab filt_u_teta(Lj);
369 for (element_number = 0; element_number < nb_elem_tot; element_number++)
372 temp(element_number, j) = vel(element_number, j) * teta(element_number);
377 for (element_number = 0; element_number < nb_elem_tot; element_number++)
380 Lj(element_number, j) = filt_u_teta(element_number, j) - filt_vel(element_number, j) * filt_teta(element_number);
382 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Lj OUTPUT Lj",Lj);
388 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_grad_teta INPUT teta",teta);
389 const int nb_elem = le_dom_VDF->domaine().nb_elem();
390 const int nb_faces_tot = le_dom_VDF->nb_faces();
391 const int nb_faces_bord = le_dom_VDF->domaine().nb_faces_bord();
394 const DoubleVect& flux_bords = operateur_diff.
flux_bords();
400 DoubleTab resu(le_dom_VDF->nb_faces_tot(), 1);
401 operateur_diff.
ajouter(
static_cast<const DoubleTab&
>(teta), resu);
403 const DoubleVect& faces_surfaces = le_dom_VDF->face_surfaces();
404 DoubleTab grad_teta_face(nb_faces_tot);
407 int face, n0, n1, ori;
408 const IntTab& face_voisins = le_dom_VDF->face_voisins();
409 const IntVect& orientation = le_dom_VDF->orientation();
410 const DoubleTab& xp = le_dom_VDF->xp();
418 for (face = 0; face < nb_faces_bord; face++)
419 grad_teta_face(face) = flux_bords(face) / faces_surfaces(face);
423 double coef = lambda.
valeurs()(0, 0);
424 for (face = 0; face < nb_faces_bord; face++)
425 grad_teta_face(face) /= coef;
430 for (face = 0; face < nb_faces_bord; face++)
432 num_elem = face_voisins(face, 0);
434 grad_teta_face(face) /= (lambda.
valeurs()(num_elem));
437 num_elem = face_voisins(face, 1);
438 grad_teta_face(face) /= (lambda.
valeurs()(num_elem));
444 for (face = le_dom_VDF->premiere_face_int(); face < nb_faces_tot; face++)
446 n0 = face_voisins(face, 0);
447 n1 = face_voisins(face, 1);
448 ori = orientation(face);
449 grad_teta_face(face) = (teta(n1) - teta(n0)) / (xp(n1, ori) - xp(n0, ori));
452 const IntTab& elem_faces = le_dom_VDF->elem_faces();
453 int num0, num1, num2, num3, num4, num5;
454 for (element_number = 0; element_number < nb_elem; element_number++)
456 num0 = elem_faces(element_number, 0);
457 num1 = elem_faces(element_number, 1);
458 num2 = elem_faces(element_number, 2);
459 num3 = elem_faces(element_number, 3);
463 grad_teta(element_number, 0) = (grad_teta_face[num0] + grad_teta_face[num2]) / 2;
464 grad_teta(element_number, 1) = (grad_teta_face[num1] + grad_teta_face[num3]) / 2;
468 num4 = elem_faces(element_number, 4);
469 num5 = elem_faces(element_number, 5);
470 grad_teta(element_number, 0) = (grad_teta_face[num0] + grad_teta_face[num3]) / 2;
471 grad_teta(element_number, 1) = (grad_teta_face[num1] + grad_teta_face[num4]) / 2;
472 grad_teta(element_number, 2) = (grad_teta_face[num2] + grad_teta_face[num5]) / 2;
476 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_grad_teta OUTPUT grad_teta",grad_teta);
483 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj INPUT S_grid_scale_norme", S_grid_scale_norme);
484 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj INPUT S_test_scale_norme", S_test_scale_norme);
485 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj INPUT grad_teta", grad_teta);
486 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj INPUT filt_grad_teta", filt_grad_teta);
487 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj INPUT l", l);
488 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
491 constexpr double alpha_squared = 6.0;
494 DoubleTab S_norme_filt_grad_teta(grad_teta);
496 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
499 temp(element_number, j) = S_grid_scale_norme(element_number) * grad_teta(element_number, j);
503 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
507 const double factor=S_norme_filt_grad_teta(element_number, j) - alpha_squared * S_test_scale_norme(element_number) * filt_grad_teta(element_number, j);
508 Mj(element_number, j) = l[element_number] * l[element_number] * factor;
513 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_Mj OUTPUT Mj", Mj);
520 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient INPUT Lj", Lj);
521 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient INPUT Mj", Mj);
524 int nb_elem = le_dom_VDF->domaine().nb_elem();
526 le_dom_VDF->domaine().creer_tableau_elements(haut);
527 le_dom_VDF->domaine().creer_tableau_elements(bas);
531 for (
int elem = 0; elem < nb_elem; elem++)
537 haut(elem) += Lj(elem, j) * Mj(elem, j);
538 bas(elem) += Mj(elem, j) * Mj(elem, j);
544 for (
int elem = 0; elem < nb_elem; elem++)
546 haut(elem) = Lj(elem, 1);
547 bas(elem) = Mj(elem, 1);
552 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient haut", haut);
553 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient bas", bas);
559 for (
int elem = 0; elem < nb_elem; elem++)
574 Journal() <<
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient: "
576 <<
" elements ont un coefficient inferieur a 0.0 (modele dynamique)" << finl;
580 Journal() <<
"Modele_turbulence_scal_LES_dyn_VDF::calculer_model_coefficient: "
582 <<
" elements ont un coefficient superieur a 0.5 (modele dynamique)" << finl;
602 Cerr <<
"probleme dans la definition de la methode de stabilisation" << finl;
611 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
612 const IntTab& face_voisins = domaine_VDF.
face_voisins();
614 const IntTab& elem_faces = domaine_VDF.
elem_faces();
616 int num0, num1, num2, num3, num4, num5;
617 int f0, f1, f2, f3, f4, f5;
619 DoubleTab temp1(nb_elem_tot);
620 DoubleTab temp2(nb_elem_tot);
621 DoubleTab model_coeff_tmp(nb_elem_tot);
624 for (element_number = 0; element_number < nb_elem_tot; element_number++)
626 if (std::fabs(bas(element_number)) < 1.e-12)
629 model_coeff[element_number] = haut[element_number] / bas[element_number];
636 for (element_number = 0; element_number < nb_elem_tot; element_number++)
638 f0 = elem_faces(element_number, 0);
639 num0 = face_voisins(f0, 0);
640 f2 = elem_faces(element_number, 2);
641 num2 = face_voisins(f2, 1);
642 if ((num0 == -1) || (num2 == -1))
644 temp1(element_number) = 3.0 *
model_coeff(element_number);
652 for (element_number = 0; element_number < nb_elem_tot; element_number++)
654 f1 = elem_faces(element_number, 1);
655 num1 = face_voisins(f1, 0);
656 f3 = elem_faces(element_number, 3);
657 num3 = face_voisins(f3, 1);
658 if ((num1 == -1) || (num3 == -1))
660 model_coeff(element_number) = temp1(element_number) / 3.0;
664 model_coeff(element_number) = (temp1(num1) + temp1(element_number) + temp1(num3)) / 9.0;
670 for (element_number = 0; element_number < nb_elem_tot; element_number++)
672 f0 = elem_faces(element_number, 0);
673 num0 = face_voisins(f0, 0);
674 f3 = elem_faces(element_number, 3);
675 num3 = face_voisins(f3, 1);
676 if ((num0 == -1) || (num3 == -1))
678 temp1(element_number) = 3.0 *
model_coeff(element_number);
686 for (element_number = 0; element_number < nb_elem_tot; element_number++)
688 f1 = elem_faces(element_number, 1);
689 num1 = face_voisins(f1, 0);
690 f4 = elem_faces(element_number, 4);
691 num4 = face_voisins(f4, 1);
692 if ((num1 == -1) || (num4 == -1))
693 temp2(element_number) = 3.0 * temp1(element_number);
696 temp2(element_number) = temp1(num1) + temp1(element_number) + temp1(num4);
700 for (element_number = 0; element_number < nb_elem_tot; element_number++)
702 f2 = elem_faces(element_number, 2);
703 num2 = face_voisins(f2, 0);
704 f5 = elem_faces(element_number, 5);
705 num5 = face_voisins(f5, 1);
706 if ((num2 == -1) || (num5 == -1))
707 model_coeff(element_number) = temp2(element_number) / 9.0;
710 model_coeff(element_number) = (temp2(num2) + temp2(element_number) + temp2(num5)) / 27.0;
719 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
722 DoubleVect coeff_m_tmp(
N_c_);
725 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
727 if (std::fabs(bas(element_number)) < 1.e-12)
730 model_coeff[element_number] = haut[element_number] / bas[element_number];
733 for (
int j = 0; j <
N_c_; j++)
734 coeff_m_tmp(j) = 0.0;
736 for (
int element_number = 0; element_number < nb_elem; element_number++)
739 for (
int j = 0; j <
N_c_; j++)
745 for (
int element_number = 0; element_number < nb_elem; element_number++)
754 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler INPUT haut", haut);
755 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler INPUT bas", bas);
757 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
759 static DoubleTab haut_moy(haut);
760 static DoubleTab bas_moy(bas);
762 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler INPUT (STATIC) haut_moy", haut_moy);
763 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler INPUT (STATIC) bas_moy", bas_moy);
785 const double dt = mon_equation_->schema_temps().pas_de_temps();
786 for (
int element_number = 0; element_number < nb_elem; element_number++)
791 const double a = haut_moy(element_number) * bas_moy(element_number);
794 const double T = 1.5 * l(element_number) * std::pow(a, - 0.125);
795 const double dt_T = dt/T;
796 eps = dt_T / (1 + dt_T);
799 double hmoy_new = eps * haut(element_number) + (1.0 - eps) * haut_moy(element_number);
805 double bmoy_new = eps * bas(element_number) + (1.0 - eps) * bas_moy(element_number);
808 double model_c = 0.16 * 0.16;
811 model_c = hmoy_new / bmoy_new;
816 haut_moy(element_number) = hmoy_new;
817 bas_moy(element_number) = bmoy_new;
821 Journal() <<
"Dans calcul viscosite on a " << nb_0 <<
" elements avec un coefficient negatif" << finl;
830 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler OUTPUT (STATIC) haut_moy", haut_moy);
831 Debog::verifier(
"Modele_turbulence_scal_LES_dyn_VDF::stabilise_moyenne_euler OUTPUT (STATIC) bas_moy", bas_moy);
841 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
843 static DoubleTab haut_moy(nb_elem_tot);
844 static DoubleTab bas_moy(nb_elem_tot);
845 double dt = mon_equation_->schema_temps().pas_de_temps();
847 DoubleTab haut_moy_tmp(nb_elem_tot), bas_moy_tmp(nb_elem_tot);
848 double haut_moy_int, bas_moy_int;
853 DoubleVect l(nb_elem_tot);
866 for (element_number = 0; element_number < nb_elem_tot; element_number++)
873 a = haut_moy(element_number) * bas_moy(element_number);
877 T = 1.5 * l(element_number) * pow(a, -0.125);
878 eps = dt / T / (1 + dt / T);
883 haut_moy_tmp(element_number) = eps * haut(element_number) + (1 - eps) * haut_moy_int;
884 if (haut_moy_tmp(element_number) < 0.0)
886 haut_moy_tmp(element_number) = 0.0;
889 bas_moy_tmp(element_number) = eps * bas(element_number) + (1 - eps) * bas_moy_int;
890 if (bas_moy_tmp(element_number) != 0.)
891 model_coeff(element_number) = haut_moy_tmp(element_number) / bas_moy_tmp(element_number);
895 haut_moy = haut_moy_tmp;
896 bas_moy = bas_moy_tmp;
899 Cerr <<
"Dans calcul viscosite on a " << nb_0 <<
" elements avec un coefficient negatif" << finl;
913 if (
elem_elem_(element_number, 1, 1, 1) == -1)
915 for (j = 0; j < 8; j++)
917 num[j] = element_number;
923 for (i = 0; i < 3; i++)
931 num[1] =
elem_elem_(element_number, 1, 1, indice(2));
932 num[2] =
elem_elem_(element_number, 1, indice(1), 1);
933 num[3] =
elem_elem_(element_number, 1, indice(1), indice(2));
934 num[4] =
elem_elem_(element_number, indice(0), 1, 1);
935 num[5] =
elem_elem_(element_number, indice(0), 1, indice(2));
936 num[6] =
elem_elem_(element_number, indice(0), indice(1), 1);
937 num[7] =
elem_elem_(element_number, indice(0), indice(1), indice(2));
939 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
940 const DoubleTab& xp = domaine_VDF.
xp();
942 for (i = 0; i < 3; i++)
943 x(i) = xp(element_number, i) -
cell_cent_vel(element_number, i) * dt;
945 for (j = 0; j < 8; j++)
947 for (i = 0; i < 3; i++)
948 dist(j) += (xp(num[j], i) - x(i)) * (xp(num[j], i) - x(i));
949 dist(j) = sqrt(dist(j));
954 d = (xp(num[0], 0) - xp(num[4], 0)) * (xp(num[0], 0) - xp(num[4], 0));
955 d += (xp(num[0], 1) - xp(num[2], 1)) * (xp(num[0], 1) - xp(num[2], 1));
956 d += (xp(num[0], 2) - xp(num[1], 2)) * (xp(num[0], 2) - xp(num[1], 2));
958 for (j = 0; j < 8; j++)
959 if (dist(j) * dist(j) < d / 10000)
962 for (j = 0; j < 8; j++)
964 num[j] = element_number;
972 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
973 const IntTab& face_voisins = domaine_VDF.
face_voisins();
974 const IntTab& elem_faces = domaine_VDF.
elem_faces();
976 int element_number, f, elem;
982 for (element_number = 0; element_number < nb_elem_tot; element_number++)
984 elem_elem_(element_number, 1, 1, 1) = element_number;
985 f = elem_faces(element_number, 0);
986 elem_elem_(element_number, 0, 1, 1) = face_voisins(f, 0);
990 f = elem_faces(elem, 1);
991 elem_elem_(element_number, 0, 0, 1) = face_voisins(f, 0);
992 f = elem_faces(elem, 2);
993 elem_elem_(element_number, 0, 1, 0) = face_voisins(f, 0);
994 f = elem_faces(elem, 4);
995 elem_elem_(element_number, 0, 2, 1) = face_voisins(f, 1);
996 f = elem_faces(elem, 5);
997 elem_elem_(element_number, 0, 1, 2) = face_voisins(f, 1);
999 f = elem_faces(element_number, 3);
1000 elem_elem_(element_number, 2, 1, 1) = face_voisins(f, 1);
1004 f = elem_faces(elem, 1);
1005 elem_elem_(element_number, 2, 0, 1) = face_voisins(f, 0);
1006 f = elem_faces(elem, 2);
1007 elem_elem_(element_number, 2, 1, 0) = face_voisins(f, 0);
1008 f = elem_faces(elem, 4);
1009 elem_elem_(element_number, 2, 2, 1) = face_voisins(f, 1);
1010 f = elem_faces(elem, 5);
1011 elem_elem_(element_number, 2, 1, 2) = face_voisins(f, 1);
1013 f = elem_faces(element_number, 1);
1014 elem_elem_(element_number, 1, 0, 1) = face_voisins(f, 1);
1018 f = elem_faces(elem, 2);
1019 elem_elem_(element_number, 1, 0, 0) = face_voisins(f, 0);
1020 f = elem_faces(elem, 5);
1021 elem_elem_(element_number, 1, 0, 2) = face_voisins(f, 1);
1023 f = elem_faces(element_number, 4);
1024 elem_elem_(element_number, 1, 2, 1) = face_voisins(f, 1);
1028 f = elem_faces(elem, 2);
1029 elem_elem_(element_number, 1, 2, 0) = face_voisins(f, 0);
1030 f = elem_faces(elem, 5);
1032 elem_elem_(element_number, 1, 2, 2) = face_voisins(f, 1);
1034 f = elem_faces(element_number, 2);
1035 elem_elem_(element_number, 1, 1, 0) = face_voisins(f, 0);
1036 f = elem_faces(element_number, 5);
1037 elem_elem_(element_number, 1, 1, 2) = face_voisins(f, 1);
1041 f = elem_faces(elem, 0);
1042 elem_elem_(element_number, 0, 2, 2) = face_voisins(f, 0);
1043 f = elem_faces(elem, 3);
1044 elem_elem_(element_number, 2, 2, 2) = face_voisins(f, 1);
1049 f = elem_faces(elem, 0);
1050 elem_elem_(element_number, 0, 2, 0) = face_voisins(f, 0);
1051 f = elem_faces(elem, 3);
1052 elem_elem_(element_number, 2, 2, 0) = face_voisins(f, 1);
1057 f = elem_faces(elem, 0);
1058 elem_elem_(element_number, 0, 0, 2) = face_voisins(f, 0);
1059 f = elem_faces(elem, 3);
1060 elem_elem_(element_number, 2, 0, 2) = face_voisins(f, 1);
1065 f = elem_faces(elem, 0);
1066 elem_elem_(element_number, 0, 0, 0) = face_voisins(f, 0);
1067 f = elem_faces(elem, 3);
1068 elem_elem_(element_number, 2, 0, 0) = face_voisins(f, 1);
1072 for (
int i = 0; i < 3; i++)
1073 for (
int j = 0; j < 3; j++)
1074 for (
int k = 0; k < 3; k++)
1075 if (
elem_elem_(element_number, i, j, k) == -1)
1086 const Domaine_dis_base& zdisbase = mon_equation_->inconnue().domaine_dis_base();
1088 const DoubleTab& xp = domaine_VDF.
xp();
1091 int num_elem, j, indic_c, trouve;
1099 corresp_c.
resize(nb_elems);
1109 const double tol_rel = 1.e-8;
1111 for (num_elem = 0; num_elem < nb_elems; num_elem++)
1113 y = xp(num_elem, 1);
1115 for (j = 0; j < indic_c + 1; j++)
1119 Cerr <<
"nb_points=" << N_c <<
" est trop petit pour le nombre de plans paralleles." << finl;
1120 Cerr <<
"Augmenter cette valeur." << finl;
1126 const double ref = std::fabs(y) + std::fabs(Y_c[j]) + 1.e-30;
1127 if (std::fabs(y - Y_c[j]) < tol_rel * ref)
1129 corresp_c[num_elem] = j;
1138 corresp_c[num_elem] = indic_c;
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
double temps() const
Renvoie le temps du champ.
const Champ_Inc_base & inconnue() const override=0
static void verifier(const char *const msg, double)
int_t nb_elem_tot() const
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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
double xp(int num_elem, int k) const
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const RefObjU & get_modele(Type_modele type) const
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
virtual const Champ_Don_base & capacite_calorifique() const
Renvoie la capacite calorifique du milieu.
virtual const Champ_Don_base & conductivite() const
Renvoie la conductivite du milieu.
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
static void calculer_length_scale(DoubleVect &, const Domaine_VDF &)
static void calculer_cell_cent_vel(DoubleTab &, const Domaine_VDF &, Champ_Inc_base &)
static void calculer_Sij(DoubleTab &, const Domaine_VDF &, const Domaine_Cl_VDF &, Champ_Inc_base &)
static void calculer_Sij_vel_filt(const DoubleTab &, DoubleTab &, const Domaine_VDF &)
static void calculer_S_norme(const DoubleTab &, DoubleVect &, int)
static void interpole(const IntVect &, const DoubleVect &, const DoubleVect &, double &)
static void calculer_filter_field(const DoubleTab &, DoubleTab &, const Domaine_VDF &)
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Champ_Fonc_base & viscosite_turbulente() const
void calculer_model_coefficient(const DoubleTab &, const DoubleTab &)
void stabilise_moyenne_lagrange(const DoubleTab &, const DoubleTab &)
void stabilise_moyenne(const DoubleTab &, const DoubleTab &)
void calculer_Mj(const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &)
void stabilise_moyenne_6_points(const DoubleTab &, const DoubleTab &)
void stabilise_moyenne_plans_paralleles(const DoubleTab &, const DoubleTab &)
void calcul_voisins(const int, IntVect &, DoubleVect &)
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
NE FAIT RIEN.
void calculer_Lj(const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &)
Champ_Fonc_base & calculer_diffusivite_turbulente()
void mettre_a_jour(double) override
void stabilise_moyenne_euler(const DoubleTab &, const DoubleTab &)
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
void set_param(Param &titi) const override
void calculer_filter_coeff(const DoubleTab &, DoubleTab &)
void calculer_grad_teta(const DoubleVect &, DoubleTab &)
void calcul_tableaux_correspondance(int &, IntVect &, IntVect &)
Classe Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
Convection_Diffusion_std & equation()
virtual void set_param(Param &) const override
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
virtual DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
classe Pb_Thermohydraulique_Turbulent Cette classe represente un probleme de thermohydraulique en flu...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Milieu_base & milieu() const
Renvoie le milieu physique associe au probleme.
virtual const Equation_base & equation(int) const =0
static int check_int_overflow(trustIdType)
static double mp_max(double)
static Sortie & Journal(int message_level=0)
Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
Classe de base des flux de sortie.
_SIZE_ size_array() const
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
const Objet_U & valeur() const