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.
File for reading. This class is to the C++ ifstream class what the Entree class is to the.
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)
Searches for the requested object in the current Interprete_bloc (Interprete_bloc::interprete_courant...
Base class for "interpreter" objects.
This class implements the operators and virtual methods of the EFichier class as follows: The file to...
class Nom: a character string for naming TRUST objects.
virtual int finit_par(const char *const n) const
const Nom getPrefix(const char *const) const
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
static const Nom & nom_du_cas()
Returns a constant reference to the case name. This method is static.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
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)
Exit routine for TRUST within a Kokkos region.
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
static void mp_min_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
void precision(int pre) override
void setf(IOS_FORMAT code) override
Base class for output streams.