16#include <IJK_Field_vector.h>
18#include <Interprete_bloc.h>
22#include <IJK_Lata_writer.h>
23#include <IJK_Navier_Stokes_tools.h>
24#include <communications.h>
25#include <LecFicDiffuse_JDD.h>
28#include <Boundary_Conditions.h>
30#include <Perf_counters.h>
31#include <Turbulent_viscosity.h>
32#include <Filter_kernel.h>
58static inline double calculer_lambda_air(
double temperature)
60 const double fac_a = -5.05628e-18;
61 const double fac_b = 2.469e-14;
62 const double fac_c = -4.98344e-11;
63 const double fac_d = 7.06714e-08;
64 const double fac_e = 1.0894e-06;
65 const double facteur = 1.93198026315789000e-3 / 1.461e-6;
67 double val = temperature;
68 double calc = val * fac_a + fac_b;
69 calc = val * calc + fac_c;
70 calc = val * calc + fac_d;
71 calc = val * calc + fac_e;
72 return calc * facteur;
75static inline void choix_filter_kernel(
const int ghost_size,
76 const Nom& filter_kernel_name,
87 if ( filter_kernel_name ==
Nom(
"box") )
91 else if ( filter_kernel_name ==
Nom(
"weight_13_13_pondere") )
95 else if ( filter_kernel_name ==
Nom(
"weight_13_13_sansponderation") )
99 else if ( filter_kernel_name ==
Nom(
"weight_13_13_conservatif") )
103 else if ( filter_kernel_name ==
Nom(
"weight_12_14_pondere") )
107 else if ( filter_kernel_name ==
Nom(
"weight_12_14_sansponderation") )
111 else if ( filter_kernel_name ==
Nom(
"weight_12_14_conservatif") )
115 else if ( filter_kernel_name ==
Nom(
"weight_23_16_pondere") )
119 else if ( filter_kernel_name ==
Nom(
"weight_23_16_sansponderation") )
123 else if ( filter_kernel_name ==
Nom(
"weight_23_16_conservatif") )
127 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_pondere") )
131 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_sansponderation") )
135 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_conservatif") )
139 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_pondere") )
143 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_sansponderation") )
147 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_conservatif") )
151 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_pondere") )
155 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_sansponderation") )
159 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_conservatif") )
163 else if ( filter_kernel_name ==
Nom(
"weight_14_38_pondere") )
167 else if ( filter_kernel_name ==
Nom(
"weight_14_38_sansponderation") )
171 else if ( filter_kernel_name ==
Nom(
"weight_14_38_conservatif") )
175 else if ( filter_kernel_name ==
Nom(
"laplacian") )
181 Cerr <<
"Error: (Inconsistent parameters) "
182 <<
"The large eddy simulation model requires filtering but the filter kernel name is unknown or unspecified. "
183 <<
"To specify a filter kernel, you may use the keyword FILTER_KERNEL_NAME with the parameters BOX, GAUSSIAN, GAUSSIAN2, LAPLACIAN_SIMPLE, LAPLACIAN or NONE." << finl;
188static inline void choix_modele(
const Nom& turbulent_viscosity_model,
199 if ( turbulent_viscosity_model ==
Nom(
"constant") )
203 else if ( turbulent_viscosity_model ==
Nom(
"unsrho") )
207 else if ( turbulent_viscosity_model ==
Nom(
"smagorinsky") )
211 else if ( turbulent_viscosity_model ==
Nom(
"vreman") )
215 else if ( turbulent_viscosity_model ==
Nom(
"sigma") )
219 else if ( turbulent_viscosity_model ==
Nom(
"wale") )
223 else if ( turbulent_viscosity_model ==
Nom(
"amd") )
227 else if ( turbulent_viscosity_model ==
Nom(
"amd_comp") )
231 else if ( turbulent_viscosity_model ==
Nom(
"amdnoclip") )
235 else if ( turbulent_viscosity_model ==
Nom(
"amdscalar") )
239 else if ( turbulent_viscosity_model ==
Nom(
"amdscalarnoclip") )
243 else if ( turbulent_viscosity_model ==
Nom(
"rds") )
247 else if ( turbulent_viscosity_model ==
Nom(
"vss") )
251 else if ( turbulent_viscosity_model ==
Nom(
"kobayashi") )
257 Cerr <<
"The turbulent diffusion model name is unknown." << finl;
262void calculer_delta_z_pour_delta(
const Domaine_IJK& splitting,
264 const int ghost_size,
265 ArrOfDouble_with_ghost& delta_z_pour_delta)
269 ArrOfDouble elem_coord(nktot);
270 for (
int i = 0; i < nktot; i++)
272 elem_coord[i] = 0.5 * (coord_z[i] + coord_z[i+1]);
275 const int nktot_pour_delta = geom_pour_delta.
get_nb_elem_tot(DIRECTION_K);
276 const ArrOfDouble& global_delta_pour_delta = geom_pour_delta.
get_delta(DIRECTION_K);
278 ArrOfDouble elem_coord_pour_delta(nktot_pour_delta);
279 for (
int i = 0; i < nktot_pour_delta; i++)
281 elem_coord_pour_delta[i] = 0.5 * (coord_z_pour_delta[i] + coord_z_pour_delta[i+1]);
286 delta_z_pour_delta.
resize(nk, ghost_size);
292 int kg_1 = - ghost_size;
293 for (
int k = -ghost_size; k < nk + ghost_size; k++)
295 const int kg = k + offset;
300 coord = elem_coord[0];
302 else if (kg >= nktot)
304 coord = elem_coord[nktot - 1];
308 coord = elem_coord[kg];
311 while (coord_1 < coord)
319 coord_1 = coord_z_pour_delta[0];
321 else if (kg_1 >= nktot_pour_delta)
324 coord_1 = coord_z_pour_delta[nktot_pour_delta];
328 d1 = global_delta_pour_delta[kg_1];
329 coord_1 = elem_coord_pour_delta[kg_1];
335 if (coord_1 == coord_0)
337 if (coord_1 != coord || d0 != d1)
339 Cerr <<
"Ce n'est pas normal." << finl;
344 delta_z_pour_delta[k] = d0;
349 delta_z_pour_delta[k] = d0 + (d1 - d0)/(coord_1 - coord_0)*(coord - coord_0);
354void calculer_delta_z_filtre_identique(
const Domaine_IJK& splitting,
355 const ArrOfDouble_with_ghost& delta_z_pour_delta,
356 ArrOfDouble_with_ghost& delta_z_filtre)
362 for (
int k = 0; k < nk; k++)
364 const int kg = k + offset;
365 const double dz_pour_delta = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
366 delta_z_filtre[k] = sqrt(dz_pour_delta*dz_pour_delta + dz_pour_delta*dz_pour_delta);
370void calculer_delta_z_filtre_n_mailles(
const int taille_filtre,
372 const ArrOfDouble_with_ghost& delta_z,
373 const ArrOfDouble_with_ghost& delta_z_pour_delta,
374 ArrOfDouble_with_ghost& delta_z_filtre)
376 Cerr <<
"Taille du filtre explicite fixee a " << taille_filtre <<
" mailles." << finl;
382 const bool impair = (taille_filtre%2 != 0);
383 const int kp_min = impair ? (taille_filtre-1)/2 : (taille_filtre-2)/2;
384 const int kp_max = impair ? (taille_filtre-1)/2 : (taille_filtre-2)/2;
386 for (
int k = 0; k < nk; k++)
388 const int kg = k + offset;
390 double longueur_elem = 0.;
391 for (
int kp = -kp_min; kp < kp_max+1; kp++)
393 const int kpg = kg + kp;
394 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
401 const int kp = -kp_min - 1;
402 const int kpg = kg + kp;
403 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
407 const int kp = kp_max + 1;
408 const int kpg = kg + kp;
409 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
413 const double dz_pour_delta = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
414 delta_z_filtre[k] = sqrt(longueur_elem*longueur_elem + dz_pour_delta*dz_pour_delta);
419void calculer_temperature_mu_lambda_air(
const double P_th,
420 const double constante_specifique_gaz,
421 const IJK_Field_double& rho,
422 IJK_Field_double& temperature,
423 IJK_Field_double& molecular_mu,
424 IJK_Field_double& molecular_lambda,
427 const int imax = rho.
ni() + epaisseur_joint;
428 const int jmax = rho.
nj() + epaisseur_joint;
429 const int kmax = rho.
nk() + epaisseur_joint;
431 const double fac_a = -5.05628e-18;
432 const double fac_b = 2.469e-14;
433 const double fac_c = -4.98344e-11;
434 const double fac_d = 7.06714e-08;
435 const double fac_e = 1.0894e-06;
437 const double facteur = 1.93198026315789000e-3 / 1.461e-6;
439 const double facteur_temperature = P_th / constante_specifique_gaz;
441 for (
int k = -epaisseur_joint; k < kmax; k++)
443 for (
int j = -epaisseur_joint; j < jmax; j++)
445 for (
int i = -epaisseur_joint; i < imax; i++)
447 const double r = rho(i, j, k);
448 const double temp = facteur_temperature / r;
449 temperature(i,j,k) = temp;
450 double calc = temp * fac_a + fac_b;
451 calc = temp * calc + fac_c;
452 calc = temp * calc + fac_d;
453 calc = temp * calc + fac_e;
454 molecular_lambda(i,j,k) = calc * facteur;
455 molecular_mu(i,j,k) = calc;
461void multiplier_champ(
const double coefficient,
462 const IJK_Field_double& champ_in,
463 IJK_Field_double& champ_out)
465 const int ni = champ_out.
ni();
466 const int nj = champ_out.
nj();
467 const int nk = champ_out.
nk();
469 for (
int k = 0; k < nk; k++)
471 for (
int j = 0; j < nj; j++)
473 for (
int i = 0; i < ni; i++)
475 champ_out(i,j,k) = coefficient * champ_in(i,j,k);
481void multiplier_champ(
const IJK_Field_double& champ_rho,
482 IJK_Field_double& champ)
484 const int ni = champ.ni();
485 const int nj = champ.nj();
486 const int nk = champ.nk();
488 for (
int k = 0; k < nk; k++)
490 for (
int j = 0; j < nj; j++)
492 for (
int i = 0; i < ni; i++)
494 champ(i,j,k) = champ_rho(i,j,k) * champ(i,j,k);
503void add_fields(
const IJK_Field_double& field1, IJK_Field_double& field2)
505 const int ni = field2.
ni();
506 const int nj = field2.
nj();
507 const int nk = field2.
nk();
508 for (
int k = 0; k < nk; k++)
510 for (
int j = 0; j < nj; j++)
512 for (
int i = 0; i < ni; i++)
514 field2(i,j,k) += field1(i,j,k);
521void add_fields_k(
const IJK_Field_double& field1, IJK_Field_double& field2,
const int k)
523 const int ni = field2.
ni();
524 const int nj = field2.
nj();
525 for (
int j = 0; j < nj; j++)
527 for (
int i = 0; i < ni; i++)
529 field2(i,j,k) += field1(i,j,k);
534void multiplier_champ_rho_arete_ij(
const IJK_Field_double& champ_rho,
535 IJK_Field_double& champ)
537 const int ni = champ.ni();
538 const int nj = champ.nj();
539 const int nk = champ.nk();
541 for (
int k = 0; k < nk; k++)
543 for (
int j = 0; j < nj; j++)
545 for (
int i = 0; i < ni; i++)
547 const double rho = champ_rho(i,j,k);
548 const double rho_im1 = champ_rho(i-1,j,k);
549 const double rho_jm1 = champ_rho(i,j-1,k);
550 const double rho_im1_jm1 = champ_rho(i-1,j-1,k);
551 const double rho_ij = 0.25 * (rho + rho_im1 + rho_jm1 + rho_im1_jm1);
552 champ(i,j,k) = rho_ij * champ(i,j,k);
558void multiplier_champ_rho_arete_ik(
const IJK_Field_double& champ_rho,
560 IJK_Field_double& champ)
564 const int ni = champ.ni();
565 const int nj = champ.nj();
566 const int nk = champ.nk();
568 for (
int k = 0; k < nk; k++)
570 for (
int j = 0; j < nj; j++)
572 for (
int i = 0; i < ni; i++)
574 const int kg = k + offset;
575 const double rho = champ_rho(i,j,k);
576 const double rho_im1 = champ_rho(i-1,j,k);
577 const double rho_ik = kg==0 ? rho_kmin : 0.25 * (rho + rho_im1 + champ_rho(i,j,k-1) + champ_rho(i-1,j,k-1));
578 champ(i,j,k) = rho_ik * champ(i,j,k);
584void multiplier_champ_rho_arete_jk(
const IJK_Field_double& champ_rho,
586 IJK_Field_double& champ)
590 const int ni = champ.ni();
591 const int nj = champ.nj();
592 const int nk = champ.nk();
594 for (
int k = 0; k < nk; k++)
596 for (
int j = 0; j < nj; j++)
598 for (
int i = 0; i < ni; i++)
600 const int kg = k + offset;
601 const double rho = champ_rho(i,j,k);
602 const double rho_jm1 = champ_rho(i,j-1,k);
603 const double rho_jk = kg==0 ? rho_kmin : 0.25 * (rho + rho_jm1 + champ_rho(i,j,k-1) + champ_rho(i,j-1,k-1));
604 champ(i,j,k) = rho_jk * champ(i,j,k);
610void multiplier_champ(
const IJK_Field_double& champ_rho,
611 const double& constant,
612 IJK_Field_double& champ)
614 const int ni = champ.ni();
615 const int nj = champ.nj();
616 const int nk = champ.nk();
618 for (
int k = 0; k < nk; k++)
620 for (
int j = 0; j < nj; j++)
622 for (
int i = 0; i < ni; i++)
624 champ(i,j,k) = champ_rho(i,j,k) * champ(i,j,k) * constant;
630void multiplier_champ_rho_face_i(
const int flag_add,
631 const IJK_Field_double& champ_rho,
632 const double& constant,
633 const IJK_Field_double& champ_in,
634 IJK_Field_double& champ_out)
636 const int ni = champ_in.
ni();
637 const int nj = champ_in.
nj();
638 const int nk = champ_in.
nk();
640 for (
int k = 0; k < nk; k++)
642 for (
int j = 0; j < nj; j++)
644 for (
int i = 0; i < ni; i++)
646 const double rho = champ_rho(i,j,k);
647 const double rho_im1 = champ_rho(i-1,j,k);
648 const double rhof_i = 0.5 * (rho + rho_im1);
651 champ_out(i,j,k) += rhof_i * champ_in(i,j,k) * constant;
655 champ_out(i,j,k) = rhof_i * champ_in(i,j,k) * constant;
662void multiplier_champ_rho_face_j(
const int flag_add,
663 const IJK_Field_double& champ_rho,
664 const double& constant,
665 const IJK_Field_double& champ_in,
666 IJK_Field_double& champ_out)
668 const int ni = champ_in.
ni();
669 const int nj = champ_in.
nj();
670 const int nk = champ_in.
nk();
672 for (
int k = 0; k < nk; k++)
674 for (
int j = 0; j < nj; j++)
676 for (
int i = 0; i < ni; i++)
678 const double rho = champ_rho(i,j,k);
679 const double rho_jm1 = champ_rho(i,j-1,k);
680 const double rhof_j = 0.5 * (rho + rho_jm1);
683 champ_out(i,j,k) += rhof_j * champ_in(i,j,k) * constant;
687 champ_out(i,j,k) = rhof_j * champ_in(i,j,k) * constant;
694void multiplier_champ_rho_face_k(
const int flag_add,
695 const IJK_Field_double& champ_rho,
696 const double& constant,
698 const IJK_Field_double& champ_in,
699 IJK_Field_double& champ_out)
703 const int ni = champ_in.
ni();
704 const int nj = champ_in.
nj();
705 const int nk = champ_in.
nk();
707 for (
int k = 0; k < nk; k++)
709 for (
int j = 0; j < nj; j++)
711 for (
int i = 0; i < ni; i++)
713 const int kg = k + offset;
714 const double rho = champ_rho(i,j,k);
715 const double rhof_k = kg==0 ? rho_kmin : 0.5 * (rho + champ_rho(i,j,k-1));
718 champ_out(i,j,k) += rhof_k * champ_in(i,j,k) * constant;
722 champ_out(i,j,k) = rhof_k * champ_in(i,j,k) * constant;
729inline void multiplier_champ_rho_face_i(
const IJK_Field_double& champ_rho,
730 const double& constant,
731 IJK_Field_double& champ)
733 multiplier_champ_rho_face_i(
false, champ_rho, constant, champ, champ);
736inline void multiplier_champ_rho_face_j(
const IJK_Field_double& champ_rho,
737 const double& constant,
738 IJK_Field_double& champ)
740 multiplier_champ_rho_face_j(
false, champ_rho, constant, champ, champ);
743inline void multiplier_champ_rho_face_k(
const IJK_Field_double& champ_rho,
744 const double& constant,
746 IJK_Field_double& champ)
748 multiplier_champ_rho_face_k(
false, champ_rho, constant, rho_kmin, champ, champ);
752void filtrer_champ_elem(
const int flag_add,
753 const IJK_Field_double& champ,
754 const ArrOfDouble_with_ghost& delta_z,
755 const double facteur_delta_x,
756 const double facteur_delta_y,
757 const ArrOfDouble_with_ghost& delta_z_pour_delta,
761 IJK_Field_double& champ_filtre)
763 const double dx = champ.get_domaine().get_constant_delta(DIRECTION_I);
764 const double dy = champ.get_domaine().get_constant_delta(DIRECTION_J);
765 const double dx_pour_delta = facteur_delta_x*dx;
766 const double dy_pour_delta = facteur_delta_y*dy;
768 const int ni = champ.ni();
769 const int nj = champ.nj();
770 const int nk = champ.nk();
772 const int nktot = champ.get_domaine().get_nb_items_global(
Domaine_IJK::ELEM, DIRECTION_K);
773 const int offset = champ.get_domaine().get_offset_local(DIRECTION_K);
775 IJK_Field_local_double& b = tmp_b[0];
776 IJK_Field_local_double& a = tmp_a[0];
778 const int ghost_size_filter = kernel->ghost_size();
779 const int size_uniform = kernel->size_uniform();
780 const int shift_uniform = kernel->shift_uniform();
781 for (
int k = 0; k < nk; k++)
783 const int kg = k + offset;
785 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
786 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
788 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
791 const int size_k_elem = kernel->size_k_elem(kg, nktot);
792 const int shift_k_elem = kernel->shift_k_elem(kg);
793 const bool ponderation_filter_kernel = kernel->ponderation();
794 const bool normalisation_filter_kernel = kernel->normalisation();
796 double facteur_elem = 0.;
797 if (ponderation_filter_kernel)
799 if (normalisation_filter_kernel)
801 double longueur_elem = 0.;
802 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
804 const int kpg = kg + kp;
805 if (kpg<-1 || kpg>nktot)
807 Cerr <<
"This should not happen." << finl;
810 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
811 const double filter_coef_z = filter_kernel_z[kp+10];
812 longueur_elem += filter_coef_z * dz;
814 facteur_elem = 1./longueur_elem;
818 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
822 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
824 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
827 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
829 const int kpg = kg + kp;
830 if (!(kernel->is_at_wall_elem(kpg, nktot)))
832 const double filter_coef_z = filter_kernel_z[kp+10];
833 if (ponderation_filter_kernel)
835 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
836 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z * dz * facteur_elem;
840 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z;
846 for (
int j = 0; j < nj; j++)
848 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
851 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
853 const double filter_coef_y = filter_kernel_y[jp+10];
854 a(i, 0, 0) += b(i, j+jp, 0) * filter_coef_y;
858 for (
int i = 0; i < ni; i++)
861 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
863 const double filter_coef_x = filter_kernel_x[ip+10];
864 r += a(i+ip, 0, 0) * filter_coef_x;
869 champ_filtre(i,j,k) += r;
873 champ_filtre(i,j,k) = r;
881void filtrer_champ_face(
const int flag_add,
882 const IJK_Field_double& champ,
883 const ArrOfDouble_with_ghost& delta_z,
884 const double facteur_delta_x,
885 const double facteur_delta_y,
886 const ArrOfDouble_with_ghost& delta_z_pour_delta,
890 IJK_Field_double& champ_filtre)
893 const double dy = champ.get_domaine().get_constant_delta(DIRECTION_J);
894 const double dx_pour_delta = facteur_delta_x*dx;
895 const double dy_pour_delta = facteur_delta_y*dy;
897 const int ni = champ.ni();
898 const int nj = champ.nj();
899 const int nk = champ.nk();
901 const int nktot = champ.get_domaine().get_nb_items_global(
Domaine_IJK::ELEM, DIRECTION_K);
902 const int offset = champ.get_domaine().get_offset_local(DIRECTION_K);
904 IJK_Field_local_double& b = tmp_b[0];
905 IJK_Field_local_double& a = tmp_a[0];
907 const int ghost_size_filter = kernel->ghost_size();
908 const int size_uniform = kernel->size_uniform();
909 const int shift_uniform = kernel->shift_uniform();
910 for (
int k = 0; k < nk; k++)
912 const int kg = k + offset;
914 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
915 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
916 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
917 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
918 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
919 const double delta_m_pour_delta_glo = (kg-1<0 || kg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta_glo + dz_m1_pour_delta_glo);
921 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
924 const int size_k_face = kernel->size_k_face(kg, nktot);
925 const int shift_k_face = kernel->shift_k_face(kg);
926 const bool ponderation_filter_kernel = kernel->ponderation();
927 const bool normalisation_filter_kernel = kernel->normalisation();
929 double facteur_face = 0.;
930 if (ponderation_filter_kernel)
932 if (normalisation_filter_kernel)
934 double longueur_face = 0.;
935 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
937 const int kpg = kg + kp;
938 if (kpg<0 || kpg>nktot)
940 Cerr <<
"This should not happen." << finl;
943 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
944 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
945 const double dzf = 0.5*(dz + dz_m1);
946 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
947 longueur_face += filter_coef_z_face * dzf;
949 facteur_face = 1./longueur_face;
953 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
957 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
959 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
962 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
964 const int kpg = kg + kp;
965 if (!(kernel->is_at_wall_face(kpg, nktot)))
967 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
968 if (ponderation_filter_kernel)
970 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
971 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
972 const double dzf = 0.5*(dz + dz_m1);
973 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z_face * dzf * facteur_face;
977 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z_face;
983 for (
int j = 0; j < nj; j++)
985 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
988 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
990 const double filter_coef_y = filter_kernel_y[jp+10];
991 a(i, 0, 0) += b(i, j+jp, 0) * filter_coef_y;
995 for (
int i = 0; i < ni; i++)
998 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
1000 const double filter_coef_x = filter_kernel_x[ip+10];
1001 r += a(i+ip, 0, 0) * filter_coef_x;
1006 champ_filtre(i,j,k) += r;
1010 champ_filtre(i,j,k) = r;
1017static inline void calculer_g(
int i,
int j,
int k,
1018 const IJK_Field_vector3_double& velocity,
1019 const ArrOfDouble_with_ghost& delta_z_maillage,
1020 const double dx_delta,
1021 const double dy_delta,
1022 const double dz_delta,
1023 const double delta_m_delta,
1024 const double delta_p_delta,
1027 const IJK_Field_double& vitesse_i = velocity[0];
1028 const IJK_Field_double& vitesse_j = velocity[1];
1029 const IJK_Field_double& vitesse_k = velocity[2];
1033 const double deltaunsurdx = dx_delta * 1./dx;
1034 const double deltaunsurdy = dy_delta * 1./dy;
1039 const int kg = k + offset;
1040 const double dz = delta_z_maillage[k];
1041 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1042 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1044 const double deltaunsurdz = dz_delta * 1./dz;
1045 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1046 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1048 const double uf_i = vitesse_i(i,j,k);
1049 const double uf_ip1 = vitesse_i(i+1,j,k);
1050 const double uf_i_jm1 = vitesse_i(i,j-1,k);
1051 const double uf_i_jp1 = vitesse_i(i,j+1,k);
1052 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
1053 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
1054 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
1055 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
1056 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
1057 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
1059 const double vf_j = vitesse_j(i,j,k);
1060 const double vf_j_im1 = vitesse_j(i-1,j,k);
1061 const double vf_j_ip1 = vitesse_j(i+1,j,k);
1062 const double vf_jp1 = vitesse_j(i,j+1,k);
1063 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
1064 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
1065 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
1066 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
1067 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
1068 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
1070 const double wf_k = vitesse_k(i,j,k);
1071 const double wf_k_im1 = vitesse_k(i-1,j,k);
1072 const double wf_k_ip1 = vitesse_k(i+1,j,k);
1073 const double wf_k_jm1 = vitesse_k(i,j-1,k);
1074 const double wf_k_jp1 = vitesse_k(i,j+1,k);
1075 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
1076 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
1077 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
1078 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
1079 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
1081 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
1082 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
1083 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
1085 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
1086 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
1087 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
1088 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
1090 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
1091 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
1092 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
1093 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
1095 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
1096 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
1097 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
1098 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
1100 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
1101 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
1102 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
1103 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
1105 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
1106 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
1107 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
1108 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
1110 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
1111 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
1112 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
1113 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
1116 g[0][1] = 0.25 * (duidy_ip1jp1 + duidy_ijp1 + duidy_ip1j + duidy_ij);
1117 g[0][2] = 0.25 * (duidz_ip1kp1 + duidz_ikp1 + duidz_ip1k + duidz_ik);
1118 g[1][0] = 0.25 * (dujdx_ip1jp1 + dujdx_ip1j + dujdx_ijp1 + dujdx_ij);
1120 g[1][2] = 0.25 * (dujdz_jp1kp1 + dujdz_jkp1 + dujdz_jp1k + dujdz_jk);
1121 g[2][0] = 0.25 * (dukdx_ip1kp1 + dukdx_ip1k + dukdx_ikp1 + dukdx_ik);
1122 g[2][1] = 0.25 * (dukdy_jp1kp1 + dukdy_jp1k + dukdy_jkp1 + dukdy_jk);
1126static inline void calculer_tau(
int i,
int j,
int k,
1127 const IJK_Field_vector3_double& velocity,
1128 const IJK_Field_double& turbulent_mu_xx,
1129 const IJK_Field_double& turbulent_mu_xy,
1130 const IJK_Field_double& turbulent_mu_xz,
1131 const IJK_Field_double& turbulent_mu_yy,
1132 const IJK_Field_double& turbulent_mu_yz,
1133 const IJK_Field_double& turbulent_mu_zz,
1134 const ArrOfDouble_with_ghost& delta_z_maillage,
1135 const double dx_delta,
1136 const double dy_delta,
1137 const double dz_delta,
1138 const double delta_m_delta,
1139 const double delta_p_delta,
1142 const IJK_Field_double& vitesse_i = velocity[0];
1143 const IJK_Field_double& vitesse_j = velocity[1];
1144 const IJK_Field_double& vitesse_k = velocity[2];
1148 const double deltaunsurdx = dx_delta * 1./dx;
1149 const double deltaunsurdy = dy_delta * 1./dy;
1154 const int kg = k + offset;
1155 const double dz = delta_z_maillage[k];
1156 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1157 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1159 const double deltaunsurdz = dz_delta * 1./dz;
1160 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1161 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1163 const double nu_xx = turbulent_mu_xx(i,j,k);
1165 const double nu_xy = turbulent_mu_xy(i,j,k);
1166 const double nu_xy_im1 = turbulent_mu_xy(i-1,j,k);
1167 const double nu_xy_jm1 = turbulent_mu_xy(i,j-1,k);
1168 const double nu_xy_im1_jm1 = turbulent_mu_xy(i-1,j-1,k);
1169 const double nu_xy_ip1 = turbulent_mu_xy(i+1,j,k);
1170 const double nu_xy_jp1 = turbulent_mu_xy(i,j+1,k);
1171 const double nu_xy_ip1_jp1 = turbulent_mu_xy(i+1,j+1,k);
1172 const double nu_xy_im1_jp1 = turbulent_mu_xy(i-1,j+1,k);
1173 const double nu_xy_ip1_jm1 = turbulent_mu_xy(i+1,j-1,k);
1175 const double nu_xz = turbulent_mu_xz(i,j,k);
1176 const double nu_xz_im1 = turbulent_mu_xz(i-1,j,k);
1177 const double nu_xz_km1 = kg==0 ? 0. : turbulent_mu_xz(i,j,k-1);
1178 const double nu_xz_im1_km1 = kg==0 ? 0. : turbulent_mu_xz(i-1,j,k-1);
1179 const double nu_xz_ip1 = turbulent_mu_xz(i+1,j,k);
1180 const double nu_xz_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i,j,k+1);
1181 const double nu_xz_ip1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i+1,j,k+1);
1182 const double nu_xz_im1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i-1,j,k+1);
1183 const double nu_xz_ip1_km1 = kg==0 ? 0. : turbulent_mu_xz(i+1,j,k-1);
1185 const double nu_yy = turbulent_mu_yy(i,j,k);
1187 const double nu_yz = turbulent_mu_yz(i,j,k);
1188 const double nu_yz_jm1 = turbulent_mu_yz(i,j-1,k);
1189 const double nu_yz_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j,k-1);
1190 const double nu_yz_jm1_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j-1,k-1);
1191 const double nu_yz_jp1 = turbulent_mu_yz(i,j+1,k);
1192 const double nu_yz_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j,k+1);
1193 const double nu_yz_jp1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j+1,k+1);
1194 const double nu_yz_jm1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j-1,k+1);
1195 const double nu_yz_jp1_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j+1,k-1);
1197 const double nu_xy_ij = 0.25 * (nu_xy + nu_xy_im1 + nu_xy_jm1 + nu_xy_im1_jm1);
1198 const double nu_xy_ip1j = 0.25 * (nu_xy_ip1 + nu_xy + nu_xy_ip1_jm1 + nu_xy_jm1);
1199 const double nu_xy_ijp1 = 0.25 * (nu_xy_jp1 + nu_xy_im1_jp1 + nu_xy + nu_xy_im1);
1200 const double nu_xy_ip1jp1 = 0.25 * (nu_xy_ip1_jp1 + nu_xy_jp1 + nu_xy_ip1 + nu_xy);
1201 const double nu_xz_ik = 0.25 * (nu_xz + nu_xz_im1 + nu_xz_km1 + nu_xz_im1_km1);
1202 const double nu_xz_ip1k = 0.25 * (nu_xz_ip1 + nu_xz + nu_xz_ip1_km1 + nu_xz_km1);
1203 const double nu_xz_ikp1 = 0.25 * (nu_xz_kp1 + nu_xz_im1_kp1 + nu_xz + nu_xz_im1);
1204 const double nu_xz_ip1kp1 = 0.25 * (nu_xz_ip1_kp1 + nu_xz_kp1 + nu_xz_ip1 + nu_xz);
1205 const double nu_yz_jk = 0.25 * (nu_yz + nu_yz_jm1 + nu_yz_km1 + nu_yz_jm1_km1);
1206 const double nu_yz_jp1k = 0.25 * (nu_yz_jp1 + nu_yz + nu_yz_jp1_km1 + nu_yz_km1);
1207 const double nu_yz_jkp1 = 0.25 * (nu_yz_kp1 + nu_yz_jm1_kp1 + nu_yz + nu_yz_jm1);
1208 const double nu_yz_jp1kp1 = 0.25 * (nu_yz_jp1_kp1 + nu_yz_kp1 + nu_yz_jp1 + nu_yz);
1210 const double nu_zz = turbulent_mu_zz(i,j,k);
1212 const double uf_i = vitesse_i(i,j,k);
1213 const double uf_i_jm1 = vitesse_i(i,j-1,k);
1214 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
1216 const double vf_j = vitesse_j(i,j,k);
1217 const double vf_j_im1 = vitesse_j(i-1,j,k);
1218 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
1220 const double wf_k = vitesse_k(i,j,k);
1221 const double wf_k_im1 = vitesse_k(i-1,j,k);
1222 const double wf_k_jm1 = vitesse_k(i,j-1,k);
1224 const double uf_ip1 = vitesse_i(i+1,j,k);
1225 const double uf_i_jp1 = vitesse_i(i,j+1,k);
1226 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
1227 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
1228 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
1229 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
1230 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
1232 const double vf_j_ip1 = vitesse_j(i+1,j,k);
1233 const double vf_jp1 = vitesse_j(i,j+1,k);
1234 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
1235 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
1236 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
1237 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
1238 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
1240 const double wf_k_ip1 = vitesse_k(i+1,j,k);
1241 const double wf_k_jp1 = vitesse_k(i,j+1,k);
1242 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
1243 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
1244 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
1245 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
1246 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
1248 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
1249 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
1250 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
1252 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
1253 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
1254 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
1255 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
1257 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
1258 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
1259 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
1260 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
1262 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
1263 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
1264 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
1265 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
1267 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
1268 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
1269 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
1270 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
1272 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
1273 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
1274 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
1275 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
1277 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
1278 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
1279 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
1280 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
1282 const double s_ii = 0.5 * (duidx + duidx);
1283 const double s_jj = 0.5 * (dujdy + dujdy);
1284 const double s_kk = 0.5 * (dukdz + dukdz);
1286 const double s_ij = 0.5 * (duidy_ij + dujdx_ij);
1287 const double s_ik = 0.5 * (duidz_ik + dukdx_ik);
1288 const double s_jk = 0.5 * (dujdz_jk + dukdy_jk);
1290 const double s_ip1j = 0.5 * (duidy_ip1j + dujdx_ip1j);
1291 const double s_ip1k = 0.5 * (duidz_ip1k + dukdx_ip1k);
1292 const double s_jp1k = 0.5 * (dujdz_jp1k + dukdy_jp1k);
1294 const double s_ijp1 = 0.5 * (duidy_ijp1 + dujdx_ijp1);
1295 const double s_ikp1 = 0.5 * (duidz_ikp1 + dukdx_ikp1);
1296 const double s_jkp1 = 0.5 * (dujdz_jkp1 + dukdy_jkp1);
1298 const double s_ip1jp1 = 0.5 * (duidy_ip1jp1 + dujdx_ip1jp1);
1299 const double s_ip1kp1 = 0.5 * (duidz_ip1kp1 + dukdx_ip1kp1);
1300 const double s_jp1kp1 = 0.5 * (dujdz_jp1kp1 + dukdy_jp1kp1);
1302 f[0][0] = - 2. * nu_xx * s_ii;
1303 f[0][1] = - 2. * 0.25 * (nu_xy_ip1jp1*s_ip1jp1 + nu_xy_ijp1*s_ijp1 + nu_xy_ip1j*s_ip1j + nu_xy_ij*s_ij);
1304 f[0][2] = - 2. * 0.25 * (nu_xz_ip1kp1*s_ip1kp1 + nu_xz_ikp1*s_ikp1 + nu_xz_ip1k*s_ip1k + nu_xz_ik*s_ik);
1305 f[1][0] = - 2. * 0.25 * (nu_xy_ip1jp1*s_ip1jp1 + nu_xy_ijp1*s_ijp1 + nu_xy_ip1j*s_ip1j + nu_xy_ij*s_ij);
1306 f[1][1] = - 2. * nu_yy * s_jj;
1307 f[1][2] = - 2. * 0.25 * (nu_yz_jp1kp1*s_jp1kp1 + nu_yz_jkp1*s_jkp1 + nu_yz_jp1k*s_jp1k + nu_yz_jk*s_jk);
1308 f[2][0] = - 2. * 0.25 * (nu_xz_ip1kp1*s_ip1kp1 + nu_xz_ikp1*s_ikp1 + nu_xz_ip1k*s_ip1k + nu_xz_ik*s_ik);
1309 f[2][1] = - 2. * 0.25 * (nu_yz_jp1kp1*s_jp1kp1 + nu_yz_jkp1*s_jkp1 + nu_yz_jp1k*s_jp1k + nu_yz_jk*s_jk);
1310 f[2][2] = - 2. * nu_zz * s_kk;
1313static inline void calculer_q(
int i,
int j,
int k,
1314 const IJK_Field_vector3_double& velocity,
1315 const IJK_Field_double& champ_scalar,
1316 double scalar_kmin,
double scalar_kmax,
1317 const ArrOfDouble_with_ghost& delta_z_maillage,
1318 const double dx_delta,
1319 const double dy_delta,
1320 const double dz_delta,
1321 const double delta_m_delta,
1322 const double delta_p_delta,
1325 const IJK_Field_double& vitesse_k = velocity[2];
1329 const double deltaunsurdx = dx_delta * 1./dx;
1330 const double deltaunsurdy = dy_delta * 1./dy;
1335 const int kg = k + offset;
1336 const double dz = delta_z_maillage[k];
1337 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1338 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1340 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1341 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1343 const double scalar = champ_scalar(i,j,k);
1345 const double scalar_im1 = champ_scalar(i-1,j,k);
1346 const double scalar_ip1 = champ_scalar(i+1,j,k);
1348 const double scalar_jm1 = champ_scalar(i,j-1,k);
1349 const double scalar_jp1 = champ_scalar(i,j+1,k);
1351 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
1352 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
1354 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
1355 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
1357 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
1358 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
1360 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
1361 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
1363 q[0] = 0.5 * (dscalardxf_i + dscalardxf_ip1);
1364 q[1] = 0.5 * (dscalardyf_j + dscalardyf_jp1);
1365 q[2] = 0.5 * (dscalardzf_k + dscalardzf_kp1);
1368static inline void calculer_pi(
int i,
int j,
int k,
1369 const IJK_Field_vector3_double& velocity,
1370 const IJK_Field_double& champ_scalar,
1371 double scalar_kmin,
double scalar_kmax,
1372 const IJK_Field_double& turbulent_mu_x,
1373 const IJK_Field_double& turbulent_mu_y,
1374 const IJK_Field_double& turbulent_mu_z,
1375 const ArrOfDouble_with_ghost& delta_z_maillage,
1376 const double dx_delta,
1377 const double dy_delta,
1378 const double dz_delta,
1379 const double delta_m_delta,
1380 const double delta_p_delta,
1383 const IJK_Field_double& vitesse_k = velocity[2];
1387 const double deltaunsurdx = dx_delta * 1./dx;
1388 const double deltaunsurdy = dy_delta * 1./dy;
1393 const int kg = k + offset;
1394 const double dz = delta_z_maillage[k];
1395 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1396 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1398 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1399 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1401 const double nu_x = turbulent_mu_x(i,j,k);
1402 const double nu_x_im1 = turbulent_mu_x(i-1,j,k);
1403 const double nu_x_ip1 = turbulent_mu_x(i+1,j,k);
1405 const double nu_y = turbulent_mu_y(i,j,k);
1406 const double nu_y_jm1 = turbulent_mu_y(i,j-1,k);
1407 const double nu_y_jp1 = turbulent_mu_y(i,j+1,k);
1409 const double nu_z = turbulent_mu_z(i,j,k);
1410 const double nu_z_km1 = kg==0 ? 0. : turbulent_mu_z(i,j,k-1);
1411 const double nu_z_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_z(i,j,k+1);
1413 const double nu_xf_i = 0.5 * (nu_x + nu_x_im1);
1414 const double nu_yf_j = 0.5 * (nu_y + nu_y_jm1);
1415 const double nu_zf_k = 0.5 * (nu_z + nu_z_km1);
1416 const double nu_xf_ip1 = 0.5 * (nu_x + nu_x_ip1);
1417 const double nu_yf_jp1 = 0.5 * (nu_y + nu_y_jp1);
1418 const double nu_zf_kp1 = 0.5 * (nu_z + nu_z_kp1);
1420 const double scalar = champ_scalar(i,j,k);
1422 const double scalar_im1 = champ_scalar(i-1,j,k);
1423 const double scalar_ip1 = champ_scalar(i+1,j,k);
1425 const double scalar_jm1 = champ_scalar(i,j-1,k);
1426 const double scalar_jp1 = champ_scalar(i,j+1,k);
1428 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
1429 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
1431 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
1432 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
1434 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
1435 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
1437 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
1438 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
1440 f[0] = - 0.5 * (nu_xf_i*dscalardxf_i + nu_xf_ip1*dscalardxf_ip1);
1441 f[1] = - 0.5 * (nu_yf_j*dscalardyf_j + nu_yf_jp1*dscalardyf_jp1);
1442 f[2] = - 0.5 * (nu_zf_k*dscalardzf_k + nu_zf_kp1*dscalardzf_kp1);
1446void calculer_turbulent_mu(
const bool anisotropic,
1448 const double turbulent_viscosity_model_constant,
1449 const double variation_cste_modele_fonctionnel_,
1450 const double smoothing_center_fr_,
1451 const double smoothing_factor_fr_,
1452 const double Re_tau_fr_,
1453 const double Re_tau_ch_,
1454 const double pond_fr_,
1455 const double pond_ch_,
1456 const double center_constant_,
1457 const double Lz_tot_,
1458 const IJK_Field_vector3_double& velocity,
1459 const IJK_Field_double& champ_rho,
1460 const IJK_Field_double& champ_scalar,
1461 double scalar_kmin,
double scalar_kmax,
1462 const ArrOfDouble_with_ghost& delta_z_maillage,
1463 const double facteur_x_pour_delta,
1464 const double facteur_y_pour_delta,
1465 const ArrOfDouble_with_ghost& delta_z_pour_delta,
1466 IJK_Field_double& turbulent_mu,
1469 const IJK_Field_double& vitesse_k = velocity[2];
1477 const int ni = vitesse_k.
ni();
1478 const int nj = vitesse_k.
nj();
1479 const int nk = vitesse_k.
nk();
1482 ArrOfDouble elem_coord(nk);
1483 for (
int i = 0; i < nktot; i++)
1485 elem_coord[i] = 0.5 * (coord_z[i] + coord_z[i+1]);
1487 elem_coord[nktot]=Lz_tot_;
1495 std::vector<double> turbulent_viscosity_model_constant_tab(nk);
1496 if ( !variation_cste_modele_fonctionnel_ )
1498 if ( ( smoothing_factor_fr_ != 0. ) || ( smoothing_center_fr_ != 0. ) || pond_ch_ != 0. || pond_fr_ != 0. )
1500 Cerr <<
"Error: (Inconsistent parameters) "
1501 <<
"A non null smoothing_factor_fr or smoothing_center_fr_ or pond_ch_ or pond_fr_ has been specified while the variation_constante_modele_fonctionnel flag has not been activated."
1505 for (
int k = 0; k <= nktot; k++)
1507 turbulent_viscosity_model_constant_tab[k]=turbulent_viscosity_model_constant;
1512 if ( smoothing_factor_fr_ == 0. )
1514 Cerr <<
"Error: (Inconsistent parameters) "
1515 <<
"A null smoothing factor has been specified while the variation_constante_modele_fonctionnel flag has been activated. Check the 5 parameters used with this flag : smoothing_factor_fr_ smoothing_center_fr_, center_constant_, pond_fr_, pond_ch_."
1519 else if ((pond_fr_ == 0.) || (pond_ch_ == 0.))
1521 Cerr <<
"Warning: pond_fr_ and/or pond_ch_ are equal to 0. The functional model constant is then not varying in the wall normal direction. Set pond_fr_ = 1. and pond_ch_ = 1. to obtain a symmetric variation of the model constant." ;
1523 for (
int k = 0; k < nktot/2; k++)
1525 turbulent_viscosity_model_constant_tab[k]=turbulent_viscosity_model_constant*pond_fr_+(0.5+0.5*tanh((elem_coord[k]-smoothing_center_fr_)/(smoothing_factor_fr_)))*(center_constant_-turbulent_viscosity_model_constant*pond_fr_);
1527 for (
int k = nktot; k > nktot/2-1; --k)
1529 turbulent_viscosity_model_constant_tab[k]=turbulent_viscosity_model_constant*pond_ch_+(0.5+0.5*tanh((Lz_tot_-elem_coord[k]-smoothing_center_fr_ * Re_tau_fr_/Re_tau_ch_)/(smoothing_factor_fr_ * Re_tau_fr_/Re_tau_ch_)))*(center_constant_-turbulent_viscosity_model_constant*pond_ch_);
1534 for (
int k = 0; k < nk; k++)
1536 for (
int j = 0; j < nj; j++)
1538 for (
int i = 0; i < ni; i++)
1540 const int kg = k + offset;
1541 const double dz_pour_delta = delta_z_pour_delta[k];
1543 const double rho = champ_rho(i,j,k);
1547 calculer_g(i, j, k, velocity, delta_z_maillage, 1., 1., 1., 1., 1., g);
1548 calculer_q(i, j, k, velocity, champ_scalar, scalar_kmin, scalar_kmax, delta_z_maillage, 1., 1., 1., 1., 1., q);
1550 turbulent_mu(i,j,k) = model(turbulent_viscosity_model_constant_tab[k], dx_pour_delta, dy_pour_delta, dz_pour_delta, rho, g, q);
1555 const double delta_m_pour_delta = kg==0 ? 0. : 0.5*(dz_pour_delta + delta_z_pour_delta[k-1]);
1556 const double delta_p_pour_delta = kg==(nktot-1) ? 0. : 0.5*(dz_pour_delta + delta_z_pour_delta[k+1]);
1557 calculer_g(i, j, k, velocity, delta_z_maillage, dx_pour_delta, dy_pour_delta, dz_pour_delta, delta_m_pour_delta, delta_p_pour_delta, g);
1558 calculer_q(i, j, k, velocity, champ_scalar, scalar_kmin, scalar_kmax, delta_z_maillage, dx_pour_delta, dy_pour_delta, dz_pour_delta, delta_m_pour_delta, delta_p_pour_delta, q);
1560 turbulent_mu(i,j,k) = model(turbulent_viscosity_model_constant_tab[k], 1., 1., 1., rho, g, q);
1569void calculer_ml_dynamic_uu_tensor(
const bool anisotropic,
1570 const bool tensorial,
1571 const IJK_Field_vector3_double& velocity,
1572 const IJK_Field_vector3_double& velocity_filtre,
1573 const int turbulent_viscosity,
1574 const IJK_Field_double& turbulent_mu_xx,
1575 const IJK_Field_double& turbulent_mu_xy,
1576 const IJK_Field_double& turbulent_mu_xz,
1577 const IJK_Field_double& turbulent_mu_yy,
1578 const IJK_Field_double& turbulent_mu_yz,
1579 const IJK_Field_double& turbulent_mu_zz,
1580 const IJK_Field_double& turbulent_mu_filtre_xx,
1581 const IJK_Field_double& turbulent_mu_filtre_xy,
1582 const IJK_Field_double& turbulent_mu_filtre_xz,
1583 const IJK_Field_double& turbulent_mu_filtre_yy,
1584 const IJK_Field_double& turbulent_mu_filtre_yz,
1585 const IJK_Field_double& turbulent_mu_filtre_zz,
1586 const int structural_uu,
1589 const ArrOfDouble_with_ghost& delta_z,
1590 const double facteur_delta_x,
1591 const double facteur_delta_y,
1592 const ArrOfDouble_with_ghost& delta_z_pour_delta,
1593 const double facteur_delta_filtre_x,
1594 const double facteur_delta_filtre_y,
1595 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
1601 const IJK_Field_double& vitesse_i = velocity[0];
1602 const IJK_Field_double& vitesse_j = velocity[1];
1603 const IJK_Field_double& vitesse_k = velocity[2];
1605 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
1606 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
1607 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
1609 const IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
1610 const IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
1611 const IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
1612 const IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
1613 const IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
1614 const IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
1616 const IJK_Field_double& structural_uu_filtre_xx = structural_uu_filtre_tensor[0];
1617 const IJK_Field_double& structural_uu_filtre_xy = structural_uu_filtre_tensor[1];
1618 const IJK_Field_double& structural_uu_filtre_xz = structural_uu_filtre_tensor[2];
1619 const IJK_Field_double& structural_uu_filtre_yy = structural_uu_filtre_tensor[3];
1620 const IJK_Field_double& structural_uu_filtre_yz = structural_uu_filtre_tensor[4];
1621 const IJK_Field_double& structural_uu_filtre_zz = structural_uu_filtre_tensor[5];
1625 const double dx_pour_delta = facteur_delta_x*dx;
1626 const double dy_pour_delta = facteur_delta_y*dy;
1628 const int ni = vitesse_k.
ni();
1629 const int nj = vitesse_k.
nj();
1630 const int nk = vitesse_k.
nk();
1635 IJK_Field_local_double& bf_ii = tmp_b[0];
1636 IJK_Field_local_double& bf_ij = tmp_b[1];
1637 IJK_Field_local_double& bf_ik = tmp_b[2];
1638 IJK_Field_local_double& bf_jj = tmp_b[3];
1639 IJK_Field_local_double& bf_jk = tmp_b[4];
1640 IJK_Field_local_double& bf_kk = tmp_b[5];
1641 IJK_Field_local_double& buu_ii = tmp_b[6];
1642 IJK_Field_local_double& buu_ij = tmp_b[7];
1643 IJK_Field_local_double& buu_ik = tmp_b[8];
1644 IJK_Field_local_double& buu_jj = tmp_b[9];
1645 IJK_Field_local_double& buu_jk = tmp_b[10];
1646 IJK_Field_local_double& buu_kk = tmp_b[11];
1647 IJK_Field_local_double& bg_ii = tmp_b[12];
1648 IJK_Field_local_double& bg_ij = tmp_b[13];
1649 IJK_Field_local_double& bg_ik = tmp_b[14];
1650 IJK_Field_local_double& bg_jj = tmp_b[15];
1651 IJK_Field_local_double& bg_jk = tmp_b[16];
1652 IJK_Field_local_double& bg_kk = tmp_b[17];
1654 IJK_Field_local_double& af_ii = tmp_a[0];
1655 IJK_Field_local_double& af_ij = tmp_a[1];
1656 IJK_Field_local_double& af_ik = tmp_a[2];
1657 IJK_Field_local_double& af_jj = tmp_a[3];
1658 IJK_Field_local_double& af_jk = tmp_a[4];
1659 IJK_Field_local_double& af_kk = tmp_a[5];
1660 IJK_Field_local_double& auu_ii = tmp_a[6];
1661 IJK_Field_local_double& auu_ij = tmp_a[7];
1662 IJK_Field_local_double& auu_ik = tmp_a[8];
1663 IJK_Field_local_double& auu_jj = tmp_a[9];
1664 IJK_Field_local_double& auu_jk = tmp_a[10];
1665 IJK_Field_local_double& auu_kk = tmp_a[11];
1666 IJK_Field_local_double& ag_ii = tmp_a[12];
1667 IJK_Field_local_double& ag_ij = tmp_a[13];
1668 IJK_Field_local_double& ag_ik = tmp_a[14];
1669 IJK_Field_local_double& ag_jj = tmp_a[15];
1670 IJK_Field_local_double& ag_jk = tmp_a[16];
1671 IJK_Field_local_double& ag_kk = tmp_a[17];
1673 ArrOfDouble& moy_lij_xx = ml[0][0];
1674 ArrOfDouble& moy_lij_xy = ml[0][1];
1675 ArrOfDouble& moy_lij_xz = ml[0][2];
1676 ArrOfDouble& moy_lij_yy = ml[0][3];
1677 ArrOfDouble& moy_lij_yz = ml[0][4];
1678 ArrOfDouble& moy_lij_zz = ml[0][5];
1680 ArrOfDouble& moy_mij_xx = ml[1][0];
1681 ArrOfDouble& moy_mij_xy = ml[1][1];
1682 ArrOfDouble& moy_mij_xz = ml[1][2];
1683 ArrOfDouble& moy_mij_yy = ml[1][3];
1684 ArrOfDouble& moy_mij_yz = ml[1][4];
1685 ArrOfDouble& moy_mij_zz = ml[1][5];
1687 ArrOfDouble& moy_hij_xx = ml[2][0];
1688 ArrOfDouble& moy_hij_xy = ml[2][1];
1689 ArrOfDouble& moy_hij_xz = ml[2][2];
1690 ArrOfDouble& moy_hij_yy = ml[2][3];
1691 ArrOfDouble& moy_hij_yz = ml[2][4];
1692 ArrOfDouble& moy_hij_zz = ml[2][5];
1694 ArrOfDouble& moy_mijmij_xx = ml[3][0];
1695 ArrOfDouble& moy_mijmij_xy = ml[3][1];
1696 ArrOfDouble& moy_mijmij_xz = ml[3][2];
1697 ArrOfDouble& moy_mijmij_yy = ml[3][3];
1698 ArrOfDouble& moy_mijmij_yz = ml[3][4];
1699 ArrOfDouble& moy_mijmij_zz = ml[3][5];
1700 ArrOfDouble& moy_mijmij = ml[3][6];
1702 ArrOfDouble& moy_hijhij_xx = ml[4][0];
1703 ArrOfDouble& moy_hijhij_xy = ml[4][1];
1704 ArrOfDouble& moy_hijhij_xz = ml[4][2];
1705 ArrOfDouble& moy_hijhij_yy = ml[4][3];
1706 ArrOfDouble& moy_hijhij_yz = ml[4][4];
1707 ArrOfDouble& moy_hijhij_zz = ml[4][5];
1708 ArrOfDouble& moy_hijhij = ml[4][6];
1710 ArrOfDouble& moy_mijlij_xx = ml[5][0];
1711 ArrOfDouble& moy_mijlij_xy = ml[5][1];
1712 ArrOfDouble& moy_mijlij_xz = ml[5][2];
1713 ArrOfDouble& moy_mijlij_yy = ml[5][3];
1714 ArrOfDouble& moy_mijlij_yz = ml[5][4];
1715 ArrOfDouble& moy_mijlij_zz = ml[5][5];
1716 ArrOfDouble& moy_mijlij = ml[5][6];
1718 ArrOfDouble& moy_hijlij_xx = ml[6][0];
1719 ArrOfDouble& moy_hijlij_xy = ml[6][1];
1720 ArrOfDouble& moy_hijlij_xz = ml[6][2];
1721 ArrOfDouble& moy_hijlij_yy = ml[6][3];
1722 ArrOfDouble& moy_hijlij_yz = ml[6][4];
1723 ArrOfDouble& moy_hijlij_zz = ml[6][5];
1724 ArrOfDouble& moy_hijlij = ml[6][6];
1726 ArrOfDouble& moy_mijhij_xx = ml[7][0];
1727 ArrOfDouble& moy_mijhij_xy = ml[7][1];
1728 ArrOfDouble& moy_mijhij_xz = ml[7][2];
1729 ArrOfDouble& moy_mijhij_yy = ml[7][3];
1730 ArrOfDouble& moy_mijhij_yz = ml[7][4];
1731 ArrOfDouble& moy_mijhij_zz = ml[7][5];
1732 ArrOfDouble& moy_mijhij = ml[7][6];
1751 const int ghost_size_filter = kernel->ghost_size();
1752 const int size_uniform = kernel->size_uniform();
1753 const int shift_uniform = kernel->shift_uniform();
1754 for (
int k = 0; k < nk; k++)
1756 const int kg = k + offset;
1781 moy_mijmij_xx[kg] = 0;
1782 moy_mijmij_xy[kg] = 0;
1783 moy_mijmij_xz[kg] = 0;
1784 moy_mijmij_yy[kg] = 0;
1785 moy_mijmij_yz[kg] = 0;
1786 moy_mijmij_zz[kg] = 0;
1788 moy_hijhij_xx[kg] = 0;
1789 moy_hijhij_xy[kg] = 0;
1790 moy_hijhij_xz[kg] = 0;
1791 moy_hijhij_yy[kg] = 0;
1792 moy_hijhij_yz[kg] = 0;
1793 moy_hijhij_zz[kg] = 0;
1795 moy_mijlij_xx[kg] = 0;
1796 moy_mijlij_xy[kg] = 0;
1797 moy_mijlij_xz[kg] = 0;
1798 moy_mijlij_yy[kg] = 0;
1799 moy_mijlij_yz[kg] = 0;
1800 moy_mijlij_zz[kg] = 0;
1802 moy_hijlij_xx[kg] = 0;
1803 moy_hijlij_xy[kg] = 0;
1804 moy_hijlij_xz[kg] = 0;
1805 moy_hijlij_yy[kg] = 0;
1806 moy_hijlij_yz[kg] = 0;
1807 moy_hijlij_zz[kg] = 0;
1809 moy_mijhij_xx[kg] = 0;
1810 moy_mijhij_xy[kg] = 0;
1811 moy_mijhij_xz[kg] = 0;
1812 moy_mijhij_yy[kg] = 0;
1813 moy_mijhij_yz[kg] = 0;
1814 moy_mijhij_zz[kg] = 0;
1823 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
1824 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
1826 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
1829 const int size_k_elem = kernel->size_k_elem(kg, nktot);
1830 const int shift_k_elem = kernel->shift_k_elem(kg);
1831 const bool ponderation_filter_kernel = kernel->ponderation();
1832 const bool normalisation_filter_kernel = kernel->normalisation();
1834 double facteur_elem = 0.;
1835 if (ponderation_filter_kernel)
1837 if (normalisation_filter_kernel)
1839 double longueur_elem = 0.;
1840 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1842 const int kpg = kg + kp;
1843 if (kpg<-1 || kpg>nktot)
1845 Cerr <<
"This should not happen." << finl;
1848 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1849 const double filter_coef_z = filter_kernel_z[kp+10];
1850 longueur_elem += filter_coef_z * dz;
1852 facteur_elem = 1./longueur_elem;
1856 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
1860 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
1862 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
1864 buu_ii(i, j, 0) = 0.;
1865 buu_ij(i, j, 0) = 0.;
1866 buu_ik(i, j, 0) = 0.;
1867 buu_jj(i, j, 0) = 0.;
1868 buu_jk(i, j, 0) = 0.;
1869 buu_kk(i, j, 0) = 0.;
1870 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1872 const int kpg = kg + kp;
1873 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1875 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1876 const double filter_coef_z = filter_kernel_z[kp+10];
1877 const double uf_i = vitesse_i(i,j,k+kp);
1878 const double vf_j = vitesse_j(i,j,k+kp);
1879 const double wf_k = vitesse_k(i,j,k+kp);
1881 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
1882 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
1883 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
1885 const double ue = 0.5 * (uf_i + uf_ip1);
1886 const double ve = 0.5 * (vf_j + vf_jp1);
1887 const double we = 0.5 * (wf_k + wf_kp1);
1889 const double uu_e = ue * ue;
1890 const double uv_e = ue * ve;
1891 const double uw_e = ue * we;
1892 const double vv_e = ve * ve;
1893 const double vw_e = ve * we;
1894 const double ww_e = we * we;
1896 if (ponderation_filter_kernel)
1898 buu_ii(i, j, 0) += uu_e * filter_coef_z * dz * facteur_elem;
1899 buu_ij(i, j, 0) += uv_e * filter_coef_z * dz * facteur_elem;
1900 buu_ik(i, j, 0) += uw_e * filter_coef_z * dz * facteur_elem;
1901 buu_jj(i, j, 0) += vv_e * filter_coef_z * dz * facteur_elem;
1902 buu_jk(i, j, 0) += vw_e * filter_coef_z * dz * facteur_elem;
1903 buu_kk(i, j, 0) += ww_e * filter_coef_z * dz * facteur_elem;
1907 buu_ii(i, j, 0) += uu_e * filter_coef_z;
1908 buu_ij(i, j, 0) += uv_e * filter_coef_z;
1909 buu_ik(i, j, 0) += uw_e * filter_coef_z;
1910 buu_jj(i, j, 0) += vv_e * filter_coef_z;
1911 buu_jk(i, j, 0) += vw_e * filter_coef_z;
1912 buu_kk(i, j, 0) += ww_e * filter_coef_z;
1917 if (turbulent_viscosity)
1919 bf_ii(i, j, 0) = 0.;
1920 bf_ij(i, j, 0) = 0.;
1921 bf_ik(i, j, 0) = 0.;
1922 bf_jj(i, j, 0) = 0.;
1923 bf_jk(i, j, 0) = 0.;
1924 bf_kk(i, j, 0) = 0.;
1925 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1927 const int kpg = kg + kp;
1928 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1930 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1931 const double filter_coef_z = filter_kernel_z[kp+10];
1934 calculer_tau(i, j, k+kp, velocity, turbulent_mu_xx, turbulent_mu_xy, turbulent_mu_xz, turbulent_mu_yy, turbulent_mu_yz, turbulent_mu_zz, delta_z, 1., 1., 1., 1., 1., f);
1938 const double dz_pour_delta = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z_pour_delta[k+kp];
1939 const double dz_m1_pour_delta = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1+kp];
1940 const double dz_p1_pour_delta = (kpg+1<0 || kpg+1>(nktot-1)) ? 0. : delta_z_pour_delta[k+1+kp];
1941 const double delta_m_pour_delta = (kpg-1<0 || kpg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_m1_pour_delta);
1942 const double delta_p_pour_delta = (kpg<0 || kpg+1>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_p1_pour_delta);
1943 calculer_tau(i, j, k+kp, velocity, turbulent_mu_xx, turbulent_mu_xy, turbulent_mu_xz, turbulent_mu_yy, turbulent_mu_yz, turbulent_mu_zz, delta_z, dx_pour_delta, dy_pour_delta, dz_pour_delta, delta_m_pour_delta, delta_p_pour_delta, f);
1946 if (ponderation_filter_kernel)
1948 bf_ii(i, j, 0) += f[0][0] * filter_coef_z * dz * facteur_elem;
1949 bf_ij(i, j, 0) += f[0][1] * filter_coef_z * dz * facteur_elem;
1950 bf_ik(i, j, 0) += f[0][2] * filter_coef_z * dz * facteur_elem;
1951 bf_jj(i, j, 0) += f[1][1] * filter_coef_z * dz * facteur_elem;
1952 bf_jk(i, j, 0) += f[1][2] * filter_coef_z * dz * facteur_elem;
1953 bf_kk(i, j, 0) += f[2][2] * filter_coef_z * dz * facteur_elem;
1957 bf_ii(i, j, 0) += f[0][0] * filter_coef_z;
1958 bf_ij(i, j, 0) += f[0][1] * filter_coef_z;
1959 bf_ik(i, j, 0) += f[0][2] * filter_coef_z;
1960 bf_jj(i, j, 0) += f[1][1] * filter_coef_z;
1961 bf_jk(i, j, 0) += f[1][2] * filter_coef_z;
1962 bf_kk(i, j, 0) += f[2][2] * filter_coef_z;
1970 bg_ii(i, j, 0) = 0.;
1971 bg_ij(i, j, 0) = 0.;
1972 bg_ik(i, j, 0) = 0.;
1973 bg_jj(i, j, 0) = 0.;
1974 bg_jk(i, j, 0) = 0.;
1975 bg_kk(i, j, 0) = 0.;
1976 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1978 const int kpg = kg + kp;
1979 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1981 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1982 const double filter_coef_z = filter_kernel_z[kp+10];
1983 const double gxx_e = -structural_uu_xx(i,j,k+kp);
1984 const double gyy_e = -structural_uu_yy(i,j,k+kp);
1985 const double gzz_e = -structural_uu_zz(i,j,k+kp);
1987 const double gxy_ij = -structural_uu_xy(i,j,k+kp);
1988 const double gxz_ik = -structural_uu_xz(i,j,k+kp);
1989 const double gyz_jk = -structural_uu_yz(i,j,k+kp);
1991 const double gxy_ip1j = -structural_uu_xy(i+1,j,k+kp);
1992 const double gxz_ip1k = -structural_uu_xz(i+1,j,k+kp);
1993 const double gyz_jp1k = -structural_uu_yz(i,j+1,k+kp);
1995 const double gxy_ijp1 = -structural_uu_xy(i,j+1,k+kp);
1996 const double gxz_ikp1 = kpg==(nktot-1) ? 0. : -structural_uu_xz(i,j,k+1+kp);
1997 const double gyz_jkp1 = kpg==(nktot-1) ? 0. : -structural_uu_yz(i,j,k+1+kp);
1999 const double gxy_ip1jp1 = -structural_uu_xy(i+1,j+1,k+kp);
2000 const double gxz_ip1kp1 = kpg==(nktot-1) ? 0. : -structural_uu_xz(i+1,j,k+1+kp);
2001 const double gyz_jp1kp1 = kpg==(nktot-1) ? 0. : -structural_uu_yz(i,j+1,k+1+kp);
2003 const double gxy_e = 0.25 * (gxy_ij + gxy_ip1j + gxy_ijp1 + gxy_ip1jp1);
2004 const double gxz_e = 0.25 * (gxz_ik + gxz_ip1k + gxz_ikp1 + gxz_ip1kp1);
2005 const double gyz_e = 0.25 * (gyz_jk + gyz_jp1k + gyz_jkp1 + gyz_jp1kp1);
2007 if (ponderation_filter_kernel)
2009 bg_ii(i, j, 0) += gxx_e * filter_coef_z * dz * facteur_elem;
2010 bg_ij(i, j, 0) += gxy_e * filter_coef_z * dz * facteur_elem;
2011 bg_ik(i, j, 0) += gxz_e * filter_coef_z * dz * facteur_elem;
2012 bg_jj(i, j, 0) += gyy_e * filter_coef_z * dz * facteur_elem;
2013 bg_jk(i, j, 0) += gyz_e * filter_coef_z * dz * facteur_elem;
2014 bg_kk(i, j, 0) += gzz_e * filter_coef_z * dz * facteur_elem;
2018 bg_ii(i, j, 0) += gxx_e * filter_coef_z;
2019 bg_ij(i, j, 0) += gxy_e * filter_coef_z;
2020 bg_ik(i, j, 0) += gxz_e * filter_coef_z;
2021 bg_jj(i, j, 0) += gyy_e * filter_coef_z;
2022 bg_jk(i, j, 0) += gyz_e * filter_coef_z;
2023 bg_kk(i, j, 0) += gzz_e * filter_coef_z;
2030 for (
int j = 0; j < nj; j++)
2032 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
2034 auu_ii(i, 0, 0) = 0.;
2035 auu_ij(i, 0, 0) = 0.;
2036 auu_ik(i, 0, 0) = 0.;
2037 auu_jj(i, 0, 0) = 0.;
2038 auu_jk(i, 0, 0) = 0.;
2039 auu_kk(i, 0, 0) = 0.;
2040 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2042 const double filter_coef_y = filter_kernel_y[jp+10];
2043 auu_ii(i, 0, 0) += buu_ii(i, j+jp, 0) * filter_coef_y;
2044 auu_ij(i, 0, 0) += buu_ij(i, j+jp, 0) * filter_coef_y;
2045 auu_ik(i, 0, 0) += buu_ik(i, j+jp, 0) * filter_coef_y;
2046 auu_jj(i, 0, 0) += buu_jj(i, j+jp, 0) * filter_coef_y;
2047 auu_jk(i, 0, 0) += buu_jk(i, j+jp, 0) * filter_coef_y;
2048 auu_kk(i, 0, 0) += buu_kk(i, j+jp, 0) * filter_coef_y;
2050 if (turbulent_viscosity)
2052 af_ii(i, 0, 0) = 0.;
2053 af_ij(i, 0, 0) = 0.;
2054 af_ik(i, 0, 0) = 0.;
2055 af_jj(i, 0, 0) = 0.;
2056 af_jk(i, 0, 0) = 0.;
2057 af_kk(i, 0, 0) = 0.;
2058 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2060 const double filter_coef_y = filter_kernel_y[jp+10];
2061 af_ii(i, 0, 0) += bf_ii(i, j+jp, 0) * filter_coef_y;
2062 af_ij(i, 0, 0) += bf_ij(i, j+jp, 0) * filter_coef_y;
2063 af_ik(i, 0, 0) += bf_ik(i, j+jp, 0) * filter_coef_y;
2064 af_jj(i, 0, 0) += bf_jj(i, j+jp, 0) * filter_coef_y;
2065 af_jk(i, 0, 0) += bf_jk(i, j+jp, 0) * filter_coef_y;
2066 af_kk(i, 0, 0) += bf_kk(i, j+jp, 0) * filter_coef_y;
2071 ag_ii(i, 0, 0) = 0.;
2072 ag_ij(i, 0, 0) = 0.;
2073 ag_ik(i, 0, 0) = 0.;
2074 ag_jj(i, 0, 0) = 0.;
2075 ag_jk(i, 0, 0) = 0.;
2076 ag_kk(i, 0, 0) = 0.;
2077 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2079 const double filter_coef_y = filter_kernel_y[jp+10];
2080 ag_ii(i, 0, 0) += bg_ii(i, j+jp, 0) * filter_coef_y;
2081 ag_ij(i, 0, 0) += bg_ij(i, j+jp, 0) * filter_coef_y;
2082 ag_ik(i, 0, 0) += bg_ik(i, j+jp, 0) * filter_coef_y;
2083 ag_jj(i, 0, 0) += bg_jj(i, j+jp, 0) * filter_coef_y;
2084 ag_jk(i, 0, 0) += bg_jk(i, j+jp, 0) * filter_coef_y;
2085 ag_kk(i, 0, 0) += bg_kk(i, j+jp, 0) * filter_coef_y;
2090 for (
int i = 0; i < ni; i++)
2098 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2100 const double filter_coef_x = filter_kernel_x[ip+10];
2101 ruu_ii += auu_ii(i+ip, 0, 0) * filter_coef_x;
2102 ruu_ij += auu_ij(i+ip, 0, 0) * filter_coef_x;
2103 ruu_ik += auu_ik(i+ip, 0, 0) * filter_coef_x;
2104 ruu_jj += auu_jj(i+ip, 0, 0) * filter_coef_x;
2105 ruu_jk += auu_jk(i+ip, 0, 0) * filter_coef_x;
2106 ruu_kk += auu_kk(i+ip, 0, 0) * filter_coef_x;
2109 const double uf_i = vitesse_i_filtre(i,j,k);
2110 const double vf_j = vitesse_j_filtre(i,j,k);
2111 const double wf_k = vitesse_k_filtre(i,j,k);
2113 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
2114 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
2115 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
2117 const double ue = 0.5 * (uf_i + uf_ip1);
2118 const double ve = 0.5 * (vf_j + vf_jp1);
2119 const double we = 0.5 * (wf_k + wf_kp1);
2121 const double l_ii = ruu_ii - ue*ue;
2122 const double l_ij = ruu_ij - ue*ve;
2123 const double l_ik = ruu_ik - ue*we;
2124 const double l_jj = ruu_jj - ve*ve;
2125 const double l_jk = ruu_jk - ve*we;
2126 const double l_kk = ruu_kk - we*we;
2130 moy_lij_xx[kg] += l_ii;
2131 moy_lij_xy[kg] += l_ij;
2132 moy_lij_xz[kg] += l_ik;
2133 moy_lij_yy[kg] += l_jj;
2134 moy_lij_yz[kg] += l_jk;
2135 moy_lij_zz[kg] += l_kk;
2138 if (turbulent_viscosity)
2146 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2148 const double filter_coef_x = filter_kernel_x[ip+10];
2149 rf_ii += af_ii(i+ip, 0, 0) * filter_coef_x;
2150 rf_ij += af_ij(i+ip, 0, 0) * filter_coef_x;
2151 rf_ik += af_ik(i+ip, 0, 0) * filter_coef_x;
2152 rf_jj += af_jj(i+ip, 0, 0) * filter_coef_x;
2153 rf_jk += af_jk(i+ip, 0, 0) * filter_coef_x;
2154 rf_kk += af_kk(i+ip, 0, 0) * filter_coef_x;
2159 calculer_tau(i, j, k, velocity_filtre, turbulent_mu_filtre_xx, turbulent_mu_filtre_xy, turbulent_mu_filtre_xz, turbulent_mu_filtre_yy, turbulent_mu_filtre_yz, turbulent_mu_filtre_zz, delta_z, 1., 1., 1., 1., 1., f_filtre);
2163 const double dx_filtre = facteur_delta_filtre_x*dx;
2164 const double dy_filtre = facteur_delta_filtre_y*dy;
2165 const double dz_filtre = delta_z_pour_delta_filtre[k];
2166 const double delta_m_filtre = kg==0 ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k-1]);
2167 const double delta_p_filtre = kg==(nktot-1) ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k+1]);
2168 calculer_tau(i, j, k, velocity_filtre, turbulent_mu_filtre_xx, turbulent_mu_filtre_xy, turbulent_mu_filtre_xz, turbulent_mu_filtre_yy, turbulent_mu_filtre_yz, turbulent_mu_filtre_zz, delta_z, dx_filtre, dy_filtre, dz_filtre, delta_m_filtre, delta_p_filtre, f_filtre);
2171 m_ii = f_filtre[0][0] - rf_ii;
2172 m_ij = f_filtre[0][1] - rf_ij;
2173 m_ik = f_filtre[0][2] - rf_ik;
2174 m_jj = f_filtre[1][1] - rf_jj;
2175 m_jk = f_filtre[1][2] - rf_jk;
2176 m_kk = f_filtre[2][2] - rf_kk;
2178 const double mijmij = m_ii * m_ii
2188 const double mijlij = m_ii * l_ii
2198 moy_mijmij[kg] += mijmij;
2199 moy_mijlij[kg] += mijlij;
2203 moy_mij_xx[kg] += m_ii;
2204 moy_mij_xy[kg] += m_ij;
2205 moy_mij_xz[kg] += m_ik;
2206 moy_mij_yy[kg] += m_jj;
2207 moy_mij_yz[kg] += m_jk;
2208 moy_mij_zz[kg] += m_kk;
2210 moy_mijmij_xx[kg] += m_ii * m_ii;
2211 moy_mijmij_xy[kg] += m_ij * m_ij;
2212 moy_mijmij_xz[kg] += m_ik * m_ik;
2213 moy_mijmij_yy[kg] += m_jj * m_jj;
2214 moy_mijmij_yz[kg] += m_jk * m_jk;
2215 moy_mijmij_zz[kg] += m_kk * m_kk;
2217 moy_mijlij_xx[kg] += m_ii * l_ii;
2218 moy_mijlij_xy[kg] += m_ij * l_ij;
2219 moy_mijlij_xz[kg] += m_ik * l_ik;
2220 moy_mijlij_yy[kg] += m_jj * l_jj;
2221 moy_mijlij_yz[kg] += m_jk * l_jk;
2222 moy_mijlij_zz[kg] += m_kk * l_kk;
2234 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2236 const double filter_coef_x = filter_kernel_x[ip+10];
2237 rg_ii += ag_ii(i+ip, 0, 0) * filter_coef_x;
2238 rg_ij += ag_ij(i+ip, 0, 0) * filter_coef_x;
2239 rg_ik += ag_ik(i+ip, 0, 0) * filter_coef_x;
2240 rg_jj += ag_jj(i+ip, 0, 0) * filter_coef_x;
2241 rg_jk += ag_jk(i+ip, 0, 0) * filter_coef_x;
2242 rg_kk += ag_kk(i+ip, 0, 0) * filter_coef_x;
2245 const double gxx_e = -structural_uu_filtre_xx(i,j,k);
2246 const double gyy_e = -structural_uu_filtre_yy(i,j,k);
2247 const double gzz_e = -structural_uu_filtre_zz(i,j,k);
2249 const double gxy_ij = -structural_uu_filtre_xy(i,j,k);
2250 const double gxz_ik = -structural_uu_filtre_xz(i,j,k);
2251 const double gyz_jk = -structural_uu_filtre_yz(i,j,k);
2253 const double gxy_ip1j = -structural_uu_filtre_xy(i+1,j,k);
2254 const double gxz_ip1k = -structural_uu_filtre_xz(i+1,j,k);
2255 const double gyz_jp1k = -structural_uu_filtre_yz(i,j+1,k);
2257 const double gxy_ijp1 = -structural_uu_filtre_xy(i,j+1,k);
2258 const double gxz_ikp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_xz(i,j,k+1);
2259 const double gyz_jkp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_yz(i,j,k+1);
2261 const double gxy_ip1jp1 = -structural_uu_filtre_xy(i+1,j+1,k);
2262 const double gxz_ip1kp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_xz(i+1,j,k+1);
2263 const double gyz_jp1kp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_yz(i,j+1,k+1);
2265 const double gxy_e = 0.25 * (gxy_ij + gxy_ip1j + gxy_ijp1 + gxy_ip1jp1);
2266 const double gxz_e = 0.25 * (gxz_ik + gxz_ip1k + gxz_ikp1 + gxz_ip1kp1);
2267 const double gyz_e = 0.25 * (gyz_jk + gyz_jp1k + gyz_jkp1 + gyz_jp1kp1);
2269 h_ii = gxx_e - rg_ii;
2270 h_ij = gxy_e - rg_ij;
2271 h_ik = gxz_e - rg_ik;
2272 h_jj = gyy_e - rg_jj;
2273 h_jk = gyz_e - rg_jk;
2274 h_kk = gzz_e - rg_kk;
2276 const double hijhij = h_ii * h_ii
2286 const double hijlij = h_ii * l_ii
2296 moy_hijhij[kg] += hijhij;
2297 moy_hijlij[kg] += hijlij;
2301 moy_hij_xx[kg] += h_ii;
2302 moy_hij_xy[kg] += h_ij;
2303 moy_hij_xz[kg] += h_ik;
2304 moy_hij_yy[kg] += h_jj;
2305 moy_hij_yz[kg] += h_jk;
2306 moy_hij_zz[kg] += h_kk;
2308 moy_hijhij_xx[kg] += h_ii * h_ii;
2309 moy_hijhij_xy[kg] += h_ij * h_ij;
2310 moy_hijhij_xz[kg] += h_ik * h_ik;
2311 moy_hijhij_yy[kg] += h_jj * h_jj;
2312 moy_hijhij_yz[kg] += h_jk * h_jk;
2313 moy_hijhij_zz[kg] += h_kk * h_kk;
2315 moy_hijlij_xx[kg] += h_ii * l_ii;
2316 moy_hijlij_xy[kg] += h_ij * l_ij;
2317 moy_hijlij_xz[kg] += h_ik * l_ik;
2318 moy_hijlij_yy[kg] += h_jj * l_jj;
2319 moy_hijlij_yz[kg] += h_jk * l_jk;
2320 moy_hijlij_zz[kg] += h_kk * l_kk;
2323 if (turbulent_viscosity)
2325 const double mijhij = m_ii * h_ii
2335 moy_mijhij[kg] += mijhij;
2339 moy_mijhij_xx[kg] += m_ii * h_ii;
2340 moy_mijhij_xy[kg] += m_ij * h_ij;
2341 moy_mijhij_xz[kg] += m_ik * h_ik;
2342 moy_mijhij_yy[kg] += m_jj * h_jj;
2343 moy_mijhij_yz[kg] += m_jk * h_jk;
2344 moy_mijhij_zz[kg] += m_kk * h_kk;
2353void calculer_constante_direct(
const bool global,
2354 const bool clipping,
2355 const Nom& description,
2356 const ArrOfDouble& moy_mij_0,
2357 const ArrOfDouble& moy_lij_0,
2358 const bool flag_mixte,
2359 const ArrOfDouble& moy_hij_0,
2360 const IJK_Field_vector3_double& velocity,
2361 const ArrOfDouble_with_ghost& delta_z,
2362 ArrOfDouble_with_ghost& constante_modele)
2364 const IJK_Field_double& vitesse_k = velocity[2];
2367 ArrOfDouble moy_mij = moy_mij_0;
2368 ArrOfDouble moy_lij = moy_lij_0;
2369 ArrOfDouble moy_hij = moy_hij_0;
2371 const int nk = vitesse_k.
nk();
2375 "Dynamic correction of constant [ " << description <<
2376 " ] type= direct global= " << (int)global <<
2377 " clipping= " << (
int)clipping <<
2378 " mixte= " << (int)flag_mixte <<
" :"
2383 double moy_mij_global = 0;
2384 double moy_lij_global = 0;
2385 double moy_hij_global = 0;
2386 for (
int k = 0; k < nk; k++)
2388 const int kg = k + offset;
2390 moy_mij_global += moy_mij[kg]*delta_z[k];
2391 moy_lij_global += moy_lij[kg]*delta_z[k];
2394 moy_hij_global += moy_hij[kg]*delta_z[k];
2399 tmp[0] = moy_mij_global;
2400 tmp[1] = moy_lij_global;
2401 tmp[2] = moy_hij_global;
2404 double c_global = (tmp[0]==0.) ? 1. : (tmp[1] - tmp[2])/tmp[0];
2407 c_global = max(0., c_global);
2409 Cout <<
"(global) constante_modele= " << c_global << finl;
2411 for (
int k = 0; k < nk; k++)
2413 constante_modele[k] = c_global;
2425 for (
int k = 0; k < nk; k++)
2427 const int kg = k + offset;
2431 constante_modele[k] = (moy_mij[kg]==0.) ? 1. : (moy_lij[kg] - moy_hij[kg])/moy_mij[kg];
2435 constante_modele[k] = (moy_mij[kg]==0.) ? 1. : moy_lij[kg]/moy_mij[kg];
2439 constante_modele[k] = max(0., constante_modele[k]);
2441 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2446void calculer_constante_lilly(
const bool global,
2447 const bool clipping,
2448 const Nom& description,
2449 const ArrOfDouble& moy_mijmij_0,
2450 const ArrOfDouble& moy_mijlij_0,
2451 const bool flag_mixte,
2452 const ArrOfDouble& moy_mijhij_0,
2453 const IJK_Field_vector3_double& velocity,
2454 const ArrOfDouble_with_ghost& delta_z,
2455 ArrOfDouble_with_ghost& constante_modele)
2457 const IJK_Field_double& vitesse_k = velocity[2];
2460 ArrOfDouble moy_mijmij = moy_mijmij_0;
2461 ArrOfDouble moy_mijlij = moy_mijlij_0;
2462 ArrOfDouble moy_mijhij = moy_mijhij_0;
2464 const int nk = vitesse_k.
nk();
2467 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= lilly global= " << (int)global <<
" clipping= " << (
int)clipping <<
" mixte= " << (int)flag_mixte <<
" :" << finl;
2471 double moy_mijmij_global = 0;
2472 double moy_mijlij_global = 0;
2473 double moy_mijhij_global = 0;
2474 for (
int k = 0; k < nk; k++)
2476 const int kg = k + offset;
2478 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2479 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2482 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2487 tmp[0] = moy_mijmij_global;
2488 tmp[1] = moy_mijlij_global;
2489 tmp[2] = moy_mijhij_global;
2492 double c_global = (tmp[0]==0.) ? 1. : (tmp[1] - tmp[2])/tmp[0];
2495 c_global = max(0., c_global);
2497 Cout <<
"(global) constante_modele= " << c_global << finl;
2499 for (
int k = 0; k < nk; k++)
2501 constante_modele[k] = c_global;
2513 for (
int k = 0; k < nk; k++)
2515 const int kg = k + offset;
2519 constante_modele[k] = (moy_mijmij[kg]==0.) ? 1. : (moy_mijlij[kg] - moy_mijhij[kg])/moy_mijmij[kg];
2523 constante_modele[k] = (moy_mijmij[kg]==0.) ? 1. : moy_mijlij[kg]/moy_mijmij[kg];
2527 constante_modele[k] = max(0., constante_modele[k]);
2529 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2534void calculer_constante_twoparameters(
const bool global,
2535 const bool clipping,
2536 const Nom& description,
2537 const ArrOfDouble& moy_mijmij_0,
2538 const ArrOfDouble& moy_hijhij_0,
2539 const ArrOfDouble& moy_mijlij_0,
2540 const ArrOfDouble& moy_hijlij_0,
2541 const ArrOfDouble& moy_mijhij_0,
2542 const IJK_Field_vector3_double& velocity,
2543 const ArrOfDouble_with_ghost& delta_z,
2544 ArrOfDouble_with_ghost& constante_modele)
2546 const IJK_Field_double& vitesse_k = velocity[2];
2549 ArrOfDouble moy_mijmij = moy_mijmij_0;
2550 ArrOfDouble moy_hijhij = moy_hijhij_0;
2551 ArrOfDouble moy_mijlij = moy_mijlij_0;
2552 ArrOfDouble moy_hijlij = moy_hijlij_0;
2553 ArrOfDouble moy_mijhij = moy_mijhij_0;
2555 const int nk = vitesse_k.
nk();
2558 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= twoparameters global= " << (int)global <<
" clipping= " << (
int)clipping <<
" :" << finl;
2562 double moy_mijmij_global = 0;
2563 double moy_hijhij_global = 0;
2564 double moy_mijlij_global = 0;
2565 double moy_hijlij_global = 0;
2566 double moy_mijhij_global = 0;
2567 for (
int k = 0; k < nk; k++)
2569 const int kg = k + offset;
2571 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2572 moy_hijhij_global += moy_hijhij[kg]*delta_z[k];
2573 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2574 moy_hijlij_global += moy_hijlij[kg]*delta_z[k];
2575 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2579 tmp[0] = moy_mijmij_global;
2580 tmp[1] = moy_hijhij_global;
2581 tmp[2] = moy_mijlij_global;
2582 tmp[3] = moy_hijlij_global;
2583 tmp[4] = moy_mijhij_global;
2586 double c_global = ((tmp[0]*tmp[1] - tmp[4]*tmp[4])==0.) ? 1. :
2587 (tmp[2]*tmp[1] - tmp[3]*tmp[4])/(tmp[0]*tmp[1] - tmp[4]*tmp[4]);
2590 c_global = max(0., c_global);
2592 Cout <<
"(global) constante_modele= " << c_global << finl;
2594 for (
int k = 0; k < nk; k++)
2596 constante_modele[k] = c_global;
2607 for (
int k = 0; k < nk; k++)
2609 const int kg = k + offset;
2611 constante_modele[k] = ((moy_mijmij[kg]*moy_hijhij[kg] - moy_mijhij[kg]*moy_mijhij[kg])==0.) ? 1. :
2612 (moy_mijlij[kg]*moy_hijhij[kg] - moy_hijlij[kg]*moy_mijhij[kg])/(moy_mijmij[kg]*moy_hijhij[kg] - moy_mijhij[kg]*moy_mijhij[kg]);
2615 constante_modele[k] = max(0., constante_modele[k]);
2617 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2622void calculer_constante_twonoerror(
const bool global,
2623 const bool clipping,
2624 const Nom& description,
2625 const ArrOfDouble& moy_lij_0,
2626 const ArrOfDouble& moy_mij_0,
2627 const ArrOfDouble& moy_hij_0,
2628 const ArrOfDouble& moy_mijmij_0,
2629 const ArrOfDouble& moy_hijhij_0,
2630 const ArrOfDouble& moy_mijlij_0,
2631 const ArrOfDouble& moy_hijlij_0,
2632 const ArrOfDouble& moy_mijhij_0,
2633 const IJK_Field_vector3_double& velocity,
2634 const ArrOfDouble_with_ghost& delta_z,
2635 ArrOfDouble_with_ghost& constante_modele)
2637 const IJK_Field_double& vitesse_k = velocity[2];
2640 ArrOfDouble moy_lij = moy_lij_0;
2641 ArrOfDouble moy_mij = moy_mij_0;
2642 ArrOfDouble moy_hij = moy_hij_0;
2643 ArrOfDouble moy_mijmij = moy_mijmij_0;
2644 ArrOfDouble moy_hijhij = moy_hijhij_0;
2645 ArrOfDouble moy_mijlij = moy_mijlij_0;
2646 ArrOfDouble moy_hijlij = moy_hijlij_0;
2647 ArrOfDouble moy_mijhij = moy_mijhij_0;
2649 const int nk = vitesse_k.
nk();
2652 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= twonoerror global= " << (int)global <<
" clipping= " << (
int)clipping <<
" :" << finl;
2656 double moy_lij_global = 0;
2657 double moy_mij_global = 0;
2658 double moy_hij_global = 0;
2659 double moy_mijmij_global = 0;
2660 double moy_hijhij_global = 0;
2661 double moy_mijlij_global = 0;
2662 double moy_hijlij_global = 0;
2663 double moy_mijhij_global = 0;
2664 for (
int k = 0; k < nk; k++)
2666 const int kg = k + offset;
2668 moy_lij_global += moy_lij[kg]*delta_z[k];
2669 moy_mij_global += moy_mij[kg]*delta_z[k];
2670 moy_hij_global += moy_hij[kg]*delta_z[k];
2671 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2672 moy_hijhij_global += moy_hijhij[kg]*delta_z[k];
2673 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2674 moy_hijlij_global += moy_hijlij[kg]*delta_z[k];
2675 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2679 tmp[0] = moy_lij_global;
2680 tmp[1] = moy_mij_global;
2681 tmp[2] = moy_hij_global;
2682 tmp[3] = moy_mijmij_global;
2683 tmp[4] = moy_hijhij_global;
2684 tmp[5] = moy_mijlij_global;
2685 tmp[6] = moy_hijlij_global;
2686 tmp[7] = moy_mijhij_global;
2689 double c_global = ((tmp[2]*tmp[3] - tmp[1]*tmp[7] + tmp[2]*tmp[7] - tmp[1]*tmp[4])==0.) ? 1. :
2690 (tmp[3]*tmp[0] - tmp[1]*tmp[5] + tmp[7]*tmp[0] - tmp[1]*tmp[6])/(tmp[2]*tmp[3] - tmp[1]*tmp[7] + tmp[2]*tmp[7] - tmp[1]*tmp[4]);
2693 c_global = max(0., c_global);
2695 Cout <<
"(global) constante_modele= " << c_global << finl;
2697 for (
int k = 0; k < nk; k++)
2699 constante_modele[k] = c_global;
2713 for (
int k = 0; k < nk; k++)
2715 const int kg = k + offset;
2717 constante_modele[k] = ((moy_hij[kg]*moy_mijmij[kg] - moy_mij[kg]*moy_mijhij[kg] + moy_hij[kg]*moy_mijhij[kg] - moy_mij[kg]*moy_hijhij[kg])==0.) ? 1. :
2718 (moy_mijmij[kg]*moy_lij[kg] - moy_mij[kg]*moy_mijlij[kg] + moy_mijhij[kg]*moy_lij[kg] - moy_mij[kg]*moy_hijlij[kg])/(moy_hij[kg]*moy_mijmij[kg] - moy_mij[kg]*moy_mijhij[kg] + moy_hij[kg]*moy_mijhij[kg] - moy_mij[kg]*moy_hijhij[kg]);
2721 constante_modele[k] = max(0., constante_modele[k]);
2723 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2728void multiplier_par_constante(
const bool face,
2729 ArrOfDouble_with_ghost& constante_modele,
2730 const IJK_Field_vector3_double& velocity,
2731 IJK_Field_double& turbulent_mu)
2733 const IJK_Field_double& vitesse_k = velocity[2];
2736 const int ni = vitesse_k.
ni();
2737 const int nj = vitesse_k.
nj();
2738 const int nk = vitesse_k.
nk();
2742 for (
int k = 0; k < nk; k++)
2744 for (
int j = 0; j < nj; j++)
2746 for (
int i = 0; i < ni; i++)
2748 const int kg = k + offset;
2749 const double constante_face = kg==0 ? 0. : 0.5*(constante_modele[k] + constante_modele[k-1]);
2750 turbulent_mu(i,j,k) = constante_face * turbulent_mu(i,j,k);
2757 for (
int k = 0; k < nk; k++)
2759 for (
int j = 0; j < nj; j++)
2761 for (
int i = 0; i < ni; i++)
2763 turbulent_mu(i,j,k) = constante_modele[k] * turbulent_mu(i,j,k);
2770bool calculer_constante_modele(
const Nom& turbulent_viscosity_dynamic_type,
2771 const Nom& description,
2772 const ArrOfDouble& moy_lij,
2773 const ArrOfDouble& moy_mij,
2774 const ArrOfDouble& moy_hij,
2775 const ArrOfDouble& moy_mijmij,
2776 const ArrOfDouble& moy_hijhij,
2777 const ArrOfDouble& moy_mijlij,
2778 const ArrOfDouble& moy_hijlij,
2779 const ArrOfDouble& moy_mijhij,
2780 const IJK_Field_vector3_double& velocity,
2781 const ArrOfDouble_with_ghost& delta_z,
2782 ArrOfDouble_with_ghost& constante_modele)
2784 bool mot_cle_reconnu = 0;
2786 const bool clipping = turbulent_viscosity_dynamic_type.
finit_par(
"clipping");
2787 Nom dynamic_type = clipping ? turbulent_viscosity_dynamic_type.
getPrefix(
"clipping") : turbulent_viscosity_dynamic_type;
2789 const bool global = dynamic_type.
finit_par(
"global");
2790 dynamic_type = global ? dynamic_type.
getPrefix(
"global") : dynamic_type;
2792 if ( dynamic_type ==
Nom(
"direct")
2793 || dynamic_type ==
Nom(
"directmixte") )
2795 mot_cle_reconnu = 1;
2796 const bool mixte = ( dynamic_type ==
Nom(
"directmixte") );
2798 calculer_constante_direct(global, clipping,
2805 else if ( dynamic_type ==
Nom(
"lilly")
2806 || dynamic_type ==
Nom(
"lillymixte") )
2808 mot_cle_reconnu = 1;
2809 const bool mixte = ( dynamic_type ==
Nom(
"lillymixte") );
2811 calculer_constante_lilly(global, clipping,
2813 moy_mijmij, moy_mijlij,
2818 else if ( dynamic_type ==
Nom(
"twoparameters") )
2820 mot_cle_reconnu = 1;
2821 calculer_constante_twoparameters(global, clipping,
2823 moy_mijmij, moy_hijhij,
2824 moy_mijlij, moy_hijlij,
2829 else if ( dynamic_type ==
Nom(
"twonoerror") )
2831 mot_cle_reconnu = 1;
2832 calculer_constante_twonoerror(global, clipping,
2834 moy_lij, moy_mij, moy_hij,
2835 moy_mijmij, moy_hijhij,
2836 moy_mijlij, moy_hijlij,
2841 return mot_cle_reconnu;
2845void calculer_ml_dynamic_uscalar_vector(
const bool anisotropic,
2846 const bool vectorial,
2847 const IJK_Field_vector3_double& velocity,
2848 const IJK_Field_vector3_double& velocity_filtre,
2849 const IJK_Field_double& champ_scalar,
2850 const IJK_Field_double& champ_scalar_filtre,
2851 double scalar_kmin,
double scalar_kmax,
2852 const int turbulent_viscosity,
2853 const IJK_Field_double& turbulent_mu_x,
2854 const IJK_Field_double& turbulent_mu_y,
2855 const IJK_Field_double& turbulent_mu_z,
2856 const IJK_Field_double& turbulent_mu_filtre_x,
2857 const IJK_Field_double& turbulent_mu_filtre_y,
2858 const IJK_Field_double& turbulent_mu_filtre_z,
2859 const int structural_uscalar,
2860 const IJK_Field_vector3_double& structural_uscalar_vector,
2861 const IJK_Field_vector3_double& structural_uscalar_filtre_vector,
2862 const ArrOfDouble_with_ghost& delta_z,
2863 const double facteur_delta_x,
2864 const double facteur_delta_y,
2865 const ArrOfDouble_with_ghost& delta_z_pour_delta,
2866 const double facteur_delta_filtre_x,
2867 const double facteur_delta_filtre_y,
2868 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
2874 const IJK_Field_double& vitesse_i = velocity[0];
2875 const IJK_Field_double& vitesse_j = velocity[1];
2876 const IJK_Field_double& vitesse_k = velocity[2];
2878 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
2879 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
2880 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
2882 const IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
2883 const IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
2884 const IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
2886 const IJK_Field_double& structural_uscalar_filtre_x = structural_uscalar_filtre_vector[0];
2887 const IJK_Field_double& structural_uscalar_filtre_y = structural_uscalar_filtre_vector[1];
2888 const IJK_Field_double& structural_uscalar_filtre_z = structural_uscalar_filtre_vector[2];
2892 const double dx_pour_delta = facteur_delta_x*dx;
2893 const double dy_pour_delta = facteur_delta_y*dy;
2895 const int ni = vitesse_k.
ni();
2896 const int nj = vitesse_k.
nj();
2897 const int nk = vitesse_k.
nk();
2902 IJK_Field_local_double& bf_i = tmp_b[0];
2903 IJK_Field_local_double& bf_j = tmp_b[1];
2904 IJK_Field_local_double& bf_k = tmp_b[2];
2905 IJK_Field_local_double& bus_i = tmp_b[3];
2906 IJK_Field_local_double& bus_j = tmp_b[4];
2907 IJK_Field_local_double& bus_k = tmp_b[5];
2908 IJK_Field_local_double& bg_i = tmp_b[6];
2909 IJK_Field_local_double& bg_j = tmp_b[7];
2910 IJK_Field_local_double& bg_k = tmp_b[8];
2912 IJK_Field_local_double& af_i = tmp_a[0];
2913 IJK_Field_local_double& af_j = tmp_a[1];
2914 IJK_Field_local_double& af_k = tmp_a[2];
2915 IJK_Field_local_double& aus_i = tmp_a[3];
2916 IJK_Field_local_double& aus_j = tmp_a[4];
2917 IJK_Field_local_double& aus_k = tmp_a[5];
2918 IJK_Field_local_double& ag_i = tmp_a[6];
2919 IJK_Field_local_double& ag_j = tmp_a[7];
2920 IJK_Field_local_double& ag_k = tmp_a[8];
2922 ArrOfDouble& moy_li_x = ml[0][0];
2923 ArrOfDouble& moy_li_y = ml[0][1];
2924 ArrOfDouble& moy_li_z = ml[0][2];
2926 ArrOfDouble& moy_mi_x = ml[1][0];
2927 ArrOfDouble& moy_mi_y = ml[1][1];
2928 ArrOfDouble& moy_mi_z = ml[1][2];
2930 ArrOfDouble& moy_hi_x = ml[2][0];
2931 ArrOfDouble& moy_hi_y = ml[2][1];
2932 ArrOfDouble& moy_hi_z = ml[2][2];
2934 ArrOfDouble& moy_mimi_x = ml[3][0];
2935 ArrOfDouble& moy_mimi_y = ml[3][1];
2936 ArrOfDouble& moy_mimi_z = ml[3][2];
2937 ArrOfDouble& moy_mimi = ml[3][6];
2939 ArrOfDouble& moy_hihi_x = ml[4][0];
2940 ArrOfDouble& moy_hihi_y = ml[4][1];
2941 ArrOfDouble& moy_hihi_z = ml[4][2];
2942 ArrOfDouble& moy_hihi = ml[4][6];
2944 ArrOfDouble& moy_mili_x = ml[5][0];
2945 ArrOfDouble& moy_mili_y = ml[5][1];
2946 ArrOfDouble& moy_mili_z = ml[5][2];
2947 ArrOfDouble& moy_mili = ml[5][6];
2949 ArrOfDouble& moy_hili_x = ml[6][0];
2950 ArrOfDouble& moy_hili_y = ml[6][1];
2951 ArrOfDouble& moy_hili_z = ml[6][2];
2952 ArrOfDouble& moy_hili = ml[6][6];
2954 ArrOfDouble& moy_mihi_x = ml[7][0];
2955 ArrOfDouble& moy_mihi_y = ml[7][1];
2956 ArrOfDouble& moy_mihi_z = ml[7][2];
2957 ArrOfDouble& moy_mihi = ml[7][6];
2970 const int ghost_size_filter = kernel->ghost_size();
2971 const int size_uniform = kernel->size_uniform();
2972 const int shift_uniform = kernel->shift_uniform();
2973 for (
int k = 0; k < nk; k++)
2975 const int kg = k + offset;
3018 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
3019 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
3021 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
3024 const int size_k_elem = kernel->size_k_elem(kg, nktot);
3025 const int shift_k_elem = kernel->shift_k_elem(kg);
3026 const bool ponderation_filter_kernel = kernel->ponderation();
3027 const bool normalisation_filter_kernel = kernel->normalisation();
3029 double facteur_elem = 0.;
3030 if (ponderation_filter_kernel)
3032 if (normalisation_filter_kernel)
3034 double longueur_elem = 0.;
3035 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3037 const int kpg = kg + kp;
3038 if (kpg<-1 || kpg>nktot)
3040 Cerr <<
"This should not happen." << finl;
3043 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3044 const double filter_coef_z = filter_kernel_z[kp+10];
3045 longueur_elem += filter_coef_z * dz;
3047 facteur_elem = 1./longueur_elem;
3051 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
3055 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
3057 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
3059 bus_i(i, j, 0) = 0.;
3060 bus_j(i, j, 0) = 0.;
3061 bus_k(i, j, 0) = 0.;
3062 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3064 const int kpg = kg + kp;
3065 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3067 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3068 const double filter_coef_z = filter_kernel_z[kp+10];
3069 const double scalar = champ_scalar(i,j,k+kp);
3071 const double uf_i = vitesse_i(i,j,k+kp);
3072 const double vf_j = vitesse_j(i,j,k+kp);
3073 const double wf_k = vitesse_k(i,j,k+kp);
3075 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
3076 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
3077 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
3079 const double ue = 0.5 * (uf_i + uf_ip1);
3080 const double ve = 0.5 * (vf_j + vf_jp1);
3081 const double we = 0.5 * (wf_k + wf_kp1);
3083 if (ponderation_filter_kernel)
3085 bus_i(i, j, 0) += ue*scalar * filter_coef_z * dz * facteur_elem;
3086 bus_j(i, j, 0) += ve*scalar * filter_coef_z * dz * facteur_elem;
3087 bus_k(i, j, 0) += we*scalar * filter_coef_z * dz * facteur_elem;
3091 bus_i(i, j, 0) += ue*scalar * filter_coef_z;
3092 bus_j(i, j, 0) += ve*scalar * filter_coef_z;
3093 bus_k(i, j, 0) += we*scalar * filter_coef_z;
3098 if (turbulent_viscosity)
3103 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3105 const int kpg = kg + kp;
3106 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3108 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3109 const double filter_coef_z = filter_kernel_z[kp+10];
3112 calculer_pi(i, j, k+kp, velocity, champ_scalar, scalar_kmin, scalar_kmax, turbulent_mu_x, turbulent_mu_y, turbulent_mu_z, delta_z, 1., 1., 1., 1., 1., f);
3116 const double dz_pour_delta = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z_pour_delta[k+kp];
3117 const double dz_m1_pour_delta = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1+kp];
3118 const double dz_p1_pour_delta = (kpg+1<0 || kpg+1>(nktot-1)) ? 0. : delta_z_pour_delta[k+1+kp];
3119 const double delta_m_pour_delta = (kpg-1<0 || kpg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_m1_pour_delta);
3120 const double delta_p_pour_delta = (kpg<0 || kpg+1>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_p1_pour_delta);
3121 calculer_pi(i, j, k+kp, velocity, champ_scalar, scalar_kmin, scalar_kmax, turbulent_mu_x, turbulent_mu_y, turbulent_mu_z, delta_z, dx_pour_delta, dy_pour_delta, dz_pour_delta, delta_m_pour_delta, delta_p_pour_delta, f);
3124 if (ponderation_filter_kernel)
3126 bf_i(i, j, 0) += f[0] * filter_coef_z * dz * facteur_elem;
3127 bf_j(i, j, 0) += f[1] * filter_coef_z * dz * facteur_elem;
3128 bf_k(i, j, 0) += f[2] * filter_coef_z * dz * facteur_elem;
3132 bf_i(i, j, 0) += f[0] * filter_coef_z;
3133 bf_j(i, j, 0) += f[1] * filter_coef_z;
3134 bf_k(i, j, 0) += f[2] * filter_coef_z;
3140 if (structural_uscalar)
3145 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3147 const int kpg = kg + kp;
3148 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3150 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3151 const double filter_coef_z = filter_kernel_z[kp+10];
3152 const double gxf_i = -structural_uscalar_x(i,j,k+kp);
3153 const double gyf_j = -structural_uscalar_y(i,j,k+kp);
3154 const double gzf_k = -structural_uscalar_z(i,j,k+kp);
3156 const double gxf_ip1 = -structural_uscalar_x(i+1,j,k+kp);
3157 const double gyf_jp1 = -structural_uscalar_y(i,j+1,k+kp);
3158 const double gzf_kp1 = kpg==(nktot-1) ? 0. : -structural_uscalar_z(i,j,k+1+kp);
3160 const double gx_e = 0.5 * (gxf_i + gxf_ip1);
3161 const double gy_e = 0.5 * (gyf_j + gyf_jp1);
3162 const double gz_e = 0.5 * (gzf_k + gzf_kp1);
3164 if (ponderation_filter_kernel)
3166 bg_i(i, j, 0) += gx_e * filter_coef_z * dz * facteur_elem;
3167 bg_j(i, j, 0) += gy_e * filter_coef_z * dz * facteur_elem;
3168 bg_k(i, j, 0) += gz_e * filter_coef_z * dz * facteur_elem;
3172 bg_i(i, j, 0) += gx_e * filter_coef_z;
3173 bg_j(i, j, 0) += gy_e * filter_coef_z;
3174 bg_k(i, j, 0) += gz_e * filter_coef_z;
3181 for (
int j = 0; j < nj; j++)
3183 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
3185 aus_i(i, 0, 0) = 0.;
3186 aus_j(i, 0, 0) = 0.;
3187 aus_k(i, 0, 0) = 0.;
3188 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3190 const double filter_coef_y = filter_kernel_y[jp+10];
3191 aus_i(i, 0, 0) += bus_i(i, j+jp, 0) * filter_coef_y;
3192 aus_j(i, 0, 0) += bus_j(i, j+jp, 0) * filter_coef_y;
3193 aus_k(i, 0, 0) += bus_k(i, j+jp, 0) * filter_coef_y;
3195 if (turbulent_viscosity)
3200 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3202 const double filter_coef_y = filter_kernel_y[jp+10];
3203 af_i(i, 0, 0) += bf_i(i, j+jp, 0) * filter_coef_y;
3204 af_j(i, 0, 0) += bf_j(i, j+jp, 0) * filter_coef_y;
3205 af_k(i, 0, 0) += bf_k(i, j+jp, 0) * filter_coef_y;
3208 if (structural_uscalar)
3213 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3215 const double filter_coef_y = filter_kernel_y[jp+10];
3216 ag_i(i, 0, 0) += bg_i(i, j+jp, 0) * filter_coef_y;
3217 ag_j(i, 0, 0) += bg_j(i, j+jp, 0) * filter_coef_y;
3218 ag_k(i, 0, 0) += bg_k(i, j+jp, 0) * filter_coef_y;
3223 for (
int i = 0; i < ni; i++)
3228 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3230 const double filter_coef_x = filter_kernel_x[ip+10];
3231 rus_i += aus_i(i+ip, 0, 0) * filter_coef_x;
3232 rus_j += aus_j(i+ip, 0, 0) * filter_coef_x;
3233 rus_k += aus_k(i+ip, 0, 0) * filter_coef_x;
3236 const double scalar = champ_scalar_filtre(i,j,k);
3238 const double uf_i = vitesse_i_filtre(i,j,k);
3239 const double vf_j = vitesse_j_filtre(i,j,k);
3240 const double wf_k = vitesse_k_filtre(i,j,k);
3242 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
3243 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
3244 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
3246 const double ue = 0.5 * (uf_i + uf_ip1);
3247 const double ve = 0.5 * (vf_j + vf_jp1);
3248 const double we = 0.5 * (wf_k + wf_kp1);
3250 const double l_i = rus_i - ue*scalar;
3251 const double l_j = rus_j - ve*scalar;
3252 const double l_k = rus_k - we*scalar;
3256 moy_li_x[kg] += l_i;
3257 moy_li_y[kg] += l_j;
3258 moy_li_z[kg] += l_k;
3261 if (turbulent_viscosity)
3266 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3268 const double filter_coef_x = filter_kernel_x[ip+10];
3269 rf_i += af_i(i+ip, 0, 0) * filter_coef_x;
3270 rf_j += af_j(i+ip, 0, 0) * filter_coef_x;
3271 rf_k += af_k(i+ip, 0, 0) * filter_coef_x;
3276 calculer_pi(i, j, k, velocity_filtre, champ_scalar_filtre, scalar_kmin, scalar_kmax, turbulent_mu_filtre_x, turbulent_mu_filtre_y, turbulent_mu_filtre_z, delta_z, 1., 1., 1., 1., 1., f_filtre);
3280 const double dx_filtre = facteur_delta_filtre_x*dx;
3281 const double dy_filtre = facteur_delta_filtre_y*dy;
3282 const double dz_filtre = delta_z_pour_delta_filtre[k];
3283 const double delta_m_filtre = kg==0 ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k-1]);
3284 const double delta_p_filtre = kg==(nktot-1) ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k+1]);
3285 calculer_pi(i, j, k, velocity_filtre, champ_scalar_filtre, scalar_kmin, scalar_kmax, turbulent_mu_filtre_x, turbulent_mu_filtre_y, turbulent_mu_filtre_z, delta_z, dx_filtre, dy_filtre, dz_filtre, delta_m_filtre, delta_p_filtre, f_filtre);
3288 m_i = f_filtre[0] - rf_i;
3289 m_j = f_filtre[1] - rf_j;
3290 m_k = f_filtre[2] - rf_k;
3292 const double mimi = m_i * m_i
3296 const double mili = m_i * l_i
3300 moy_mimi[kg] += mimi;
3301 moy_mili[kg] += mili;
3305 moy_mi_x[kg] += m_i;
3306 moy_mi_y[kg] += m_j;
3307 moy_mi_z[kg] += m_k;
3309 moy_mimi_x[kg] += m_i * m_i;
3310 moy_mimi_y[kg] += m_j * m_j;
3311 moy_mimi_z[kg] += m_k * m_k;
3313 moy_mili_x[kg] += m_i * l_i;
3314 moy_mili_y[kg] += m_j * l_j;
3315 moy_mili_z[kg] += m_k * l_k;
3319 if (structural_uscalar)
3324 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3326 const double filter_coef_x = filter_kernel_x[ip+10];
3327 rg_i += ag_i(i+ip, 0, 0) * filter_coef_x;
3328 rg_j += ag_j(i+ip, 0, 0) * filter_coef_x;
3329 rg_k += ag_k(i+ip, 0, 0) * filter_coef_x;
3332 const double gxf_i = -structural_uscalar_filtre_x(i,j,k);
3333 const double gyf_j = -structural_uscalar_filtre_y(i,j,k);
3334 const double gzf_k = -structural_uscalar_filtre_z(i,j,k);
3336 const double gxf_ip1 = -structural_uscalar_filtre_x(i+1,j,k);
3337 const double gyf_jp1 = -structural_uscalar_filtre_y(i,j+1,k);
3338 const double gzf_kp1 = kg==(nktot-1) ? 0. : -structural_uscalar_filtre_z(i,j,k+1);
3340 const double gx_e = 0.5 * (gxf_i + gxf_ip1);
3341 const double gy_e = 0.5 * (gyf_j + gyf_jp1);
3342 const double gz_e = 0.5 * (gzf_k + gzf_kp1);
3348 const double hihi = h_i * h_i
3352 const double hili = h_i * l_i
3356 moy_hihi[kg] += hihi;
3357 moy_hili[kg] += hili;
3361 moy_hi_x[kg] += h_i;
3362 moy_hi_y[kg] += h_j;
3363 moy_hi_z[kg] += h_k;
3365 moy_hihi_x[kg] += h_i * h_i;
3366 moy_hihi_y[kg] += h_j * h_j;
3367 moy_hihi_z[kg] += h_k * h_k;
3369 moy_hili_x[kg] += h_i * l_i;
3370 moy_hili_y[kg] += h_j * l_j;
3371 moy_hili_z[kg] += h_k * l_k;
3374 if (turbulent_viscosity)
3376 const double mihi = m_i * h_i
3380 moy_mihi[kg] += mihi;
3384 moy_mihi_x[kg] += m_i * h_i;
3385 moy_mihi_y[kg] += m_j * h_j;
3386 moy_mihi_z[kg] += m_k * h_k;
3396void calculer_turbulent_mu_scalar(
const bool anisotropic,
3397 const Nom& turbulent_viscosity_model,
3398 const double turbulent_viscosity_model_constant,
3399 const double variation_cste_modele_fonctionnel_,
3400 const double smoothing_center_fr_,
3401 const double smoothing_factor_fr_,
3402 const double Re_tau_fr_,
3403 const double Re_tau_ch_,
3404 const double pond_fr_,
3405 const double pond_ch_,
3406 const double center_constant_,
3407 const double Lz_tot_,
3408 IJK_Field_vector3_double& velocity,
3409 IJK_Field_vector3_double& velocity_filtre,
3410 IJK_Field_double& rho,
3411 IJK_Field_double& rho_filtre,
3412 double rho_kmin,
double rho_kmax,
3413 IJK_Field_double& scalar,
3414 IJK_Field_double& scalar_filtre,
3415 double scalar_kmin,
double scalar_kmax,
3416 const ArrOfDouble_with_ghost& delta_z,
3417 const double facteur_delta_x,
3418 const double facteur_delta_y,
3419 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3420 const double facteur_delta_filtre_x,
3421 const double facteur_delta_filtre_y,
3422 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3426 const bool flag_turbulent_mu_filtre,
3427 IJK_Field_double& turbulent_mu_filtre,
3428 IJK_Field_double& turbulent_mu,
3433 choix_modele(turbulent_viscosity_model, model);
3435 calculer_turbulent_mu(anisotropic,
3436 *model, turbulent_viscosity_model_constant, variation_cste_modele_fonctionnel_, smoothing_center_fr_, smoothing_factor_fr_, Re_tau_fr_, Re_tau_ch_, pond_fr_, pond_ch_, center_constant_, Lz_tot_,
3437 velocity, rho, scalar, scalar_kmin, scalar_kmax,
3438 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3439 turbulent_mu, splitting);
3440 int ghost_size_filter;
3441 int ghost_size_velocity;
3442 int ghost_size_scalar;
3443 if (flag_turbulent_mu_filtre)
3445 ghost_size_filter = 1 + kernel->ghost_size();
3446 ghost_size_velocity = max((
int) 2, ghost_size_filter);
3447 ghost_size_scalar = max((
int) 2, ghost_size_filter);
3453 const int flag_add = 0;
3454 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
3455 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
3456 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
3457 filtrer_champ_elem(flag_add, rho, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, rho_filtre);
3465 if (&scalar != &rho)
3468 filtrer_champ_elem(flag_add, scalar, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, scalar_filtre);
3472 calculer_turbulent_mu(anisotropic,
3473 *model, turbulent_viscosity_model_constant, variation_cste_modele_fonctionnel_, smoothing_center_fr_, smoothing_factor_fr_, Re_tau_fr_, Re_tau_ch_, pond_fr_, pond_ch_, center_constant_, Lz_tot_,
3474 velocity_filtre, rho_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
3475 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3476 turbulent_mu_filtre, splitting);
3483void calculer_turbulent_mu_tensor(
const bool anisotropic,
3484 const Nom& turbulent_viscosity_model,
3485 const double turbulent_viscosity_model_constant,
3486 const ArrOfDouble& turbulent_viscosity_tensor_coefficients,
3487 const double variation_cste_modele_fonctionnel_,
3488 const double smoothing_center_fr_,
3489 const double smoothing_factor_fr_,
3490 const double Re_tau_fr_,
3491 const double Re_tau_ch_,
3492 const double pond_fr_,
3493 const double pond_ch_,
3494 const double center_constant_,
3495 const double Lz_tot_,
3496 IJK_Field_vector3_double& velocity,
3497 IJK_Field_vector3_double& velocity_filtre,
3498 IJK_Field_double& rho,
3499 IJK_Field_double& rho_filtre,
3500 double rho_kmin,
double rho_kmax,
3501 IJK_Field_double& scalar,
3502 IJK_Field_double& scalar_filtre,
3503 double scalar_kmin,
double scalar_kmax,
3504 const ArrOfDouble_with_ghost& delta_z,
3505 const double facteur_delta_x,
3506 const double facteur_delta_y,
3507 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3508 const double facteur_delta_filtre_x,
3509 const double facteur_delta_filtre_y,
3510 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3514 const bool flag_turbulent_mu_filtre,
3521 const double& coefficient_xx = turbulent_viscosity_tensor_coefficients[0];
3522 const double& coefficient_xy = turbulent_viscosity_tensor_coefficients[1];
3523 const double& coefficient_xz = turbulent_viscosity_tensor_coefficients[2];
3524 const double& coefficient_yy = turbulent_viscosity_tensor_coefficients[3];
3525 const double& coefficient_yz = turbulent_viscosity_tensor_coefficients[4];
3526 const double& coefficient_zz = turbulent_viscosity_tensor_coefficients[5];
3528 IJK_Field_double& turbulent_mu_xx = turbulent_mu_tensor[0];
3529 IJK_Field_double& turbulent_mu_xy = turbulent_mu_tensor[1];
3530 IJK_Field_double& turbulent_mu_xz = turbulent_mu_tensor[2];
3531 IJK_Field_double& turbulent_mu_yy = turbulent_mu_tensor[3];
3532 IJK_Field_double& turbulent_mu_yz = turbulent_mu_tensor[4];
3533 IJK_Field_double& turbulent_mu_zz = turbulent_mu_tensor[5];
3535 IJK_Field_double& turbulent_mu_filtre_xx = turbulent_mu_filtre_tensor[0];
3536 IJK_Field_double& turbulent_mu_filtre_xy = turbulent_mu_filtre_tensor[1];
3537 IJK_Field_double& turbulent_mu_filtre_xz = turbulent_mu_filtre_tensor[2];
3538 IJK_Field_double& turbulent_mu_filtre_yy = turbulent_mu_filtre_tensor[3];
3539 IJK_Field_double& turbulent_mu_filtre_yz = turbulent_mu_filtre_tensor[4];
3540 IJK_Field_double& turbulent_mu_filtre_zz = turbulent_mu_filtre_tensor[5];
3542 choix_modele(turbulent_viscosity_model, model);
3550 calculer_turbulent_mu_scalar(anisotropic,
3551 turbulent_viscosity_model, turbulent_viscosity_model_constant, variation_cste_modele_fonctionnel_, smoothing_center_fr_, smoothing_factor_fr_, Re_tau_fr_, Re_tau_ch_, pond_fr_, pond_ch_, center_constant_, Lz_tot_,
3552 velocity, velocity_filtre,
3553 rho, rho_filtre, rho_kmin, rho_kmax,
3554 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
3555 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3556 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3557 kernel, tmp_b, tmp_a,
3558 flag_turbulent_mu_filtre, turbulent_mu_filtre_xx,
3559 turbulent_mu_xx, splitting);
3561 multiplier_champ(coefficient_xy, turbulent_mu_xx, turbulent_mu_xy);
3562 multiplier_champ(coefficient_xz, turbulent_mu_xx, turbulent_mu_xz);
3563 multiplier_champ(coefficient_yy, turbulent_mu_xx, turbulent_mu_yy);
3564 multiplier_champ(coefficient_yz, turbulent_mu_xx, turbulent_mu_yz);
3565 multiplier_champ(coefficient_zz, turbulent_mu_xx, turbulent_mu_zz);
3566 multiplier_champ(coefficient_xx, turbulent_mu_xx, turbulent_mu_xx);
3568 if (flag_turbulent_mu_filtre)
3570 multiplier_champ(coefficient_xy, turbulent_mu_filtre_xx, turbulent_mu_filtre_xy);
3571 multiplier_champ(coefficient_xz, turbulent_mu_filtre_xx, turbulent_mu_filtre_xz);
3572 multiplier_champ(coefficient_yy, turbulent_mu_filtre_xx, turbulent_mu_filtre_yy);
3573 multiplier_champ(coefficient_yz, turbulent_mu_filtre_xx, turbulent_mu_filtre_yz);
3574 multiplier_champ(coefficient_zz, turbulent_mu_filtre_xx, turbulent_mu_filtre_zz);
3575 multiplier_champ(coefficient_xx, turbulent_mu_filtre_xx, turbulent_mu_filtre_xx);
3583void calculer_turbulent_mu_vector(
const bool anisotropic,
3584 const Nom& turbulent_viscosity_model,
3585 const double turbulent_viscosity_model_constant,
3586 const ArrOfDouble& turbulent_diffusivity_vector_coefficients,
3587 const double variation_cste_modele_fonctionnel_,
3588 const double smoothing_center_fr_,
3589 const double smoothing_factor_fr_,
3590 const double Re_tau_fr_,
3591 const double Re_tau_ch_,
3592 const double pond_fr_,
3593 const double pond_ch_,
3594 const double center_constant_,
3595 const double Lz_tot_,
3596 IJK_Field_vector3_double& velocity,
3597 IJK_Field_vector3_double& velocity_filtre,
3598 IJK_Field_double& rho,
3599 IJK_Field_double& rho_filtre,
3600 double rho_kmin,
double rho_kmax,
3601 IJK_Field_double& scalar,
3602 IJK_Field_double& scalar_filtre,
3603 double scalar_kmin,
double scalar_kmax,
3604 const ArrOfDouble_with_ghost& delta_z,
3605 const double facteur_delta_x,
3606 const double facteur_delta_y,
3607 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3608 const double facteur_delta_filtre_x,
3609 const double facteur_delta_filtre_y,
3610 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3614 const bool flag_turbulent_mu_filtre,
3615 IJK_Field_vector3_double& turbulent_mu_filtre_vector,
3616 IJK_Field_vector3_double& turbulent_mu_vector,
3621 const double& coefficient_x = turbulent_diffusivity_vector_coefficients[0];
3622 const double& coefficient_y = turbulent_diffusivity_vector_coefficients[1];
3623 const double& coefficient_z = turbulent_diffusivity_vector_coefficients[2];
3625 IJK_Field_double& turbulent_mu_x = turbulent_mu_vector[0];
3626 IJK_Field_double& turbulent_mu_y = turbulent_mu_vector[1];
3627 IJK_Field_double& turbulent_mu_z = turbulent_mu_vector[2];
3629 IJK_Field_double& turbulent_mu_filtre_x = turbulent_mu_filtre_vector[0];
3630 IJK_Field_double& turbulent_mu_filtre_y = turbulent_mu_filtre_vector[1];
3631 IJK_Field_double& turbulent_mu_filtre_z = turbulent_mu_filtre_vector[2];
3633 choix_modele(turbulent_viscosity_model, model);
3641 calculer_turbulent_mu_scalar(anisotropic,
3642 turbulent_viscosity_model, turbulent_viscosity_model_constant, variation_cste_modele_fonctionnel_, smoothing_center_fr_, smoothing_factor_fr_, Re_tau_fr_, Re_tau_ch_, pond_fr_, pond_ch_, center_constant_, Lz_tot_,
3643 velocity, velocity_filtre,
3644 rho, rho_filtre, rho_kmin, rho_kmax,
3645 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
3646 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3647 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3648 kernel, tmp_b, tmp_a,
3649 flag_turbulent_mu_filtre, turbulent_mu_filtre_x,
3650 turbulent_mu_x, splitting);
3652 multiplier_champ(coefficient_y, turbulent_mu_x, turbulent_mu_y);
3653 multiplier_champ(coefficient_z, turbulent_mu_x, turbulent_mu_z);
3654 multiplier_champ(coefficient_x, turbulent_mu_x, turbulent_mu_x);
3656 if (flag_turbulent_mu_filtre)
3658 multiplier_champ(coefficient_y, turbulent_mu_filtre_x, turbulent_mu_filtre_y);
3659 multiplier_champ(coefficient_z, turbulent_mu_filtre_x, turbulent_mu_filtre_z);
3660 multiplier_champ(coefficient_x, turbulent_mu_filtre_x, turbulent_mu_filtre_x);
3667void calculer_structural_uu_gradient(
const double structural_uu_model_constant,
3668 const ArrOfDouble& structural_uu_tensor_coefficients,
3669 const IJK_Field_vector3_double& velocity,
3670 const ArrOfDouble_with_ghost& delta_z_maillage,
3671 const double facteur_x_pour_delta,
3672 const double facteur_y_pour_delta,
3673 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3676 const IJK_Field_double& vitesse_i = velocity[0];
3677 const IJK_Field_double& vitesse_j = velocity[1];
3678 const IJK_Field_double& vitesse_k = velocity[2];
3680 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
3681 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
3682 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
3683 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
3684 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
3685 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
3687 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
3688 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
3689 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
3690 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
3691 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
3692 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
3694 const double deltaunsurdx = facteur_x_pour_delta;
3695 const double deltaunsurdy = facteur_y_pour_delta;
3700 const int ni = vitesse_k.
ni();
3701 const int nj = vitesse_k.
nj();
3702 const int nk = vitesse_k.
nk();
3704 for (
int k = 0; k < nk; k++)
3706 for (
int j = 0; j < nj; j++)
3708 for (
int i = 0; i < ni; i++)
3710 const int kg = k + offset;
3712 const double dz = delta_z_maillage[k];
3713 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
3714 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
3715 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
3717 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
3718 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
3719 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
3720 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
3722 const double uf_i = vitesse_i(i,j,k);
3723 const double uf_ip1 = vitesse_i(i+1,j,k);
3724 const double uf_im1 = vitesse_i(i-1,j,k);
3725 const double uf_i_jm1 = vitesse_i(i,j-1,k);
3726 const double uf_i_jp1 = vitesse_i(i,j+1,k);
3727 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
3728 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
3729 const double uf_i_jm1_km1 = kg==0 ? 0. : vitesse_i(i,j-1,k-1);
3730 const double uf_i_jp1_km1 = kg==0 ? 0. : vitesse_i(i,j+1,k-1);
3731 const double uf_i_jm1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j-1,k+1);
3732 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
3733 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
3734 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
3735 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
3736 const double uf_im1_jm1 = vitesse_i(i-1,j-1,k);
3737 const double uf_im1_km1 = kg==0 ? 0. : vitesse_i(i-1,j,k-1);
3739 const double vf_j = vitesse_j(i,j,k);
3740 const double vf_j_im1 = vitesse_j(i-1,j,k);
3741 const double vf_j_ip1 = vitesse_j(i+1,j,k);
3742 const double vf_jp1 = vitesse_j(i,j+1,k);
3743 const double vf_jm1 = vitesse_j(i,j-1,k);
3744 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
3745 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
3746 const double vf_j_im1_km1 = kg==0 ? 0. : vitesse_j(i-1,j,k-1);
3747 const double vf_j_ip1_km1 = kg==0 ? 0. : vitesse_j(i+1,j,k-1);
3748 const double vf_j_im1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i-1,j,k+1);
3749 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
3750 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
3751 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
3752 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
3753 const double vf_jm1_im1 = vitesse_j(i-1,j-1,k);
3754 const double vf_jm1_km1 = kg==0 ? 0. : vitesse_j(i,j-1,k-1);
3756 const double wf_k = vitesse_k(i,j,k);
3757 const double wf_k_im1 = vitesse_k(i-1,j,k);
3758 const double wf_k_ip1 = vitesse_k(i+1,j,k);
3759 const double wf_k_jm1 = vitesse_k(i,j-1,k);
3760 const double wf_k_jp1 = vitesse_k(i,j+1,k);
3761 const double wf_k_im1_jm1 = vitesse_k(i-1,j-1,k);
3762 const double wf_k_ip1_jm1 = vitesse_k(i+1,j-1,k);
3763 const double wf_k_im1_jp1 = vitesse_k(i-1,j+1,k);
3764 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
3765 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
3766 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
3767 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
3768 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
3769 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
3770 const double wf_km1_im1 = kg==0 ? 0. : vitesse_k(i-1,j,k-1);
3771 const double wf_km1_jm1 = kg==0 ? 0. : vitesse_k(i,j-1,k-1);
3773 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
3774 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
3775 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
3777 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
3778 const double dujdy_im1 = deltaunsurdy * (vf_jp1_im1 - vf_j_im1);
3779 const double dukdz_im1 = deltaunsurdz * (wf_kp1_im1 - wf_k_im1);
3781 const double duidx_jm1 = deltaunsurdx * (uf_ip1_jm1 - uf_i_jm1);
3782 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
3783 const double dukdz_jm1 = deltaunsurdz * (wf_kp1_jm1 - wf_k_jm1);
3785 const double duidx_km1 = deltaunsurdx * (uf_ip1_km1 - uf_i_km1);
3786 const double dujdy_km1 = deltaunsurdy * (vf_jp1_km1 - vf_j_km1);
3787 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
3789 const double duidx_im1_jm1 = deltaunsurdx * (uf_i_jm1 - uf_im1_jm1);
3790 const double dujdy_im1_jm1 = deltaunsurdy * (vf_j_im1 - vf_jm1_im1);
3792 const double dujdy_jm1_km1 = deltaunsurdy * (vf_j_km1 - vf_jm1_km1);
3793 const double dukdz_jm1_km1 = deltaunsurdz * (wf_k_jm1 - wf_km1_jm1);
3795 const double duidx_im1_km1 = deltaunsurdx * (uf_i_km1 - uf_im1_km1);
3796 const double dukdz_im1_km1 = deltaunsurdz * (wf_k_im1 - wf_km1_im1);
3798 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
3799 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
3800 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
3801 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
3802 const double duidy_ij_km1 = deltaunsurdy * (uf_i_km1 - uf_i_jm1_km1);
3803 const double duidy_ijp1_km1 = deltaunsurdy * (uf_i_jp1_km1 - uf_i_km1);
3805 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
3806 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
3807 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
3808 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
3809 const double duidz_ik_jm1 = deltaunsurdelta_m * (uf_i_jm1 - uf_i_jm1_km1);
3810 const double duidz_ikp1_jm1 = deltaunsurdelta_p * (uf_i_jm1_kp1 - uf_i_jm1);
3812 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
3813 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
3814 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
3815 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
3816 const double dujdx_ij_km1 = deltaunsurdx * (vf_j_km1 - vf_j_im1_km1);
3817 const double dujdx_ip1j_km1 = deltaunsurdx * (vf_j_ip1_km1 - vf_j_km1);
3819 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
3820 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
3821 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
3822 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
3823 const double dujdz_jk_im1 = deltaunsurdelta_m * (vf_j_im1 - vf_j_im1_km1);
3824 const double dujdz_jkp1_im1 = deltaunsurdelta_p * (vf_j_im1_kp1 - vf_j_im1);
3826 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
3827 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
3828 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
3829 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
3830 const double dukdx_ik_jm1 = deltaunsurdx * (wf_k_jm1 - wf_k_im1_jm1);
3831 const double dukdx_ip1k_jm1 = deltaunsurdx * (wf_k_ip1_jm1 - wf_k_jm1);
3833 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
3834 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
3835 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
3836 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
3837 const double dukdy_jk_im1 = deltaunsurdy * (wf_k_im1 - wf_k_im1_jm1);
3838 const double dukdy_jp1k_im1 = deltaunsurdy * (wf_k_im1_jp1 - wf_k_im1);
3840 const double g_e_ii = duidx;
3841 const double g_e_ij = 0.25 * (duidy_ip1jp1 + duidy_ijp1 + duidy_ip1j + duidy_ij);
3842 const double g_e_ik = 0.25 * (duidz_ip1kp1 + duidz_ikp1 + duidz_ip1k + duidz_ik);
3843 const double g_e_ji = 0.25 * (dujdx_ip1jp1 + dujdx_ip1j + dujdx_ijp1 + dujdx_ij);
3844 const double g_e_jj = dujdy;
3845 const double g_e_jk = 0.25 * (dujdz_jp1kp1 + dujdz_jkp1 + dujdz_jp1k + dujdz_jk);
3846 const double g_e_ki = 0.25 * (dukdx_ip1kp1 + dukdx_ip1k + dukdx_ikp1 + dukdx_ik);
3847 const double g_e_kj = 0.25 * (dukdy_jp1kp1 + dukdy_jp1k + dukdy_jkp1 + dukdy_jk);
3848 const double g_e_kk = dukdz;
3850 const double g_aij_ii = 0.25 * (duidx_im1_jm1 + duidx_jm1 + duidx_im1 + duidx);
3851 const double g_aij_ij = duidy_ij;
3852 const double g_aij_ik = 0.25 * (duidz_ikp1_jm1 + duidz_ikp1 + duidz_ik_jm1 + duidz_ik);
3853 const double g_aij_ji = dujdx_ij;
3854 const double g_aij_jj = 0.25 * (dujdy_im1_jm1 + dujdy_jm1 + dujdy_im1 + dujdy);
3855 const double g_aij_jk = 0.25 * (dujdz_jkp1_im1 + dujdz_jkp1 + dujdz_jk_im1 + dujdz_jk);
3857 const double g_aik_ii = 0.25 * (duidx_im1_km1 + duidx_km1 + duidx_im1 + duidx);
3858 const double g_aik_ij = 0.25 * (duidy_ijp1_km1 + duidy_ijp1 + duidy_ij_km1 + duidy_ij);
3859 const double g_aik_ik = duidz_ik;
3860 const double g_aik_ki = dukdx_ik;
3861 const double g_aik_kj = 0.25 * (dukdy_jp1k_im1 + dukdy_jp1k + dukdy_jk_im1 + dukdy_jk);
3862 const double g_aik_kk = 0.25 * (dukdz_im1_km1 + dukdz_km1 + dukdz_im1 + dukdz);
3864 const double g_ajk_ji = 0.25 * (dujdx_ip1j_km1 + dujdx_ip1j + dujdx_ij_km1 + dujdx_ij);
3865 const double g_ajk_jj = 0.25 * (dujdy_jm1_km1 + dujdy_km1 + dujdy_jm1 + dujdy);
3866 const double g_ajk_jk = dujdz_jk;
3867 const double g_ajk_ki = 0.25 * (dukdx_ip1k_jm1 + dukdx_ip1k + dukdx_ik_jm1 + dukdx_ik);
3868 const double g_ajk_kj = dukdy_jk;
3869 const double g_ajk_kk = 0.25 * (dukdz_jm1_km1 + dukdz_km1 + dukdz_jm1 + dukdz);
3871 const double c_ii = g_e_ii*g_e_ii + g_e_ij*g_e_ij + g_e_ik*g_e_ik;
3872 const double c_ij = g_aij_ii*g_aij_ji + g_aij_ij*g_aij_jj + g_aij_ik*g_aij_jk;
3873 const double c_ik = g_aik_ii*g_aik_ki + g_aik_ij*g_aik_kj + g_aik_ik*g_aik_kk;
3874 const double c_jj = g_e_ji*g_e_ji + g_e_jj*g_e_jj + g_e_jk*g_e_jk;
3875 const double c_jk = g_ajk_ji*g_ajk_ki + g_ajk_jj*g_ajk_kj + g_ajk_jk*g_ajk_kk;
3876 const double c_kk = g_e_ki*g_e_ki + g_e_kj*g_e_kj + g_e_kk*g_e_kk;
3878 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii/12.;
3879 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij/12.;
3880 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik/12.;
3881 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj/12.;
3882 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk/12.;
3883 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk/12.;
3889void calculer_laplacien_u(
const IJK_Field_vector3_double& velocity,
3890 const ArrOfDouble_with_ghost& delta_z_maillage,
3891 const double facteur_x_pour_delta,
3892 const double facteur_y_pour_delta,
3893 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3894 IJK_Field_vector3_double& laplacien_velocity)
3896 const IJK_Field_double& vitesse_i = velocity[0];
3897 const IJK_Field_double& vitesse_j = velocity[1];
3898 const IJK_Field_double& vitesse_k = velocity[2];
3900 IJK_Field_double& laplacien_i = laplacien_velocity[0];
3901 IJK_Field_double& laplacien_j = laplacien_velocity[1];
3902 IJK_Field_double& laplacien_k = laplacien_velocity[2];
3904 const double deltaunsurdx = facteur_x_pour_delta;
3905 const double deltaunsurdy = facteur_y_pour_delta;
3910 const int ni = vitesse_k.
ni();
3911 const int nj = vitesse_k.
nj();
3912 const int nk = vitesse_k.
nk();
3914 for (
int k = 0; k < nk; k++)
3916 for (
int j = 0; j < nj; j++)
3918 for (
int i = 0; i < ni; i++)
3920 const int kg = k + offset;
3922 const double dz = delta_z_maillage[k];
3923 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
3924 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
3925 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
3927 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
3928 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
3929 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
3930 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
3932 const double uf_i = vitesse_i(i,j,k);
3933 const double uf_ip1 = vitesse_i(i+1,j,k);
3934 const double uf_im1 = vitesse_i(i-1,j,k);
3935 const double uf_i_jm1 = vitesse_i(i,j-1,k);
3936 const double uf_i_jp1 = vitesse_i(i,j+1,k);
3937 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
3938 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
3940 const double vf_j = vitesse_j(i,j,k);
3941 const double vf_j_im1 = vitesse_j(i-1,j,k);
3942 const double vf_j_ip1 = vitesse_j(i+1,j,k);
3943 const double vf_jp1 = vitesse_j(i,j+1,k);
3944 const double vf_jm1 = vitesse_j(i,j-1,k);
3945 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
3946 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
3948 const double wf_k = vitesse_k(i,j,k);
3949 const double wf_k_im1 = vitesse_k(i-1,j,k);
3950 const double wf_k_ip1 = vitesse_k(i+1,j,k);
3951 const double wf_k_jm1 = vitesse_k(i,j-1,k);
3952 const double wf_k_jp1 = vitesse_k(i,j+1,k);
3953 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
3954 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
3956 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
3957 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
3958 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
3960 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
3961 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
3962 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
3964 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
3965 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
3967 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
3968 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
3970 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
3971 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
3973 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
3974 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
3976 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
3977 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
3979 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
3980 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
3982 const double d2uidx2f_i = deltaunsurdx * (duidx - duidx_im1);
3983 const double d2ujdy2f_j = deltaunsurdy * (dujdy - dujdy_jm1);
3984 const double d2ukdz2f_k = deltaunsurdelta_m * (dukdz - dukdz_km1);
3986 const double d2uidy2f_i = deltaunsurdy * (duidy_ijp1 - duidy_ij);
3987 const double d2uidz2f_i = deltaunsurdz * (duidz_ikp1 - duidz_ik);
3989 const double d2ujdx2f_j = deltaunsurdx * (dujdx_ip1j - dujdx_ij);
3990 const double d2ujdz2f_j = deltaunsurdz * (dujdz_jkp1 - dujdz_jk);
3992 const double d2ukdx2f_k = deltaunsurdx * (dukdx_ip1k - dukdx_ik);
3993 const double d2ukdy2f_k = deltaunsurdy * (dukdy_jp1k - dukdy_jk);
3995 const double laplacien_uf_i = d2uidx2f_i + d2uidy2f_i + d2uidz2f_i;
3996 const double laplacien_vf_j = d2ujdx2f_j + d2ujdy2f_j + d2ujdz2f_j;
3997 const double laplacien_wf_k = d2ukdx2f_k + d2ukdy2f_k + d2ukdz2f_k;
3999 laplacien_i(i,j,k) = laplacien_uf_i;
4000 laplacien_j(i,j,k) = laplacien_vf_j;
4001 laplacien_k(i,j,k) = laplacien_wf_k;
4007void calculer_structural_uu_su_laplacien_u(
const double structural_uu_model_constant,
4008 const ArrOfDouble& structural_uu_tensor_coefficients,
4009 const IJK_Field_vector3_double& velocity,
4010 const IJK_Field_vector3_double& laplacien_velocity,
4013 const IJK_Field_double& vitesse_i = velocity[0];
4014 const IJK_Field_double& vitesse_j = velocity[1];
4015 const IJK_Field_double& vitesse_k = velocity[2];
4017 const IJK_Field_double& laplacien_i = laplacien_velocity[0];
4018 const IJK_Field_double& laplacien_j = laplacien_velocity[1];
4019 const IJK_Field_double& laplacien_k = laplacien_velocity[2];
4021 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4022 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4023 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4024 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4025 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4026 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4028 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4029 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4030 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4031 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4032 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4033 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4038 const int ni = vitesse_k.
ni();
4039 const int nj = vitesse_k.
nj();
4040 const int nk = vitesse_k.
nk();
4042 for (
int k = 0; k < nk; k++)
4044 for (
int j = 0; j < nj; j++)
4046 for (
int i = 0; i < ni; i++)
4048 const int kg = k + offset;
4050 const double uf_i = vitesse_i(i,j,k);
4051 const double uf_ip1 = vitesse_i(i+1,j,k);
4052 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4053 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4055 const double vf_j = vitesse_j(i,j,k);
4056 const double vf_j_im1 = vitesse_j(i-1,j,k);
4057 const double vf_jp1 = vitesse_j(i,j+1,k);
4058 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4060 const double wf_k = vitesse_k(i,j,k);
4061 const double wf_k_im1 = vitesse_k(i-1,j,k);
4062 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4063 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4065 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4066 const double u_ik = 0.5*(uf_i + uf_i_km1);
4067 const double v_ij = 0.5*(vf_j + vf_j_im1);
4068 const double v_jk = 0.5*(vf_j + vf_j_km1);
4069 const double w_ik = 0.5*(wf_k + wf_k_im1);
4070 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4072 const double ue = 0.5 * (uf_i + uf_ip1);
4073 const double ve = 0.5 * (vf_j + vf_jp1);
4074 const double we = 0.5 * (wf_k + wf_kp1);
4076 const double laplacien_uf_i = laplacien_i(i,j,k);
4077 const double laplacien_vf_j = laplacien_j(i,j,k);
4078 const double laplacien_wf_k = laplacien_k(i,j,k);
4080 const double laplacien_uf_ip1 = laplacien_i(i+1,j,k);
4081 const double laplacien_vf_jp1 = laplacien_j(i,j+1,k);
4082 const double laplacien_wf_kp1 = kg==(nktot-1) ? 0. : laplacien_k(i,j,k+1);
4084 const double laplacien_uf_i_jm1 = laplacien_i(i,j-1,k);
4085 const double laplacien_uf_i_km1 = kg==0 ? 0. : laplacien_i(i,j,k-1);
4086 const double laplacien_vf_j_im1 = laplacien_j(i-1,j,k);
4087 const double laplacien_vf_j_km1 = kg==0 ? 0. : laplacien_j(i,j,k-1);
4088 const double laplacien_wf_k_im1 = laplacien_k(i-1,j,k);
4089 const double laplacien_wf_k_jm1 = laplacien_k(i,j-1,k);
4091 const double laplacien_u_aij = 0.5*(laplacien_uf_i + laplacien_uf_i_jm1);
4092 const double laplacien_u_aik = 0.5*(laplacien_uf_i + laplacien_uf_i_km1);
4093 const double laplacien_v_aij = 0.5*(laplacien_vf_j + laplacien_vf_j_im1);
4094 const double laplacien_v_ajk = 0.5*(laplacien_vf_j + laplacien_vf_j_km1);
4095 const double laplacien_w_aik = 0.5*(laplacien_wf_k + laplacien_wf_k_im1);
4096 const double laplacien_w_ajk = 0.5*(laplacien_wf_k + laplacien_wf_k_jm1);
4098 const double laplacien_u_e = 0.5 * (laplacien_uf_i + laplacien_uf_ip1);
4099 const double laplacien_v_e = 0.5 * (laplacien_vf_j + laplacien_vf_jp1);
4100 const double laplacien_w_e = 0.5 * (laplacien_wf_k + laplacien_wf_kp1);
4102 const double udu_ii = ue*laplacien_u_e/24.;
4103 const double udu_ij = u_ij*laplacien_v_aij/24.;
4104 const double udu_ik = u_ik*laplacien_w_aik/24.;
4105 const double udu_ji = v_ij*laplacien_u_aij/24.;
4106 const double udu_jj = ve*laplacien_v_e/24.;
4107 const double udu_jk = v_jk*laplacien_w_ajk/24.;
4108 const double udu_ki = w_ik*laplacien_u_aik/24.;
4109 const double udu_kj = w_jk*laplacien_v_ajk/24.;
4110 const double udu_kk = we*laplacien_w_e/24.;
4112 const double su_laplacien_u_ii = - udu_ii - udu_ii;
4113 const double su_laplacien_u_ij = - udu_ij - udu_ji;
4114 const double su_laplacien_u_ik = - udu_ik - udu_ki;
4115 const double su_laplacien_u_jj = - udu_jj - udu_jj;
4116 const double su_laplacien_u_jk = - udu_jk - udu_kj;
4117 const double su_laplacien_u_kk = - udu_kk - udu_kk;
4119 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * su_laplacien_u_ii;
4120 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * su_laplacien_u_ij;
4121 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * su_laplacien_u_ik;
4122 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * su_laplacien_u_jj;
4123 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * su_laplacien_u_jk;
4124 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * su_laplacien_u_kk;
4130void calculer_structural_uu_convection(
const double structural_uu_model_constant,
4131 const ArrOfDouble& structural_uu_tensor_coefficients,
4132 const IJK_Field_vector3_double& velocity,
4135 const IJK_Field_double& vitesse_i = velocity[0];
4136 const IJK_Field_double& vitesse_j = velocity[1];
4137 const IJK_Field_double& vitesse_k = velocity[2];
4139 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4140 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4141 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4142 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4143 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4144 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4146 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4147 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4148 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4149 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4150 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4151 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4156 const int ni = vitesse_k.
ni();
4157 const int nj = vitesse_k.
nj();
4158 const int nk = vitesse_k.
nk();
4160 for (
int k = 0; k < nk; k++)
4162 for (
int j = 0; j < nj; j++)
4164 for (
int i = 0; i < ni; i++)
4166 const int kg = k + offset;
4168 const double uf_i = vitesse_i(i,j,k);
4169 const double uf_ip1 = vitesse_i(i+1,j,k);
4170 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4171 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4173 const double vf_j = vitesse_j(i,j,k);
4174 const double vf_j_im1 = vitesse_j(i-1,j,k);
4175 const double vf_jp1 = vitesse_j(i,j+1,k);
4176 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4178 const double wf_k = vitesse_k(i,j,k);
4179 const double wf_k_im1 = vitesse_k(i-1,j,k);
4180 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4181 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4183 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4184 const double u_ik = 0.5*(uf_i + uf_i_km1);
4185 const double v_ij = 0.5*(vf_j + vf_j_im1);
4186 const double v_jk = 0.5*(vf_j + vf_j_km1);
4187 const double w_ik = 0.5*(wf_k + wf_k_im1);
4188 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4190 const double ue = 0.5 * (uf_i + uf_ip1);
4191 const double ve = 0.5 * (vf_j + vf_jp1);
4192 const double we = 0.5 * (wf_k + wf_kp1);
4194 const double uu_ii = ue*ue;
4195 const double uu_ij = u_ij*v_ij;
4196 const double uu_ik = u_ik*w_ik;
4197 const double uu_jj = ve*ve;
4198 const double uu_jk = v_jk*w_jk;
4199 const double uu_kk = we*we;
4201 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * uu_ii;
4202 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * uu_ij;
4203 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * uu_ik;
4204 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * uu_jj;
4205 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * uu_jk;
4206 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * uu_kk;
4212void calculer_structural_uu_similarity_comp(
const double structural_uu_model_constant,
4213 const ArrOfDouble& structural_uu_tensor_coefficients,
4214 const IJK_Field_double& rho,
4215 const IJK_Field_vector3_double& velocity,
4216 const IJK_Field_vector3_double& velocity_filtre,
4217 const ArrOfDouble_with_ghost& delta_z,
4218 const double facteur_delta_x,
4219 const double facteur_delta_y,
4220 const ArrOfDouble_with_ghost& delta_z_pour_delta,
4226 const IJK_Field_double& vitesse_i = velocity[0];
4227 const IJK_Field_double& vitesse_j = velocity[1];
4228 const IJK_Field_double& vitesse_k = velocity[2];
4229 const IJK_Field_double& masse_vol_ijk = rho;
4230 IJK_Field_local_double& masse_vol_ijk_filtre = tmp_b[15];
4231 IJK_Field_local_double& aa_rho_ijk_filtre = tmp_a[15];
4237 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4238 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4239 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4240 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4241 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4242 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4244 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4245 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4246 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4247 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4248 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4249 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4253 const double dx_pour_delta = facteur_delta_x*dx;
4254 const double dy_pour_delta = facteur_delta_y*dy;
4256 const int ni = vitesse_k.
ni();
4257 const int nj = vitesse_k.
nj();
4258 const int nk = vitesse_k.
nk();
4262 IJK_Field_local_double& b_ii = tmp_b[0];
4263 IJK_Field_local_double& b_ij = tmp_b[1];
4264 IJK_Field_local_double& b_ik = tmp_b[2];
4265 IJK_Field_local_double& b_jj = tmp_b[3];
4266 IJK_Field_local_double& b_jk = tmp_b[4];
4267 IJK_Field_local_double& b_kk = tmp_b[5];
4268 IJK_Field_local_double& bb_uii = tmp_b[6];
4269 IJK_Field_local_double& bb_uij = tmp_b[7];
4270 IJK_Field_local_double& bb_vjj = tmp_b[8];
4271 IJK_Field_local_double& bb_vij = tmp_b[9];
4272 IJK_Field_local_double& bb_wkk = tmp_b[10];
4273 IJK_Field_local_double& bb_uik = tmp_b[11];
4274 IJK_Field_local_double& bb_vjk = tmp_b[12];
4275 IJK_Field_local_double& bb_wik = tmp_b[13];
4276 IJK_Field_local_double& bb_wjk = tmp_b[14];
4278 IJK_Field_local_double& a_ii = tmp_a[0];
4279 IJK_Field_local_double& a_ij = tmp_a[1];
4280 IJK_Field_local_double& a_ik = tmp_a[2];
4281 IJK_Field_local_double& a_jj = tmp_a[3];
4282 IJK_Field_local_double& a_jk = tmp_a[4];
4283 IJK_Field_local_double& a_kk = tmp_a[5];
4284 IJK_Field_local_double& aa_uii = tmp_a[6];
4285 IJK_Field_local_double& aa_uij = tmp_a[7];
4286 IJK_Field_local_double& aa_vjj = tmp_a[8];
4287 IJK_Field_local_double& aa_vij = tmp_a[9];
4288 IJK_Field_local_double& aa_wkk = tmp_a[10];
4289 IJK_Field_local_double& aa_uik = tmp_a[11];
4290 IJK_Field_local_double& aa_vjk = tmp_a[12];
4291 IJK_Field_local_double& aa_wik = tmp_a[13];
4292 IJK_Field_local_double& aa_wjk = tmp_a[14];
4294 const int ghost_size_filter = kernel->ghost_size();
4295 const int size_uniform = kernel->size_uniform();
4296 const int shift_uniform = kernel->shift_uniform();
4297 for (
int k = 0; k < nk; k++)
4299 const int kg = k + offset;
4301 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
4302 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
4303 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
4304 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
4305 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
4306 const double delta_m_pour_delta_glo = (kg-1<0 || kg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta_glo + dz_m1_pour_delta_glo);
4308 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
4309 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
4312 const int size_k_elem = kernel->size_k_elem(kg, nktot);
4313 const int size_k_face = kernel->size_k_face(kg, nktot);
4314 const int shift_k_elem = kernel->shift_k_elem(kg);
4315 const int shift_k_face = kernel->shift_k_face(kg);
4316 const bool ponderation_filter_kernel = kernel->ponderation();
4317 const bool normalisation_filter_kernel = kernel->normalisation();
4319 double facteur_elem = 0.;
4320 if (ponderation_filter_kernel)
4322 if (normalisation_filter_kernel)
4324 double longueur_elem = 0.;
4325 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4327 const int kpg = kg + kp;
4328 if (kpg<-1 || kpg>nktot)
4330 Cerr <<
"This should not happen." << finl;
4333 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4334 const double filter_coef_z = filter_kernel_z[kp+10];
4335 longueur_elem += filter_coef_z * dz;
4337 facteur_elem = 1./longueur_elem;
4341 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
4344 double facteur_face = 0.;
4345 if (ponderation_filter_kernel)
4347 if (normalisation_filter_kernel)
4349 double longueur_face = 0.;
4350 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4352 const int kpg = kg + kp;
4353 if (kpg<0 || kpg>nktot)
4355 Cerr <<
"This should not happen." << finl;
4358 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4359 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4360 const double dzf = 0.5*(dz + dz_m1);
4361 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4362 longueur_face += filter_coef_z_face * dzf;
4364 facteur_face = 1./longueur_face;
4368 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
4372 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
4374 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4377 bb_uii(i, j, 0) = 0.;
4378 bb_uij(i, j, 0) = 0.;
4382 bb_vjj(i, j, 0) = 0.;
4383 bb_vij(i, j, 0) = 0.;
4386 bb_wkk(i, j, 0) = 0.;
4387 bb_uik(i, j, 0) = 0.;
4388 bb_vjk(i, j, 0) = 0.;
4389 bb_wik(i, j, 0) = 0.;
4390 bb_wjk(i, j, 0) = 0.;
4391 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4393 const int kpg = kg + kp;
4394 if (!(kernel->is_at_wall_elem(kpg, nktot)))
4396 const double filter_coef_z = filter_kernel_z[kp+10];
4398 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
4399 const double uf_i = vitesse_i(i,j,k+kp);
4400 const double vf_j = vitesse_j(i,j,k+kp);
4401 const double wf_k = vitesse_k(i,j,k+kp);
4403 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
4404 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
4405 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
4407 const double uf_i_jm1 = vitesse_i(i,j-1,k+kp);
4408 const double vf_j_im1 = vitesse_j(i-1,j,k+kp);
4410 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4411 const double v_ij = 0.5*(vf_j + vf_j_im1);
4413 const double ue = 0.5 * (uf_i + uf_ip1);
4414 const double ve = 0.5 * (vf_j + vf_jp1);
4415 const double we = 0.5 * (wf_k + wf_kp1);
4417 if (ponderation_filter_kernel)
4419 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4420 b_ii(i, j, 0) += rho_ijk*ue*ue * filter_coef_z * dz * facteur_elem;
4421 b_ij(i, j, 0) += rho_ijk*u_ij*v_ij * filter_coef_z * dz * facteur_elem;
4422 b_jj(i, j, 0) += rho_ijk*ve*ve * filter_coef_z * dz * facteur_elem;
4423 b_kk(i, j, 0) += rho_ijk*we*we * filter_coef_z * dz * facteur_elem;
4424 bb_uii(i, j, 0) += rho_ijk*ue * filter_coef_z * dz * facteur_elem;
4425 bb_uij(i, j, 0) += rho_ijk*u_ij * filter_coef_z * dz * facteur_elem;
4426 bb_vij(i, j, 0) += rho_ijk*v_ij * filter_coef_z * dz * facteur_elem;
4427 bb_vjj(i, j, 0) += rho_ijk*ve * filter_coef_z * dz * facteur_elem;
4428 bb_wkk(i, j, 0) += rho_ijk*we * filter_coef_z * dz * facteur_elem;
4429 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z * dz * facteur_elem;
4433 b_ii(i, j, 0) += rho_ijk*ue*ue * filter_coef_z;
4434 b_ij(i, j, 0) += rho_ijk*u_ij*v_ij * filter_coef_z;
4435 b_jj(i, j, 0) += rho_ijk*ve*ve * filter_coef_z;
4436 b_kk(i, j, 0) += rho_ijk*we*we * filter_coef_z;
4437 bb_uii(i, j, 0) += rho_ijk*ue * filter_coef_z;
4438 bb_uij(i, j, 0) += rho_ijk*u_ij * filter_coef_z;
4439 bb_vij(i, j, 0) += rho_ijk*v_ij * filter_coef_z;
4440 bb_vjj(i, j, 0) += rho_ijk*ve * filter_coef_z;
4441 bb_wkk(i, j, 0) += rho_ijk*we * filter_coef_z;
4442 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z;
4446 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4448 const int kpg = kg + kp;
4449 if (!(kernel->is_at_wall_face(kpg, nktot)))
4451 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4453 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
4454 const double uf_i = vitesse_i(i,j,k+kp);
4455 const double vf_j = vitesse_j(i,j,k+kp);
4456 const double wf_k = vitesse_k(i,j,k+kp);
4458 const double uf_i_km1 = kpg==0 ? 0. : vitesse_i(i,j,k-1+kp);
4459 const double vf_j_km1 = kpg==0 ? 0. : vitesse_j(i,j,k-1+kp);
4460 const double wf_k_im1 = vitesse_k(i-1,j,k+kp);
4461 const double wf_k_jm1 = vitesse_k(i,j-1,k+kp);
4463 const double u_ik = 0.5*(uf_i + uf_i_km1);
4464 const double v_jk = 0.5*(vf_j + vf_j_km1);
4465 const double w_ik = 0.5*(wf_k + wf_k_im1);
4466 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4468 if (ponderation_filter_kernel)
4470 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4471 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4472 const double dzf = 0.5*(dz + dz_m1);
4473 b_ik(i, j, 0) += rho_ijk*u_ik*w_ik * filter_coef_z_face * dzf * facteur_face;
4474 b_jk(i, j, 0) += rho_ijk*v_jk*w_jk * filter_coef_z_face * dzf * facteur_face;
4475 bb_uik(i, j, 0) += rho_ijk*u_ik * filter_coef_z_face * dzf * facteur_face;
4476 bb_vjk(i, j, 0) += rho_ijk*v_jk * filter_coef_z_face * dzf * facteur_face;
4477 bb_wik(i, j, 0) += rho_ijk*w_ik * filter_coef_z_face * dzf * facteur_face;
4478 bb_wjk(i, j, 0) += rho_ijk*w_jk * filter_coef_z_face * dzf * facteur_face;
4482 b_ik(i, j, 0) += rho_ijk*u_ik*w_ik * filter_coef_z_face;
4483 b_jk(i, j, 0) += rho_ijk*v_jk*w_jk * filter_coef_z_face;
4484 bb_uik(i, j, 0) += rho_ijk*u_ik * filter_coef_z_face;
4485 bb_vjk(i, j, 0) += rho_ijk*v_jk * filter_coef_z_face;
4486 bb_wik(i, j, 0) += rho_ijk*w_ik * filter_coef_z_face;
4487 bb_wjk(i, j, 0) += rho_ijk*w_jk * filter_coef_z_face;
4493 for (
int j = 0; j < nj; j++)
4495 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4498 aa_uii(i, 0, 0) = 0.;
4499 aa_uij(i, 0, 0) = 0.;
4503 aa_vjj(i, 0, 0) = 0.;
4504 aa_vij(i, 0, 0) = 0.;
4507 aa_wkk(i, 0, 0) = 0.;
4508 aa_uik(i, 0, 0) = 0.;
4509 aa_vjk(i, 0, 0) = 0.;
4510 aa_wik(i, 0, 0) = 0.;
4511 aa_wjk(i, 0, 0) = 0.;
4512 aa_rho_ijk_filtre(i, 0, 0) = 0.;
4513 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
4515 const double filter_coef_y = filter_kernel_y[jp+10];
4516 a_ii(i, 0, 0) += b_ii(i, j+jp, 0) * filter_coef_y;
4517 aa_uii(i, 0, 0) += bb_uii(i, j+jp, 0) * filter_coef_y;
4518 aa_uij(i, 0, 0) += bb_uij(i, j+jp, 0) * filter_coef_y;
4519 a_ij(i, 0, 0) += b_ij(i, j+jp, 0) * filter_coef_y;
4520 a_ik(i, 0, 0) += b_ik(i, j+jp, 0) * filter_coef_y;
4521 a_jj(i, 0, 0) += b_jj(i, j+jp, 0) * filter_coef_y;
4522 aa_vjj(i, 0, 0) += bb_vjj(i, j+jp, 0) * filter_coef_y;
4523 aa_vij(i, 0, 0) += bb_vij(i, j+jp, 0) * filter_coef_y;
4524 a_jk(i, 0, 0) += b_jk(i, j+jp, 0) * filter_coef_y;
4525 a_kk(i, 0, 0) += b_kk(i, j+jp, 0) * filter_coef_y;
4526 aa_wkk(i, 0, 0) += bb_wkk(i, j+jp, 0) * filter_coef_y;
4527 aa_uik(i, 0, 0) += bb_uik(i, j+jp, 0) * filter_coef_y;
4528 aa_vjk(i, 0, 0) += bb_vjk(i, j+jp, 0) * filter_coef_y;
4529 aa_wik(i, 0, 0) += bb_wik(i, j+jp, 0) * filter_coef_y;
4530 aa_wjk(i, 0, 0) += bb_wjk(i, j+jp, 0) * filter_coef_y;
4531 aa_rho_ijk_filtre(i, 0, 0) += masse_vol_ijk_filtre(i, j+jp, 0)* filter_coef_y;
4535 for (
int i = 0; i < ni; i++)
4546 double rho_uij = 0.;
4547 double rho_uik = 0.;
4548 double rho_vij = 0.;
4549 double rho_vjk = 0.;
4550 double rho_wik = 0.;
4551 double rho_wjk = 0.;
4552 double rho_filtre = 0.;
4553 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
4555 const double filter_coef_x = filter_kernel_x[ip+10];
4556 r_ii += a_ii(i+ip, 0, 0) * filter_coef_x;
4557 r_ij += a_ij(i+ip, 0, 0) * filter_coef_x;
4558 r_ik += a_ik(i+ip, 0, 0) * filter_coef_x;
4559 r_jj += a_jj(i+ip, 0, 0) * filter_coef_x;
4560 r_jk += a_jk(i+ip, 0, 0) * filter_coef_x;
4561 r_kk += a_kk(i+ip, 0, 0) * filter_coef_x;
4562 rho_ue += aa_uii(i+ip, 0, 0) * filter_coef_x;
4563 rho_ve += aa_vjj(i+ip, 0, 0) * filter_coef_x;
4564 rho_we += aa_wkk(i+ip, 0, 0) * filter_coef_x;
4565 rho_uij += aa_uij(i+ip, 0, 0) * filter_coef_x;
4566 rho_uik += aa_uik(i+ip, 0, 0) * filter_coef_x;
4567 rho_vij += aa_vij(i+ip, 0, 0) * filter_coef_x;
4568 rho_vjk += aa_vjk(i+ip, 0, 0) * filter_coef_x;
4569 rho_wik += aa_wik(i+ip, 0, 0) * filter_coef_x;
4570 rho_wjk += aa_wjk(i+ip, 0, 0) * filter_coef_x;
4571 rho_filtre += aa_rho_ijk_filtre(i+ip, 0, 0)* filter_coef_x;
4574 const double c_ii = (r_ii)/rho_filtre - (rho_ue*rho_ue)/(rho_filtre*rho_filtre);
4575 const double c_ij = (r_ij)/rho_filtre - (rho_uij*rho_vij)/(rho_filtre*rho_filtre);
4576 const double c_ik = (r_ik)/rho_filtre - (rho_uik*rho_wik)/(rho_filtre*rho_filtre);
4577 const double c_jj = (r_jj)/rho_filtre - (rho_ve*rho_ve)/(rho_filtre*rho_filtre);
4578 const double c_jk = (r_jk)/rho_filtre - (rho_vjk*rho_wjk)/(rho_filtre*rho_filtre);
4579 const double c_kk = (r_kk)/rho_filtre - (rho_we*rho_we)/(rho_filtre*rho_filtre);
4581 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii;
4582 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij;
4583 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik;
4584 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj;
4585 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk;
4586 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk;
4593void calculer_structural_uu_similarity(
const double structural_uu_model_constant,
4594 const ArrOfDouble& structural_uu_tensor_coefficients,
4595 const IJK_Field_vector3_double& velocity,
4596 const IJK_Field_vector3_double& velocity_filtre,
4597 const ArrOfDouble_with_ghost& delta_z,
4598 const double facteur_delta_x,
4599 const double facteur_delta_y,
4600 const ArrOfDouble_with_ghost& delta_z_pour_delta,
4606 const IJK_Field_double& vitesse_i = velocity[0];
4607 const IJK_Field_double& vitesse_j = velocity[1];
4608 const IJK_Field_double& vitesse_k = velocity[2];
4610 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
4611 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
4612 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
4614 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4615 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4616 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4617 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4618 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4619 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4621 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4622 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4623 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4624 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4625 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4626 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4630 const double dx_pour_delta = facteur_delta_x*dx;
4631 const double dy_pour_delta = facteur_delta_y*dy;
4633 const int ni = vitesse_k.
ni();
4634 const int nj = vitesse_k.
nj();
4635 const int nk = vitesse_k.
nk();
4640 IJK_Field_local_double& b_ii = tmp_b[0];
4641 IJK_Field_local_double& b_ij = tmp_b[1];
4642 IJK_Field_local_double& b_ik = tmp_b[2];
4643 IJK_Field_local_double& b_jj = tmp_b[3];
4644 IJK_Field_local_double& b_jk = tmp_b[4];
4645 IJK_Field_local_double& b_kk = tmp_b[5];
4647 IJK_Field_local_double& a_ii = tmp_a[0];
4648 IJK_Field_local_double& a_ij = tmp_a[1];
4649 IJK_Field_local_double& a_ik = tmp_a[2];
4650 IJK_Field_local_double& a_jj = tmp_a[3];
4651 IJK_Field_local_double& a_jk = tmp_a[4];
4652 IJK_Field_local_double& a_kk = tmp_a[5];
4654 const int ghost_size_filter = kernel->ghost_size();
4655 const int size_uniform = kernel->size_uniform();
4656 const int shift_uniform = kernel->shift_uniform();
4657 for (
int k = 0; k < nk; k++)
4659 const int kg = k + offset;
4661 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
4662 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
4663 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
4664 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
4665 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
4666 const double delta_m_pour_delta_glo = (kg-1<0 || kg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta_glo + dz_m1_pour_delta_glo);
4668 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
4669 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
4672 const int size_k_elem = kernel->size_k_elem(kg, nktot);
4673 const int size_k_face = kernel->size_k_face(kg, nktot);
4674 const int shift_k_elem = kernel->shift_k_elem(kg);
4675 const int shift_k_face = kernel->shift_k_face(kg);
4676 const bool ponderation_filter_kernel = kernel->ponderation();
4677 const bool normalisation_filter_kernel = kernel->normalisation();
4679 double facteur_elem = 0.;
4680 if (ponderation_filter_kernel)
4682 if (normalisation_filter_kernel)
4684 double longueur_elem = 0.;
4685 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4687 const int kpg = kg + kp;
4688 if (kpg<-1 || kpg>nktot)
4690 Cerr <<
"This should not happen." << finl;
4693 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4694 const double filter_coef_z = filter_kernel_z[kp+10];
4695 longueur_elem += filter_coef_z * dz;
4697 facteur_elem = 1./longueur_elem;
4701 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
4704 double facteur_face = 0.;
4705 if (ponderation_filter_kernel)
4707 if (normalisation_filter_kernel)
4709 double longueur_face = 0.;
4710 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4712 const int kpg = kg + kp;
4713 if (kpg<0 || kpg>nktot)
4715 Cerr <<
"This should not happen." << finl;
4718 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4719 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4720 const double dzf = 0.5*(dz + dz_m1);
4721 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4722 longueur_face += filter_coef_z_face * dzf;
4724 facteur_face = 1./longueur_face;
4728 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
4732 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
4734 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4742 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4744 const int kpg = kg + kp;
4745 if (!(kernel->is_at_wall_elem(kpg, nktot)))
4747 const double filter_coef_z = filter_kernel_z[kp+10];
4749 const double uf_i = vitesse_i(i,j,k+kp);
4750 const double vf_j = vitesse_j(i,j,k+kp);
4751 const double wf_k = vitesse_k(i,j,k+kp);
4753 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
4754 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
4755 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
4757 const double uf_i_jm1 = vitesse_i(i,j-1,k+kp);
4758 const double vf_j_im1 = vitesse_j(i-1,j,k+kp);
4760 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4761 const double v_ij = 0.5*(vf_j + vf_j_im1);
4763 const double ue = 0.5 * (uf_i + uf_ip1);
4764 const double ve = 0.5 * (vf_j + vf_jp1);
4765 const double we = 0.5 * (wf_k + wf_kp1);
4767 if (ponderation_filter_kernel)
4769 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4770 b_ii(i, j, 0) += ue*ue * filter_coef_z * dz * facteur_elem;
4771 b_ij(i, j, 0) += u_ij*v_ij * filter_coef_z * dz * facteur_elem;
4772 b_jj(i, j, 0) += ve*ve * filter_coef_z * dz * facteur_elem;
4773 b_kk(i, j, 0) += we*we * filter_coef_z * dz * facteur_elem;
4777 b_ii(i, j, 0) += ue*ue * filter_coef_z;
4778 b_ij(i, j, 0) += u_ij*v_ij * filter_coef_z;
4779 b_jj(i, j, 0) += ve*ve * filter_coef_z;
4780 b_kk(i, j, 0) += we*we * filter_coef_z;
4784 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4786 const int kpg = kg + kp;
4787 if (!(kernel->is_at_wall_face(kpg, nktot)))
4789 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4791 const double uf_i = vitesse_i(i,j,k+kp);
4792 const double vf_j = vitesse_j(i,j,k+kp);
4793 const double wf_k = vitesse_k(i,j,k+kp);
4795 const double uf_i_km1 = kpg==0 ? 0. : vitesse_i(i,j,k-1+kp);
4796 const double vf_j_km1 = kpg==0 ? 0. : vitesse_j(i,j,k-1+kp);
4797 const double wf_k_im1 = vitesse_k(i-1,j,k+kp);
4798 const double wf_k_jm1 = vitesse_k(i,j-1,k+kp);
4800 const double u_ik = 0.5*(uf_i + uf_i_km1);
4801 const double v_jk = 0.5*(vf_j + vf_j_km1);
4802 const double w_ik = 0.5*(wf_k + wf_k_im1);
4803 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4805 if (ponderation_filter_kernel)
4807 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4808 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4809 const double dzf = 0.5*(dz + dz_m1);
4810 b_ik(i, j, 0) += u_ik*w_ik * filter_coef_z_face * dzf * facteur_face;
4811 b_jk(i, j, 0) += v_jk*w_jk * filter_coef_z_face * dzf * facteur_face;
4815 b_ik(i, j, 0) += u_ik*w_ik * filter_coef_z_face;
4816 b_jk(i, j, 0) += v_jk*w_jk * filter_coef_z_face;
4822 for (
int j = 0; j < nj; j++)
4824 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4832 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
4834 const double filter_coef_y = filter_kernel_y[jp+10];
4835 a_ii(i, 0, 0) += b_ii(i, j+jp, 0) * filter_coef_y;
4836 a_ij(i, 0, 0) += b_ij(i, j+jp, 0) * filter_coef_y;
4837 a_ik(i, 0, 0) += b_ik(i, j+jp, 0) * filter_coef_y;
4838 a_jj(i, 0, 0) += b_jj(i, j+jp, 0) * filter_coef_y;
4839 a_jk(i, 0, 0) += b_jk(i, j+jp, 0) * filter_coef_y;
4840 a_kk(i, 0, 0) += b_kk(i, j+jp, 0) * filter_coef_y;
4844 for (
int i = 0; i < ni; i++)
4852 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
4854 const double filter_coef_x = filter_kernel_x[ip+10];
4855 r_ii += a_ii(i+ip, 0, 0) * filter_coef_x;
4856 r_ij += a_ij(i+ip, 0, 0) * filter_coef_x;
4857 r_ik += a_ik(i+ip, 0, 0) * filter_coef_x;
4858 r_jj += a_jj(i+ip, 0, 0) * filter_coef_x;
4859 r_jk += a_jk(i+ip, 0, 0) * filter_coef_x;
4860 r_kk += a_kk(i+ip, 0, 0) * filter_coef_x;
4863 const double uf_i = vitesse_i_filtre(i,j,k);
4864 const double vf_j = vitesse_j_filtre(i,j,k);
4865 const double wf_k = vitesse_k_filtre(i,j,k);
4867 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
4868 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
4869 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
4871 const double uf_i_jm1 = vitesse_i_filtre(i,j-1,k);
4872 const double uf_i_km1 = kg==0 ? 0. : vitesse_i_filtre(i,j,k-1);
4873 const double vf_j_im1 = vitesse_j_filtre(i-1,j,k);
4874 const double vf_j_km1 = kg==0 ? 0. : vitesse_j_filtre(i,j,k-1);
4875 const double wf_k_im1 = vitesse_k_filtre(i-1,j,k);
4876 const double wf_k_jm1 = vitesse_k_filtre(i,j-1,k);
4878 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4879 const double u_ik = 0.5*(uf_i + uf_i_km1);
4880 const double v_ij = 0.5*(vf_j + vf_j_im1);
4881 const double v_jk = 0.5*(vf_j + vf_j_km1);
4882 const double w_ik = 0.5*(wf_k + wf_k_im1);
4883 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4885 const double ue = 0.5 * (uf_i + uf_ip1);
4886 const double ve = 0.5 * (vf_j + vf_jp1);
4887 const double we = 0.5 * (wf_k + wf_kp1);
4889 const double c_ii = r_ii - ue*ue;
4890 const double c_ij = r_ij - u_ij*v_ij;
4891 const double c_ik = r_ik - u_ik*w_ik;
4892 const double c_jj = r_jj - ve*ve;
4893 const double c_jk = r_jk - v_jk*w_jk;
4894 const double c_kk = r_kk - we*we;
4896 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii;
4897 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij;
4898 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik;
4899 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj;
4900 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk;
4901 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk;
4913void calculer_structural_uu_similarity_Streher(
const double structural_uu_model_constant,
4914 const IJK_Field_vector3_double& velocity,
4918 const IJK_Field_double& vitesse_i = velocity[0];
4919 const IJK_Field_double& vitesse_j = velocity[1];
4920 const IJK_Field_double& vitesse_k = velocity[2];
4922 const int ni = vitesse_k.
ni();
4923 const int nj = vitesse_k.
nj();
4924 const int nk = vitesse_k.
nk();
4926 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4927 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4928 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4929 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4930 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4931 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4936 for (
int k = 0; k < nk; k++)
4938 const int kg = k + offset;
4939 for (
int j = 0; j < nj; j++)
4941 for (
int i = 0; i < ni; i++)
4943 const double uf_im1 = vitesse_i(i-1,j,k);
4944 const double uf_i = vitesse_i(i,j,k);
4945 const double uf_i_jm2 = vitesse_i(i,j-2,k);
4946 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4947 const double uf_i_jp1 = vitesse_i(i,j+1,k);
4948 const double uf_i_km2 = kg<=1 ? 0. : vitesse_i(i,j,k-2);
4949 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4950 const double uf_i_kp1 = kg>=(nktot-1) ? 0. : vitesse_i(i,j,k+1);
4951 const double uf_ip1 = vitesse_i(i+1,j,k);
4952 const double uf_ip2 = vitesse_i(i+2,j,k);
4954 const double vf_jm1 = vitesse_j(i,j-1,k);
4955 const double vf_j = vitesse_j(i,j,k);
4956 const double vf_j_im2 = vitesse_j(i-2,j,k);
4957 const double vf_j_im1 = vitesse_j(i-1,j,k);
4958 const double vf_j_ip1 = vitesse_j(i+1,j,k);
4959 const double vf_j_km2 = kg<=1 ? 0. : vitesse_j(i,j,k-2);
4960 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4961 const double vf_j_kp1 = kg>=(nktot-1) ? 0. : vitesse_j(i,j,k+1);
4962 const double vf_jp1 = vitesse_j(i,j+1,k);
4963 const double vf_jp2 = vitesse_j(i,j+2,k);
4965 const double wf_km1 = kg<=1 ? 0. : vitesse_k(i,j,k-1);
4966 const double wf_k = vitesse_k(i,j,k);
4967 const double wf_k_im2 = vitesse_k(i-2,j,k);
4968 const double wf_k_im1 = vitesse_k(i-1,j,k);
4969 const double wf_k_ip1 = vitesse_k(i+1,j,k);
4970 const double wf_k_jm2 = vitesse_k(i,j-2,k);
4971 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4972 const double wf_k_jp1 = vitesse_k(i,j+1,k);
4973 const double wf_kp1 = kg>=(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4974 const double wf_kp2 = kg>=(nktot-2) ? 0. : vitesse_k(i,j,k+2);
4976 const double c_ii = (uf_i+uf_ip1)*(uf_i+uf_ip1)/4.-(uf_im1+uf_i+uf_ip1+uf_ip2)*(uf_im1+uf_i+uf_ip1+uf_ip2)/16.;
4977 const double c_jj = (vf_j+vf_jp1)*(vf_j+vf_jp1)/4.-(vf_jm1+vf_j+vf_jp1+vf_jp2)*(vf_jm1+vf_j+vf_jp1+vf_jp2)/16.;
4978 const double c_kk = (wf_k+wf_kp1)*(wf_k+wf_kp1)/4.-(wf_km1+wf_k+wf_kp1+wf_kp2)*(wf_km1+wf_k+wf_kp1+wf_kp2)/16.;
4979 const double c_ij = (uf_i_jm1+uf_i)*(vf_j_im1+vf_j)/4.-(uf_i_jp1+uf_i+uf_i_jm1+uf_i_jm2)*(vf_j_ip1+vf_j+vf_j_im1+vf_j_im2)/16.;
4980 const double c_ik = (uf_i_km1+uf_i)*(wf_k_im1+wf_k)/4.-(uf_i_kp1+uf_i+uf_i_km1+uf_i_km2)*(wf_k_ip1+wf_k+wf_k_im1+wf_k_im2)/16.;
4981 const double c_jk = (vf_j_km1+vf_j)*(wf_k_jm1+wf_k)/4.-(vf_j_kp1+vf_j+vf_j_km1+vf_j_km2)*(wf_k_jp1+wf_k+wf_k_jm1+wf_k_jm2)/16.;
4983 structural_uu_xx(i,j,k) = - c_ii * structural_uu_model_constant;
4984 structural_uu_xy(i,j,k) = - c_ij * structural_uu_model_constant;
4985 structural_uu_xz(i,j,k) = - c_ik * structural_uu_model_constant;
4986 structural_uu_yy(i,j,k) = - c_jj * structural_uu_model_constant;
4987 structural_uu_yz(i,j,k) = - c_jk * structural_uu_model_constant;
4988 structural_uu_zz(i,j,k) = - c_kk * structural_uu_model_constant;
4995void calculer_structural_uu(
const Nom& structural_uu_model,
4996 const double structural_uu_model_constant,
4997 const ArrOfDouble& structural_uu_tensor_coefficients,
4998 IJK_Field_double& rho,
4999 IJK_Field_vector3_double& velocity,
5000 IJK_Field_vector3_double& velocity_filtre,
5001 const ArrOfDouble_with_ghost& delta_z,
5002 const double facteur_delta_x,
5003 const double facteur_delta_y,
5004 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5005 const double facteur_delta_filtre_x,
5006 const double facteur_delta_filtre_y,
5007 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
5012 const bool flag_structural_uu_filtre,
5016 int ghost_size_filter;
5017 int ghost_size_velocity;
5018 int ghost_size_structural_uu_tmp;
5020 if ( structural_uu_model ==
Nom(
"gradient") )
5022 calculer_structural_uu_gradient(structural_uu_model_constant,
5023 structural_uu_tensor_coefficients,
5025 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5026 structural_uu_tensor);
5028 else if ( structural_uu_model ==
Nom(
"gradient_filtre") )
5030 calculer_structural_uu_gradient(structural_uu_model_constant,
5031 structural_uu_tensor_coefficients,
5033 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5034 structural_uu_tmp_tensor);
5036 ghost_size_filter = 1 + kernel->ghost_size();
5037 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5045 const int flag_add = 0;
5046 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[0]);
5047 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[1]);
5048 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[2]);
5049 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[3], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[3]);
5050 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[4], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[4]);
5051 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[5], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[5]);
5053 else if ( structural_uu_model ==
Nom(
"su_laplacien_u") )
5059 calculer_laplacien_u(velocity,
5060 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5067 calculer_structural_uu_su_laplacien_u(structural_uu_model_constant,
5068 structural_uu_tensor_coefficients,
5071 structural_uu_tensor);
5073 else if ( structural_uu_model ==
Nom(
"convection") )
5075 calculer_structural_uu_convection(structural_uu_model_constant,
5076 structural_uu_tensor_coefficients,
5078 structural_uu_tensor);
5080 else if ( structural_uu_model ==
Nom(
"convection_filtre") )
5082 calculer_structural_uu_convection(structural_uu_model_constant,
5083 structural_uu_tensor_coefficients,
5085 structural_uu_tmp_tensor);
5087 ghost_size_filter = 1 + kernel->ghost_size();
5088 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5096 const int flag_add = 0;
5097 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[0]);
5098 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[1]);
5099 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[2]);
5100 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[3], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[3]);
5101 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[4], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[4]);
5102 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[5], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_tensor[5]);
5104 else if ( structural_uu_model ==
Nom(
"similarity") )
5106 ghost_size_filter = 1 + kernel->ghost_size();
5107 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5112 const int flag_add = 0;
5113 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
5114 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
5115 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
5121 calculer_structural_uu_similarity(structural_uu_model_constant,
5122 structural_uu_tensor_coefficients,
5123 velocity, velocity_filtre,
5124 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5125 kernel, tmp_b, tmp_a,
5126 structural_uu_tensor);
5128 else if ( structural_uu_model ==
Nom(
"similarity_comp") )
5130 ghost_size_filter = 1 + kernel->ghost_size();
5131 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5136 const int flag_add = 0;
5137 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
5138 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
5139 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
5145 calculer_structural_uu_similarity_comp(structural_uu_model_constant,
5146 structural_uu_tensor_coefficients,
5148 velocity, velocity_filtre,
5149 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5150 kernel, tmp_b, tmp_a,
5151 structural_uu_tensor);
5153 else if ( structural_uu_model ==
Nom(
"similarity_streher") )
5155 ghost_size_filter = 1 + kernel->ghost_size();
5156 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5161 const int flag_add = 0;
5162 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
5163 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
5164 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
5170 calculer_structural_uu_similarity_Streher(structural_uu_model_constant,
5173 structural_uu_tensor);
5177 Cerr <<
"The name of the structural model for uu is unknown." << finl;
5181 if (flag_structural_uu_filtre)
5183 ghost_size_filter = 1 + kernel->ghost_size();
5184 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5189 const int flag_add = 0;
5190 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
5191 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
5192 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
5199 if ( structural_uu_model ==
Nom(
"gradient") )
5201 calculer_structural_uu_gradient(structural_uu_model_constant,
5202 structural_uu_tensor_coefficients,
5204 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5205 structural_uu_filtre_tensor);
5207 else if ( structural_uu_model ==
Nom(
"gradient_filtre") )
5209 calculer_structural_uu_gradient(structural_uu_model_constant,
5210 structural_uu_tensor_coefficients,
5212 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5213 structural_uu_tmp_tensor);
5215 ghost_size_filter = 1 + kernel->ghost_size();
5216 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5224 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[0]);
5225 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[1]);
5226 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[2]);
5227 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[3], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[3]);
5228 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[4], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[4]);
5229 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[5], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[5]);
5231 else if ( structural_uu_model ==
Nom(
"su_laplacien_u") )
5233 calculer_laplacien_u(velocity_filtre,
5234 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5241 calculer_structural_uu_su_laplacien_u(structural_uu_model_constant,
5242 structural_uu_tensor_coefficients,
5245 structural_uu_filtre_tensor);
5247 else if ( structural_uu_model ==
Nom(
"convection") )
5249 calculer_structural_uu_convection(structural_uu_model_constant,
5250 structural_uu_tensor_coefficients,
5252 structural_uu_filtre_tensor);
5254 else if ( structural_uu_model ==
Nom(
"convection_filtre") )
5256 calculer_structural_uu_convection(structural_uu_model_constant,
5257 structural_uu_tensor_coefficients,
5259 structural_uu_tmp_tensor);
5261 ghost_size_filter = 1 + kernel->ghost_size();
5262 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5270 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[0]);
5271 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[1]);
5272 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[2]);
5273 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[3], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[3]);
5274 filtrer_champ_face(flag_add, structural_uu_tmp_tensor[4], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[4]);
5275 filtrer_champ_elem(flag_add, structural_uu_tmp_tensor[5], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uu_filtre_tensor[5]);
5277 else if ( structural_uu_model ==
Nom(
"similarity") )
5279 Cerr <<
"The use of a dynamic constant with the SIMILARITY structural model is not allowed." << finl;
5285void calculer_structural_uscalar_gradient(
const double structural_uscalar_model_constant,
5286 const ArrOfDouble& structural_uscalar_vector_coefficients,
5287 const IJK_Field_vector3_double& velocity,
5288 const IJK_Field_double& champ_scalar,
5289 double scalar_kmin,
double scalar_kmax,
5290 const ArrOfDouble_with_ghost& delta_z_maillage,
5291 const double facteur_x_pour_delta,
5292 const double facteur_y_pour_delta,
5293 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5294 IJK_Field_vector3_double& structural_uscalar_vector)
5296 const IJK_Field_double& vitesse_i = velocity[0];
5297 const IJK_Field_double& vitesse_j = velocity[1];
5298 const IJK_Field_double& vitesse_k = velocity[2];
5300 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5301 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5302 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5304 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5305 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5306 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5308 const double deltaunsurdx = facteur_x_pour_delta;
5309 const double deltaunsurdy = facteur_y_pour_delta;
5314 const int ni = vitesse_k.
ni();
5315 const int nj = vitesse_k.
nj();
5316 const int nk = vitesse_k.
nk();
5318 for (
int k = 0; k < nk; k++)
5320 for (
int j = 0; j < nj; j++)
5322 for (
int i = 0; i < ni; i++)
5324 const int kg = k + offset;
5326 const double dz = delta_z_maillage[k];
5327 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
5328 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
5329 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
5331 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
5332 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
5333 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
5334 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
5336 const double uf_i = vitesse_i(i,j,k);
5337 const double uf_ip1 = vitesse_i(i+1,j,k);
5338 const double uf_im1 = vitesse_i(i-1,j,k);
5339 const double uf_i_jm1 = vitesse_i(i,j-1,k);
5340 const double uf_i_jp1 = vitesse_i(i,j+1,k);
5341 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
5342 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
5344 const double vf_j = vitesse_j(i,j,k);
5345 const double vf_j_im1 = vitesse_j(i-1,j,k);
5346 const double vf_j_ip1 = vitesse_j(i+1,j,k);
5347 const double vf_jp1 = vitesse_j(i,j+1,k);
5348 const double vf_jm1 = vitesse_j(i,j-1,k);
5349 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
5350 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
5352 const double wf_k = vitesse_k(i,j,k);
5353 const double wf_k_im1 = vitesse_k(i-1,j,k);
5354 const double wf_k_ip1 = vitesse_k(i+1,j,k);
5355 const double wf_k_jm1 = vitesse_k(i,j-1,k);
5356 const double wf_k_jp1 = vitesse_k(i,j+1,k);
5357 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
5358 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
5360 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
5361 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
5362 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
5364 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
5365 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
5366 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
5368 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
5369 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
5371 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
5372 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
5374 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
5375 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
5377 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
5378 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
5380 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
5381 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
5383 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
5384 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
5386 const double g_fi_ii = 0.5 * (duidx_im1 + duidx);
5387 const double g_fi_ij = 0.5 * (duidy_ijp1 + duidy_ij);
5388 const double g_fi_ik = 0.5 * (duidz_ikp1 + duidz_ik);
5389 const double g_fj_ji = 0.5 * (dujdx_ip1j + dujdx_ij);
5390 const double g_fj_jj = 0.5 * (dujdy_jm1 + dujdy);
5391 const double g_fj_jk = 0.5 * (dujdz_jkp1 + dujdz_jk);
5392 const double g_fk_ki = 0.5 * (dukdx_ip1k + dukdx_ik);
5393 const double g_fk_kj = 0.5 * (dukdy_jp1k + dukdy_jk);
5394 const double g_fk_kk = 0.5 * (dukdz_km1 + dukdz);
5396 const double scalar = champ_scalar(i,j,k);
5398 const double scalar_im1 = champ_scalar(i-1,j,k);
5399 const double scalar_ip1 = champ_scalar(i+1,j,k);
5400 const double scalar_im1_jm1 = champ_scalar(i-1,j-1,k);
5401 const double scalar_ip1_jm1 = champ_scalar(i+1,j-1,k);
5402 const double scalar_im1_km1 = kg==0 ? scalar_kmin : champ_scalar(i-1,j,k-1);
5403 const double scalar_ip1_km1 = kg==0 ? scalar_kmin : champ_scalar(i+1,j,k-1);
5405 const double scalar_jm1 = champ_scalar(i,j-1,k);
5406 const double scalar_jp1 = champ_scalar(i,j+1,k);
5407 const double scalar_jm1_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j-1,k-1);
5408 const double scalar_jp1_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j+1,k-1);
5410 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
5411 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
5413 const double scalar_im1_jp1 = champ_scalar(i-1,j+1,k);
5414 const double scalar_im1_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i-1,j,k+1);
5415 const double scalar_jm1_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j-1,k+1);
5417 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
5418 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
5419 const double dscalardxf_i_jm1 = deltaunsurdx * (scalar_jm1 - scalar_im1_jm1);
5420 const double dscalardxf_ip1_jm1 = deltaunsurdx * (scalar_ip1_jm1 - scalar_jm1);
5421 const double dscalardxf_i_km1 = deltaunsurdx * (scalar_km1 - scalar_im1_km1);
5422 const double dscalardxf_ip1_km1 = deltaunsurdx * (scalar_ip1_km1 - scalar_km1);
5424 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
5425 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
5426 const double dscalardyf_j_im1 = deltaunsurdy * (scalar_im1 - scalar_im1_jm1);
5427 const double dscalardyf_jp1_im1 = deltaunsurdy * (scalar_im1_jp1 - scalar_im1);
5428 const double dscalardyf_j_km1 = deltaunsurdy * (scalar_km1 - scalar_jm1_km1);
5429 const double dscalardyf_jp1_km1 = deltaunsurdy * (scalar_jp1_km1 - scalar_km1);
5431 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
5432 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
5433 const double dscalardzf_k_im1 = deltaunsurdelta_m * (scalar_im1 - scalar_im1_km1);
5434 const double dscalardzf_kp1_im1 = deltaunsurdelta_p * (scalar_im1_kp1 - scalar_im1);
5435 const double dscalardzf_k_jm1 = deltaunsurdelta_m * (scalar_jm1 - scalar_jm1_km1);
5436 const double dscalardzf_kp1_jm1 = deltaunsurdelta_p * (scalar_jm1_kp1 - scalar_jm1);
5438 const double q_fi_i = dscalardxf_i;
5439 const double q_fi_j = 0.25 * (dscalardyf_jp1_im1 + dscalardyf_jp1 + dscalardyf_j_im1 + dscalardyf_j);
5440 const double q_fi_k = 0.25 * (dscalardzf_kp1_im1 + dscalardzf_kp1 + dscalardzf_k_im1 + dscalardzf_k);
5442 const double q_fj_i = 0.25 * (dscalardxf_ip1_jm1 + dscalardxf_ip1 + dscalardxf_i_jm1 + dscalardxf_i);
5443 const double q_fj_j = dscalardyf_j;
5444 const double q_fj_k = 0.25 * (dscalardzf_kp1_jm1 + dscalardzf_kp1 + dscalardzf_k_jm1 + dscalardzf_k);
5446 const double q_fk_i = 0.25 * (dscalardxf_ip1_km1 + dscalardxf_ip1 + dscalardxf_i_km1 + dscalardxf_i);
5447 const double q_fk_j = 0.25 * (dscalardyf_jp1_km1 + dscalardyf_jp1 + dscalardyf_j_km1 + dscalardyf_j);
5448 const double q_fk_k = dscalardzf_k;
5450 const double c_i = g_fi_ii*q_fi_i + g_fi_ij*q_fi_j + g_fi_ik*q_fi_k;
5451 const double c_j = g_fj_ji*q_fj_i + g_fj_jj*q_fj_j + g_fj_jk*q_fj_k;
5452 const double c_k = g_fk_ki*q_fk_i + g_fk_kj*q_fk_j + g_fk_kk*q_fk_k;
5454 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_i/12.;
5455 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_j/12.;
5456 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_k/12.;
5464void calculer_structural_uscalar_similarity_comp(
const double structural_uscalar_model_constant,
5465 const ArrOfDouble& structural_uscalar_vector_coefficients,
5466 const IJK_Field_double& rho,
5467 const IJK_Field_vector3_double& velocity,
5468 const IJK_Field_vector3_double& velocity_filtre,
5469 const IJK_Field_double& champ_scalar,
5470 const IJK_Field_double& champ_scalar_filtre,
5471 double scalar_kmin,
double scalar_kmax,
5472 const ArrOfDouble_with_ghost& delta_z,
5473 const double facteur_delta_x,
5474 const double facteur_delta_y,
5475 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5479 IJK_Field_vector3_double& structural_uscalar_vector)
5481 const IJK_Field_double& vitesse_i = velocity[0];
5482 const IJK_Field_double& vitesse_j = velocity[1];
5483 const IJK_Field_double& vitesse_k = velocity[2];
5484 const IJK_Field_double& masse_vol_ijk = rho;
5485 IJK_Field_local_double& masse_vol_ijk_filtre = tmp_b[9];
5486 IJK_Field_local_double& aa_rho_ijk_filtre = tmp_a[9];
5492 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5493 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5494 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5496 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5497 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5498 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5502 const double dx_pour_delta = facteur_delta_x*dx;
5503 const double dy_pour_delta = facteur_delta_y*dy;
5505 const int ni = vitesse_k.
ni();
5506 const int nj = vitesse_k.
nj();
5507 const int nk = vitesse_k.
nk();
5512 IJK_Field_local_double& b_is = tmp_b[0];
5513 IJK_Field_local_double& b_js = tmp_b[1];
5514 IJK_Field_local_double& b_ks = tmp_b[2];
5515 IJK_Field_local_double& bb_is = tmp_b[3];
5516 IJK_Field_local_double& bb_js = tmp_b[4];
5517 IJK_Field_local_double& bb_ks = tmp_b[5];
5518 IJK_Field_local_double& bbT_i = tmp_b[6];
5519 IJK_Field_local_double& bbT_j = tmp_b[7];
5520 IJK_Field_local_double& bbT_k = tmp_b[8];
5522 IJK_Field_local_double& a_is = tmp_a[0];
5523 IJK_Field_local_double& a_js = tmp_a[1];
5524 IJK_Field_local_double& a_ks = tmp_a[2];
5525 IJK_Field_local_double& aa_is = tmp_a[3];
5526 IJK_Field_local_double& aa_js = tmp_a[4];
5527 IJK_Field_local_double& aa_ks = tmp_a[5];
5528 IJK_Field_local_double& aaT_i = tmp_a[6];
5529 IJK_Field_local_double& aaT_j = tmp_a[7];
5530 IJK_Field_local_double& aaT_k = tmp_a[8];
5532 const int ghost_size_filter = kernel->ghost_size();
5533 const int size_uniform = kernel->size_uniform();
5534 const int shift_uniform = kernel->shift_uniform();
5535 for (
int k = 0; k < nk; k++)
5537 const int kg = k + offset;
5539 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
5540 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
5541 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
5543 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
5544 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
5545 const double delta_m_pour_delta_glo = (kg-1<0 || kg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta_glo + dz_m1_pour_delta_glo);
5547 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
5548 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
5551 const int size_k_elem = kernel->size_k_elem(kg, nktot);
5552 const int size_k_face = kernel->size_k_face(kg, nktot);
5553 const int shift_k_elem = kernel->shift_k_elem(kg);
5554 const int shift_k_face = kernel->shift_k_face(kg);
5555 const bool ponderation_filter_kernel = kernel->ponderation();
5556 const bool normalisation_filter_kernel = kernel->normalisation();
5558 double facteur_elem = 0.;
5559 if (ponderation_filter_kernel)
5561 if (normalisation_filter_kernel)
5563 double longueur_elem = 0.;
5564 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5566 const int kpg = kg + kp;
5567 if (kpg<-1 || kpg>nktot)
5569 Cerr <<
"This should not happen." << finl;
5572 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5573 const double filter_coef_z = filter_kernel_z[kp+10];
5574 longueur_elem += filter_coef_z * dz;
5576 facteur_elem = 1./longueur_elem;
5580 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
5583 double facteur_face = 0.;
5584 if (ponderation_filter_kernel)
5586 if (normalisation_filter_kernel)
5588 double longueur_face = 0.;
5589 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5591 const int kpg = kg + kp;
5592 if (kpg<0 || kpg>nktot)
5594 Cerr <<
"This should not happen." << finl;
5597 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5598 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5599 const double dzf = 0.5*(dz + dz_m1);
5600 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5601 longueur_face += filter_coef_z_face * dzf;
5603 facteur_face = 1./longueur_face;
5607 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
5611 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
5613 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5618 bb_is(i, j, 0) = 0.;
5619 bb_js(i, j, 0) = 0.;
5620 bb_ks(i, j, 0) = 0.;
5621 bbT_i(i, j, 0) = 0.;
5622 bbT_j(i, j, 0) = 0.;
5623 bbT_k(i, j, 0) = 0.;
5624 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5626 const int kpg = kg + kp;
5627 if (!(kernel->is_at_wall_elem(kpg, nktot)))
5629 const double filter_coef_z = filter_kernel_z[kp+10];
5631 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
5632 const double scalar = champ_scalar(i,j,k+kp);
5635 const double scalarf_i = (scalar);
5636 const double scalarf_j = (scalar);
5638 const double uf_i = 0.5*(vitesse_i(i,j,k+kp)+vitesse_i(i+1,j,k+kp));
5639 const double vf_j = 0.5*(vitesse_j(i,j,k+kp)+vitesse_j(i,j+1,k+kp));
5641 if (ponderation_filter_kernel)
5643 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5644 b_is(i, j, 0) += rho_ijk*uf_i*scalarf_i * filter_coef_z * dz * facteur_elem;
5645 b_js(i, j, 0) += rho_ijk*vf_j*scalarf_j * filter_coef_z * dz * facteur_elem;
5646 bb_is(i, j, 0) += rho_ijk*uf_i * filter_coef_z * dz * facteur_elem;
5647 bb_js(i, j, 0) += rho_ijk*vf_j * filter_coef_z * dz * facteur_elem;
5648 bbT_i(i, j, 0) += rho_ijk*scalarf_i * filter_coef_z * dz * facteur_elem;
5649 bbT_j(i, j, 0) += rho_ijk*scalarf_j * filter_coef_z * dz * facteur_elem;
5650 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z * dz * facteur_elem;
5654 b_is(i, j, 0) += rho_ijk*uf_i*scalarf_i * filter_coef_z;
5655 b_js(i, j, 0) += rho_ijk*vf_j*scalarf_j * filter_coef_z;
5656 bb_is(i, j, 0) += rho_ijk*uf_i * filter_coef_z;
5657 bb_js(i, j, 0) += rho_ijk*vf_j * filter_coef_z;
5658 bbT_i(i, j, 0) += rho_ijk*scalarf_i * filter_coef_z;
5659 bbT_j(i, j, 0) += rho_ijk*scalarf_j * filter_coef_z;
5660 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z;
5664 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5666 const int kpg = kg + kp;
5667 if (!(kernel->is_at_wall_face(kpg, nktot)))
5669 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5671 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
5672 const double scalar = champ_scalar(i,j,k+kp);
5674 const double scalarf_k = (scalar);
5676 const double wf_k = kpg==(nktot-1) ? 0. : 0.5*(vitesse_k(i,j,k+kp)+vitesse_k(i,j,k+kp+1));
5678 if (ponderation_filter_kernel)
5680 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5681 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5682 const double dzf = 0.5*(dz + dz_m1);
5683 b_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5684 bb_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5685 bbT_k(i, j, 0) += rho_ijk*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5689 b_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face;
5690 bb_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face;
5691 bbT_k(i, j, 0) += rho_ijk*scalarf_k * filter_coef_z_face;
5697 for (
int j = 0; j < nj; j++)
5699 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5704 aa_is(i, 0, 0) = 0.;
5705 aa_js(i, 0, 0) = 0.;
5706 aa_ks(i, 0, 0) = 0.;
5707 aaT_i(i, 0, 0) = 0.;
5708 aaT_j(i, 0, 0) = 0.;
5709 aaT_k(i, 0, 0) = 0.;
5710 aa_rho_ijk_filtre(i, 0, 0) = 0.;
5711 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
5713 const double filter_coef_y = filter_kernel_y[jp+10];
5714 a_is(i, 0, 0) += b_is(i, j+jp, 0) * filter_coef_y;
5715 a_js(i, 0, 0) += b_js(i, j+jp, 0) * filter_coef_y;
5716 a_ks(i, 0, 0) += b_ks(i, j+jp, 0) * filter_coef_y;
5717 aa_is(i, 0, 0) += bb_is(i, j+jp, 0) * filter_coef_y;
5718 aa_js(i, 0, 0) += bb_js(i, j+jp, 0) * filter_coef_y;
5719 aa_ks(i, 0, 0) += bb_ks(i, j+jp, 0) * filter_coef_y;
5720 aaT_i(i, 0, 0) += bbT_i(i, j+jp, 0) * filter_coef_y;
5721 aaT_j(i, 0, 0) += bbT_j(i, j+jp, 0) * filter_coef_y;
5722 aaT_k(i, 0, 0) += bbT_k(i, j+jp, 0) * filter_coef_y;
5723 aa_rho_ijk_filtre(i, 0, 0) += masse_vol_ijk_filtre(i, j+jp, 0)* filter_coef_y;
5727 for (
int i = 0; i < ni; i++)
5732 double rho_uf_i = 0.;
5733 double rho_vf_j = 0.;
5734 double rho_wf_k = 0.;
5735 double rho_scalarf_i = 0.;
5736 double rho_scalarf_j = 0.;
5737 double rho_scalarf_k = 0.;
5738 double rho_filtre = 0.;
5739 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
5741 const double filter_coef_x = filter_kernel_x[ip+10];
5742 r_is += a_is(i+ip, 0, 0) * filter_coef_x;
5743 r_js += a_js(i+ip, 0, 0) * filter_coef_x;
5744 r_ks += a_ks(i+ip, 0, 0) * filter_coef_x;
5745 rho_uf_i += aa_is(i+ip, 0, 0) * filter_coef_x;
5746 rho_vf_j += aa_js(i+ip, 0, 0) * filter_coef_x;
5747 rho_wf_k += aa_ks(i+ip, 0, 0) * filter_coef_x;
5748 rho_scalarf_i += aaT_i(i+ip, 0, 0) * filter_coef_x;
5749 rho_scalarf_j += aaT_j(i+ip, 0, 0) * filter_coef_x;
5750 rho_scalarf_k += aaT_k(i+ip, 0, 0) * filter_coef_x;
5751 rho_filtre += aa_rho_ijk_filtre(i+ip, 0, 0)* filter_coef_x;
5754 Cerr <<
"i=" << i << finl;
5755 Cerr <<
"j=" << j << finl;
5756 Cerr <<
"k=" << k << finl;
5757 Cerr <<
"rho_filtre=" << rho_filtre << finl;
5758 Cerr <<
"r_is=" << r_is << finl;
5759 Cerr <<
"rho_uf_i=" << rho_uf_i << finl;
5760 Cerr <<
"rho_scalarf_i=" << rho_scalarf_i << finl;
5761 Cerr <<
"-----------------------" << finl;
5763 const double c_is = (r_is)/rho_filtre - (rho_uf_i*rho_scalarf_i)/(rho_filtre*rho_filtre);
5764 const double c_js = (r_js)/rho_filtre - (rho_vf_j*rho_scalarf_j)/(rho_filtre*rho_filtre);
5765 const double c_ks = (r_ks)/rho_filtre - (rho_wf_k*rho_scalarf_k)/(rho_filtre*rho_filtre);
5767 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_is;
5768 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_js;
5769 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_ks;
5776void calculer_structural_uscalar_similarity(
const double structural_uscalar_model_constant,
5777 const ArrOfDouble& structural_uscalar_vector_coefficients,
5778 const IJK_Field_vector3_double& velocity,
5779 const IJK_Field_vector3_double& velocity_filtre,
5780 const IJK_Field_double& champ_scalar,
5781 const IJK_Field_double& champ_scalar_filtre,
5782 double scalar_kmin,
double scalar_kmax,
5783 const ArrOfDouble_with_ghost& delta_z,
5784 const double facteur_delta_x,
5785 const double facteur_delta_y,
5786 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5790 IJK_Field_vector3_double& structural_uscalar_vector)
5792 const IJK_Field_double& vitesse_i = velocity[0];
5793 const IJK_Field_double& vitesse_j = velocity[1];
5794 const IJK_Field_double& vitesse_k = velocity[2];
5796 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
5797 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
5798 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
5800 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5801 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5802 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5804 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5805 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5806 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5810 const double dx_pour_delta = facteur_delta_x*dx;
5811 const double dy_pour_delta = facteur_delta_y*dy;
5813 const int ni = vitesse_k.
ni();
5814 const int nj = vitesse_k.
nj();
5815 const int nk = vitesse_k.
nk();
5820 IJK_Field_local_double& b_is = tmp_b[0];
5821 IJK_Field_local_double& b_js = tmp_b[1];
5822 IJK_Field_local_double& b_ks = tmp_b[2];
5824 IJK_Field_local_double& a_is = tmp_a[0];
5825 IJK_Field_local_double& a_js = tmp_a[1];
5826 IJK_Field_local_double& a_ks = tmp_a[2];
5828 const int ghost_size_filter = kernel->ghost_size();
5829 const int size_uniform = kernel->size_uniform();
5830 const int shift_uniform = kernel->shift_uniform();
5831 for (
int k = 0; k < nk; k++)
5833 const int kg = k + offset;
5835 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
5836 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
5837 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
5839 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
5840 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
5841 const double delta_m_pour_delta_glo = (kg-1<0 || kg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta_glo + dz_m1_pour_delta_glo);
5843 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
5844 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
5847 const int size_k_elem = kernel->size_k_elem(kg, nktot);
5848 const int size_k_face = kernel->size_k_face(kg, nktot);
5849 const int shift_k_elem = kernel->shift_k_elem(kg);
5850 const int shift_k_face = kernel->shift_k_face(kg);
5851 const bool ponderation_filter_kernel = kernel->ponderation();
5852 const bool normalisation_filter_kernel = kernel->normalisation();
5854 double facteur_elem = 0.;
5855 if (ponderation_filter_kernel)
5857 if (normalisation_filter_kernel)
5859 double longueur_elem = 0.;
5860 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5862 const int kpg = kg + kp;
5863 if (kpg<-1 || kpg>nktot)
5865 Cerr <<
"This should not happen." << finl;
5868 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5869 const double filter_coef_z = filter_kernel_z[kp+10];
5870 longueur_elem += filter_coef_z * dz;
5872 facteur_elem = 1./longueur_elem;
5876 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
5879 double facteur_face = 0.;
5880 if (ponderation_filter_kernel)
5882 if (normalisation_filter_kernel)
5884 double longueur_face = 0.;
5885 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5887 const int kpg = kg + kp;
5888 if (kpg<0 || kpg>nktot)
5890 Cerr <<
"This should not happen." << finl;
5893 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5894 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5895 const double dzf = 0.5*(dz + dz_m1);
5896 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5897 longueur_face += filter_coef_z_face * dzf;
5899 facteur_face = 1./longueur_face;
5903 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
5907 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
5909 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5914 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5916 const int kpg = kg + kp;
5917 if (!(kernel->is_at_wall_elem(kpg, nktot)))
5919 const double filter_coef_z = filter_kernel_z[kp+10];
5921 const double scalar = champ_scalar(i,j,k+kp);
5922 const double scalar_im1 = champ_scalar(i-1,j,k+kp);
5923 const double scalar_jm1 = champ_scalar(i,j-1,k+kp);
5924 const double scalarf_i = 0.5*(scalar + scalar_im1);
5925 const double scalarf_j = 0.5*(scalar + scalar_jm1);
5927 const double uf_i = vitesse_i(i,j,k+kp);
5928 const double vf_j = vitesse_j(i,j,k+kp);
5930 if (ponderation_filter_kernel)
5932 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5933 b_is(i, j, 0) += uf_i*scalarf_i * filter_coef_z * dz * facteur_elem;
5934 b_js(i, j, 0) += vf_j*scalarf_j * filter_coef_z * dz * facteur_elem;
5938 b_is(i, j, 0) += uf_i*scalarf_i * filter_coef_z;
5939 b_js(i, j, 0) += vf_j*scalarf_j * filter_coef_z;
5943 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5945 const int kpg = kg + kp;
5946 if (!(kernel->is_at_wall_face(kpg, nktot)))
5948 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5950 const double scalar = champ_scalar(i,j,k+kp);
5951 const double scalar_km1 = kpg==0 ? scalar_kmin : champ_scalar(i,j,k-1+kp);
5952 const double scalarf_k = 0.5*(scalar + scalar_km1);
5954 const double wf_k = vitesse_k(i,j,k+kp);
5956 if (ponderation_filter_kernel)
5958 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5959 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5960 const double dzf = 0.5*(dz + dz_m1);
5961 b_ks(i, j, 0) += wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5965 b_ks(i, j, 0) += wf_k*scalarf_k * filter_coef_z_face;
5971 for (
int j = 0; j < nj; j++)
5973 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5978 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
5980 const double filter_coef_y = filter_kernel_y[jp+10];
5981 a_is(i, 0, 0) += b_is(i, j+jp, 0) * filter_coef_y;
5982 a_js(i, 0, 0) += b_js(i, j+jp, 0) * filter_coef_y;
5983 a_ks(i, 0, 0) += b_ks(i, j+jp, 0) * filter_coef_y;
5987 for (
int i = 0; i < ni; i++)
5992 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
5994 const double filter_coef_x = filter_kernel_x[ip+10];
5995 r_is += a_is(i+ip, 0, 0) * filter_coef_x;
5996 r_js += a_js(i+ip, 0, 0) * filter_coef_x;
5997 r_ks += a_ks(i+ip, 0, 0) * filter_coef_x;
6000 const double scalar = champ_scalar_filtre(i,j,k);
6001 const double scalar_im1 = champ_scalar_filtre(i-1,j,k);
6002 const double scalar_jm1 = champ_scalar_filtre(i,j-1,k);
6003 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar_filtre(i,j,k-1);
6004 const double scalarf_i = 0.5*(scalar + scalar_im1);
6005 const double scalarf_j = 0.5*(scalar + scalar_jm1);
6006 const double scalarf_k = 0.5*(scalar + scalar_km1);
6008 const double uf_i = vitesse_i_filtre(i,j,k);
6009 const double vf_j = vitesse_j_filtre(i,j,k);
6010 const double wf_k = vitesse_k_filtre(i,j,k);
6012 const double c_is = r_is - uf_i*scalarf_i;
6013 const double c_js = r_js - vf_j*scalarf_j;
6014 const double c_ks = r_ks - wf_k*scalarf_k;
6016 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_is;
6017 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_js;
6018 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_ks;
6024void calculer_structural_uscalar_similarity_Streher(
const double structural_uscalar_model_constant,
6025 const ArrOfDouble& structural_uscalar_vector_coefficients,
6026 const IJK_Field_vector3_double& velocity,
6027 const IJK_Field_double& champ_scalar,
6028 double scalar_kmin,
double scalar_kmax,
6029 IJK_Field_vector3_double& structural_uscalar_vector)
6031 const IJK_Field_double& vitesse_i = velocity[0];
6032 const IJK_Field_double& vitesse_j = velocity[1];
6033 const IJK_Field_double& vitesse_k = velocity[2];
6035 const int ni = vitesse_k.
ni();
6036 const int nj = vitesse_k.
nj();
6037 const int nk = vitesse_k.
nk();
6039 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
6040 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
6041 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
6046 for (
int k = 0; k < nk; k++)
6048 const int kg = k + offset;
6049 for (
int j = 0; j < nj; j++)
6051 for (
int i = 0; i < ni; i++)
6055 const double uf_i = vitesse_i(i,j,k);
6060 const double vf_j = vitesse_j(i,j,k);
6065 const double wf_k = vitesse_k(i,j,k);
6069 const double sf_im2 = champ_scalar(i-2,j,k);
6070 const double sf_im1 = champ_scalar(i-1,j,k);
6071 const double sf_i = champ_scalar(i,j,k);
6072 const double sf_ip1 = champ_scalar(i+1,j,k);
6075 const double sf_jm2 = champ_scalar(i,j-2,k);
6076 const double sf_jm1 = champ_scalar(i,j-1,k);
6077 const double sf_j = champ_scalar(i,j,k);
6078 const double sf_jp1 = champ_scalar(i,j+1,k);
6081 const double sf_km2 = kg<=1 ? scalar_kmin : champ_scalar(i,j,k-2);
6082 const double sf_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
6083 const double sf_k = kg >=(nktot-1) ? scalar_kmax : champ_scalar(i,j,k);
6084 const double sf_kp1 = kg >=(nktot-2) ? scalar_kmax : champ_scalar(i,j,k+1);
6088 const double c_is = uf_i*(sf_i+sf_im1)/2. - (uf_i)*(sf_im2+sf_im1+sf_i+sf_ip1)/4.;
6089 const double c_js = vf_j*(sf_j+sf_jm1)/2. - (vf_j)*(sf_jm2+sf_jm1+sf_j+sf_jp1)/4.;
6090 const double c_ks = wf_k*(sf_k+sf_km1)/2. - (wf_k)*(sf_km2+sf_km1+sf_k+sf_kp1)/4.;
6092 structural_uscalar_x(i,j,k) = - structural_uscalar_model_constant * c_is;
6093 structural_uscalar_y(i,j,k) = - structural_uscalar_model_constant * c_js;
6094 structural_uscalar_z(i,j,k) = - structural_uscalar_model_constant * c_ks;
6102void calculer_structural_uscalar(
const Nom& structural_uscalar_model,
6103 const double structural_uscalar_model_constant,
6104 const ArrOfDouble& structural_uscalar_vector_coefficients,
6105 IJK_Field_double& rho,
6106 IJK_Field_vector3_double& velocity,
6107 IJK_Field_vector3_double& velocity_filtre,
6108 IJK_Field_double& scalar,
6109 IJK_Field_double& scalar_filtre,
6110 double scalar_kmin,
double scalar_kmax,
6111 const ArrOfDouble_with_ghost& delta_z,
6112 const double facteur_delta_x,
6113 const double facteur_delta_y,
6114 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6115 const double facteur_delta_filtre_x,
6116 const double facteur_delta_filtre_y,
6117 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6121 IJK_Field_vector3_double& structural_uscalar_tmp_vector,
6122 const bool flag_structural_uscalar_filtre,
6123 IJK_Field_vector3_double& structural_uscalar_filtre_vector,
6124 IJK_Field_vector3_double& structural_uscalar_vector)
6126 int ghost_size_filter;
6127 int ghost_size_velocity;
6128 int ghost_size_scalar;
6129 int ghost_size_structural_uscalar_tmp;
6132 if ( structural_uscalar_model ==
Nom(
"gradient") )
6134 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6135 structural_uscalar_vector_coefficients,
6136 velocity, scalar, scalar_kmin, scalar_kmax,
6137 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6138 structural_uscalar_vector);
6140 else if ( structural_uscalar_model ==
Nom(
"gradient_filtre") )
6142 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6143 structural_uscalar_vector_coefficients,
6144 velocity, scalar, scalar_kmin, scalar_kmax,
6145 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6146 structural_uscalar_tmp_vector);
6148 ghost_size_filter = 1 + kernel->ghost_size();
6149 ghost_size_structural_uscalar_tmp = max((
int) 2, ghost_size_filter);
6154 const int flag_add = 0;
6155 filtrer_champ_elem(flag_add, structural_uscalar_tmp_vector[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_vector[0]);
6156 filtrer_champ_elem(flag_add, structural_uscalar_tmp_vector[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_vector[1]);
6157 filtrer_champ_face(flag_add, structural_uscalar_tmp_vector[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_vector[2]);
6159 else if ( structural_uscalar_model ==
Nom(
"similarity") )
6161 ghost_size_filter = 1 + kernel->ghost_size();
6162 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6163 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6169 const int flag_add = 0;
6170 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
6171 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
6172 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
6173 filtrer_champ_elem(flag_add, scalar, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, scalar_filtre);
6180 calculer_structural_uscalar_similarity(structural_uscalar_model_constant,
6181 structural_uscalar_vector_coefficients,
6182 velocity, velocity_filtre,
6183 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6184 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6185 kernel, tmp_b, tmp_a,
6186 structural_uscalar_vector);
6188 else if ( structural_uscalar_model ==
Nom(
"similarity_comp") )
6190 ghost_size_filter = 1 + kernel->ghost_size();
6191 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6192 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6198 const int flag_add = 0;
6199 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
6200 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
6201 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
6202 filtrer_champ_elem(flag_add, scalar, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, scalar_filtre);
6209 calculer_structural_uscalar_similarity_comp(structural_uscalar_model_constant,
6210 structural_uscalar_vector_coefficients,
6212 velocity, velocity_filtre,
6213 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6214 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6215 kernel, tmp_b, tmp_a,
6216 structural_uscalar_vector);
6218 else if ( structural_uscalar_model ==
Nom(
"similarity_streher") )
6220 ghost_size_filter = 1 + kernel->ghost_size();
6221 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6222 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6228 const int flag_add = 0;
6229 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
6230 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
6231 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
6232 filtrer_champ_elem(flag_add, scalar, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, scalar_filtre);
6239 calculer_structural_uscalar_similarity_Streher(structural_uscalar_model_constant,
6240 structural_uscalar_vector_coefficients,
6242 scalar, scalar_kmin, scalar_kmax,
6243 structural_uscalar_vector);
6247 Cerr <<
"The name of the structural model for uscalar is unknown." << finl;
6251 if (flag_structural_uscalar_filtre)
6253 ghost_size_filter = 1 + kernel->ghost_size();
6254 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6255 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6261 const int flag_add = 0;
6262 filtrer_champ_elem(flag_add, velocity[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[0]);
6263 filtrer_champ_elem(flag_add, velocity[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[1]);
6264 filtrer_champ_face(flag_add, velocity[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, velocity_filtre[2]);
6265 filtrer_champ_elem(flag_add, scalar, delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, scalar_filtre);
6272 if ( structural_uscalar_model ==
Nom(
"gradient") )
6274 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6275 structural_uscalar_vector_coefficients,
6276 velocity_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
6277 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6278 structural_uscalar_filtre_vector);
6280 else if ( structural_uscalar_model ==
Nom(
"gradient_filtre") )
6282 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6283 structural_uscalar_vector_coefficients,
6284 velocity_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
6285 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6286 structural_uscalar_tmp_vector);
6288 ghost_size_filter = 1 + kernel->ghost_size();
6289 ghost_size_structural_uscalar_tmp = max((
int) 2, ghost_size_filter);
6294 filtrer_champ_elem(flag_add, structural_uscalar_tmp_vector[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_filtre_vector[0]);
6295 filtrer_champ_elem(flag_add, structural_uscalar_tmp_vector[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_filtre_vector[1]);
6296 filtrer_champ_face(flag_add, structural_uscalar_tmp_vector[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, structural_uscalar_filtre_vector[2]);
6298 else if ( structural_uscalar_model ==
Nom(
"similarity") )
6300 Cerr <<
"The use of a dynamic constant with the SIMILARITY structural model is not allowed." << finl;
6307void modification_modele_dynamic_uu_scalar(
const bool anisotropic,
6308 const Nom& turbulent_viscosity_dynamic_type,
6309 const Nom& structural_uu_dynamic_type,
6310 const IJK_Field_vector3_double& velocity,
6311 const IJK_Field_vector3_double& velocity_filtre,
6312 const IJK_Field_double& scalar,
6313 const IJK_Field_double& scalar_filtre,
6314 double scalar_kmin,
double scalar_kmax,
6315 const ArrOfDouble_with_ghost& delta_z,
6316 const double facteur_delta_x,
6317 const double facteur_delta_y,
6318 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6319 const double facteur_delta_filtre_x,
6320 const double facteur_delta_filtre_y,
6321 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6325 ArrOfDouble_with_ghost& constante_modele,
6327 const int turbulent_viscosity,
6328 IJK_Field_double& turbulent_mu,
6329 IJK_Field_double& turbulent_mu_filtre,
6330 const int structural_uu,
6334 int ghost_size_filter;
6335 int ghost_size_turbulent_mu;
6336 int ghost_size_structural_uu;
6337 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6338 && structural_uu_dynamic_type ==
Nom(
"not_dynamic") )
6344 if (turbulent_viscosity)
6346 ghost_size_filter = 1 + kernel->ghost_size();
6347 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6354 for (
int j=0 ; j<6 ; j++)
6356 ghost_size_filter = 1 + kernel->ghost_size();
6357 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6363 const bool tensorial_struct = structural_uu_dynamic_type.
finit_par(
"tensorial");
6365 calculer_ml_dynamic_uu_tensor(anisotropic, tensorial_struct,
6366 velocity, velocity_filtre,
6367 turbulent_viscosity,
6374 turbulent_mu_filtre,
6375 turbulent_mu_filtre,
6376 turbulent_mu_filtre,
6377 turbulent_mu_filtre,
6378 turbulent_mu_filtre,
6379 turbulent_mu_filtre,
6381 structural_uu_tensor,
6382 structural_uu_filtre_tensor,
6383 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6384 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6385 kernel, tmp_b, tmp_a,
6397 ArrOfDouble& moy_lij = ml[0][6];
6398 ArrOfDouble& moy_mij = ml[1][6];
6399 ArrOfDouble& moy_hij = ml[2][6];
6400 ArrOfDouble& moy_mijmij = ml[3][6];
6401 ArrOfDouble& moy_hijhij = ml[4][6];
6402 ArrOfDouble& moy_mijlij = ml[5][6];
6403 ArrOfDouble& moy_hijlij = ml[6][6];
6404 ArrOfDouble& moy_mijhij = ml[7][6];
6406 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6407 Nom(
"uu, viscosity"),
6408 moy_lij, moy_mij, moy_hij,
6409 moy_mijmij, moy_hijhij,
6410 moy_mijlij, moy_hijlij,
6416 const bool flag_face =
false;
6417 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu);
6418 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre);
6421 const bool struct_reconnu = calculer_constante_modele(structural_uu_dynamic_type,
6422 Nom(
"uu, structural"),
6423 moy_lij, moy_hij, moy_mij,
6424 moy_hijhij, moy_mijmij,
6425 moy_hijlij, moy_mijlij,
6431 for (
int j=0 ; j<6 ; j++)
6433 const bool flag_face = (j==2||j==4);
6434 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6435 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6439 if (tensorial_struct)
6441 Nom struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"tensorial");
6442 for (
int j=0 ; j<6 ; j++)
6444 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6445 Nom(
"uu, structural, tensorial, j= ") +
Nom(j),
6446 lij[j], hij[j], mij[j],
6447 hijhij[j], mijmij[j],
6448 hijlij[j], mijlij[j],
6454 const bool flag_face = (j==2||j==4);
6455 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6456 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6460 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6466 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6467 const bool twopass_struct = structural_uu_dynamic_type.
finit_par(
"_twopass");
6468 if (twopass_visc || twopass_struct)
6470 if (!turbulent_viscosity)
6472 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'twopass' en ayant pas de viscosite turbulente" << finl;
6477 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'twopass' en ayant pas de modele structurel" << finl;
6481 Nom visc_dynamic_type;
6482 Nom struct_dynamic_type;
6485 Cout <<
"Second pass, dynamic correction of constant: uu, viscosity" << finl;
6486 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6487 struct_dynamic_type =
Nom(
"not_dynamic");
6491 Cout <<
"Second pass, dynamic correction of constant: uu, structural" << finl;
6492 visc_dynamic_type =
Nom(
"not_dynamic");
6493 struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"_twopass");
6496 modification_modele_dynamic_uu_scalar(anisotropic,
6498 struct_dynamic_type,
6499 velocity, velocity_filtre,
6500 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6501 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6502 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6503 kernel, tmp_b, tmp_a,
6504 constante_modele, ml,
6505 turbulent_viscosity, turbulent_mu, turbulent_mu_filtre,
6506 structural_uu, structural_uu_tensor, structural_uu_filtre_tensor);
6509 if ((!visc_reconnu) && (!struct_reconnu) && (!twopass_visc) && (!tensorial_struct) && (!twopass_struct))
6511 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6518void modification_modele_dynamic_uu_tensor(
const bool anisotropic,
6519 const Nom& turbulent_viscosity_dynamic_type,
6520 const Nom& structural_uu_dynamic_type,
6521 const IJK_Field_vector3_double& velocity,
6522 const IJK_Field_vector3_double& velocity_filtre,
6523 const IJK_Field_double& scalar,
6524 const IJK_Field_double& scalar_filtre,
6525 double scalar_kmin,
double scalar_kmax,
6526 const ArrOfDouble_with_ghost& delta_z,
6527 const double facteur_delta_x,
6528 const double facteur_delta_y,
6529 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6530 const double facteur_delta_filtre_x,
6531 const double facteur_delta_filtre_y,
6532 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6536 ArrOfDouble_with_ghost& constante_modele,
6538 const int turbulent_viscosity,
6541 const int structural_uu,
6545 IJK_Field_double& turbulent_mu_xx = turbulent_mu_tensor[0];
6546 IJK_Field_double& turbulent_mu_xy = turbulent_mu_tensor[1];
6547 IJK_Field_double& turbulent_mu_xz = turbulent_mu_tensor[2];
6548 IJK_Field_double& turbulent_mu_yy = turbulent_mu_tensor[3];
6549 IJK_Field_double& turbulent_mu_yz = turbulent_mu_tensor[4];
6550 IJK_Field_double& turbulent_mu_zz = turbulent_mu_tensor[5];
6552 IJK_Field_double& turbulent_mu_filtre_xx = turbulent_mu_filtre_tensor[0];
6553 IJK_Field_double& turbulent_mu_filtre_xy = turbulent_mu_filtre_tensor[1];
6554 IJK_Field_double& turbulent_mu_filtre_xz = turbulent_mu_filtre_tensor[2];
6555 IJK_Field_double& turbulent_mu_filtre_yy = turbulent_mu_filtre_tensor[3];
6556 IJK_Field_double& turbulent_mu_filtre_yz = turbulent_mu_filtre_tensor[4];
6557 IJK_Field_double& turbulent_mu_filtre_zz = turbulent_mu_filtre_tensor[5];
6559 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
6561 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6562 && structural_uu_dynamic_type ==
Nom(
"not_dynamic") )
6568 if (turbulent_viscosity)
6570 for (
int j=0 ; j<6 ; j++)
6572 ghost_size_filter = 1 + kernel->ghost_size();
6573 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6581 for (
int j=0 ; j<6 ; j++)
6583 ghost_size_filter = 1 + kernel->ghost_size();
6584 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6590 const bool tensorial_visc = turbulent_viscosity_dynamic_type.
finit_par(
"tensorial");
6591 const bool tensorial_struct = structural_uu_dynamic_type.
finit_par(
"tensorial");
6592 const bool tensorial = tensorial_visc || tensorial_struct;
6594 calculer_ml_dynamic_uu_tensor(anisotropic, tensorial,
6595 velocity, velocity_filtre,
6596 turbulent_viscosity,
6603 turbulent_mu_filtre_xx,
6604 turbulent_mu_filtre_xy,
6605 turbulent_mu_filtre_xz,
6606 turbulent_mu_filtre_yy,
6607 turbulent_mu_filtre_yz,
6608 turbulent_mu_filtre_zz,
6610 structural_uu_tensor,
6611 structural_uu_filtre_tensor,
6612 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6613 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6614 kernel, tmp_b, tmp_a,
6626 ArrOfDouble& moy_lij = ml[0][6];
6627 ArrOfDouble& moy_mij = ml[1][6];
6628 ArrOfDouble& moy_hij = ml[2][6];
6629 ArrOfDouble& moy_mijmij = ml[3][6];
6630 ArrOfDouble& moy_hijhij = ml[4][6];
6631 ArrOfDouble& moy_mijlij = ml[5][6];
6632 ArrOfDouble& moy_hijlij = ml[6][6];
6633 ArrOfDouble& moy_mijhij = ml[7][6];
6635 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6636 Nom(
"uu, viscosity"),
6637 moy_lij, moy_mij, moy_hij,
6638 moy_mijmij, moy_hijhij,
6639 moy_mijlij, moy_hijlij,
6645 for (
int j=0 ; j<6 ; j++)
6647 const bool flag_face =
false;
6648 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_tensor[j]);
6649 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_tensor[j]);
6653 const bool struct_reconnu = calculer_constante_modele(structural_uu_dynamic_type,
6654 Nom(
"uu, structural"),
6655 moy_lij, moy_hij, moy_mij,
6656 moy_hijhij, moy_mijmij,
6657 moy_hijlij, moy_mijlij,
6663 for (
int j=0 ; j<6 ; j++)
6665 const bool flag_face = (j==2||j==4);
6666 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6667 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6673 Nom visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"tensorial");
6674 for (
int j=0 ; j<6 ; j++)
6676 const bool reconnu = calculer_constante_modele(visc_dynamic_type,
6677 Nom(
"uu, viscosity, tensorial, j= ") +
Nom(j),
6678 lij[j], mij[j], hij[j],
6679 mijmij[j], hijhij[j],
6680 mijlij[j], hijlij[j],
6686 const bool flag_face =
false;
6687 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_tensor[j]);
6688 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_tensor[j]);
6692 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6698 if (tensorial_struct)
6700 Nom struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"tensorial");
6701 for (
int j=0 ; j<6 ; j++)
6703 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6704 Nom(
"uu, structural, tensorial, j= ") +
Nom(j),
6705 lij[j], hij[j], mij[j],
6706 hijhij[j], mijmij[j],
6707 hijlij[j], mijlij[j],
6713 const bool flag_face = (j==2||j==4);
6714 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6715 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6719 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6725 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6726 const bool twopass_struct = structural_uu_dynamic_type.
finit_par(
"_twopass");
6727 if (twopass_visc || twopass_struct)
6729 if (!turbulent_viscosity)
6731 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'twopass' en ayant pas de viscosite turbulente" << finl;
6736 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'twopass' en ayant pas de modele structurel" << finl;
6740 Nom visc_dynamic_type;
6741 Nom struct_dynamic_type;
6744 Cout <<
"Second pass, dynamic correction of constant: uu, viscosity" << finl;
6745 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6746 struct_dynamic_type =
Nom(
"not_dynamic");
6750 Cout <<
"Second pass, dynamic correction of constant: uu, structural" << finl;
6751 visc_dynamic_type =
Nom(
"not_dynamic");
6752 struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"_twopass");
6755 modification_modele_dynamic_uu_tensor(anisotropic,
6757 struct_dynamic_type,
6758 velocity, velocity_filtre,
6759 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6760 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6761 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6762 kernel, tmp_b, tmp_a,
6763 constante_modele, ml,
6764 turbulent_viscosity, turbulent_mu_tensor, turbulent_mu_filtre_tensor,
6765 structural_uu, structural_uu_tensor, structural_uu_filtre_tensor);
6768 if ((!visc_reconnu) && (!struct_reconnu) && (!tensorial_visc) && (!tensorial_struct) && (!twopass_visc) && (!twopass_struct))
6770 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6777void modification_modele_dynamic_uscalar_scalar(
const bool anisotropic,
6778 const Nom& turbulent_viscosity_dynamic_type,
6779 const Nom& structural_uscalar_dynamic_type,
6780 const IJK_Field_vector3_double& velocity,
6781 const IJK_Field_vector3_double& velocity_filtre,
6782 const IJK_Field_double& scalar,
6783 const IJK_Field_double& scalar_filtre,
6784 double scalar_kmin,
double scalar_kmax,
6785 const ArrOfDouble_with_ghost& delta_z,
6786 const double facteur_delta_x,
6787 const double facteur_delta_y,
6788 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6789 const double facteur_delta_filtre_x,
6790 const double facteur_delta_filtre_y,
6791 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6795 ArrOfDouble_with_ghost& constante_modele,
6797 const int turbulent_viscosity,
6798 IJK_Field_double& turbulent_mu,
6799 IJK_Field_double& turbulent_mu_filtre,
6800 const int structural_uscalar,
6801 IJK_Field_vector3_double& structural_uscalar_vector,
6802 IJK_Field_vector3_double& structural_uscalar_filtre_vector)
6804 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
6805 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6806 && structural_uscalar_dynamic_type ==
Nom(
"not_dynamic") )
6812 if (turbulent_viscosity)
6814 ghost_size_filter = 1 + kernel->ghost_size();
6815 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6820 if (structural_uscalar)
6822 for (
int j=0 ; j<3 ; j++)
6824 ghost_size_filter = 1 + kernel->ghost_size();
6825 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6831 const bool vectorial_struct = structural_uscalar_dynamic_type.
finit_par(
"vectorial");
6833 calculer_ml_dynamic_uscalar_vector(anisotropic, vectorial_struct,
6834 velocity, velocity_filtre,
6835 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6836 turbulent_viscosity,
6840 turbulent_mu_filtre,
6841 turbulent_mu_filtre,
6842 turbulent_mu_filtre,
6844 structural_uscalar_vector,
6845 structural_uscalar_filtre_vector,
6846 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6847 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6848 kernel, tmp_b, tmp_a,
6860 ArrOfDouble& moy_li = ml[0][6];
6861 ArrOfDouble& moy_mi = ml[1][6];
6862 ArrOfDouble& moy_hi = ml[2][6];
6863 ArrOfDouble& moy_mimi = ml[3][6];
6864 ArrOfDouble& moy_hihi = ml[4][6];
6865 ArrOfDouble& moy_mili = ml[5][6];
6866 ArrOfDouble& moy_hili = ml[6][6];
6867 ArrOfDouble& moy_mihi = ml[7][6];
6869 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6870 Nom(
"uscalar, viscosity"),
6871 moy_li, moy_mi, moy_hi,
6879 const bool flag_face =
false;
6880 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu);
6881 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre);
6884 const bool struct_reconnu = calculer_constante_modele(structural_uscalar_dynamic_type,
6885 Nom(
"uscalar, structural"),
6886 moy_li, moy_hi, moy_mi,
6894 for (
int j=0 ; j<3 ; j++)
6896 const bool flag_face = (j==2);
6897 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
6898 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
6902 if (vectorial_struct)
6904 Nom struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"vectorial");
6905 for (
int j=0 ; j<3 ; j++)
6907 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6908 Nom(
"uscalar, structural, vectorial, j= ") +
Nom(j),
6909 li[j], hi[j], mi[j],
6917 const bool flag_face = (j==2);
6918 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
6919 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
6923 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6929 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6930 const bool twopass_struct = structural_uscalar_dynamic_type.
finit_par(
"_twopass");
6931 if (twopass_visc || twopass_struct)
6933 if (!turbulent_viscosity)
6935 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'lillymixtedynamic' en ayant pas de viscosite turbulente" << finl;
6938 if (!structural_uscalar)
6940 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'lillymixtedynamic' en ayant pas de modele structurel" << finl;
6944 Nom visc_dynamic_type;
6945 Nom struct_dynamic_type;
6948 Cout <<
"Second pass, dynamic correction of constant: uscalar, viscosity" << finl;
6949 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6950 struct_dynamic_type =
Nom(
"not_dynamic");
6954 Cout <<
"Second pass, dynamic correction of constant: uscalar, structural" << finl;
6955 visc_dynamic_type =
Nom(
"not_dynamic");
6956 struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"_twopass");
6959 modification_modele_dynamic_uscalar_scalar(anisotropic,
6961 struct_dynamic_type,
6962 velocity, velocity_filtre,
6963 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6964 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6965 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6966 kernel, tmp_b, tmp_a,
6967 constante_modele, ml,
6968 turbulent_viscosity, turbulent_mu, turbulent_mu_filtre,
6969 structural_uscalar, structural_uscalar_vector, structural_uscalar_filtre_vector);
6972 if ((!visc_reconnu) && (!struct_reconnu) && (!vectorial_struct) && (!twopass_visc) && (!twopass_struct))
6974 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6981void modification_modele_dynamic_uscalar_vector(
const bool anisotropic,
6982 const Nom& turbulent_viscosity_dynamic_type,
6983 const Nom& structural_uscalar_dynamic_type,
6984 const IJK_Field_vector3_double& velocity,
6985 const IJK_Field_vector3_double& velocity_filtre,
6986 const IJK_Field_double& scalar,
6987 const IJK_Field_double& scalar_filtre,
6988 double scalar_kmin,
double scalar_kmax,
6989 const ArrOfDouble_with_ghost& delta_z,
6990 const double facteur_delta_x,
6991 const double facteur_delta_y,
6992 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6993 const double facteur_delta_filtre_x,
6994 const double facteur_delta_filtre_y,
6995 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6999 ArrOfDouble_with_ghost& constante_modele,
7001 const int turbulent_viscosity,
7002 IJK_Field_vector3_double& turbulent_mu_vector,
7003 IJK_Field_vector3_double& turbulent_mu_filtre_vector,
7004 const int structural_uscalar,
7005 IJK_Field_vector3_double& structural_uscalar_vector,
7006 IJK_Field_vector3_double& structural_uscalar_filtre_vector)
7008 IJK_Field_double& turbulent_mu_x = turbulent_mu_vector[0];
7009 IJK_Field_double& turbulent_mu_y = turbulent_mu_vector[1];
7010 IJK_Field_double& turbulent_mu_z = turbulent_mu_vector[2];
7012 IJK_Field_double& turbulent_mu_filtre_x = turbulent_mu_filtre_vector[0];
7013 IJK_Field_double& turbulent_mu_filtre_y = turbulent_mu_filtre_vector[1];
7014 IJK_Field_double& turbulent_mu_filtre_z = turbulent_mu_filtre_vector[2];
7016 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
7017 && structural_uscalar_dynamic_type ==
Nom(
"not_dynamic") )
7023 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
7024 if (turbulent_viscosity)
7026 for (
int j=0 ; j<3 ; j++)
7028 ghost_size_filter = 1 + kernel->ghost_size();
7029 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
7035 if (structural_uscalar)
7037 for (
int j=0 ; j<3 ; j++)
7039 ghost_size_filter = 1 + kernel->ghost_size();
7040 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
7046 const bool vectorial_visc = turbulent_viscosity_dynamic_type.
finit_par(
"vectorial");
7047 const bool vectorial_struct = structural_uscalar_dynamic_type.
finit_par(
"vectorial");
7048 const bool vectorial = vectorial_visc || vectorial_struct;
7050 calculer_ml_dynamic_uscalar_vector(anisotropic, vectorial,
7051 velocity, velocity_filtre,
7052 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
7053 turbulent_viscosity,
7057 turbulent_mu_filtre_x,
7058 turbulent_mu_filtre_y,
7059 turbulent_mu_filtre_z,
7061 structural_uscalar_vector,
7062 structural_uscalar_filtre_vector,
7063 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
7064 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
7065 kernel, tmp_b, tmp_a,
7077 ArrOfDouble& moy_li = ml[0][6];
7078 ArrOfDouble& moy_mi = ml[1][6];
7079 ArrOfDouble& moy_hi = ml[2][6];
7080 ArrOfDouble& moy_mimi = ml[3][6];
7081 ArrOfDouble& moy_hihi = ml[4][6];
7082 ArrOfDouble& moy_mili = ml[5][6];
7083 ArrOfDouble& moy_hili = ml[6][6];
7084 ArrOfDouble& moy_mihi = ml[7][6];
7086 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
7087 Nom(
"uscalar, viscosity"),
7088 moy_li, moy_mi, moy_hi,
7096 for (
int j=0 ; j<3 ; j++)
7098 const bool flag_face =
false;
7099 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_vector[j]);
7100 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_vector[j]);
7104 const bool struct_reconnu = calculer_constante_modele(structural_uscalar_dynamic_type,
7105 Nom(
"uscalar, structural"),
7106 moy_li, moy_hi, moy_mi,
7114 for (
int j=0 ; j<3 ; j++)
7116 const bool flag_face = (j==2);
7117 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
7118 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
7124 Nom visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"vectorial");
7125 for (
int j=0 ; j<3 ; j++)
7127 const bool reconnu = calculer_constante_modele(visc_dynamic_type,
7128 Nom(
"uscalar, viscosity, vectorial, j= ") +
Nom(j),
7129 li[j], mi[j], hi[j],
7137 const bool flag_face =
false;
7138 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_vector[j]);
7139 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_vector[j]);
7143 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7149 if (vectorial_struct)
7151 Nom struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"vectorial");
7152 for (
int j=0 ; j<3 ; j++)
7154 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
7155 Nom(
"uscalar, structural, vectorial, j= ") +
Nom(j),
7156 li[j], hi[j], mi[j],
7164 const bool flag_face = (j==2);
7165 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
7166 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
7170 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7176 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
7177 const bool twopass_struct = structural_uscalar_dynamic_type.
finit_par(
"_twopass");
7178 if (twopass_visc || twopass_struct)
7180 if (!turbulent_viscosity)
7182 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'lillymixtedynamic' en ayant pas de viscosite turbulente" << finl;
7185 if (!structural_uscalar)
7187 Cerr <<
"Erreur : On ne devrait pas pouvoir rentrer dans une evaluation dynamique de la constante de type 'lillymixtedynamic' en ayant pas de modele structurel" << finl;
7191 Nom visc_dynamic_type;
7192 Nom struct_dynamic_type;
7195 Cout <<
"Second pass, dynamic correction of constant: uscalar, viscosity" << finl;
7196 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
7197 struct_dynamic_type =
Nom(
"not_dynamic");
7201 Cout <<
"Second pass, dynamic correction of constant: uscalar, structural" << finl;
7202 visc_dynamic_type =
Nom(
"not_dynamic");
7203 struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"_twopass");
7206 modification_modele_dynamic_uscalar_vector(anisotropic,
7208 struct_dynamic_type,
7209 velocity, velocity_filtre,
7210 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
7211 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
7212 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
7213 kernel, tmp_b, tmp_a,
7214 constante_modele, ml,
7215 turbulent_viscosity, turbulent_mu_vector, turbulent_mu_filtre_vector,
7216 structural_uscalar, structural_uscalar_vector, structural_uscalar_filtre_vector);
7219 if ((!visc_reconnu) && (!struct_reconnu) && (!vectorial_visc) && (!vectorial_struct) && (!twopass_visc) && (!twopass_struct))
7221 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7240 Nom ijk_splitting_name;
7279 Nom post_splitting_name =
"??";
7362 Nom geom_name_pour_delta =
Nom(
"__identique_au_maillage__");
7438 param.
ajouter(
"spectral_splitting", &post_splitting_name);
7461 param.
ajouter(
"ijk_grid_geometry_pour_delta", &geom_name_pour_delta);
7525 if (geom_name_pour_delta ==
Nom(
"__identique_au_maillage__"))
7533 Cerr <<
"Lecture de la taille du filtre depuis le Domaine_IJK " << geom_name_pour_delta <<
"." << finl;
7535 const double dx_maillage =
domaine_.get_constant_delta(DIRECTION_I);
7536 const double dy_maillage =
domaine_.get_constant_delta(DIRECTION_J);
7543 for (
int i=-2 ; i<
domaine_.get_nb_elem_local(DIRECTION_K)+2 ; i++)
7552 Cerr <<
" Error: (Inconsistent parameters) The keyword DEBIT_MASSIQUE cannot be used with TERME_SOURCE_ACCELERATION_CONdoubleANT." << finl;
7557 Cerr <<
"Simulation en mode : TERME SOURCE IMPOSE." << finl;
7561 Cerr <<
"Simulation en mode : DEBIT IMPOSE." << finl;
7568 Cerr <<
" You need to specify an dt_post_spectral X," <<
7569 " were X is the number of step between 2 post" << finl;
7572 else if ( (post_splitting_name ==
"??") )
7574 Cerr <<
" You need to specify an other splitting like : spectral_splitting post_splitting " << finl;
7575 Cerr <<
"in order to compute FFT on planes you must only split in z direction" << finl;
7580#if defined(WITH_FFTW)
7584 if (decoupage_selon_x_ou_y > 1 )
7586 Cerr <<
"In order to compute FFT on planes you must only split in z direction the spectral_splitting" << finl;
7590 Cerr <<
" Module FFTW desactive impossible de faire la FFT " << finl;
7601 if (decoupage_selon_x_ou_y > 1 )
7603 Cerr <<
"In order to save lata on planes you must only split in z direction the sauvegarde_splitting" << finl;
7608 Cerr <<
"Initialisation de la sauvegarde des lata par plan" << finl;
7620 Cerr <<
" Error: (Inconsistent parameters) The keyword LECTURE_POdouble_INdoubleANTANES_FILTRER_U, LECTURE_POdouble_INdoubleANTANES_FILTRER_RHO, LECTURE_POdouble_INdoubleANTANES_FILTRER_P and LECTURE_POdouble_INdoubleANTANES_FILTRER_TOUS cannot be used without the keyword LECTURE_POdouble_INdoubleANTANES." << finl;
7626 Cerr <<
"Erreur: TURBULENT_VISCOSITY_TENSOR_COEFFICIENTS doit etre un vecteur de 6 composantes (xx, xy, xz, yy, yz, zz)." << finl;
7631 Cerr <<
"Erreur: TURBULENT_VISCOSITY_TENSOR_COEFFICIENTS doit etre un vecteur de 3 composantes (x, y, z)." << finl;
7636 Cerr <<
"Erreur: sTRUCTURAL_UU_TENSOR_COEFFICIENTS doit etre un vecteur de 6 composantes (xx, xy, xz, yy, yz, zz)." << finl;
7641 Cerr <<
"Erreur: sTRUCTURAL_USCALAR_VECTOR_COEFFICIENTS doit etre un vecteur de 3 composantes (x, y, z)." << finl;
7659 Cerr <<
"Error: (Inconsistent parameters) "
7660 <<
"The TURBULENT_VISCOSITY flag was activated but no large eddy simulation formulation was specified. "
7661 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7666 Cerr <<
"Error: (Inconsistent parameters) "
7667 <<
"The TURBULENT_DIFFUSIVITY flag was activated but no large eddy simulation formulation was specified. "
7668 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7673 Cerr <<
"Error: (Inconsistent parameters) "
7674 <<
"The sTRUCTURAL_UU flag was activated but no large eddy simulation formulation was specified. "
7675 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7680 Cerr <<
"Error: (Inconsistent parameters) "
7681 <<
"The sTRUCTURAL_USCALAR flag was activated but no large eddy simulation formulation was specified. "
7682 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7690 Cerr <<
"Error: (Inconsistent parameters) "
7691 <<
"A LARGE_EDDY_SIMULATION_FORMULATION was specified but neither the TURBULENT_VISCOSITY flag, the TURBULENT_DIFFUSIVITY flag, the sTRUCTURAL_UU flag nor the sTRUCTURAL_USCALAR flag have been activated. "
7701 Cerr <<
"Error: (Inconsistent parameters) "
7702 <<
"A velocity turbulent diffusion type was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7708 Cerr <<
"Error: (Inconsistent parameters) "
7709 <<
"A subgrid viscosity model was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7715 Cerr <<
"Error: (Inconsistent parameters) "
7716 <<
"A subgrid viscosity model constant was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7725 Cerr <<
"Error: (Inconsistent parameters) "
7726 <<
"The TURBULENT_VISCOSITY flag expect a velocity turbulent diffusion type but no velocity turbulent diffusion type was specified. "
7727 <<
"To specify a velocity turbulent diffusion type, you may use the keyword TYPE_VELOCITY_TURBULENT_DIFFUSION with the parameters SIMPLE, SIMPLE_WITH_TRANSPOSE, FULL or NONE" << finl;
7732 Cerr <<
"Error: (Inconsistent parameters) "
7733 <<
"The TURBULENT_VISCOSITY flag expect a subgrid viscosity model but no model was specified. "
7734 <<
"To specify a model, you may use the keyword TURBULENT_VISCOSITY_MODEL with the parameters CONdoubleANT, UNSRHO, SMAGORINSKY, VREMAN, SIGMA, WALE, AMD, AMD_COMP, AMDNOCLIP, AMDSCALAR, AMDSCALARNOCLIP, RDS, VSS, KOBAYASHI or NONE." << finl;
7739 Cerr <<
"Error: (Inconsistent parameters) "
7740 <<
"The TURBULENT_VISCOSITY flag expect a subgrid viscosity model constant but no constant was specified. "
7741 <<
"To specify a constant, you may use the keyword TURBULENT_VISCOSITY_MODEL_CONdoubleANT." << finl;
7750 Cerr <<
"Error: (Inconsistent parameters) "
7751 <<
"A scalar turbulent diffusion type was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7757 Cerr <<
"Error: (Inconsistent parameters) "
7758 <<
"A subgrid diffusivity model was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7764 Cerr <<
"Error: (Inconsistent parameters) "
7765 <<
"A subgrid diffusivity model constant was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7774 Cerr <<
"Error: (Inconsistent parameters) "
7775 <<
"The TURBULENT_DIFFUSIVITY flag expect a scalar turbulent diffusion type but no scalar turbulent diffusion type was specified. "
7776 <<
"To specify a scalar turbulent diffusion type, you may use the keyword TYPE_SCALAR_TURBULENT_DIFFUSION with the parameters NORMAL, ANISOTROPIC or NONE" << finl;
7781 Cerr <<
"Error: (Inconsistent parameters) "
7782 <<
"The TURBULENT_DIFFUSIVITY flag expect a subgrid diffusivity model but no model was specified. "
7783 <<
"To specify a model, you may use the keyword TURBULENT_DIFFUSIVITY_MODEL with the parameters CONdoubleANT, UNSRHO, SMAGORINSKY, VREMAN, SIGMA, WALE, AMD, AMD_COMP, AMDNOCLIP, AMDSCALAR, AMDSCALARNOCLIP, RDS, VSS, KOBAYASHI or NONE." << finl;
7788 Cerr <<
"Error: (Inconsistent parameters) "
7789 <<
"The TURBULENT_DIFFUSIVITY flag expect a subgrid diffusivity model constant but no constant was specified. "
7790 <<
"To specify a constant, you may use the keyword TURBULENT_DIFFUSIVITY_MODEL_CONdoubleANT." << finl;
7799 Cerr <<
"Error: (Inconsistent parameters) "
7800 <<
"A structural model for uu was specified but the sTRUCTURAL_UU flag has not been activated. "
7806 Cerr <<
"Error: (Inconsistent parameters) "
7807 <<
"A structural model for uu constant was specified but the sTRUCTURAL_UU flag has not been activated. "
7816 Cerr <<
"Error: (Inconsistent parameters) "
7817 <<
"The sTRUCTURAL_UU flag expect a structural model but no model was specified. "
7818 <<
"To specify a model, you may use the keyword sTRUCTURAL_UU_MODEL with the parameters GRADIENT, GRADIENT_FILTRE, SU_LAPLACIEN_U, SIMILARITY or NONE." << finl;
7823 Cerr <<
"Error: (Inconsistent parameters) "
7824 <<
"The sTRUCTURAL_UU flag expect a structural model constant but no constant was specified. "
7825 <<
"To specify a constant, you may use the keyword sTRUCTURAL_UU_MODEL_CONdoubleANT." << finl;
7834 Cerr <<
"Error: (Inconsistent parameters) "
7835 <<
"A structural model for uscalar was specified but the sTRUCTURAL_USCALAR flag has not been activated. "
7841 Cerr <<
"Error: (Inconsistent parameters) "
7842 <<
"A structural model for uscalar constant was specified but the sTRUCTURAL_USCALAR flag has not been activated. "
7851 Cerr <<
"Error: (Inconsistent parameters) "
7852 <<
"The sTRUCTURAL_USCALAR flag expect a subgrid diffusivity model but no model was specified. "
7853 <<
"To specify a model, you may use the keyword sTRUCTURAL_USCALAR_MODEL with the parameters GRADIENT, GRADIENT_FILTRE, SIMILARITY or NONE." << finl;
7858 Cerr <<
"Error: (Inconsistent parameters) "
7859 <<
"The sTRUCTURAL_USCALAR flag expect a subgrid diffusivity model constant but no constant was specified. "
7860 <<
"To specify a constant, you may use the keyword sTRUCTURAL_USCALAR_MODEL_CONdoubleANT." << finl;
7951 "The boundary is oscillating at amplitude "
7953 <<
" and frequency "
7964 "Simulation in forced T bulk mode with value "
7992static void calculer_debit(
const IJK_Field_double& vx,
const IJK_Field_double& rho,
const ArrOfDouble_with_ghost& delta_z,
const double longeur_Lx_tot,
double& debit)
7994 const int ni = vx.
ni();
7995 const int nj = vx.
nj();
7996 const int nk = vx.
nk();
8002 for (
int k = 0; k < nk; k++)
8004 double somme_rhov = 0;
8005 for (
int j = 0; j < nj; j++)
8007 for (
int i = 0; i < ni; i++)
8009 double rhov = vx(i,j,k) * (rho(i-1,j,k) + rho(i,j,k)) * 0.5;
8015 double volume = dx * dy * delta_z[k];
8016 debit += volume * somme_rhov;
8025 debit = tmp[0] / longeur_Lx_tot;
8033 Cout <<
"DNS_QC_double::initialise()" << finl;
8036 Cerr.setf(ios::scientific);
8038 Cout.setf(ios::scientific);
8041 Cout <<
"precision de sortie du out et du err modifier" << finl;
8045 Cout <<
" Cp_gaz = " <<
Cp_gaz_
8062 int Nx_tot =
domaine_.get_nb_elem_tot(0) + 1;
8063 int Ny_tot =
domaine_.get_nb_elem_tot(1) + 1;
8064 int Nz_tot =
domaine_.get_nb_elem_tot(2) + 1;
8079 for (
int k = 0; k < nk; k++ )
8081 for (
int j = 0; j < nj; j++)
8083 for (
int i = 0; i < ni; i++)
8086 rho_(i,j,k) = Pth_sur_R / t;
8101 Cerr <<
"Erreur dans l'initialisation: la vitesse initiale doit etre fournie avec trois expressions" << finl;
8107 for (
int i = 0; i < 3; i++)
8119 rho_.echange_espace_virtuel(1);
8130 Cerr <<
" les stats ne sont pas converger pas de productions spectrale allowed." << finl;
8157static void force_zero_normal_velocity_on_walls(IJK_Field_double& vz)
8159 const int nj = vz.
nj();
8160 const int ni = vz.
ni();
8165 for (
int j = 0; j < nj; j++)
8167 for (
int i = 0; i < ni; i++)
8173 if (kmin + vz.
nk() == nktot)
8175 const int k = vz.
nk()-1;
8176 for (
int j = 0; j < nj; j++)
8178 for (
int i = 0; i < ni; i++)
8186static double calculer_dtstab_diffusion_temperature_local(
const IJK_Field_double& lambda,
8187 const IJK_Field_double& rho,
8188 const double cp_gaz)
8196 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8199 double inv_dtstab = 1e-20;
8200 for (
int k = 0; k < nk; k++)
8202 const double dz = delta_z[k + k_offset];
8203 const double coeff = 2. * (1./(dx*dx) + 1./(dy*dy) + 1./(dz*dz)) / cp_gaz;
8204 for (
int j = 0; j < nj; j++)
8206 for (
int i = 0; i < ni; i++)
8208 double dt = lambda(i,j,k) / rho(i,j,k) * coeff;
8209 inv_dtstab = max(dt, inv_dtstab);
8213 return 1. / inv_dtstab;
8216static double calculer_dtstab_diffusion_temperature_local_sans_rho(
const bool anisotropic,
8217 const IJK_Field_double& lambda_x,
8218 const IJK_Field_double& lambda_y,
8219 const IJK_Field_double& lambda_z,
8220 const double cp_gaz)
8228 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8231 double inv_dtstab = 1e-20;
8232 for (
int k = 0; k < nk; k++)
8234 const double dz = delta_z[k + k_offset];
8240 coeff_x = 2. * (1./(dx)) / cp_gaz;
8241 coeff_y = 2. * (1./(dy)) / cp_gaz;
8242 coeff_z = 2. * (1./(dz)) / cp_gaz;
8246 coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8247 coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8248 coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8250 for (
int j = 0; j < nj; j++)
8252 for (
int i = 0; i < ni; i++)
8254 double dt_x = lambda_x(i,j,k) * coeff_x;
8255 double dt_y = lambda_y(i,j,k) * coeff_y;
8256 double dt_z = lambda_z(i,j,k) * coeff_z;
8257 double dt = dt_x + dt_y + dt_z;
8258 inv_dtstab = max(dt, inv_dtstab);
8262 return 1. / inv_dtstab;
8265static double calculer_dtstab_diffusion_temperature_local_avec_turbulent_favre(
const bool anisotropic,
8266 const IJK_Field_double& lambda,
8267 const IJK_Field_double& lambda_turbulent_xx,
8268 const IJK_Field_double& lambda_turbulent_xy,
8269 const IJK_Field_double& lambda_turbulent_xz,
8270 const IJK_Field_double& lambda_turbulent_yy,
8271 const IJK_Field_double& lambda_turbulent_yz,
8272 const IJK_Field_double& lambda_turbulent_zz,
8273 const IJK_Field_double& rho,
8274 const double cp_gaz)
8276 const IJK_Field_double& lambda_turbulent_yx = lambda_turbulent_xy;
8277 const IJK_Field_double& lambda_turbulent_zx = lambda_turbulent_xz;
8278 const IJK_Field_double& lambda_turbulent_zy = lambda_turbulent_yz;
8286 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8289 double inv_dtstab = 1e-20;
8290 for (
int k = 0; k < nk; k++)
8292 const double dz = delta_z[k + k_offset];
8293 const double coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8294 const double coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8295 const double coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8311 for (
int j = 0; j < nj; j++)
8313 for (
int i = 0; i < ni; i++)
8315 double dt_xx = ( lambda(i,j,k) + lambda_turbulent_xx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8316 double dt_xy = ( lambda(i,j,k) + lambda_turbulent_xy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8317 double dt_xz = ( lambda(i,j,k) + lambda_turbulent_xz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8318 double dt_yx = ( lambda(i,j,k) + lambda_turbulent_yx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8319 double dt_yy = ( lambda(i,j,k) + lambda_turbulent_yy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8320 double dt_yz = ( lambda(i,j,k) + lambda_turbulent_yz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8321 double dt_zx = ( lambda(i,j,k) + lambda_turbulent_zx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8322 double dt_zy = ( lambda(i,j,k) + lambda_turbulent_zy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8323 double dt_zz = ( lambda(i,j,k) + lambda_turbulent_zz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8324 double dt_x = dt_xx + dt_xy + dt_xz;
8325 double dt_y = dt_yx + dt_yy + dt_yz;
8326 double dt_z = dt_zx + dt_zy + dt_zz;
8327 double dt = max(dt_x , max(dt_y, dt_z));
8328 inv_dtstab = max(dt, inv_dtstab);
8332 return 1. / inv_dtstab;
8335static double calculer_dtstab_diffusion_temperature_local_avec_turbulent_velocity(
const bool anisotropic,
8336 const IJK_Field_double& lambda,
8337 const IJK_Field_double& lambda_turbulent_xx,
8338 const IJK_Field_double& lambda_turbulent_xy,
8339 const IJK_Field_double& lambda_turbulent_xz,
8340 const IJK_Field_double& lambda_turbulent_yy,
8341 const IJK_Field_double& lambda_turbulent_yz,
8342 const IJK_Field_double& lambda_turbulent_zz,
8343 const IJK_Field_double& rho,
8344 const double cp_gaz)
8346 const IJK_Field_double& lambda_turbulent_yx = lambda_turbulent_xy;
8347 const IJK_Field_double& lambda_turbulent_zx = lambda_turbulent_xz;
8348 const IJK_Field_double& lambda_turbulent_zy = lambda_turbulent_yz;
8356 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8359 double inv_dtstab = 1e-20;
8360 for (
int k = 0; k < nk; k++)
8362 const double dz = delta_z[k + k_offset];
8363 const double coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8364 const double coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8365 const double coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8381 for (
int j = 0; j < nj; j++)
8383 for (
int i = 0; i < ni; i++)
8385 double dt_xx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xx(i,j,k)*fac_x ) * coeff_x;
8386 double dt_xy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xy(i,j,k)*fac_y ) * coeff_y;
8387 double dt_xz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xz(i,j,k)*fac_z ) * coeff_z;
8388 double dt_yx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yx(i,j,k)*fac_x ) * coeff_x;
8389 double dt_yy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yy(i,j,k)*fac_y ) * coeff_y;
8390 double dt_yz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yz(i,j,k)*fac_z ) * coeff_z;
8391 double dt_zx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zx(i,j,k)*fac_x ) * coeff_x;
8392 double dt_zy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zy(i,j,k)*fac_y ) * coeff_y;
8393 double dt_zz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zz(i,j,k)*fac_z ) * coeff_z;
8394 double dt_x = dt_xx + dt_xy + dt_xz;
8395 double dt_y = dt_yx + dt_yy + dt_yz;
8396 double dt_z = dt_zx + dt_zy + dt_zz;
8397 double dt = max(dt_x , max(dt_y, dt_z));
8398 inv_dtstab = max(dt, inv_dtstab);
8402 return 1. / inv_dtstab;
8412 const double dx =
velocity_[2].get_domaine().get_constant_delta(DIRECTION_I);
8413 const double dy =
velocity_[2].get_domaine().get_constant_delta(DIRECTION_J);
8416 const double surface = 1. / (ni*nj);
8417 const int offset =
temperature_.get_domaine().get_offset_local(DIRECTION_K);
8421 ArrOfDouble flux_cv(nktot);
8422 ArrOfDouble flux_cd(nktot);
8427 for (
int k = 0; k < nk; k++)
8429 double partiel_flux_cv = 0.;
8430 double partiel_flux_cd = 0.;
8432 if ( (k + offset) == (nktot-1) )
8435 for (
int j = 0; j < nj; j++)
8437 for (
int i = 0; i < ni; i++)
8443 else if ( (k + offset) == 0 )
8446 for (
int j = 0; j < nj; j++)
8448 for (
int i = 0; i < ni; i++)
8458 for (
int j = 0; j < nj; j++)
8460 for (
int i = 0; i < ni; i++)
8466 const double lambda_face = (L0 * L1) / ( d0 * L0 + d1 *L1);
8471 double flux = lambda_face * ( T_inf - T_sup);
8473 partiel_flux_cv += v * facteur;
8474 partiel_flux_cd += flux;
8478 flux_cv[k+offset] = partiel_flux_cv;
8479 flux_cd[k+offset] = partiel_flux_cd;
8497 Cerr <<
"T= " <<
current_time_ <<
" Checkpointing dans le fichier " << fichier_sauvegarde << finl;
8498 SFichier fichier(fichier_sauvegarde);
8500 fichier.
setf(std::ios_base::scientific);
8506 <<
" fichier_reprise_vitesse " << lata_name <<
"\n";
8507 fichier <<
" fichier_reprise_rho " << lata_name <<
"\n"
8508 <<
" timestep_reprise_vitesse " << (int) 1 <<
"\n"
8509 <<
" timestep_reprise_rho " << (
int) 1 <<
"\n";
8518 Nom lata_name(fichier_sauvegarde);
8519 lata_name +=
".lata";
8524 for (
int i = 0; i < 3; i++)
8536 if (ni > 0 || nj > 0 || nk > 0)
8546 dumplata_header(lata_name,
rho_ );
8549 dumplata_scalar(lata_name,
"RHO",
rho_, 0);
8559 Cerr <<
"Reprise du calcul dans le fichier " << fichier_reprise << finl;
8571 Cerr <<
"Avant ajout statistiques" << finl;
8573 Cerr <<
"Apres ajout statistiques" << finl;
8587 for (
int k = 0 ; k < nk ; k++)
8589 for (
int j = 0 ; j < nj ; j++)
8591 for (
int i = 0 ; i < ni ; i++)
8613 Nom nom_fichier_sauvegarde(lata_name);
8615 nom_fichier_sauvegarde +=
Nom(
".sauv");
8617 Nom lata_name_lata(nom_fichier_sauvegarde);
8618 lata_name_lata +=
".lata";
8622 dumplata_header(lata_name_lata,
rho_ );
8687 Cerr <<
" Martinn n= " << n << finl;
8707 if (ni > 0 || nj > 0 || nk > 0)
8730 if (ni > 0 || nj > 0 || nk > 0)
8753 if (ni > 0 || nj > 0 || nk > 0)
8777 if (ni > 0 || nj > 0 || nk > 0)
8784 dumplata_scalar(lata_name_lata,
"PRESSURE",
pressure_, 0);
8799 if (ni > 0 || nj > 0 || nk > 0)
8806 dumplata_scalar(lata_name_lata,
"TEMPERATURE",
temperature_, 0);
8821 if (ni > 0 || nj > 0 || nk > 0)
8823 dumplata_scalar_parallele_plan(lata_name_lata,
"RHO",
rho_sauvegarde_, 0);
8828 dumplata_scalar(lata_name_lata,
"RHO",
rho_, 0);
8843 if (ni > 0 || nj > 0 || nk > 0)
8865 if (ni > 0 || nj > 0 || nk > 0)
8876 n--,dumplata_scalar(lata_name_lata,
"PRESSURE_RHS",
pressure_rhs_, 0);
8880 n--,dumplata_scalar(lata_name_lata,
"U_DIV_RHO_U",
u_div_rho_u_, 0);
8882 n--,dumplata_scalar(lata_name_lata,
"DRHO_DT",
d_rho_, 0);
8884 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_MU",
turbulent_mu_, 0);
8898 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_KAPPA",
turbulent_kappa_, 0);
8926 n--,dumplata_scalar(lata_name_lata,
"RHO_FILTRE",
rho_filtre_, 0);
8971 Cerr <<
" Martinn n2= " << n << finl;
8972 Cerr <<
"Il y a des noms de champs a postraiter inconnus ou dupliques dans la liste de champs a postraiter"
8981 Nom nom_fichier(
"moyenne_spatiale_");
8982 nom_fichier +=
Nom(current_time);
8983 nom_fichier +=
Nom(
".txt");
8986 f.
setf(ios::scientific);
8992 Nom nom_fichier_ec(
"spatiale_ec_");
8993 nom_fichier_ec +=
Nom(current_time);
8994 nom_fichier_ec +=
Nom(
".txt");
8997 fk.
setf(ios::scientific);
9005 Nom nom_fichier(
"statistiques_");
9006 nom_fichier +=
Nom(current_time);
9007 nom_fichier +=
Nom(
".txt");
9010 fs.
setf(ios::scientific);
9017 Nom nom_fichier(
"stat_ec_");
9018 nom_fichier +=
Nom(current_time);
9019 nom_fichier +=
Nom(
".txt");
9022 fk.
setf(ios::scientific);
9034 Nom nom_fichier_sauvegarde(lata_name);
9036 nom_fichier_sauvegarde +=
Nom(
".sauv");
9038 Nom lata_name_lata(nom_fichier_sauvegarde);
9039 lata_name_lata +=
".lata";
9043 dumplata_header(lata_name_lata,
rho_ );
9108 Cerr <<
" Martinn n= " << n << finl;
9128 if (ni > 0 || nj > 0 || nk > 0)
9151 if (ni > 0 || nj > 0 || nk > 0)
9174 if (ni > 0 || nj > 0 || nk > 0)
9198 if (ni > 0 || nj > 0 || nk > 0)
9205 dumplata_scalar(lata_name_lata,
"PRESSURE",
pressure_, 0);
9220 if (ni > 0 || nj > 0 || nk > 0)
9227 dumplata_scalar(lata_name_lata,
"TEMPERATURE",
temperature_, 0);
9242 if (ni > 0 || nj > 0 || nk > 0)
9244 dumplata_scalar_parallele_plan(lata_name_lata,
"RHO",
rho_sauvegarde_, 0);
9249 dumplata_scalar(lata_name_lata,
"RHO",
rho_, 0);
9264 if (ni > 0 || nj > 0 || nk > 0)
9286 if (ni > 0 || nj > 0 || nk > 0)
9297 n--,dumplata_scalar(lata_name_lata,
"PRESSURE_RHS",
pressure_rhs_, 0);
9301 n--,dumplata_scalar(lata_name_lata,
"U_DIV_RHO_U",
u_div_rho_u_, 0);
9303 n--,dumplata_scalar(lata_name_lata,
"DRHO_DT",
d_rho_, 0);
9305 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_MU",
turbulent_mu_, 0);
9319 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_KAPPA",
turbulent_kappa_, 0);
9347 n--,dumplata_scalar(lata_name_lata,
"RHO_FILTRE",
rho_filtre_, 0);
9392 Cerr <<
" Martinn n2= " << n << finl;
9393 Cerr <<
"Il y a des noms de champs a postraiter inconnus ou dupliques dans la liste de champs a postraiter"
9406 Nom nom_fichier(
"moyenne_spatiale_");
9407 nom_fichier +=
Nom(current_time);
9408 nom_fichier +=
Nom(
".txt");
9411 f.
setf(ios::scientific);
9417 Nom nom_fichier_ec(
"spatiale_ec_");
9418 nom_fichier_ec +=
Nom(current_time);
9419 nom_fichier_ec +=
Nom(
".txt");
9422 fk.
setf(ios::scientific);
9430 Nom nom_fichier(
"statistiques_");
9431 nom_fichier +=
Nom(current_time);
9432 nom_fichier +=
Nom(
".txt");
9435 fs.
setf(ios::scientific);
9442 Nom nom_fichier(
"stat_ec_");
9443 nom_fichier +=
Nom(current_time);
9444 nom_fichier +=
Nom(
".txt");
9447 fk.
setf(ios::scientific);
9455 Cerr <<
"IJK_problem_double::run()" << finl;
9458 Cerr <<
" pas de dt_start choisi, si initialisation d'un calcul il faut faire un dt_start petit ou une projection initiale si isotherme " << finl;
9461 Cerr <<
" Attention la convection de la vitesse est negligee " << finl;
9463 Cerr <<
" Attention la convection de la masse volumique est negligee " << finl;
9465 Cerr <<
" Attention la diffusion visqueuse est negligee " << finl;
9467 Cerr <<
" Attention la diffusion thermique est negligee " << finl;
9470 int ghost_size_filter = 0, ghost_size_d_velocity_tmp;
9480 Cerr <<
"Filter: The ghost size is " <<
kernel_->ghost_size() << finl;
9482 ghost_size_filter = 1 +
kernel_->ghost_size();
9485 int ghost_size_velocity =
flag_u_filtre_ ? max((
int) 2, ghost_size_filter) : 2;
9486 int ghost_size_rho =
flag_rho_filtre_ ? max((
int) 2, ghost_size_filter) : 2;
9570 bool save_current_timestep=
false;
9581 Cerr <<
"Taille du filtre explicite identique a celle du filtre." << finl;
9589 const double n_mailles =
kernel_->n_mailles();
9590 Cerr <<
"Taille du filtre explicite fixee a " << n_mailles <<
" mailles." << finl;
9598 for (
int i=0 ; i<18 ; i++)
9607 tmp_b_[i].allocate(ni, nj, ghost_size_filter, ghost_size_filter);
9608 tmp_a_[i].allocate(ni, ghost_size_filter, ghost_size_filter, ghost_size_filter);
9611 for (
int i=0; i<8; i++)
9613 for (
int j=0; j<7; j++)
9615 ml_[i][j].resize_array(nktot+1);
9808 const int nb_allocated_arrays = 21;
9809 Cerr <<
" Allocating " << nb_allocated_arrays <<
" arrays, approx total size= "
9810 << (double)(
unsigned long)
molecular_mu_.data().size_array() *
sizeof(double) * nb_allocated_arrays * 9.537E-07 <<
" MB per core" << finl;
9816 Cerr <<
"The diffusion is 'simple': the flux is 'molecular_mu * grad u'" << finl;
9822 Cerr <<
"The diffusion is 'simple_with_transpose': the flux is 'molecular_mu * (grad u + grad^T u)'" << finl;
9828 Cerr <<
"The diffusion is 'full': the flux is 'molecular_mu * (grad u + grad^T u - 2/3 * div u * Id)'" << finl;
9834 Cerr <<
"The diffusion is 'none': no molecular diffusion" << finl;
9838 Cerr <<
"Unknown velocity diffusion operator! " << finl;
9844 Cerr <<
"The velocity turbulent diffusion is 'simple': the flux is 'turbulent_mu * grad u'" << finl;
9850 Cerr <<
"The velocity turbulent diffusion is 'simple_with_transpose': the flux is 'turbulent_mu * (grad u + grad^T u)'" << finl;
9856 Cerr <<
"The velocity turbulent diffusion is 'full': the flux is 'turbulent_mu * (grad u + grad^T u - 2/3 * div u * Id)'" << finl;
9862 Cerr <<
"The velocity turbulent diffusion is 'simple_anisotropic': the flux is 'turbulent_mu^a * grad^a u' where (grad^a)_i = Delta_i (grad)_i" << finl;
9868 Cerr <<
"The velocity turbulent diffusion is 'simple_with_transpose_anisotropic': the flux is 'turbulent_mu^a * (grad^a u + grad^a^T u)' where (grad^a)_i = Delta_i (grad)_i" << finl;
9874 Cerr <<
"The velocity turbulent diffusion is 'full_anisotropic': the flux is 'turbulent_mu^a * (grad^a u + grad^a^T u - 2/3 * div^a u * Id)' where (grad^a)_i = Delta_i (grad)_i" << finl;
9880 Cerr <<
"The velocity turbulent diffusion is 'none': no turbulent diffusion" << finl;
9884 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
9890 Cerr <<
"A structural model will be added to the velocity turbulent diffusion. The structural uu tensor coefficients are:";
9904 Cerr <<
"A structural model will be added to the scalar turbulent diffusion. The structural uscalar vector coefficients are:"
9914 Cerr <<
"The scalar turbulent diffusion is 'normal': the flux is 'lambda * grad s'" << finl;
9919 Cerr <<
"The scalar turbulent diffusion is 'anisotropic': the flux is 'lambda^a * grad^a s' where (grad^a)_i = Delta_i (grad)_i" << finl;
9924 Cerr <<
"The scalar turbulent diffusion is 'none': no scalar turbulent diffusion" << finl;
9928 Cerr <<
"Unknown scalar turbulent diffusion operator! " << finl;
9935 IJK_Field_double* ptr_turbulent_mu_xx;
9936 IJK_Field_double* ptr_turbulent_mu_xy;
9937 IJK_Field_double* ptr_turbulent_mu_xz;
9938 IJK_Field_double* ptr_turbulent_mu_yy;
9939 IJK_Field_double* ptr_turbulent_mu_yz;
9940 IJK_Field_double* ptr_turbulent_mu_zz;
9950 Cerr <<
"The turbulent viscosity is tensorial. The turbulent viscosity tensor coefficients are:"
9967 Cerr <<
"The turbulent viscosity is not tensorial." << finl;
9970 IJK_Field_double& ref_turbulent_mu_xx = *ptr_turbulent_mu_xx;
9971 IJK_Field_double& ref_turbulent_mu_xy = *ptr_turbulent_mu_xy;
9972 IJK_Field_double& ref_turbulent_mu_xz = *ptr_turbulent_mu_xz;
9973 IJK_Field_double& ref_turbulent_mu_yy = *ptr_turbulent_mu_yy;
9974 IJK_Field_double& ref_turbulent_mu_yz = *ptr_turbulent_mu_yz;
9975 IJK_Field_double& ref_turbulent_mu_zz = *ptr_turbulent_mu_zz;
9980 IJK_Field_double* ptr_turbulent_kappa_x;
9981 IJK_Field_double* ptr_turbulent_kappa_y;
9982 IJK_Field_double* ptr_turbulent_kappa_z;
9989 Cerr <<
"The turbulent diffusivity is vectorial. The turbulent diffusivity vector coefficients are:"
10000 Cerr <<
"The turbulent diffusivity is not tensorial." << finl;
10003 IJK_Field_double& ref_turbulent_kappa_x = *ptr_turbulent_kappa_x;
10004 IJK_Field_double& ref_turbulent_kappa_y = *ptr_turbulent_kappa_y;
10005 IJK_Field_double& ref_turbulent_kappa_z = *ptr_turbulent_kappa_z;
10055 force_zero_normal_velocity_on_walls(
velocity_[2]);
10057 statistics().create_custom_counter(
"calcul dtstab QC",2,
"TrioCFD");
10058 statistics().create_custom_counter(
"update statistiques",2,
"TrioCFD");
10059 statistics().create_custom_counter(
"calcul terme acceleration",2,
"TrioCFD");
10060 statistics().create_custom_counter(
"checkpointing",2,
"TrioCFD");
10061 statistics().create_custom_counter(
"TF update",2,
"TrioCFD");
10068 rho_.echange_espace_virtuel(2);
10069 velocity_[0].echange_espace_virtuel(2);
10070 velocity_[1].echange_espace_virtuel(2);
10071 velocity_[2].echange_espace_virtuel(2);
10078 Cerr <<
"*****************************************************************************\n"
10079 <<
" Attention : projection du champ de vitesse initial sur div(u)=0\n"
10080 <<
"*****************************************************************************" << finl;
10088 velocity_[0].echange_espace_virtuel(1);
10089 velocity_[1].echange_espace_virtuel(1);
10090 velocity_[2].echange_espace_virtuel(1);
10096 ArrOfDouble tmp_size3(3);
10117 Cerr <<
" Post-traitement Spectral " << finl;
10118 Nom Nom_post_test =
"Spectrale";
10124 double previous_time = 0;
10131 Cerr <<
"*****************************************************************************\n"
10132 <<
" Attention : On ne fait que postraiter les statistiques depuis les lata\n"
10133 <<
"*****************************************************************************" << finl;
10136 statistics().start_timeloop();
10137 for (
int tstep = 0; tstep <
nb_timesteps_ && stop == 0; tstep++)
10139 statistics().start_time_step();
10140 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10150 statlata_fichier +=
Nom(
".sauv");
10173 const int flag_add = 0;
10174 velocity_[0].echange_espace_virtuel(ghost_size_velocity);
10175 velocity_[1].echange_espace_virtuel(ghost_size_velocity);
10176 velocity_[2].echange_espace_virtuel(ghost_size_velocity);
10184 const int flag_add = 0;
10185 rho_.echange_espace_virtuel(ghost_size_rho);
10191 const int flag_add = 0;
10192 pressure_.echange_espace_virtuel(ghost_size_pressure);
10196 rho_.echange_espace_virtuel(1);
10203 rho_.echange_espace_virtuel(2);
10204 velocity_[0].echange_espace_virtuel(2);
10205 velocity_[1].echange_espace_virtuel(2);
10206 velocity_[2].echange_espace_virtuel(2);
10212 velocity_[0].echange_espace_virtuel(1);
10213 velocity_[1].echange_espace_virtuel(1);
10214 velocity_[2].echange_espace_virtuel(1);
10216 statistics().begin_count(
"calcul dtstab QC",statistics().get_last_opened_counter_level()+1);
10220 double dt_diff = 1.e20;
10221 double dt_diff_mu = 1.e20;
10234 dt_diff = dt_diff_mu;
10239 dt_diff = dt_diff_mu;
10243 dt_diff_mu =
diff_qdm_negligeable_ ? 1.e20 : calculer_dtstab_diffusion_temperature_local_avec_turbulent_velocity(
flag_nu_anisotropic_,
molecular_mu_, ref_turbulent_mu_xx, ref_turbulent_mu_xy, ref_turbulent_mu_xz, ref_turbulent_mu_yy, ref_turbulent_mu_yz, ref_turbulent_mu_zz,
rho_, 1.);
10244 double dt_diff_kappa = calculer_dtstab_diffusion_temperature_local_sans_rho(
flag_kappa_anisotropic_, ref_turbulent_kappa_x, ref_turbulent_kappa_y, ref_turbulent_kappa_z, 1.);
10245 dt_diff = min(dt_diff_mu, dt_diff_kappa);
10250 double dt_diff_kappa = calculer_dtstab_diffusion_temperature_local_sans_rho(
flag_kappa_anisotropic_, ref_turbulent_kappa_x, ref_turbulent_kappa_y, ref_turbulent_kappa_z, 1.);
10251 dt_diff = min(dt_diff_mu, dt_diff_kappa);
10255 dt_diff_mu =
diff_qdm_negligeable_ ? 1.e20 : calculer_dtstab_diffusion_temperature_local_avec_turbulent_velocity(
flag_nu_anisotropic_,
molecular_mu_, ref_turbulent_mu_xx, ref_turbulent_mu_xy, ref_turbulent_mu_xz, ref_turbulent_mu_yy, ref_turbulent_mu_yz, ref_turbulent_mu_zz,
rho_, 1.);
10256 dt_diff = dt_diff_mu;
10260 Cerr <<
"This should not happen." << finl;
10265 statistics().end_count(
"calcul dtstab QC");
10266 tmp_size3[0] = dt_conv;
10267 tmp_size3[1] = dt_diff;
10268 tmp_size3[2] = dt_diff_mu;
10270 dt_conv = tmp_size3[0];
10271 dt_diff = tmp_size3[1];
10272 dt_diff_mu = tmp_size3[2];
10275 const double dt_theorique = 1. / (1./dt_conv + 1./dt_diff);
10296 save_current_timestep =
true;
10298 assert(
timestep_ > 0 &&
"You can't have a null timestep");
10302 <<
" dtconv= " << dt_conv
10303 <<
" dtdiff_t= " << dt_diff
10304 <<
" dtdiff_v= " << dt_diff_mu;
10305 Cout <<
" theorique_dt= " << dt_theorique
10306 <<
" dt_limited " << dt_regule
10326 statistics().begin_count(
"calcul terme acceleration",statistics().get_last_opened_counter_level()+1);
10333 double acceleration_du_dt = 0.;
10342 acceleration_du_dt = ecart_debit - ecart_ancien;
10352 double d = derivative_2nd_order_t /
timestep_;
10356 Cout <<
"Current heat sink: " <<
puit_
10359 <<
" Old T_bulk: " << old_t_bulk
10360 <<
" factor " << fac
10374 <<
" da/dt= " << acceleration_du_dt << finl;
10379 envoyer_broadcast(
puit_, 0);
10393 statistics().end_count(
"calcul terme acceleration");
10396 for (
int rk_step = 0; rk_step < 3; rk_step++)
10401 statistics().begin_count(STD_COUNTERS::postreatment,statistics().get_last_opened_counter_level()+1);
10403 statistics().end_count(STD_COUNTERS::postreatment);
10413 statistics().begin_count(STD_COUNTERS::postreatment,statistics().get_last_opened_counter_level()+1);
10414 statistics().begin_count(
"update statistiques",statistics().get_last_opened_counter_level()+1);
10425 statistics().end_count(
"update statistiques");
10426 statistics().begin_count(
"TF update",statistics().get_last_opened_counter_level()+1);
10429 int un_sur_20 = tstep%20;
10433 statistics().end_count(
"TF update");
10434 statistics().end_count(STD_COUNTERS::postreatment);
10459 envoyer_broadcast(stop, 0);
10466 statistics().begin_count(
"checkpointing",statistics().get_last_opened_counter_level()+1);
10468 statistics().end_count(
"checkpointing");
10473 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10475 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10478 if (save_current_timestep)
10480 save_current_timestep=
false;
10482 Cerr <<
"Yanis: Raw data cycle " << finl;
10484 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10486 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10499 Cerr <<
"Yanis: Raw data " << finl;
10500 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10502 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10506 Cerr <<
"Yanis: Stats " << finl;
10511 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10512 Nom Nom_post =
"Spectrale_";
10515 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10521 Cerr <<
"tstep " << tstep
10523 <<
" cpu_time " << statistics().get_time_since_last_open(STD_COUNTERS::timeloop) << finl;
10525 statistics().end_count(STD_COUNTERS::timeloop);
10526 statistics().end_time_step(tstep);
10528 statistics().end_timeloop();
10529 statistics().print_TU_files(
"Time loop statistics");
10534int calculer_k_pour_bord(
const IJK_Field_double& temperature,
const bool bord_kmax)
10557 if (kmin + temperature.
nk() == nktot)
10560 k = temperature.
nk() - 1;
10574int calculer_flux_thermique_bord(
const IJK_Field_double& temperature,
10575 const double lambda_de_t_paroi,
10576 const int turbulent_diffusivity,
10577 const IJK_Field_double& lambda_turbulent,
10578 const int flag_lambda_anisotropic,
10579 const int structural_uscalar,
10580 const IJK_Field_double& structural_uscalar_z,
10581 const double T_paroi_impose,
10582 IJK_Field_local_double& flux_bord,
10583 const bool bord_kmax)
10586 int k = calculer_k_pour_bord(temperature, bord_kmax);
10591 const int ni = temperature.
ni();
10592 const int nj = temperature.
nj();
10596 const double delta_k = geometry.
get_delta(DIRECTION_K)[k + kmin];
10599 for (
int j = 0; j < nj; j++)
10601 for (
int i = 0; i < ni; i++)
10603 const int sens = bord_kmax ? -1 : 1;
10607 const double xf_0 = coord_z[k+kmin+bord_kmax];
10608 const double xf_1 = coord_z[k+kmin+bord_kmax+sens*1];
10609 const double xf_2 = coord_z[k+kmin+bord_kmax+sens*2];
10611 const double x_p = xf_0;
10612 const double x_0 = 0.5*(xf_0+xf_1);
10613 const double x_1 = 0.5*(xf_1+xf_2);
10615 double T_p = T_paroi_impose;
10617 const double T_0 = temperature(i,j,k);
10618 const double T_1 = temperature(i,j,k+sens*1);
10619 double derivee_premiere = (x_1-x_p)*(x_0-x_p)/((x_0-x_p)-(x_1-x_p))*(T_1/((x_1-x_p)*(x_1-x_p))-T_0/((x_0-x_p)*(x_0-x_p))-T_p*(((x_0-x_p)*(x_0-x_p))-((x_1-x_p)*(x_1-x_p)))/(((x_0-x_p)*(x_0-x_p))*((x_1-x_p)*(x_1-x_p))));
10623 if (turbulent_diffusivity && (!flag_lambda_anisotropic))
10625 l = lambda_turbulent(i,j,k) + lambda_de_t_paroi;
10627 else if (turbulent_diffusivity && flag_lambda_anisotropic)
10629 l = delta_k*lambda_turbulent(i,j,k) + lambda_de_t_paroi;
10633 l = lambda_de_t_paroi;
10645 if (structural_uscalar)
10647 const double s = structural_uscalar_z(i,j,k);
10654 flux_bord(i,j,0) = flux;
10663 IJK_Field_double& temperature,
10664 const int turbulent_diffusivity,
10665 const IJK_Field_double& lambda_turbulent,
10666 const int flag_lambda_anisotropic,
10667 const int structural_uscalar,
10668 const IJK_Field_double& structural_uscalar_z,
10669 const double P_th_initial,
10670 double& P_th_final,
10671 const double fractionnal_timestep,
10672 double& d_Pth_divise_par_gammamoins1)
const
10674 IJK_Field_local_double flux_bord;
10676 const int imax = temperature.
ni();
10677 const int jmax = temperature.
nj();
10679 double P_th = P_th_initial;
10681 const int max_point_fixe = 3;
10682 double somme_flux_entrants;
10684 for (
int point_fixe_iter = 0; point_fixe_iter < max_point_fixe; point_fixe_iter++)
10688 double somme_flux_kmin = 0.;
10689 double somme_flux_kmax = 0.;
10690 for (
int plan_cl = 0; plan_cl < 2; plan_cl++)
10692 double somme_flux = 0.;
10694 int k = calculer_k_pour_bord(temperature, plan_cl);
10697 for (
int j = 0; j < jmax; j++)
10699 for (
int i = 0; i < imax; i++)
10707 calculer_flux_thermique_bord(temperature, lambda_de_t_paroi,
10708 0, lambda_turbulent, flag_lambda_anisotropic,
10709 0, structural_uscalar_z,
10710 T_paroi_impose, flux_bord, plan_cl);
10712 for (
int j = 0; j < jmax; j++)
10714 for (
int i = 0; i < imax; i++)
10716 somme_flux += flux_bord(i,j,0);
10722 somme_flux_kmax = somme_flux;
10724 somme_flux_kmin = somme_flux;
10730 somme_flux_entrants =0;
10732 somme_flux_entrants = somme_flux_kmin - somme_flux_kmax;
10735 assert_parallel(P_th);
10736 if (point_fixe_iter== max_point_fixe-1)
10738 Cout <<
"calcul_p_thermo iter " << point_fixe_iter <<
" flux k=0: " << somme_flux_kmin
10739 <<
" flux k=kmax: " << somme_flux_kmax <<
" P_th: " << P_th <<
" ";
10745 Cout <<
"dP_th/dt= " << d_Pth_divise_par_gammamoins1 * (
gamma_ - 1) << finl;
10748static void force_2d(IJK_Field_double& f)
10750 const int ni = f.
ni();
10751 const int nj = f.
nj();
10752 const int nk = f.
nk();
10753 for (
int k = 0; k < nk; k++)
10755 for (
int j = 1; j < nj; j++)
10757 for (
int i = 0; i < ni; i++)
10759 f(i, j, k) = f(i, 0, k);
10767 IJK_Field_vector3_double& velocity,
10768 const ArrOfDouble_with_ghost& delta_z,
10769 const double facteur_delta_x,
10770 const double facteur_delta_y,
10771 const ArrOfDouble_with_ghost& delta_z_pour_delta,
10775 IJK_Field_vector3_double& d_velocity_tmp,
10776 IJK_Field_vector3_double& d_velocity,
10777 IJK_Field_double& u_div_rho_u)
10779 int ghost_size_filter;
10780 int ghost_size_d_velocity_tmp;
10788 compute_divergence_times_constant(rho_v[0], rho_v[1], rho_v[2], 1., u_div_rho_u);
10791 multiplier_champ_rho_face_i(
false, u_div_rho_u, 1., velocity[0], d_velocity_tmp[0]);
10792 multiplier_champ_rho_face_j(
false, u_div_rho_u, 1., velocity[1], d_velocity_tmp[1]);
10793 multiplier_champ_rho_face_k(
false, u_div_rho_u, 1., 0., velocity[2], d_velocity_tmp[2]);
10795 ghost_size_filter = 1 + kernel->ghost_size();
10796 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
10801 const int flag_add = 1;
10802 filtrer_champ_elem(flag_add, d_velocity_tmp[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[0]);
10803 filtrer_champ_elem(flag_add, d_velocity_tmp[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[1]);
10804 filtrer_champ_face(flag_add, d_velocity_tmp[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[2]);
10811 compute_divergence_times_constant(rho_v[0], rho_v[1], rho_v[2], 1., u_div_rho_u);
10814 multiplier_champ_rho_face_i(
true, u_div_rho_u, 1., velocity[0], d_velocity[0]);
10815 multiplier_champ_rho_face_j(
true, u_div_rho_u, 1., velocity[1], d_velocity[1]);
10816 multiplier_champ_rho_face_k(
true, u_div_rho_u, 1., 0., velocity[2], d_velocity[2]);
10826 velocity[0], velocity[1], velocity[2],
10827 d_velocity[0], d_velocity[1], d_velocity[2]);
10833 velocity[0], velocity[1], velocity[2],
10834 d_velocity[0], d_velocity[1], d_velocity[2]);
10839 velocity[0], velocity[1], velocity[2],
10840 d_velocity[0], d_velocity[1], d_velocity[2],
10847 velocity[0], velocity[1], velocity[2],
10848 d_velocity[0], d_velocity[1], d_velocity[2],
10852 ghost_size_filter = 1 + kernel->ghost_size();
10853 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
10858 const int flag_add = 1;
10859 filtrer_champ_elem(flag_add, d_velocity_tmp[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[0]);
10860 filtrer_champ_elem(flag_add, d_velocity_tmp[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[1]);
10861 filtrer_champ_face(flag_add, d_velocity_tmp[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[2]);
10868 velocity[0], velocity[1], velocity[2],
10869 d_velocity[0], d_velocity[1], d_velocity[2]);
10874 velocity[0], velocity[1], velocity[2],
10875 d_velocity[0], d_velocity[1], d_velocity[2]);
10880 velocity[0], velocity[1], velocity[2],
10881 d_velocity[0], d_velocity[1], d_velocity[2],
10888 velocity[0], velocity[1], velocity[2],
10889 d_velocity[0], d_velocity[1], d_velocity[2],
10898 const IJK_Field_double& turbulent_mu_xx,
10899 const IJK_Field_double& turbulent_mu_xy,
10900 const IJK_Field_double& turbulent_mu_xz,
10901 const IJK_Field_double& turbulent_mu_yy,
10902 const IJK_Field_double& turbulent_mu_yz,
10903 const IJK_Field_double& turbulent_mu_zz,
10904 const ArrOfDouble_with_ghost& delta_z,
10905 const double facteur_delta_x,
10906 const double facteur_delta_y,
10907 const ArrOfDouble_with_ghost& delta_z_pour_delta,
10911 IJK_Field_vector3_double& d_velocity_tmp,
10912 IJK_Field_vector3_double& d_velocity)
10914 const IJK_Field_double& turbulent_mu_yx = turbulent_mu_xy;
10915 const IJK_Field_double& turbulent_mu_zx = turbulent_mu_xz;
10916 const IJK_Field_double& turbulent_mu_zy = turbulent_mu_yz;
10917 int ghost_size_filter;
10918 int ghost_size_d_velocity_tmp;
10933 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10947 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10954 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
10967 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10981 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10995 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11002 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11015 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11019 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
11023 ghost_size_filter = 1 + kernel->ghost_size();
11024 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
11029 const int flag_add = 1;
11030 filtrer_champ_elem(flag_add, d_velocity_tmp[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[0]);
11031 filtrer_champ_elem(flag_add, d_velocity_tmp[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[1]);
11032 filtrer_champ_face(flag_add, d_velocity_tmp[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[2]);
11048 d_velocity[0], d_velocity[1], d_velocity[2]);
11062 d_velocity[0], d_velocity[1], d_velocity[2]);
11069 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11082 d_velocity[0], d_velocity[1], d_velocity[2]);
11096 d_velocity[0], d_velocity[1], d_velocity[2]);
11110 d_velocity[0], d_velocity[1], d_velocity[2]);
11117 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11130 d_velocity[0], d_velocity[1], d_velocity[2]);
11134 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
11143 const ArrOfDouble_with_ghost& delta_z,
11144 const double facteur_delta_x,
11145 const double facteur_delta_y,
11146 const ArrOfDouble_with_ghost& delta_z_pour_delta,
11150 IJK_Field_vector3_double& d_velocity_tmp,
11151 IJK_Field_vector3_double& d_velocity)
11153 const IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
11154 const IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
11155 const IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
11156 const IJK_Field_double& structural_uu_yx = structural_uu_tensor[1];
11157 const IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
11158 const IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
11159 const IJK_Field_double& structural_uu_zx = structural_uu_tensor[2];
11160 const IJK_Field_double& structural_uu_zy = structural_uu_tensor[4];
11161 const IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
11162 int ghost_size_filter;
11163 int ghost_size_d_velocity_tmp;
11176 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11178 ghost_size_filter = 1 + kernel->ghost_size();
11179 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
11184 const int flag_add = 1;
11185 filtrer_champ_elem(flag_add, d_velocity_tmp[0], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[0]);
11186 filtrer_champ_elem(flag_add, d_velocity_tmp[1], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[1]);
11187 filtrer_champ_face(flag_add, d_velocity_tmp[2], delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta, kernel, tmp_b, tmp_a, d_velocity[2]);
11201 d_velocity[0], d_velocity[1], d_velocity[2]);
11206 const IJK_Field_double& turbulent_kappa_x,
11207 const IJK_Field_double& turbulent_kappa_y,
11208 const IJK_Field_double& turbulent_kappa_z,
11209 IJK_Field_double& d_rho,
11210 const IJK_Field_local_double& boundary_flux_kmin,
11211 const IJK_Field_local_double& boundary_flux_kmax)
11217 turbulent_kappa_z);
11220 boundary_flux_kmin, boundary_flux_kmax);
11226 turbulent_kappa_z);
11229 boundary_flux_kmin, boundary_flux_kmax);
11233 Cerr <<
"Unknown scalar turbulent diffusion operator! " << finl;
11243 statistics().create_custom_counter(
"qc convection rho",2,
"TrioCFD");
11244 statistics().create_custom_counter(
"qc calcul pthermo,t,rho_v,etc",2,
"TrioCFD");
11245 statistics().create_custom_counter(
"qc diffusion vitesse",2,
"TrioCFD");
11246 statistics().create_custom_counter(
"qc diffusion turbulente vitesse",2,
"TrioCFD");
11247 statistics().create_custom_counter(
"qc diffusion vitesse modele structurel",2,
"TrioCFD");
11248 statistics().create_custom_counter(
"qc convection vitesse",2,
"TrioCFD");
11249 statistics().create_custom_counter(
"qc rk3 update",2,
"TrioCFD");
11250 statistics().create_custom_counter(
"qc diffusion temperature",2,
"TrioCFD");
11251 statistics().create_custom_counter(
"qc turbulent diffusivity",2,
"TrioCFD");
11252 statistics().create_custom_counter(
"qc turbulent diffusivity structurel",2,
"TrioCFD");
11253 statistics().create_custom_counter(
"qc prepare rhs",2,
"TrioCFD");
11254 statistics().create_custom_counter(
"qc resoudre systeme",2,
"TrioCFD");
11255 statistics().create_custom_counter(
"qc ajouter grad p",2,
"TrioCFD");
11258 const double fractionnal_timestep = compute_fractionnal_timestep_rk3(total_timestep, rk_step);
11268 assert(rk_step>=0 && rk_step<3);
11279 statistics().begin_count(
"qc convection rho",statistics().get_last_opened_counter_level()+1);
11304 statistics().end_count(
"qc convection rho");
11312 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11317 turbulent_diffusivity_vector_coefficients_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11331 turbulent_diffusivity_model_,
turbulent_diffusivity_model_constant_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11341 statistics().end_count(
"qc turbulent diffusivity");
11346 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11358 statistics().end_count(
"qc turbulent diffusivity structurel");
11390 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11398 calculer_flux_thermique_bord(
rho_, 0.,
11402 calculer_flux_thermique_bord(
rho_, 0.,
11407 rho_.echange_espace_virtuel(1);
11424 calculer_flux_thermique_bord(
rho_, 0.,
11428 calculer_flux_thermique_bord(
rho_, 0.,
11433 rho_.echange_espace_virtuel(1);
11443 statistics().end_count(
"qc turbulent diffusivity");
11450 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11457 calculer_flux_thermique_bord(
rho_, 0.,
11461 calculer_flux_thermique_bord(
rho_, 0.,
11466 rho_.echange_espace_virtuel(1);
11482 statistics().end_count(
"qc turbulent diffusivity structurel");
11489 const int kmax =
d_rho_.nk();
11490 for (
int k = 0; k < kmax; k++)
11502 rho_.echange_espace_virtuel(1);
11504 statistics().begin_count(
"qc calcul pthermo,t,rho_v,etc",statistics().get_last_opened_counter_level()+1);
11508 double d_Pth_divise_par_gammamoins1;
11514 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11519 turbulent_diffusivity_vector_coefficients_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11533 turbulent_diffusivity_model_,
turbulent_diffusivity_model_constant_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11543 statistics().end_count(
"qc turbulent diffusivity");
11548 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11560 statistics().end_count(
"qc turbulent diffusivity structurel");
11592 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11619 statistics().end_count(
"qc turbulent diffusivity");
11624 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11638 statistics().end_count(
"qc turbulent diffusivity structurel");
11644 calcul_p_thermo_et_bilan(
rho_,
temperature_,
turbulent_diffusivity_,
turbulent_kappa_vector_[2],
flag_kappa_anisotropic_,
structural_uscalar_,
structural_uscalar_vector_[2], P_th_initial, P_th_final, fractionnal_timestep, d_Pth_divise_par_gammamoins1);
11648 calcul_p_thermo_et_bilan(
rho_,
temperature_,
turbulent_diffusivity_,
turbulent_kappa_,
flag_kappa_anisotropic_,
structural_uscalar_,
structural_uscalar_vector_[2], P_th_initial, P_th_final, fractionnal_timestep, d_Pth_divise_par_gammamoins1);
11667 statistics().end_count(
"qc calcul pthermo,t,rho_v,etc");
11670 rho_v_[0].echange_espace_virtuel(2);
11671 rho_v_[1].echange_espace_virtuel(2);
11672 rho_v_[2].echange_espace_virtuel(2);
11676 statistics().begin_count(
"qc diffusion vitesse",statistics().get_last_opened_counter_level()+1);
11699 velocity_[0].echange_espace_virtuel(1);
11700 velocity_[1].echange_espace_virtuel(1);
11701 velocity_[2].echange_espace_virtuel(1);
11717 Cerr <<
"Unknown velocity diffusion operator! " << finl;
11721 statistics().end_count(
"qc diffusion vitesse");
11730 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
11736 turbulent_viscosity_tensor_coefficients_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11750 turbulent_viscosity_model_,
turbulent_viscosity_model_constant_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
11760 statistics().end_count(
"qc diffusion turbulente vitesse");
11765 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
11775 statistics().end_count(
"qc diffusion vitesse modele structurel");
11807 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
11855 statistics().end_count(
"qc diffusion turbulente vitesse");
11864 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
11887 statistics().end_count(
"qc diffusion vitesse modele structurel");
11895 statistics().begin_count(
"qc convection vitesse",statistics().get_last_opened_counter_level()+1);
11910 statistics().end_count(
"qc convection vitesse");
11918 int dir = DIRECTION_J;
11920 const int ni = dv.
ni();
11921 const int nj = dv.
nj();
11924 for(
int k = 0; k < kmax; k++)
11926 for (
int j = 0; j < nj; j++)
11928 for (
int i = 0; i < ni; i++)
11930 const double volume = get_channel_control_volume(dv, k,
delta_z_local_);
11931 const double force = volumic_force * volume * (
rho_(i, j, k) +
rho_(i, j-1, k))*0.5;
11932 dv(i, j, k) += force;
11950 statistics().begin_count(
"qc rk3 update",statistics().get_last_opened_counter_level()+1);
11951 for (
int dir = 0; dir < 3; dir++)
11954 for (
int k = 0; k < kmax; k++)
11957 if (dir == DIRECTION_I)
11961 const double volume = get_channel_control_volume(dvx, k,
delta_z_local_);
11962 const double f = force_volumique * volume;
11963 const int ni = dvx.
ni();
11964 const int nj = dvx.
nj();
11966 for (
int j = 0; j < nj; j++)
11968 for (
int i = 0; i < ni; i++)
11975 if (dir == DIRECTION_K)
11979 const double volume = get_channel_control_volume(dvx, k,
delta_z_local_);
11980 const double f = force_volumique * volume;
11981 const int ni = dvx.
ni();
11982 const int nj = dvx.
nj();
11984 for (
int j = 0; j < nj; j++)
11986 for (
int i = 0; i < ni; i++)
11998 statistics().begin_count(
"qc convection vitesse",statistics().get_last_opened_counter_level()+1);
12010 statistics().end_count(
"qc convection vitesse");
12019 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
12025 turbulent_viscosity_tensor_coefficients_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
12039 turbulent_viscosity_model_,
turbulent_viscosity_model_constant_,
variation_cste_modele_fonctionnel_,
smoothing_center_fr_,
smoothing_factor_fr_,
Re_tau_fr_,
Re_tau_ch_,
pond_fr_,
pond_ch_,
center_constant_,
Lz_tot_,
12050 statistics().end_count(
"qc diffusion turbulente vitesse");
12055 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
12056 Cerr <<
"avant calculer_structural_uu" << finl;
12066 statistics().end_count(
"qc diffusion vitesse modele structurel");
12098 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
12137 statistics().end_count(
"qc diffusion turbulente vitesse");
12146 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
12162 statistics().end_count(
"qc diffusion vitesse modele structurel");
12170 force_zero_normal_velocity_on_walls(
d_velocity_[2]);
12172 for (
int dir = 0; dir < 3; dir++)
12175 for (
int k = 0; k < kmax; k++)
12182 statistics().end_count(
"qc rk3 update");
12216 statistics().begin_count(
"qc diffusion temperature",statistics().get_last_opened_counter_level()+1);
12228 statistics().end_count(
"qc diffusion temperature");
12236 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
12281 statistics().end_count(
"qc turbulent diffusivity");
12288 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
12315 statistics().end_count(
"qc turbulent diffusivity structurel");
12323 velocity_[0].echange_espace_virtuel(1);
12324 velocity_[1].echange_espace_virtuel(1);
12325 velocity_[2].echange_espace_virtuel(1);
12327 statistics().begin_count(
"qc prepare rhs",statistics().get_last_opened_counter_level()+1);
12334 const int ni =
rho_.ni();
12335 const int nj =
rho_.nj();
12336 const int nk =
rho_.nk();
12341 IJK_Field_double& rho =
rho_;
12344 for (
int k = 0; k < nk; k++)
12347 const double volume_maille = delta_x * delta_y * delta_z;
12348 const double facteur = d_Pth_divise_par_gammamoins1 * volume_maille;
12352 for (
int j = 0; j < nj; j++)
12354 for (
int i = 0; i < ni; i++)
12362 for (
int j = 0; j < nj; j++)
12364 for (
int i = 0; i < ni; i++)
12373 statistics().end_count(
"qc prepare rhs");
12377 statistics().begin_count(
"qc resoudre systeme",statistics().get_last_opened_counter_level()+1);
12380 statistics().end_count(
"qc resoudre systeme");
12385 statistics().begin_count(
"qc ajouter grad p",statistics().get_last_opened_counter_level()+1);
12386 add_gradient_times_constant_over_rho(
pressure_,
rho_, -fractionnal_timestep,
12388 statistics().end_count(
"qc ajouter grad p");
12392 double reference_pression = 0;
12394 Cout <<
"reference_pression= " << reference_pression << finl;
12398 rho_.echange_espace_virtuel(2);
12399 velocity_[0].echange_espace_virtuel(2);
12400 velocity_[1].echange_espace_virtuel(2);
12401 velocity_[2].echange_espace_virtuel(2);
12409 const double dx =
pressure_.get_domaine().get_constant_delta(DIRECTION_I);
12410 const double dy =
pressure_.get_domaine().get_constant_delta(DIRECTION_J);
12412 double integrale_pression = 0.;
12413 for (
int k = 0; k < nk; k++)
12415 for (
int j = 0; j < nj; j++)
12417 for (
int i = 0; i < ni; i++)
12423 ArrOfDouble tmp(1);
12424 tmp[0] = integrale_pression;
12434 for (
int k = 0; k < nk; k++)
12436 for (
int j = 0; j < nj; j++)
12438 for (
int i = 0; i < ni; i++)
12440 pressure_(i,j,k) -= reference_pression;
12448 const int ni =
rho_.ni();
12449 const int nj =
rho_.nj();
12450 const int nk =
rho_.nk();
12451 const double dx =
rho_.get_domaine().get_constant_delta(DIRECTION_I);
12452 const double dy =
rho_.get_domaine().get_constant_delta(DIRECTION_J);
12454 double integral_rho = 0.;
12455 for (
int k = 0; k < nk; k++)
12457 for (
int j = 0; j < nj; j++)
12459 for (
int i = 0; i < ni; i++)
12465 ArrOfDouble tmp(1);
12466 tmp[0] = integral_rho;
12478 const double dx =
temperature_.get_domaine().get_constant_delta(DIRECTION_I);
12479 const double dy =
temperature_.get_domaine().get_constant_delta(DIRECTION_J);
12481 double integral_t = 0.;
12482 for (
int k = 0; k < nk; k++)
12484 for (
int j = 0; j < nj; j++)
12486 for (
int i = 0; i < ni; i++)
12492 ArrOfDouble tmp(1);
12493 tmp[0] = integral_t;
12501 const int ni =
rho_.ni();
12502 const int nj =
rho_.nj();
12503 const int nk =
rho_.nk();
12504 const double dx =
rho_.get_domaine().get_constant_delta(DIRECTION_I);
12505 const double dy =
rho_.get_domaine().get_constant_delta(DIRECTION_J);
12507 double integral_t = 0.;
12508 double integral_rho = 0.;
12509 for (
int k = 0; k < nk; k++)
12511 for (
int j = 0; j < nj; j++)
12513 for (
int i = 0; i < ni; i++)
12520 ArrOfDouble tmp(1);
12521 tmp[0] = integral_t;
12526 ArrOfDouble tmp2(1);
12527 tmp2[0] = integral_rho;
IJK_Field_double velocity_elem_Y_sauvegarde_
bool disable_solveur_poisson_
Entree & interpreter(Entree &) override
IJK_Field_double velocity_elem_X_
bool diff_qdm_negligeable_
bool sauvegarde_post_instantanes_
IJK_Field_double pressure_sauvegarde_
OpConvQuickSharpIJK_double velocity_convection_op_quicksharp_
FixedVector< IJK_Field_double, 6 > turbulent_mu_tensor_
OpDiffTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_anisotropic_
IJK_Field_double molecular_mu_
double smoothing_factor_fr_
IJK_Field_vector3_double turbulent_kappa_vector_
double T_paroi_impose_kmin_
double lambda_de_t_paroi_kmin_
OpDiffStdWithLaminarTransposeAndDivergenceTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_full_anisotropic_
Nom turbulent_viscosity_dynamic_type_
int compteur_post_instantanes_
OpConvCentre2IJKScalar_double rho_convection_op_centre2_
bool flag_oscillating_boundary
OpConvAmontIJK_double velocity_convection_op_amont_
bool flag_nu_anisotropic_
ArrOfDouble turbulent_viscosity_tensor_coefficients_
OpDiffStdWithLaminarTransposeAndDivergenceTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_full_
double constante_specifique_gaz_
bool flag_structural_uu_tmp_
bool variation_cste_modele_fonctionnel_
IJK_Field_local_double boundary_flux_kmin_
IJK_Field_double velocity_elem_Z_
IJK_Field_double temperature_filtre_
Domaine_IJK post_splitting_
IJK_Field_double turbulent_mu_filtre_
IJK_Field_double turbulent_kappa_filtre_
double terme_source_acceleration_
IJK_Field_double turbulent_kappa_
bool diff_temp_negligeable_
Filter_kernel_base * kernel_
bool conv_rho_negligeable_
void calculer_velocity_elem()
double smoothing_center_fr_
IJK_Field_vector3_double turbulent_kappa_filtre_vector_
IJK_Field_double div_lambda_grad_T_volume_
bool turbulent_diffusivity_
Noms expression_vitesse_initiale_
IJK_Field_double pressure_rhs_
Motcles liste_post_instantanes_
FixedVector< IJK_Field_double, 6 > structural_uu_tensor_
IJK_Field_double rho_sauvegarde_
FixedVector< IJK_Field_double, 6 > turbulent_mu_filtre_tensor_
IJK_Field_vector3_double velocity_filtre_
IJK_Field_double temperature_
void compute_rho_bulk(double &rho_bulk_)
bool flag_filtrage_turbulent_diffusion_qdm_
void calculer_convection_vitesse(IJK_Field_vector3_double &rho_v, IJK_Field_vector3_double &velocity, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity, IJK_Field_double &u_div_rho_u)
void calculer_diffusion_scalar(const IJK_Field_double &rho, const IJK_Field_double &turbulent_kappa_x, const IJK_Field_double &turbulent_kappa_y, const IJK_Field_double &turbulent_kappa_z, IJK_Field_double &d_rho, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
double lambda_de_t_paroi_kmax_
IJK_Field_double u_div_rho_u_
int timestep_reprise_rho_
OpDiffStructuralOnlyZeroatwallIJK_double velocity_turbulent_diffusion_op_structural_
Statistiques_dns_qc_ijk statistiques_
OpDiffTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_
Boundary_Conditions boundary_conditions_
IJK_Field_vector3_double d_velocity_
IJK_Field_double molecular_lambda_sauvegarde_
OpConvCentre4IJK_double velocity_convection_op_
IJK_Field_local_double boundary_flux_kmax_
OpDiffStdWithLaminarTransposeTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_with_transpose_anisotropic_
Nom structural_uu_dynamic_type_
IJK_Field_double divergence_
double terme_source_acceleration_constant_
ArrOfDouble turbulent_diffusivity_vector_coefficients_
OpDiffStdWithLaminarTransposeTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_with_transpose_
bool flag_structural_uscalar_tmp_
IJK_Field_vector3_double structural_uscalar_filtre_vector_
double turbulent_viscosity_model_constant_
IJK_Field_double pressure_
bool flag_kappa_vectorial_
void calculer_moyennes_flux()
Nom sauvegarde_splitting_name_
FixedVector< IJK_Field_double, 6 > structural_uu_filtre_tensor_
IJK_Field_double rho_filtre_
IJK_Field_vector3_double velocity_sauvegarde_
bool projection_initiale_demandee_
bool lecture_post_instantanes_filtrer_p_
bool convection_velocity_centre2_
void save_stats(double current_time)
bool flag_save_each_delta_t_
double rho_paroi_impose_kmin_
bool flag_d_velocity_tmp_
Multigrille_Adrien poisson_solver_
bool lecture_post_instantanes_filtrer_rho_
bool convection_rho_centre4_
ArrOfDouble_with_ghost delta_z_local_pour_delta_filtre_
Nom expression_temperature_initiale_
double t_debut_statistiques_
OpDiffIJK_double velocity_diffusion_op_simple_
void ecrire_fichier_sauv(const char *fichier_sauvegarde, const char *lata_name)
bool formulation_velocity_
OpDiffStdWithLaminarTransposeAndDivergenceIJK_double velocity_diffusion_op_full_
IJK_Field_double turbulent_mu_
bool conv_qdm_negligeable_
double T_paroi_impose_kmax_
void sauvegarder_qc(const char *fichier_sauvegarde)
IJK_Field_double temperature_sauvegarde_
OpConvCentre2IJK_double velocity_convection_op_centre_2_
Nom turbulent_diffusivity_model_
bool flag_structural_uscalar_filtre_
double structural_uu_model_constant_
OpConvAmontIJK_double rho_convection_op_amont_
int timestep_reprise_vitesse_
bool convection_rho_centre2_
OpDiffStructuralOnlyIJKScalar_double operateur_diffusion_temperature_structural_
void compute_rho_t_bulk(double &rho_bulk_, double &t_bulk_)
OpConvCentre4IJK_double rho_convection_op_centre4_
bool flag_turbulent_mu_filtre_
double rho_paroi_impose_kmax_
Nom large_eddy_simulation_formulation_
FixedVector< IJK_Field_local_double, 18 > tmp_a_
void save_raw_data(const char *lata_name, double current_time)
IJK_Field_vector3_double rho_v_
double structural_uscalar_model_constant_
Nom type_velocity_diffusion_
bool flag_structural_uu_filtre_
IJK_Field_double velocity_elem_X_sauvegarde_
Nom turbulent_viscosity_model_
bool flag_kappa_anisotropic_
void calculer_turbulent_diffusion_vitesse(IJK_Field_vector3_double &velocity, const IJK_Field_double &turbulent_mu_xx, const IJK_Field_double &turbulent_mu_xy, const IJK_Field_double &turbulent_mu_xz, const IJK_Field_double &turbulent_mu_yy, const IJK_Field_double &turbulent_mu_yz, const IJK_Field_double &turbulent_mu_zz, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity)
Domaine_IJK sauvegarde_splitting_
bool flag_temperature_filtre_
OpDiffStdWithLaminarTransposeIJK_double velocity_diffusion_op_simple_with_transpose_
ArrOfDouble_with_ghost constante_modele_
Nom fichier_reprise_vitesse_
Nom type_scalar_turbulent_diffusion_
ArrOfDouble structural_uu_tensor_coefficients_
double dt_save_oscillating_cycle_raw_data_
bool lecture_post_instantanes_filtrer_tous_
void calculer_structural_diffusion_vitesse(IJK_Field_vector3_double &velocity, const FixedVector< IJK_Field_double, 6 > &structural_uu_tensor, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity)
double amplitude_oscillating_boundary_
bool flag_convection_qdm_sans_divergence_
double P_thermodynamique_
Nom turbulent_diffusivity_dynamic_type_
Nom structural_uscalar_model_
IJK_Field_vector3_double structural_uscalar_tmp_vector_
bool convection_rho_amont_
void compute_t_bulk(double &t_bulk_)
IJK_Field_double velocity_elem_Y_
FixedVector< FixedVector< ArrOfDouble, 7 >, 8 > ml_
OpDiffVectorialAnisotropicIJKScalar_double operateur_diffusion_turbulent_scalar_anisotropic_
FixedVector< Redistribute_Field, 3 > redistribute_to_sauvegarde_splitting_faces_
bool postraiter_sous_pas_de_temps_
int mode_terme_source_impose_
IJK_Field_double RK3_F_rho_
double facteur_delta_filtre_y_
void fixer_reference_pression(double &reference_pression)
ArrOfDouble_with_ghost delta_z_local_pour_delta_
void translation_pression(const double &reference_pression)
bool flag_convection_qdm_sans_rho_
void rk3_sub_step(const int rk_step, const double total_timestep)
IJK_Field_double molecular_mu_sauvegarde_
bool flag_filtrage_structural_diffusion_qdm_
void calcul_p_thermo_et_bilan(const IJK_Field_double &rho, IJK_Field_double &temperature, const int turbulent_diffusivity, const IJK_Field_double &lambda_turbulent, const int flag_lambda_anisotropic, const int structural_uscalar, const IJK_Field_double &structural_uscalar_z, const double P_th_initial, double &P_th_final, const double fractionnal_timestep, double &d_Pth_divise_par_gammamoins1) const
IJK_Field_vector3_double d_velocity_tmp_
double frequency_oscillating_boundary_
double terme_source_acceleration_z_
double turbulent_diffusivity_model_constant_
bool lecture_post_instantanes_
OpDiffVectorialIJKScalar_double operateur_diffusion_turbulent_scalar_
Redistribute_Field redistribute_to_sauvegarde_splitting_elem_
IJK_Field_vector3_double velocity_
double facteur_delta_filtre_x_
bool flag_filtrage_convection_qdm_
IJK_Field_vector3_double RK3_F_velocity_
FixedVector< IJK_Field_double, 6 > structural_uu_tmp_tensor_
IJK_Field_vector3_double structural_uscalar_vector_
double volume_total_domaine_
Nom type_velocity_turbulent_diffusion_
Fourier_trans partie_fourier_
bool flag_turbulent_kappa_filtre_
bool lecture_post_instantanes_filtrer_u_
IJK_Field_double molecular_lambda_
OpConvQuickIJKScalar_double rho_convection_op_
void posttraiter_champs_instantanes(const char *lata_name, double time)
ArrOfDouble structural_uscalar_vector_coefficients_
bool turbulent_viscosity_
FixedVector< IJK_Field_local_double, 18 > tmp_b_
Nom structural_uscalar_dynamic_type_
ArrOfDouble_with_ghost delta_z_local_
void reprendre_qc(const char *fichier_reprise)
IJK_Field_double velocity_elem_Z_sauvegarde_
bool convection_velocity_amont_
OpDiffIJKScalar_double operateur_diffusion_temperature_
bool convection_velocity_quicksharp_
static void verifier(const char *msg, const IJK_Field_float &)
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
int get_offset_local(int direction) const
Returns the local offset in requested direction.
int get_nb_elem_local(int direction) const
Returns the number of elements owned by this processor in the given direction.
int get_nb_items_local(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
double get_constant_delta(int direction) const
Returns the size of cells in a direction.
const ArrOfDouble & get_delta(int direction) const
Returns the array of mesh cell sizes in requested direction.
int get_nb_items_global(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
int get_nb_elem_tot(int direction) const
Returns the total (global) number of mesh cells in requested direction.
const ArrOfDouble & get_node_coordinates(int direction) const
Returns an array with the coordinates of all nodes in the mesh in requested direction.
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::in)
Class defining operators and methods for all reading operation in an input flow (file,...
const Domaine_IJK & get_domaine() const
void echange_espace_virtuel()
void resize(int n, int new_ghost)
void allocate(int ni, int nj, int nk, int ghosts, int additional_k_layers=0, int nb_compo=1, bool external_storage=false)
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
const Domaine_IJK & get_domaine() const
void echange_espace_virtuel()
static Objet_U & objet_global(const Nom &nom)
cherche l'objet demande dans l'Interprete_bloc courant (Interprete_bloc::interprete_courant()) et dan...
Classe de base des objets "interprete".
Cette classe implemente les operateurs et les methodes virtuelles de la classe EFichier de la facon s...
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual int finit_par(const char *const n) const
const Nom getPrefix(const char *const) 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.
static const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
int lire_avec_accolades(Entree &is)
Alias of lire_avec_accolades_depuis.
static void mp_sum_for_each(T &arg1, T &arg2)
C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: ...
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
static void mp_min_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
void precision(int pre) override
void setf(IOS_FORMAT code) override
Classe de base des flux de sortie.