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>
59static inline double calculer_lambda_air(
double temperature)
61 const double fac_a = -5.05628e-18;
62 const double fac_b = 2.469e-14;
63 const double fac_c = -4.98344e-11;
64 const double fac_d = 7.06714e-08;
65 const double fac_e = 1.0894e-06;
66 const double facteur = 1.93198026315789000e-3 / 1.461e-6;
68 double val = temperature;
69 double calc = val * fac_a + fac_b;
70 calc = val * calc + fac_c;
71 calc = val * calc + fac_d;
72 calc = val * calc + fac_e;
73 return calc * facteur;
76static inline void choix_filter_kernel(
const int ghost_size,
77 const Nom& filter_kernel_name,
88 if ( filter_kernel_name ==
Nom(
"box") )
92 else if ( filter_kernel_name ==
Nom(
"weight_13_13_pondere") )
96 else if ( filter_kernel_name ==
Nom(
"weight_13_13_sansponderation") )
100 else if ( filter_kernel_name ==
Nom(
"weight_13_13_conservatif") )
104 else if ( filter_kernel_name ==
Nom(
"weight_12_14_pondere") )
108 else if ( filter_kernel_name ==
Nom(
"weight_12_14_sansponderation") )
112 else if ( filter_kernel_name ==
Nom(
"weight_12_14_conservatif") )
116 else if ( filter_kernel_name ==
Nom(
"weight_23_16_pondere") )
120 else if ( filter_kernel_name ==
Nom(
"weight_23_16_sansponderation") )
124 else if ( filter_kernel_name ==
Nom(
"weight_23_16_conservatif") )
128 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_pondere") )
132 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_sansponderation") )
136 else if ( filter_kernel_name ==
Nom(
"weight_14_14_18_conservatif") )
140 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_pondere") )
144 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_sansponderation") )
148 else if ( filter_kernel_name ==
Nom(
"weight_15_15_15_conservatif") )
152 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_pondere") )
156 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_sansponderation") )
160 else if ( filter_kernel_name ==
Nom(
"weight_16_16_16_112_conservatif") )
164 else if ( filter_kernel_name ==
Nom(
"weight_14_38_pondere") )
168 else if ( filter_kernel_name ==
Nom(
"weight_14_38_sansponderation") )
172 else if ( filter_kernel_name ==
Nom(
"weight_14_38_conservatif") )
176 else if ( filter_kernel_name ==
Nom(
"laplacian") )
182 Cerr <<
"Error: (Inconsistent parameters) "
183 <<
"The large eddy simulation model requires filtering but the filter kernel name is unknown or unspecified. "
184 <<
"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;
189static inline void choix_modele(
const Nom& turbulent_viscosity_model,
200 if ( turbulent_viscosity_model ==
Nom(
"constant") )
204 else if ( turbulent_viscosity_model ==
Nom(
"unsrho") )
208 else if ( turbulent_viscosity_model ==
Nom(
"smagorinsky") )
212 else if ( turbulent_viscosity_model ==
Nom(
"vreman") )
216 else if ( turbulent_viscosity_model ==
Nom(
"sigma") )
220 else if ( turbulent_viscosity_model ==
Nom(
"wale") )
224 else if ( turbulent_viscosity_model ==
Nom(
"amd") )
228 else if ( turbulent_viscosity_model ==
Nom(
"amd_comp") )
232 else if ( turbulent_viscosity_model ==
Nom(
"amdnoclip") )
236 else if ( turbulent_viscosity_model ==
Nom(
"amdscalar") )
240 else if ( turbulent_viscosity_model ==
Nom(
"amdscalarnoclip") )
244 else if ( turbulent_viscosity_model ==
Nom(
"rds") )
248 else if ( turbulent_viscosity_model ==
Nom(
"vss") )
252 else if ( turbulent_viscosity_model ==
Nom(
"kobayashi") )
258 Cerr <<
"The turbulent diffusion model name is unknown." << finl;
263void calculer_delta_z_pour_delta(
const Domaine_IJK& splitting,
265 const int ghost_size,
266 ArrOfDouble_with_ghost& delta_z_pour_delta)
270 ArrOfDouble elem_coord(nktot);
271 for (
int i = 0; i < nktot; i++)
273 elem_coord[i] = 0.5 * (coord_z[i] + coord_z[i+1]);
276 const int nktot_pour_delta = geom_pour_delta.
get_nb_elem_tot(DIRECTION_K);
277 const ArrOfDouble& global_delta_pour_delta = geom_pour_delta.
get_delta(DIRECTION_K);
279 ArrOfDouble elem_coord_pour_delta(nktot_pour_delta);
280 for (
int i = 0; i < nktot_pour_delta; i++)
282 elem_coord_pour_delta[i] = 0.5 * (coord_z_pour_delta[i] + coord_z_pour_delta[i+1]);
287 delta_z_pour_delta.
resize(nk, ghost_size);
293 int kg_1 = - ghost_size;
294 for (
int k = -ghost_size; k < nk + ghost_size; k++)
296 const int kg = k + offset;
301 coord = elem_coord[0];
303 else if (kg >= nktot)
305 coord = elem_coord[nktot - 1];
309 coord = elem_coord[kg];
312 while (coord_1 < coord)
320 coord_1 = coord_z_pour_delta[0];
322 else if (kg_1 >= nktot_pour_delta)
325 coord_1 = coord_z_pour_delta[nktot_pour_delta];
329 d1 = global_delta_pour_delta[kg_1];
330 coord_1 = elem_coord_pour_delta[kg_1];
336 if (coord_1 == coord_0)
338 if (coord_1 != coord || d0 != d1)
340 Cerr <<
"Ce n'est pas normal." << finl;
345 delta_z_pour_delta[k] = d0;
350 delta_z_pour_delta[k] = d0 + (d1 - d0)/(coord_1 - coord_0)*(coord - coord_0);
355void calculer_delta_z_filtre_identique(
const Domaine_IJK& splitting,
356 const ArrOfDouble_with_ghost& delta_z_pour_delta,
357 ArrOfDouble_with_ghost& delta_z_filtre)
363 for (
int k = 0; k < nk; k++)
365 const int kg = k + offset;
366 const double dz_pour_delta = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
367 delta_z_filtre[k] = sqrt(dz_pour_delta*dz_pour_delta + dz_pour_delta*dz_pour_delta);
371void calculer_delta_z_filtre_n_mailles(
const int taille_filtre,
373 const ArrOfDouble_with_ghost& delta_z,
374 const ArrOfDouble_with_ghost& delta_z_pour_delta,
375 ArrOfDouble_with_ghost& delta_z_filtre)
377 Cerr <<
"Taille du filtre explicite fixee a " << taille_filtre <<
" mailles." << finl;
383 const bool impair = (taille_filtre%2 != 0);
384 const int kp_min = impair ? (taille_filtre-1)/2 : (taille_filtre-2)/2;
385 const int kp_max = impair ? (taille_filtre-1)/2 : (taille_filtre-2)/2;
387 for (
int k = 0; k < nk; k++)
389 const int kg = k + offset;
391 double longueur_elem = 0.;
392 for (
int kp = -kp_min; kp < kp_max+1; kp++)
394 const int kpg = kg + kp;
395 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
402 const int kp = -kp_min - 1;
403 const int kpg = kg + kp;
404 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
408 const int kp = kp_max + 1;
409 const int kpg = kg + kp;
410 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
414 const double dz_pour_delta = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
415 delta_z_filtre[k] = sqrt(longueur_elem*longueur_elem + dz_pour_delta*dz_pour_delta);
420void calculer_temperature_mu_lambda_air(
const double P_th,
421 const double constante_specifique_gaz,
422 const IJK_Field_double& rho,
423 IJK_Field_double& temperature,
424 IJK_Field_double& molecular_mu,
425 IJK_Field_double& molecular_lambda,
428 const int imax = rho.
ni() + epaisseur_joint;
429 const int jmax = rho.
nj() + epaisseur_joint;
430 const int kmax = rho.
nk() + epaisseur_joint;
432 const double fac_a = -5.05628e-18;
433 const double fac_b = 2.469e-14;
434 const double fac_c = -4.98344e-11;
435 const double fac_d = 7.06714e-08;
436 const double fac_e = 1.0894e-06;
438 const double facteur = 1.93198026315789000e-3 / 1.461e-6;
440 const double facteur_temperature = P_th / constante_specifique_gaz;
442 for (
int k = -epaisseur_joint; k < kmax; k++)
444 for (
int j = -epaisseur_joint; j < jmax; j++)
446 for (
int i = -epaisseur_joint; i < imax; i++)
448 const double r = rho(i, j, k);
449 const double temp = facteur_temperature / r;
450 temperature(i,j,k) = temp;
451 double calc = temp * fac_a + fac_b;
452 calc = temp * calc + fac_c;
453 calc = temp * calc + fac_d;
454 calc = temp * calc + fac_e;
455 molecular_lambda(i,j,k) = calc * facteur;
456 molecular_mu(i,j,k) = calc;
462void multiplier_champ(
const double coefficient,
463 const IJK_Field_double& champ_in,
464 IJK_Field_double& champ_out)
466 const int ni = champ_out.
ni();
467 const int nj = champ_out.
nj();
468 const int nk = champ_out.
nk();
470 for (
int k = 0; k < nk; k++)
472 for (
int j = 0; j < nj; j++)
474 for (
int i = 0; i < ni; i++)
476 champ_out(i,j,k) = coefficient * champ_in(i,j,k);
482void multiplier_champ(
const IJK_Field_double& champ_rho,
483 IJK_Field_double& champ)
485 const int ni = champ.ni();
486 const int nj = champ.nj();
487 const int nk = champ.nk();
489 for (
int k = 0; k < nk; k++)
491 for (
int j = 0; j < nj; j++)
493 for (
int i = 0; i < ni; i++)
495 champ(i,j,k) = champ_rho(i,j,k) * champ(i,j,k);
504void add_fields(
const IJK_Field_double& field1, IJK_Field_double& field2)
506 const int ni = field2.
ni();
507 const int nj = field2.
nj();
508 const int nk = field2.
nk();
509 for (
int k = 0; k < nk; k++)
511 for (
int j = 0; j < nj; j++)
513 for (
int i = 0; i < ni; i++)
515 field2(i,j,k) += field1(i,j,k);
522void add_fields_k(
const IJK_Field_double& field1, IJK_Field_double& field2,
const int k)
524 const int ni = field2.
ni();
525 const int nj = field2.
nj();
526 for (
int j = 0; j < nj; j++)
528 for (
int i = 0; i < ni; i++)
530 field2(i,j,k) += field1(i,j,k);
535void multiplier_champ_rho_arete_ij(
const IJK_Field_double& champ_rho,
536 IJK_Field_double& champ)
538 const int ni = champ.ni();
539 const int nj = champ.nj();
540 const int nk = champ.nk();
542 for (
int k = 0; k < nk; k++)
544 for (
int j = 0; j < nj; j++)
546 for (
int i = 0; i < ni; i++)
548 const double rho = champ_rho(i,j,k);
549 const double rho_im1 = champ_rho(i-1,j,k);
550 const double rho_jm1 = champ_rho(i,j-1,k);
551 const double rho_im1_jm1 = champ_rho(i-1,j-1,k);
552 const double rho_ij = 0.25 * (rho + rho_im1 + rho_jm1 + rho_im1_jm1);
553 champ(i,j,k) = rho_ij * champ(i,j,k);
559void multiplier_champ_rho_arete_ik(
const IJK_Field_double& champ_rho,
561 IJK_Field_double& champ)
565 const int ni = champ.ni();
566 const int nj = champ.nj();
567 const int nk = champ.nk();
569 for (
int k = 0; k < nk; k++)
571 for (
int j = 0; j < nj; j++)
573 for (
int i = 0; i < ni; i++)
575 const int kg = k + offset;
576 const double rho = champ_rho(i,j,k);
577 const double rho_im1 = champ_rho(i-1,j,k);
578 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));
579 champ(i,j,k) = rho_ik * champ(i,j,k);
585void multiplier_champ_rho_arete_jk(
const IJK_Field_double& champ_rho,
587 IJK_Field_double& champ)
591 const int ni = champ.ni();
592 const int nj = champ.nj();
593 const int nk = champ.nk();
595 for (
int k = 0; k < nk; k++)
597 for (
int j = 0; j < nj; j++)
599 for (
int i = 0; i < ni; i++)
601 const int kg = k + offset;
602 const double rho = champ_rho(i,j,k);
603 const double rho_jm1 = champ_rho(i,j-1,k);
604 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));
605 champ(i,j,k) = rho_jk * champ(i,j,k);
611void multiplier_champ(
const IJK_Field_double& champ_rho,
612 const double& constant,
613 IJK_Field_double& champ)
615 const int ni = champ.ni();
616 const int nj = champ.nj();
617 const int nk = champ.nk();
619 for (
int k = 0; k < nk; k++)
621 for (
int j = 0; j < nj; j++)
623 for (
int i = 0; i < ni; i++)
625 champ(i,j,k) = champ_rho(i,j,k) * champ(i,j,k) * constant;
631void multiplier_champ_rho_face_i(
const int flag_add,
632 const IJK_Field_double& champ_rho,
633 const double& constant,
634 const IJK_Field_double& champ_in,
635 IJK_Field_double& champ_out)
637 const int ni = champ_in.
ni();
638 const int nj = champ_in.
nj();
639 const int nk = champ_in.
nk();
641 for (
int k = 0; k < nk; k++)
643 for (
int j = 0; j < nj; j++)
645 for (
int i = 0; i < ni; i++)
647 const double rho = champ_rho(i,j,k);
648 const double rho_im1 = champ_rho(i-1,j,k);
649 const double rhof_i = 0.5 * (rho + rho_im1);
652 champ_out(i,j,k) += rhof_i * champ_in(i,j,k) * constant;
656 champ_out(i,j,k) = rhof_i * champ_in(i,j,k) * constant;
663void multiplier_champ_rho_face_j(
const int flag_add,
664 const IJK_Field_double& champ_rho,
665 const double& constant,
666 const IJK_Field_double& champ_in,
667 IJK_Field_double& champ_out)
669 const int ni = champ_in.
ni();
670 const int nj = champ_in.
nj();
671 const int nk = champ_in.
nk();
673 for (
int k = 0; k < nk; k++)
675 for (
int j = 0; j < nj; j++)
677 for (
int i = 0; i < ni; i++)
679 const double rho = champ_rho(i,j,k);
680 const double rho_jm1 = champ_rho(i,j-1,k);
681 const double rhof_j = 0.5 * (rho + rho_jm1);
684 champ_out(i,j,k) += rhof_j * champ_in(i,j,k) * constant;
688 champ_out(i,j,k) = rhof_j * champ_in(i,j,k) * constant;
695void multiplier_champ_rho_face_k(
const int flag_add,
696 const IJK_Field_double& champ_rho,
697 const double& constant,
699 const IJK_Field_double& champ_in,
700 IJK_Field_double& champ_out)
704 const int ni = champ_in.
ni();
705 const int nj = champ_in.
nj();
706 const int nk = champ_in.
nk();
708 for (
int k = 0; k < nk; k++)
710 for (
int j = 0; j < nj; j++)
712 for (
int i = 0; i < ni; i++)
714 const int kg = k + offset;
715 const double rho = champ_rho(i,j,k);
716 const double rhof_k = kg==0 ? rho_kmin : 0.5 * (rho + champ_rho(i,j,k-1));
719 champ_out(i,j,k) += rhof_k * champ_in(i,j,k) * constant;
723 champ_out(i,j,k) = rhof_k * champ_in(i,j,k) * constant;
730inline void multiplier_champ_rho_face_i(
const IJK_Field_double& champ_rho,
731 const double& constant,
732 IJK_Field_double& champ)
734 multiplier_champ_rho_face_i(
false, champ_rho, constant, champ, champ);
737inline void multiplier_champ_rho_face_j(
const IJK_Field_double& champ_rho,
738 const double& constant,
739 IJK_Field_double& champ)
741 multiplier_champ_rho_face_j(
false, champ_rho, constant, champ, champ);
744inline void multiplier_champ_rho_face_k(
const IJK_Field_double& champ_rho,
745 const double& constant,
747 IJK_Field_double& champ)
749 multiplier_champ_rho_face_k(
false, champ_rho, constant, rho_kmin, champ, champ);
753void filtrer_champ_elem(
const int flag_add,
754 const IJK_Field_double& champ,
755 const ArrOfDouble_with_ghost& delta_z,
756 const double facteur_delta_x,
757 const double facteur_delta_y,
758 const ArrOfDouble_with_ghost& delta_z_pour_delta,
762 IJK_Field_double& champ_filtre)
764 const double dx = champ.get_domaine().get_constant_delta(DIRECTION_I);
765 const double dy = champ.get_domaine().get_constant_delta(DIRECTION_J);
766 const double dx_pour_delta = facteur_delta_x*dx;
767 const double dy_pour_delta = facteur_delta_y*dy;
769 const int ni = champ.ni();
770 const int nj = champ.nj();
771 const int nk = champ.nk();
773 const int nktot = champ.get_domaine().get_nb_items_global(
Domaine_IJK::ELEM, DIRECTION_K);
774 const int offset = champ.get_domaine().get_offset_local(DIRECTION_K);
776 IJK_Field_local_double& b = tmp_b[0];
777 IJK_Field_local_double& a = tmp_a[0];
779 const int ghost_size_filter = kernel->ghost_size();
780 const int size_uniform = kernel->size_uniform();
781 const int shift_uniform = kernel->shift_uniform();
782 for (
int k = 0; k < nk; k++)
784 const int kg = k + offset;
786 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
787 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
789 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
792 const int size_k_elem = kernel->size_k_elem(kg, nktot);
793 const int shift_k_elem = kernel->shift_k_elem(kg);
794 const bool ponderation_filter_kernel = kernel->ponderation();
795 const bool normalisation_filter_kernel = kernel->normalisation();
797 double facteur_elem = 0.;
798 if (ponderation_filter_kernel)
800 if (normalisation_filter_kernel)
802 double longueur_elem = 0.;
803 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
805 const int kpg = kg + kp;
806 if (kpg<-1 || kpg>nktot)
808 Cerr <<
"This should not happen." << finl;
811 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
812 const double filter_coef_z = filter_kernel_z[kp+10];
813 longueur_elem += filter_coef_z * dz;
815 facteur_elem = 1./longueur_elem;
819 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
823 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
825 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
828 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
830 const int kpg = kg + kp;
831 if (!(kernel->is_at_wall_elem(kpg, nktot)))
833 const double filter_coef_z = filter_kernel_z[kp+10];
834 if (ponderation_filter_kernel)
836 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
837 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z * dz * facteur_elem;
841 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z;
847 for (
int j = 0; j < nj; j++)
849 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
852 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
854 const double filter_coef_y = filter_kernel_y[jp+10];
855 a(i, 0, 0) += b(i, j+jp, 0) * filter_coef_y;
859 for (
int i = 0; i < ni; i++)
862 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
864 const double filter_coef_x = filter_kernel_x[ip+10];
865 r += a(i+ip, 0, 0) * filter_coef_x;
870 champ_filtre(i,j,k) += r;
874 champ_filtre(i,j,k) = r;
882void filtrer_champ_face(
const int flag_add,
883 const IJK_Field_double& champ,
884 const ArrOfDouble_with_ghost& delta_z,
885 const double facteur_delta_x,
886 const double facteur_delta_y,
887 const ArrOfDouble_with_ghost& delta_z_pour_delta,
891 IJK_Field_double& champ_filtre)
894 const double dy = champ.get_domaine().get_constant_delta(DIRECTION_J);
895 const double dx_pour_delta = facteur_delta_x*dx;
896 const double dy_pour_delta = facteur_delta_y*dy;
898 const int ni = champ.ni();
899 const int nj = champ.nj();
900 const int nk = champ.nk();
902 const int nktot = champ.get_domaine().get_nb_items_global(
Domaine_IJK::ELEM, DIRECTION_K);
903 const int offset = champ.get_domaine().get_offset_local(DIRECTION_K);
905 IJK_Field_local_double& b = tmp_b[0];
906 IJK_Field_local_double& a = tmp_a[0];
908 const int ghost_size_filter = kernel->ghost_size();
909 const int size_uniform = kernel->size_uniform();
910 const int shift_uniform = kernel->shift_uniform();
911 for (
int k = 0; k < nk; k++)
913 const int kg = k + offset;
915 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
916 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
917 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
918 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
919 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
920 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);
922 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
925 const int size_k_face = kernel->size_k_face(kg, nktot);
926 const int shift_k_face = kernel->shift_k_face(kg);
927 const bool ponderation_filter_kernel = kernel->ponderation();
928 const bool normalisation_filter_kernel = kernel->normalisation();
930 double facteur_face = 0.;
931 if (ponderation_filter_kernel)
933 if (normalisation_filter_kernel)
935 double longueur_face = 0.;
936 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
938 const int kpg = kg + kp;
939 if (kpg<0 || kpg>nktot)
941 Cerr <<
"This should not happen." << finl;
944 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
945 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
946 const double dzf = 0.5*(dz + dz_m1);
947 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
948 longueur_face += filter_coef_z_face * dzf;
950 facteur_face = 1./longueur_face;
954 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
958 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
960 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
963 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
965 const int kpg = kg + kp;
966 if (!(kernel->is_at_wall_face(kpg, nktot)))
968 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
969 if (ponderation_filter_kernel)
971 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
972 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
973 const double dzf = 0.5*(dz + dz_m1);
974 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z_face * dzf * facteur_face;
978 b(i, j, 0) += champ(i,j,k+kp) * filter_coef_z_face;
984 for (
int j = 0; j < nj; j++)
986 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
989 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
991 const double filter_coef_y = filter_kernel_y[jp+10];
992 a(i, 0, 0) += b(i, j+jp, 0) * filter_coef_y;
996 for (
int i = 0; i < ni; i++)
999 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
1001 const double filter_coef_x = filter_kernel_x[ip+10];
1002 r += a(i+ip, 0, 0) * filter_coef_x;
1007 champ_filtre(i,j,k) += r;
1011 champ_filtre(i,j,k) = r;
1018static inline void calculer_g(
int i,
int j,
int k,
1019 const IJK_Field_vector3_double& velocity,
1020 const ArrOfDouble_with_ghost& delta_z_maillage,
1021 const double dx_delta,
1022 const double dy_delta,
1023 const double dz_delta,
1024 const double delta_m_delta,
1025 const double delta_p_delta,
1028 const IJK_Field_double& vitesse_i = velocity[0];
1029 const IJK_Field_double& vitesse_j = velocity[1];
1030 const IJK_Field_double& vitesse_k = velocity[2];
1034 const double deltaunsurdx = dx_delta * 1./dx;
1035 const double deltaunsurdy = dy_delta * 1./dy;
1040 const int kg = k + offset;
1041 const double dz = delta_z_maillage[k];
1042 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1043 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1045 const double deltaunsurdz = dz_delta * 1./dz;
1046 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1047 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1049 const double uf_i = vitesse_i(i,j,k);
1050 const double uf_ip1 = vitesse_i(i+1,j,k);
1051 const double uf_i_jm1 = vitesse_i(i,j-1,k);
1052 const double uf_i_jp1 = vitesse_i(i,j+1,k);
1053 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
1054 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
1055 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
1056 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
1057 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
1058 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
1060 const double vf_j = vitesse_j(i,j,k);
1061 const double vf_j_im1 = vitesse_j(i-1,j,k);
1062 const double vf_j_ip1 = vitesse_j(i+1,j,k);
1063 const double vf_jp1 = vitesse_j(i,j+1,k);
1064 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
1065 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
1066 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
1067 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
1068 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
1069 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
1071 const double wf_k = vitesse_k(i,j,k);
1072 const double wf_k_im1 = vitesse_k(i-1,j,k);
1073 const double wf_k_ip1 = vitesse_k(i+1,j,k);
1074 const double wf_k_jm1 = vitesse_k(i,j-1,k);
1075 const double wf_k_jp1 = vitesse_k(i,j+1,k);
1076 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
1077 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
1078 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
1079 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
1080 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
1082 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
1083 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
1084 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
1086 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
1087 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
1088 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
1089 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
1091 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
1092 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
1093 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
1094 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
1096 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
1097 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
1098 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
1099 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
1101 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
1102 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
1103 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
1104 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
1106 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
1107 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
1108 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
1109 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
1111 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
1112 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
1113 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
1114 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
1117 g[0][1] = 0.25 * (duidy_ip1jp1 + duidy_ijp1 + duidy_ip1j + duidy_ij);
1118 g[0][2] = 0.25 * (duidz_ip1kp1 + duidz_ikp1 + duidz_ip1k + duidz_ik);
1119 g[1][0] = 0.25 * (dujdx_ip1jp1 + dujdx_ip1j + dujdx_ijp1 + dujdx_ij);
1121 g[1][2] = 0.25 * (dujdz_jp1kp1 + dujdz_jkp1 + dujdz_jp1k + dujdz_jk);
1122 g[2][0] = 0.25 * (dukdx_ip1kp1 + dukdx_ip1k + dukdx_ikp1 + dukdx_ik);
1123 g[2][1] = 0.25 * (dukdy_jp1kp1 + dukdy_jp1k + dukdy_jkp1 + dukdy_jk);
1127static inline void calculer_tau(
int i,
int j,
int k,
1128 const IJK_Field_vector3_double& velocity,
1129 const IJK_Field_double& turbulent_mu_xx,
1130 const IJK_Field_double& turbulent_mu_xy,
1131 const IJK_Field_double& turbulent_mu_xz,
1132 const IJK_Field_double& turbulent_mu_yy,
1133 const IJK_Field_double& turbulent_mu_yz,
1134 const IJK_Field_double& turbulent_mu_zz,
1135 const ArrOfDouble_with_ghost& delta_z_maillage,
1136 const double dx_delta,
1137 const double dy_delta,
1138 const double dz_delta,
1139 const double delta_m_delta,
1140 const double delta_p_delta,
1143 const IJK_Field_double& vitesse_i = velocity[0];
1144 const IJK_Field_double& vitesse_j = velocity[1];
1145 const IJK_Field_double& vitesse_k = velocity[2];
1149 const double deltaunsurdx = dx_delta * 1./dx;
1150 const double deltaunsurdy = dy_delta * 1./dy;
1155 const int kg = k + offset;
1156 const double dz = delta_z_maillage[k];
1157 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1158 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1160 const double deltaunsurdz = dz_delta * 1./dz;
1161 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1162 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1164 const double nu_xx = turbulent_mu_xx(i,j,k);
1166 const double nu_xy = turbulent_mu_xy(i,j,k);
1167 const double nu_xy_im1 = turbulent_mu_xy(i-1,j,k);
1168 const double nu_xy_jm1 = turbulent_mu_xy(i,j-1,k);
1169 const double nu_xy_im1_jm1 = turbulent_mu_xy(i-1,j-1,k);
1170 const double nu_xy_ip1 = turbulent_mu_xy(i+1,j,k);
1171 const double nu_xy_jp1 = turbulent_mu_xy(i,j+1,k);
1172 const double nu_xy_ip1_jp1 = turbulent_mu_xy(i+1,j+1,k);
1173 const double nu_xy_im1_jp1 = turbulent_mu_xy(i-1,j+1,k);
1174 const double nu_xy_ip1_jm1 = turbulent_mu_xy(i+1,j-1,k);
1176 const double nu_xz = turbulent_mu_xz(i,j,k);
1177 const double nu_xz_im1 = turbulent_mu_xz(i-1,j,k);
1178 const double nu_xz_km1 = kg==0 ? 0. : turbulent_mu_xz(i,j,k-1);
1179 const double nu_xz_im1_km1 = kg==0 ? 0. : turbulent_mu_xz(i-1,j,k-1);
1180 const double nu_xz_ip1 = turbulent_mu_xz(i+1,j,k);
1181 const double nu_xz_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i,j,k+1);
1182 const double nu_xz_ip1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i+1,j,k+1);
1183 const double nu_xz_im1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_xz(i-1,j,k+1);
1184 const double nu_xz_ip1_km1 = kg==0 ? 0. : turbulent_mu_xz(i+1,j,k-1);
1186 const double nu_yy = turbulent_mu_yy(i,j,k);
1188 const double nu_yz = turbulent_mu_yz(i,j,k);
1189 const double nu_yz_jm1 = turbulent_mu_yz(i,j-1,k);
1190 const double nu_yz_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j,k-1);
1191 const double nu_yz_jm1_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j-1,k-1);
1192 const double nu_yz_jp1 = turbulent_mu_yz(i,j+1,k);
1193 const double nu_yz_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j,k+1);
1194 const double nu_yz_jp1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j+1,k+1);
1195 const double nu_yz_jm1_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_yz(i,j-1,k+1);
1196 const double nu_yz_jp1_km1 = kg==0 ? 0. : turbulent_mu_yz(i,j+1,k-1);
1198 const double nu_xy_ij = 0.25 * (nu_xy + nu_xy_im1 + nu_xy_jm1 + nu_xy_im1_jm1);
1199 const double nu_xy_ip1j = 0.25 * (nu_xy_ip1 + nu_xy + nu_xy_ip1_jm1 + nu_xy_jm1);
1200 const double nu_xy_ijp1 = 0.25 * (nu_xy_jp1 + nu_xy_im1_jp1 + nu_xy + nu_xy_im1);
1201 const double nu_xy_ip1jp1 = 0.25 * (nu_xy_ip1_jp1 + nu_xy_jp1 + nu_xy_ip1 + nu_xy);
1202 const double nu_xz_ik = 0.25 * (nu_xz + nu_xz_im1 + nu_xz_km1 + nu_xz_im1_km1);
1203 const double nu_xz_ip1k = 0.25 * (nu_xz_ip1 + nu_xz + nu_xz_ip1_km1 + nu_xz_km1);
1204 const double nu_xz_ikp1 = 0.25 * (nu_xz_kp1 + nu_xz_im1_kp1 + nu_xz + nu_xz_im1);
1205 const double nu_xz_ip1kp1 = 0.25 * (nu_xz_ip1_kp1 + nu_xz_kp1 + nu_xz_ip1 + nu_xz);
1206 const double nu_yz_jk = 0.25 * (nu_yz + nu_yz_jm1 + nu_yz_km1 + nu_yz_jm1_km1);
1207 const double nu_yz_jp1k = 0.25 * (nu_yz_jp1 + nu_yz + nu_yz_jp1_km1 + nu_yz_km1);
1208 const double nu_yz_jkp1 = 0.25 * (nu_yz_kp1 + nu_yz_jm1_kp1 + nu_yz + nu_yz_jm1);
1209 const double nu_yz_jp1kp1 = 0.25 * (nu_yz_jp1_kp1 + nu_yz_kp1 + nu_yz_jp1 + nu_yz);
1211 const double nu_zz = turbulent_mu_zz(i,j,k);
1213 const double uf_i = vitesse_i(i,j,k);
1214 const double uf_i_jm1 = vitesse_i(i,j-1,k);
1215 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
1217 const double vf_j = vitesse_j(i,j,k);
1218 const double vf_j_im1 = vitesse_j(i-1,j,k);
1219 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
1221 const double wf_k = vitesse_k(i,j,k);
1222 const double wf_k_im1 = vitesse_k(i-1,j,k);
1223 const double wf_k_jm1 = vitesse_k(i,j-1,k);
1225 const double uf_ip1 = vitesse_i(i+1,j,k);
1226 const double uf_i_jp1 = vitesse_i(i,j+1,k);
1227 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
1228 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
1229 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
1230 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
1231 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
1233 const double vf_j_ip1 = vitesse_j(i+1,j,k);
1234 const double vf_jp1 = vitesse_j(i,j+1,k);
1235 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
1236 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
1237 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
1238 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
1239 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
1241 const double wf_k_ip1 = vitesse_k(i+1,j,k);
1242 const double wf_k_jp1 = vitesse_k(i,j+1,k);
1243 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
1244 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
1245 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
1246 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
1247 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
1249 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
1250 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
1251 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
1253 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
1254 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
1255 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
1256 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
1258 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
1259 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
1260 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
1261 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
1263 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
1264 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
1265 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
1266 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
1268 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
1269 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
1270 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
1271 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
1273 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
1274 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
1275 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
1276 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
1278 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
1279 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
1280 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
1281 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
1283 const double s_ii = 0.5 * (duidx + duidx);
1284 const double s_jj = 0.5 * (dujdy + dujdy);
1285 const double s_kk = 0.5 * (dukdz + dukdz);
1287 const double s_ij = 0.5 * (duidy_ij + dujdx_ij);
1288 const double s_ik = 0.5 * (duidz_ik + dukdx_ik);
1289 const double s_jk = 0.5 * (dujdz_jk + dukdy_jk);
1291 const double s_ip1j = 0.5 * (duidy_ip1j + dujdx_ip1j);
1292 const double s_ip1k = 0.5 * (duidz_ip1k + dukdx_ip1k);
1293 const double s_jp1k = 0.5 * (dujdz_jp1k + dukdy_jp1k);
1295 const double s_ijp1 = 0.5 * (duidy_ijp1 + dujdx_ijp1);
1296 const double s_ikp1 = 0.5 * (duidz_ikp1 + dukdx_ikp1);
1297 const double s_jkp1 = 0.5 * (dujdz_jkp1 + dukdy_jkp1);
1299 const double s_ip1jp1 = 0.5 * (duidy_ip1jp1 + dujdx_ip1jp1);
1300 const double s_ip1kp1 = 0.5 * (duidz_ip1kp1 + dukdx_ip1kp1);
1301 const double s_jp1kp1 = 0.5 * (dujdz_jp1kp1 + dukdy_jp1kp1);
1303 f[0][0] = - 2. * nu_xx * s_ii;
1304 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);
1305 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);
1306 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);
1307 f[1][1] = - 2. * nu_yy * s_jj;
1308 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);
1309 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);
1310 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);
1311 f[2][2] = - 2. * nu_zz * s_kk;
1314static inline void calculer_q(
int i,
int j,
int k,
1315 const IJK_Field_vector3_double& velocity,
1316 const IJK_Field_double& champ_scalar,
1317 double scalar_kmin,
double scalar_kmax,
1318 const ArrOfDouble_with_ghost& delta_z_maillage,
1319 const double dx_delta,
1320 const double dy_delta,
1321 const double dz_delta,
1322 const double delta_m_delta,
1323 const double delta_p_delta,
1326 const IJK_Field_double& vitesse_k = velocity[2];
1330 const double deltaunsurdx = dx_delta * 1./dx;
1331 const double deltaunsurdy = dy_delta * 1./dy;
1336 const int kg = k + offset;
1337 const double dz = delta_z_maillage[k];
1338 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1339 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1341 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1342 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1344 const double scalar = champ_scalar(i,j,k);
1346 const double scalar_im1 = champ_scalar(i-1,j,k);
1347 const double scalar_ip1 = champ_scalar(i+1,j,k);
1349 const double scalar_jm1 = champ_scalar(i,j-1,k);
1350 const double scalar_jp1 = champ_scalar(i,j+1,k);
1352 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
1353 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
1355 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
1356 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
1358 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
1359 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
1361 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
1362 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
1364 q[0] = 0.5 * (dscalardxf_i + dscalardxf_ip1);
1365 q[1] = 0.5 * (dscalardyf_j + dscalardyf_jp1);
1366 q[2] = 0.5 * (dscalardzf_k + dscalardzf_kp1);
1369static inline void calculer_pi(
int i,
int j,
int k,
1370 const IJK_Field_vector3_double& velocity,
1371 const IJK_Field_double& champ_scalar,
1372 double scalar_kmin,
double scalar_kmax,
1373 const IJK_Field_double& turbulent_mu_x,
1374 const IJK_Field_double& turbulent_mu_y,
1375 const IJK_Field_double& turbulent_mu_z,
1376 const ArrOfDouble_with_ghost& delta_z_maillage,
1377 const double dx_delta,
1378 const double dy_delta,
1379 const double dz_delta,
1380 const double delta_m_delta,
1381 const double delta_p_delta,
1384 const IJK_Field_double& vitesse_k = velocity[2];
1388 const double deltaunsurdx = dx_delta * 1./dx;
1389 const double deltaunsurdy = dy_delta * 1./dy;
1394 const int kg = k + offset;
1395 const double dz = delta_z_maillage[k];
1396 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
1397 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
1399 const double deltaunsurdelta_m = delta_m_delta * 1./delta_m;
1400 const double deltaunsurdelta_p = delta_p_delta * 1./delta_p;
1402 const double nu_x = turbulent_mu_x(i,j,k);
1403 const double nu_x_im1 = turbulent_mu_x(i-1,j,k);
1404 const double nu_x_ip1 = turbulent_mu_x(i+1,j,k);
1406 const double nu_y = turbulent_mu_y(i,j,k);
1407 const double nu_y_jm1 = turbulent_mu_y(i,j-1,k);
1408 const double nu_y_jp1 = turbulent_mu_y(i,j+1,k);
1410 const double nu_z = turbulent_mu_z(i,j,k);
1411 const double nu_z_km1 = kg==0 ? 0. : turbulent_mu_z(i,j,k-1);
1412 const double nu_z_kp1 = kg==(nktot-1) ? 0. : turbulent_mu_z(i,j,k+1);
1414 const double nu_xf_i = 0.5 * (nu_x + nu_x_im1);
1415 const double nu_yf_j = 0.5 * (nu_y + nu_y_jm1);
1416 const double nu_zf_k = 0.5 * (nu_z + nu_z_km1);
1417 const double nu_xf_ip1 = 0.5 * (nu_x + nu_x_ip1);
1418 const double nu_yf_jp1 = 0.5 * (nu_y + nu_y_jp1);
1419 const double nu_zf_kp1 = 0.5 * (nu_z + nu_z_kp1);
1421 const double scalar = champ_scalar(i,j,k);
1423 const double scalar_im1 = champ_scalar(i-1,j,k);
1424 const double scalar_ip1 = champ_scalar(i+1,j,k);
1426 const double scalar_jm1 = champ_scalar(i,j-1,k);
1427 const double scalar_jp1 = champ_scalar(i,j+1,k);
1429 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
1430 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
1432 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
1433 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
1435 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
1436 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
1438 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
1439 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
1441 f[0] = - 0.5 * (nu_xf_i*dscalardxf_i + nu_xf_ip1*dscalardxf_ip1);
1442 f[1] = - 0.5 * (nu_yf_j*dscalardyf_j + nu_yf_jp1*dscalardyf_jp1);
1443 f[2] = - 0.5 * (nu_zf_k*dscalardzf_k + nu_zf_kp1*dscalardzf_kp1);
1447void calculer_turbulent_mu(
const bool anisotropic,
1449 const double turbulent_viscosity_model_constant,
1450 const double variation_cste_modele_fonctionnel_,
1451 const double smoothing_center_fr_,
1452 const double smoothing_factor_fr_,
1453 const double Re_tau_fr_,
1454 const double Re_tau_ch_,
1455 const double pond_fr_,
1456 const double pond_ch_,
1457 const double center_constant_,
1458 const double Lz_tot_,
1459 const IJK_Field_vector3_double& velocity,
1460 const IJK_Field_double& champ_rho,
1461 const IJK_Field_double& champ_scalar,
1462 double scalar_kmin,
double scalar_kmax,
1463 const ArrOfDouble_with_ghost& delta_z_maillage,
1464 const double facteur_x_pour_delta,
1465 const double facteur_y_pour_delta,
1466 const ArrOfDouble_with_ghost& delta_z_pour_delta,
1467 IJK_Field_double& turbulent_mu,
1470 const IJK_Field_double& vitesse_k = velocity[2];
1478 const int ni = vitesse_k.
ni();
1479 const int nj = vitesse_k.
nj();
1480 const int nk = vitesse_k.
nk();
1483 ArrOfDouble elem_coord(nk);
1484 for (
int i = 0; i < nktot; i++)
1486 elem_coord[i] = 0.5 * (coord_z[i] + coord_z[i+1]);
1488 elem_coord[nktot]=Lz_tot_;
1496 std::vector<double> turbulent_viscosity_model_constant_tab(nk);
1497 if ( !variation_cste_modele_fonctionnel_ )
1499 if ( ( smoothing_factor_fr_ != 0. ) || ( smoothing_center_fr_ != 0. ) || pond_ch_ != 0. || pond_fr_ != 0. )
1501 Cerr <<
"Error: (Inconsistent parameters) "
1502 <<
"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."
1506 for (
int k = 0; k <= nktot; k++)
1508 turbulent_viscosity_model_constant_tab[k]=turbulent_viscosity_model_constant;
1513 if ( smoothing_factor_fr_ == 0. )
1515 Cerr <<
"Error: (Inconsistent parameters) "
1516 <<
"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_."
1520 else if ((pond_fr_ == 0.) || (pond_ch_ == 0.))
1522 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." ;
1524 for (
int k = 0; k < nktot/2; k++)
1526 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_);
1528 for (
int k = nktot; k > nktot/2-1; --k)
1530 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_);
1535 for (
int k = 0; k < nk; k++)
1537 for (
int j = 0; j < nj; j++)
1539 for (
int i = 0; i < ni; i++)
1541 const int kg = k + offset;
1542 const double dz_pour_delta = delta_z_pour_delta[k];
1544 const double rho = champ_rho(i,j,k);
1548 calculer_g(i, j, k, velocity, delta_z_maillage, 1., 1., 1., 1., 1., g);
1549 calculer_q(i, j, k, velocity, champ_scalar, scalar_kmin, scalar_kmax, delta_z_maillage, 1., 1., 1., 1., 1., q);
1551 turbulent_mu(i,j,k) = model(turbulent_viscosity_model_constant_tab[k], dx_pour_delta, dy_pour_delta, dz_pour_delta, rho, g, q);
1556 const double delta_m_pour_delta = kg==0 ? 0. : 0.5*(dz_pour_delta + delta_z_pour_delta[k-1]);
1557 const double delta_p_pour_delta = kg==(nktot-1) ? 0. : 0.5*(dz_pour_delta + delta_z_pour_delta[k+1]);
1558 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);
1559 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);
1561 turbulent_mu(i,j,k) = model(turbulent_viscosity_model_constant_tab[k], 1., 1., 1., rho, g, q);
1570void calculer_ml_dynamic_uu_tensor(
const bool anisotropic,
1571 const bool tensorial,
1572 const IJK_Field_vector3_double& velocity,
1573 const IJK_Field_vector3_double& velocity_filtre,
1574 const int turbulent_viscosity,
1575 const IJK_Field_double& turbulent_mu_xx,
1576 const IJK_Field_double& turbulent_mu_xy,
1577 const IJK_Field_double& turbulent_mu_xz,
1578 const IJK_Field_double& turbulent_mu_yy,
1579 const IJK_Field_double& turbulent_mu_yz,
1580 const IJK_Field_double& turbulent_mu_zz,
1581 const IJK_Field_double& turbulent_mu_filtre_xx,
1582 const IJK_Field_double& turbulent_mu_filtre_xy,
1583 const IJK_Field_double& turbulent_mu_filtre_xz,
1584 const IJK_Field_double& turbulent_mu_filtre_yy,
1585 const IJK_Field_double& turbulent_mu_filtre_yz,
1586 const IJK_Field_double& turbulent_mu_filtre_zz,
1587 const int structural_uu,
1590 const ArrOfDouble_with_ghost& delta_z,
1591 const double facteur_delta_x,
1592 const double facteur_delta_y,
1593 const ArrOfDouble_with_ghost& delta_z_pour_delta,
1594 const double facteur_delta_filtre_x,
1595 const double facteur_delta_filtre_y,
1596 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
1602 const IJK_Field_double& vitesse_i = velocity[0];
1603 const IJK_Field_double& vitesse_j = velocity[1];
1604 const IJK_Field_double& vitesse_k = velocity[2];
1606 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
1607 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
1608 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
1610 const IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
1611 const IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
1612 const IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
1613 const IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
1614 const IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
1615 const IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
1617 const IJK_Field_double& structural_uu_filtre_xx = structural_uu_filtre_tensor[0];
1618 const IJK_Field_double& structural_uu_filtre_xy = structural_uu_filtre_tensor[1];
1619 const IJK_Field_double& structural_uu_filtre_xz = structural_uu_filtre_tensor[2];
1620 const IJK_Field_double& structural_uu_filtre_yy = structural_uu_filtre_tensor[3];
1621 const IJK_Field_double& structural_uu_filtre_yz = structural_uu_filtre_tensor[4];
1622 const IJK_Field_double& structural_uu_filtre_zz = structural_uu_filtre_tensor[5];
1626 const double dx_pour_delta = facteur_delta_x*dx;
1627 const double dy_pour_delta = facteur_delta_y*dy;
1629 const int ni = vitesse_k.
ni();
1630 const int nj = vitesse_k.
nj();
1631 const int nk = vitesse_k.
nk();
1636 IJK_Field_local_double& bf_ii = tmp_b[0];
1637 IJK_Field_local_double& bf_ij = tmp_b[1];
1638 IJK_Field_local_double& bf_ik = tmp_b[2];
1639 IJK_Field_local_double& bf_jj = tmp_b[3];
1640 IJK_Field_local_double& bf_jk = tmp_b[4];
1641 IJK_Field_local_double& bf_kk = tmp_b[5];
1642 IJK_Field_local_double& buu_ii = tmp_b[6];
1643 IJK_Field_local_double& buu_ij = tmp_b[7];
1644 IJK_Field_local_double& buu_ik = tmp_b[8];
1645 IJK_Field_local_double& buu_jj = tmp_b[9];
1646 IJK_Field_local_double& buu_jk = tmp_b[10];
1647 IJK_Field_local_double& buu_kk = tmp_b[11];
1648 IJK_Field_local_double& bg_ii = tmp_b[12];
1649 IJK_Field_local_double& bg_ij = tmp_b[13];
1650 IJK_Field_local_double& bg_ik = tmp_b[14];
1651 IJK_Field_local_double& bg_jj = tmp_b[15];
1652 IJK_Field_local_double& bg_jk = tmp_b[16];
1653 IJK_Field_local_double& bg_kk = tmp_b[17];
1655 IJK_Field_local_double& af_ii = tmp_a[0];
1656 IJK_Field_local_double& af_ij = tmp_a[1];
1657 IJK_Field_local_double& af_ik = tmp_a[2];
1658 IJK_Field_local_double& af_jj = tmp_a[3];
1659 IJK_Field_local_double& af_jk = tmp_a[4];
1660 IJK_Field_local_double& af_kk = tmp_a[5];
1661 IJK_Field_local_double& auu_ii = tmp_a[6];
1662 IJK_Field_local_double& auu_ij = tmp_a[7];
1663 IJK_Field_local_double& auu_ik = tmp_a[8];
1664 IJK_Field_local_double& auu_jj = tmp_a[9];
1665 IJK_Field_local_double& auu_jk = tmp_a[10];
1666 IJK_Field_local_double& auu_kk = tmp_a[11];
1667 IJK_Field_local_double& ag_ii = tmp_a[12];
1668 IJK_Field_local_double& ag_ij = tmp_a[13];
1669 IJK_Field_local_double& ag_ik = tmp_a[14];
1670 IJK_Field_local_double& ag_jj = tmp_a[15];
1671 IJK_Field_local_double& ag_jk = tmp_a[16];
1672 IJK_Field_local_double& ag_kk = tmp_a[17];
1674 ArrOfDouble& moy_lij_xx = ml[0][0];
1675 ArrOfDouble& moy_lij_xy = ml[0][1];
1676 ArrOfDouble& moy_lij_xz = ml[0][2];
1677 ArrOfDouble& moy_lij_yy = ml[0][3];
1678 ArrOfDouble& moy_lij_yz = ml[0][4];
1679 ArrOfDouble& moy_lij_zz = ml[0][5];
1681 ArrOfDouble& moy_mij_xx = ml[1][0];
1682 ArrOfDouble& moy_mij_xy = ml[1][1];
1683 ArrOfDouble& moy_mij_xz = ml[1][2];
1684 ArrOfDouble& moy_mij_yy = ml[1][3];
1685 ArrOfDouble& moy_mij_yz = ml[1][4];
1686 ArrOfDouble& moy_mij_zz = ml[1][5];
1688 ArrOfDouble& moy_hij_xx = ml[2][0];
1689 ArrOfDouble& moy_hij_xy = ml[2][1];
1690 ArrOfDouble& moy_hij_xz = ml[2][2];
1691 ArrOfDouble& moy_hij_yy = ml[2][3];
1692 ArrOfDouble& moy_hij_yz = ml[2][4];
1693 ArrOfDouble& moy_hij_zz = ml[2][5];
1695 ArrOfDouble& moy_mijmij_xx = ml[3][0];
1696 ArrOfDouble& moy_mijmij_xy = ml[3][1];
1697 ArrOfDouble& moy_mijmij_xz = ml[3][2];
1698 ArrOfDouble& moy_mijmij_yy = ml[3][3];
1699 ArrOfDouble& moy_mijmij_yz = ml[3][4];
1700 ArrOfDouble& moy_mijmij_zz = ml[3][5];
1701 ArrOfDouble& moy_mijmij = ml[3][6];
1703 ArrOfDouble& moy_hijhij_xx = ml[4][0];
1704 ArrOfDouble& moy_hijhij_xy = ml[4][1];
1705 ArrOfDouble& moy_hijhij_xz = ml[4][2];
1706 ArrOfDouble& moy_hijhij_yy = ml[4][3];
1707 ArrOfDouble& moy_hijhij_yz = ml[4][4];
1708 ArrOfDouble& moy_hijhij_zz = ml[4][5];
1709 ArrOfDouble& moy_hijhij = ml[4][6];
1711 ArrOfDouble& moy_mijlij_xx = ml[5][0];
1712 ArrOfDouble& moy_mijlij_xy = ml[5][1];
1713 ArrOfDouble& moy_mijlij_xz = ml[5][2];
1714 ArrOfDouble& moy_mijlij_yy = ml[5][3];
1715 ArrOfDouble& moy_mijlij_yz = ml[5][4];
1716 ArrOfDouble& moy_mijlij_zz = ml[5][5];
1717 ArrOfDouble& moy_mijlij = ml[5][6];
1719 ArrOfDouble& moy_hijlij_xx = ml[6][0];
1720 ArrOfDouble& moy_hijlij_xy = ml[6][1];
1721 ArrOfDouble& moy_hijlij_xz = ml[6][2];
1722 ArrOfDouble& moy_hijlij_yy = ml[6][3];
1723 ArrOfDouble& moy_hijlij_yz = ml[6][4];
1724 ArrOfDouble& moy_hijlij_zz = ml[6][5];
1725 ArrOfDouble& moy_hijlij = ml[6][6];
1727 ArrOfDouble& moy_mijhij_xx = ml[7][0];
1728 ArrOfDouble& moy_mijhij_xy = ml[7][1];
1729 ArrOfDouble& moy_mijhij_xz = ml[7][2];
1730 ArrOfDouble& moy_mijhij_yy = ml[7][3];
1731 ArrOfDouble& moy_mijhij_yz = ml[7][4];
1732 ArrOfDouble& moy_mijhij_zz = ml[7][5];
1733 ArrOfDouble& moy_mijhij = ml[7][6];
1752 const int ghost_size_filter = kernel->ghost_size();
1753 const int size_uniform = kernel->size_uniform();
1754 const int shift_uniform = kernel->shift_uniform();
1755 for (
int k = 0; k < nk; k++)
1757 const int kg = k + offset;
1782 moy_mijmij_xx[kg] = 0;
1783 moy_mijmij_xy[kg] = 0;
1784 moy_mijmij_xz[kg] = 0;
1785 moy_mijmij_yy[kg] = 0;
1786 moy_mijmij_yz[kg] = 0;
1787 moy_mijmij_zz[kg] = 0;
1789 moy_hijhij_xx[kg] = 0;
1790 moy_hijhij_xy[kg] = 0;
1791 moy_hijhij_xz[kg] = 0;
1792 moy_hijhij_yy[kg] = 0;
1793 moy_hijhij_yz[kg] = 0;
1794 moy_hijhij_zz[kg] = 0;
1796 moy_mijlij_xx[kg] = 0;
1797 moy_mijlij_xy[kg] = 0;
1798 moy_mijlij_xz[kg] = 0;
1799 moy_mijlij_yy[kg] = 0;
1800 moy_mijlij_yz[kg] = 0;
1801 moy_mijlij_zz[kg] = 0;
1803 moy_hijlij_xx[kg] = 0;
1804 moy_hijlij_xy[kg] = 0;
1805 moy_hijlij_xz[kg] = 0;
1806 moy_hijlij_yy[kg] = 0;
1807 moy_hijlij_yz[kg] = 0;
1808 moy_hijlij_zz[kg] = 0;
1810 moy_mijhij_xx[kg] = 0;
1811 moy_mijhij_xy[kg] = 0;
1812 moy_mijhij_xz[kg] = 0;
1813 moy_mijhij_yy[kg] = 0;
1814 moy_mijhij_yz[kg] = 0;
1815 moy_mijhij_zz[kg] = 0;
1824 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
1825 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
1827 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
1830 const int size_k_elem = kernel->size_k_elem(kg, nktot);
1831 const int shift_k_elem = kernel->shift_k_elem(kg);
1832 const bool ponderation_filter_kernel = kernel->ponderation();
1833 const bool normalisation_filter_kernel = kernel->normalisation();
1835 double facteur_elem = 0.;
1836 if (ponderation_filter_kernel)
1838 if (normalisation_filter_kernel)
1840 double longueur_elem = 0.;
1841 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1843 const int kpg = kg + kp;
1844 if (kpg<-1 || kpg>nktot)
1846 Cerr <<
"This should not happen." << finl;
1849 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1850 const double filter_coef_z = filter_kernel_z[kp+10];
1851 longueur_elem += filter_coef_z * dz;
1853 facteur_elem = 1./longueur_elem;
1857 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
1861 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
1863 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
1865 buu_ii(i, j, 0) = 0.;
1866 buu_ij(i, j, 0) = 0.;
1867 buu_ik(i, j, 0) = 0.;
1868 buu_jj(i, j, 0) = 0.;
1869 buu_jk(i, j, 0) = 0.;
1870 buu_kk(i, j, 0) = 0.;
1871 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1873 const int kpg = kg + kp;
1874 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1876 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1877 const double filter_coef_z = filter_kernel_z[kp+10];
1878 const double uf_i = vitesse_i(i,j,k+kp);
1879 const double vf_j = vitesse_j(i,j,k+kp);
1880 const double wf_k = vitesse_k(i,j,k+kp);
1882 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
1883 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
1884 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
1886 const double ue = 0.5 * (uf_i + uf_ip1);
1887 const double ve = 0.5 * (vf_j + vf_jp1);
1888 const double we = 0.5 * (wf_k + wf_kp1);
1890 const double uu_e = ue * ue;
1891 const double uv_e = ue * ve;
1892 const double uw_e = ue * we;
1893 const double vv_e = ve * ve;
1894 const double vw_e = ve * we;
1895 const double ww_e = we * we;
1897 if (ponderation_filter_kernel)
1899 buu_ii(i, j, 0) += uu_e * filter_coef_z * dz * facteur_elem;
1900 buu_ij(i, j, 0) += uv_e * filter_coef_z * dz * facteur_elem;
1901 buu_ik(i, j, 0) += uw_e * filter_coef_z * dz * facteur_elem;
1902 buu_jj(i, j, 0) += vv_e * filter_coef_z * dz * facteur_elem;
1903 buu_jk(i, j, 0) += vw_e * filter_coef_z * dz * facteur_elem;
1904 buu_kk(i, j, 0) += ww_e * filter_coef_z * dz * facteur_elem;
1908 buu_ii(i, j, 0) += uu_e * filter_coef_z;
1909 buu_ij(i, j, 0) += uv_e * filter_coef_z;
1910 buu_ik(i, j, 0) += uw_e * filter_coef_z;
1911 buu_jj(i, j, 0) += vv_e * filter_coef_z;
1912 buu_jk(i, j, 0) += vw_e * filter_coef_z;
1913 buu_kk(i, j, 0) += ww_e * filter_coef_z;
1918 if (turbulent_viscosity)
1920 bf_ii(i, j, 0) = 0.;
1921 bf_ij(i, j, 0) = 0.;
1922 bf_ik(i, j, 0) = 0.;
1923 bf_jj(i, j, 0) = 0.;
1924 bf_jk(i, j, 0) = 0.;
1925 bf_kk(i, j, 0) = 0.;
1926 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1928 const int kpg = kg + kp;
1929 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1931 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1932 const double filter_coef_z = filter_kernel_z[kp+10];
1935 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);
1939 const double dz_pour_delta = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z_pour_delta[k+kp];
1940 const double dz_m1_pour_delta = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1+kp];
1941 const double dz_p1_pour_delta = (kpg+1<0 || kpg+1>(nktot-1)) ? 0. : delta_z_pour_delta[k+1+kp];
1942 const double delta_m_pour_delta = (kpg-1<0 || kpg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_m1_pour_delta);
1943 const double delta_p_pour_delta = (kpg<0 || kpg+1>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_p1_pour_delta);
1944 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);
1947 if (ponderation_filter_kernel)
1949 bf_ii(i, j, 0) += f[0][0] * filter_coef_z * dz * facteur_elem;
1950 bf_ij(i, j, 0) += f[0][1] * filter_coef_z * dz * facteur_elem;
1951 bf_ik(i, j, 0) += f[0][2] * filter_coef_z * dz * facteur_elem;
1952 bf_jj(i, j, 0) += f[1][1] * filter_coef_z * dz * facteur_elem;
1953 bf_jk(i, j, 0) += f[1][2] * filter_coef_z * dz * facteur_elem;
1954 bf_kk(i, j, 0) += f[2][2] * filter_coef_z * dz * facteur_elem;
1958 bf_ii(i, j, 0) += f[0][0] * filter_coef_z;
1959 bf_ij(i, j, 0) += f[0][1] * filter_coef_z;
1960 bf_ik(i, j, 0) += f[0][2] * filter_coef_z;
1961 bf_jj(i, j, 0) += f[1][1] * filter_coef_z;
1962 bf_jk(i, j, 0) += f[1][2] * filter_coef_z;
1963 bf_kk(i, j, 0) += f[2][2] * filter_coef_z;
1971 bg_ii(i, j, 0) = 0.;
1972 bg_ij(i, j, 0) = 0.;
1973 bg_ik(i, j, 0) = 0.;
1974 bg_jj(i, j, 0) = 0.;
1975 bg_jk(i, j, 0) = 0.;
1976 bg_kk(i, j, 0) = 0.;
1977 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
1979 const int kpg = kg + kp;
1980 if (!(kernel->is_at_wall_elem(kpg, nktot)))
1982 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
1983 const double filter_coef_z = filter_kernel_z[kp+10];
1984 const double gxx_e = -structural_uu_xx(i,j,k+kp);
1985 const double gyy_e = -structural_uu_yy(i,j,k+kp);
1986 const double gzz_e = -structural_uu_zz(i,j,k+kp);
1988 const double gxy_ij = -structural_uu_xy(i,j,k+kp);
1989 const double gxz_ik = -structural_uu_xz(i,j,k+kp);
1990 const double gyz_jk = -structural_uu_yz(i,j,k+kp);
1992 const double gxy_ip1j = -structural_uu_xy(i+1,j,k+kp);
1993 const double gxz_ip1k = -structural_uu_xz(i+1,j,k+kp);
1994 const double gyz_jp1k = -structural_uu_yz(i,j+1,k+kp);
1996 const double gxy_ijp1 = -structural_uu_xy(i,j+1,k+kp);
1997 const double gxz_ikp1 = kpg==(nktot-1) ? 0. : -structural_uu_xz(i,j,k+1+kp);
1998 const double gyz_jkp1 = kpg==(nktot-1) ? 0. : -structural_uu_yz(i,j,k+1+kp);
2000 const double gxy_ip1jp1 = -structural_uu_xy(i+1,j+1,k+kp);
2001 const double gxz_ip1kp1 = kpg==(nktot-1) ? 0. : -structural_uu_xz(i+1,j,k+1+kp);
2002 const double gyz_jp1kp1 = kpg==(nktot-1) ? 0. : -structural_uu_yz(i,j+1,k+1+kp);
2004 const double gxy_e = 0.25 * (gxy_ij + gxy_ip1j + gxy_ijp1 + gxy_ip1jp1);
2005 const double gxz_e = 0.25 * (gxz_ik + gxz_ip1k + gxz_ikp1 + gxz_ip1kp1);
2006 const double gyz_e = 0.25 * (gyz_jk + gyz_jp1k + gyz_jkp1 + gyz_jp1kp1);
2008 if (ponderation_filter_kernel)
2010 bg_ii(i, j, 0) += gxx_e * filter_coef_z * dz * facteur_elem;
2011 bg_ij(i, j, 0) += gxy_e * filter_coef_z * dz * facteur_elem;
2012 bg_ik(i, j, 0) += gxz_e * filter_coef_z * dz * facteur_elem;
2013 bg_jj(i, j, 0) += gyy_e * filter_coef_z * dz * facteur_elem;
2014 bg_jk(i, j, 0) += gyz_e * filter_coef_z * dz * facteur_elem;
2015 bg_kk(i, j, 0) += gzz_e * filter_coef_z * dz * facteur_elem;
2019 bg_ii(i, j, 0) += gxx_e * filter_coef_z;
2020 bg_ij(i, j, 0) += gxy_e * filter_coef_z;
2021 bg_ik(i, j, 0) += gxz_e * filter_coef_z;
2022 bg_jj(i, j, 0) += gyy_e * filter_coef_z;
2023 bg_jk(i, j, 0) += gyz_e * filter_coef_z;
2024 bg_kk(i, j, 0) += gzz_e * filter_coef_z;
2031 for (
int j = 0; j < nj; j++)
2033 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
2035 auu_ii(i, 0, 0) = 0.;
2036 auu_ij(i, 0, 0) = 0.;
2037 auu_ik(i, 0, 0) = 0.;
2038 auu_jj(i, 0, 0) = 0.;
2039 auu_jk(i, 0, 0) = 0.;
2040 auu_kk(i, 0, 0) = 0.;
2041 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2043 const double filter_coef_y = filter_kernel_y[jp+10];
2044 auu_ii(i, 0, 0) += buu_ii(i, j+jp, 0) * filter_coef_y;
2045 auu_ij(i, 0, 0) += buu_ij(i, j+jp, 0) * filter_coef_y;
2046 auu_ik(i, 0, 0) += buu_ik(i, j+jp, 0) * filter_coef_y;
2047 auu_jj(i, 0, 0) += buu_jj(i, j+jp, 0) * filter_coef_y;
2048 auu_jk(i, 0, 0) += buu_jk(i, j+jp, 0) * filter_coef_y;
2049 auu_kk(i, 0, 0) += buu_kk(i, j+jp, 0) * filter_coef_y;
2051 if (turbulent_viscosity)
2053 af_ii(i, 0, 0) = 0.;
2054 af_ij(i, 0, 0) = 0.;
2055 af_ik(i, 0, 0) = 0.;
2056 af_jj(i, 0, 0) = 0.;
2057 af_jk(i, 0, 0) = 0.;
2058 af_kk(i, 0, 0) = 0.;
2059 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2061 const double filter_coef_y = filter_kernel_y[jp+10];
2062 af_ii(i, 0, 0) += bf_ii(i, j+jp, 0) * filter_coef_y;
2063 af_ij(i, 0, 0) += bf_ij(i, j+jp, 0) * filter_coef_y;
2064 af_ik(i, 0, 0) += bf_ik(i, j+jp, 0) * filter_coef_y;
2065 af_jj(i, 0, 0) += bf_jj(i, j+jp, 0) * filter_coef_y;
2066 af_jk(i, 0, 0) += bf_jk(i, j+jp, 0) * filter_coef_y;
2067 af_kk(i, 0, 0) += bf_kk(i, j+jp, 0) * filter_coef_y;
2072 ag_ii(i, 0, 0) = 0.;
2073 ag_ij(i, 0, 0) = 0.;
2074 ag_ik(i, 0, 0) = 0.;
2075 ag_jj(i, 0, 0) = 0.;
2076 ag_jk(i, 0, 0) = 0.;
2077 ag_kk(i, 0, 0) = 0.;
2078 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
2080 const double filter_coef_y = filter_kernel_y[jp+10];
2081 ag_ii(i, 0, 0) += bg_ii(i, j+jp, 0) * filter_coef_y;
2082 ag_ij(i, 0, 0) += bg_ij(i, j+jp, 0) * filter_coef_y;
2083 ag_ik(i, 0, 0) += bg_ik(i, j+jp, 0) * filter_coef_y;
2084 ag_jj(i, 0, 0) += bg_jj(i, j+jp, 0) * filter_coef_y;
2085 ag_jk(i, 0, 0) += bg_jk(i, j+jp, 0) * filter_coef_y;
2086 ag_kk(i, 0, 0) += bg_kk(i, j+jp, 0) * filter_coef_y;
2091 for (
int i = 0; i < ni; i++)
2099 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2101 const double filter_coef_x = filter_kernel_x[ip+10];
2102 ruu_ii += auu_ii(i+ip, 0, 0) * filter_coef_x;
2103 ruu_ij += auu_ij(i+ip, 0, 0) * filter_coef_x;
2104 ruu_ik += auu_ik(i+ip, 0, 0) * filter_coef_x;
2105 ruu_jj += auu_jj(i+ip, 0, 0) * filter_coef_x;
2106 ruu_jk += auu_jk(i+ip, 0, 0) * filter_coef_x;
2107 ruu_kk += auu_kk(i+ip, 0, 0) * filter_coef_x;
2110 const double uf_i = vitesse_i_filtre(i,j,k);
2111 const double vf_j = vitesse_j_filtre(i,j,k);
2112 const double wf_k = vitesse_k_filtre(i,j,k);
2114 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
2115 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
2116 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
2118 const double ue = 0.5 * (uf_i + uf_ip1);
2119 const double ve = 0.5 * (vf_j + vf_jp1);
2120 const double we = 0.5 * (wf_k + wf_kp1);
2122 const double l_ii = ruu_ii - ue*ue;
2123 const double l_ij = ruu_ij - ue*ve;
2124 const double l_ik = ruu_ik - ue*we;
2125 const double l_jj = ruu_jj - ve*ve;
2126 const double l_jk = ruu_jk - ve*we;
2127 const double l_kk = ruu_kk - we*we;
2131 moy_lij_xx[kg] += l_ii;
2132 moy_lij_xy[kg] += l_ij;
2133 moy_lij_xz[kg] += l_ik;
2134 moy_lij_yy[kg] += l_jj;
2135 moy_lij_yz[kg] += l_jk;
2136 moy_lij_zz[kg] += l_kk;
2139 if (turbulent_viscosity)
2147 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2149 const double filter_coef_x = filter_kernel_x[ip+10];
2150 rf_ii += af_ii(i+ip, 0, 0) * filter_coef_x;
2151 rf_ij += af_ij(i+ip, 0, 0) * filter_coef_x;
2152 rf_ik += af_ik(i+ip, 0, 0) * filter_coef_x;
2153 rf_jj += af_jj(i+ip, 0, 0) * filter_coef_x;
2154 rf_jk += af_jk(i+ip, 0, 0) * filter_coef_x;
2155 rf_kk += af_kk(i+ip, 0, 0) * filter_coef_x;
2160 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);
2164 const double dx_filtre = facteur_delta_filtre_x*dx;
2165 const double dy_filtre = facteur_delta_filtre_y*dy;
2166 const double dz_filtre = delta_z_pour_delta_filtre[k];
2167 const double delta_m_filtre = kg==0 ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k-1]);
2168 const double delta_p_filtre = kg==(nktot-1) ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k+1]);
2169 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);
2172 m_ii = f_filtre[0][0] - rf_ii;
2173 m_ij = f_filtre[0][1] - rf_ij;
2174 m_ik = f_filtre[0][2] - rf_ik;
2175 m_jj = f_filtre[1][1] - rf_jj;
2176 m_jk = f_filtre[1][2] - rf_jk;
2177 m_kk = f_filtre[2][2] - rf_kk;
2179 const double mijmij = m_ii * m_ii
2189 const double mijlij = m_ii * l_ii
2199 moy_mijmij[kg] += mijmij;
2200 moy_mijlij[kg] += mijlij;
2204 moy_mij_xx[kg] += m_ii;
2205 moy_mij_xy[kg] += m_ij;
2206 moy_mij_xz[kg] += m_ik;
2207 moy_mij_yy[kg] += m_jj;
2208 moy_mij_yz[kg] += m_jk;
2209 moy_mij_zz[kg] += m_kk;
2211 moy_mijmij_xx[kg] += m_ii * m_ii;
2212 moy_mijmij_xy[kg] += m_ij * m_ij;
2213 moy_mijmij_xz[kg] += m_ik * m_ik;
2214 moy_mijmij_yy[kg] += m_jj * m_jj;
2215 moy_mijmij_yz[kg] += m_jk * m_jk;
2216 moy_mijmij_zz[kg] += m_kk * m_kk;
2218 moy_mijlij_xx[kg] += m_ii * l_ii;
2219 moy_mijlij_xy[kg] += m_ij * l_ij;
2220 moy_mijlij_xz[kg] += m_ik * l_ik;
2221 moy_mijlij_yy[kg] += m_jj * l_jj;
2222 moy_mijlij_yz[kg] += m_jk * l_jk;
2223 moy_mijlij_zz[kg] += m_kk * l_kk;
2235 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
2237 const double filter_coef_x = filter_kernel_x[ip+10];
2238 rg_ii += ag_ii(i+ip, 0, 0) * filter_coef_x;
2239 rg_ij += ag_ij(i+ip, 0, 0) * filter_coef_x;
2240 rg_ik += ag_ik(i+ip, 0, 0) * filter_coef_x;
2241 rg_jj += ag_jj(i+ip, 0, 0) * filter_coef_x;
2242 rg_jk += ag_jk(i+ip, 0, 0) * filter_coef_x;
2243 rg_kk += ag_kk(i+ip, 0, 0) * filter_coef_x;
2246 const double gxx_e = -structural_uu_filtre_xx(i,j,k);
2247 const double gyy_e = -structural_uu_filtre_yy(i,j,k);
2248 const double gzz_e = -structural_uu_filtre_zz(i,j,k);
2250 const double gxy_ij = -structural_uu_filtre_xy(i,j,k);
2251 const double gxz_ik = -structural_uu_filtre_xz(i,j,k);
2252 const double gyz_jk = -structural_uu_filtre_yz(i,j,k);
2254 const double gxy_ip1j = -structural_uu_filtre_xy(i+1,j,k);
2255 const double gxz_ip1k = -structural_uu_filtre_xz(i+1,j,k);
2256 const double gyz_jp1k = -structural_uu_filtre_yz(i,j+1,k);
2258 const double gxy_ijp1 = -structural_uu_filtre_xy(i,j+1,k);
2259 const double gxz_ikp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_xz(i,j,k+1);
2260 const double gyz_jkp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_yz(i,j,k+1);
2262 const double gxy_ip1jp1 = -structural_uu_filtre_xy(i+1,j+1,k);
2263 const double gxz_ip1kp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_xz(i+1,j,k+1);
2264 const double gyz_jp1kp1 = kg==(nktot-1) ? 0. : -structural_uu_filtre_yz(i,j+1,k+1);
2266 const double gxy_e = 0.25 * (gxy_ij + gxy_ip1j + gxy_ijp1 + gxy_ip1jp1);
2267 const double gxz_e = 0.25 * (gxz_ik + gxz_ip1k + gxz_ikp1 + gxz_ip1kp1);
2268 const double gyz_e = 0.25 * (gyz_jk + gyz_jp1k + gyz_jkp1 + gyz_jp1kp1);
2270 h_ii = gxx_e - rg_ii;
2271 h_ij = gxy_e - rg_ij;
2272 h_ik = gxz_e - rg_ik;
2273 h_jj = gyy_e - rg_jj;
2274 h_jk = gyz_e - rg_jk;
2275 h_kk = gzz_e - rg_kk;
2277 const double hijhij = h_ii * h_ii
2287 const double hijlij = h_ii * l_ii
2297 moy_hijhij[kg] += hijhij;
2298 moy_hijlij[kg] += hijlij;
2302 moy_hij_xx[kg] += h_ii;
2303 moy_hij_xy[kg] += h_ij;
2304 moy_hij_xz[kg] += h_ik;
2305 moy_hij_yy[kg] += h_jj;
2306 moy_hij_yz[kg] += h_jk;
2307 moy_hij_zz[kg] += h_kk;
2309 moy_hijhij_xx[kg] += h_ii * h_ii;
2310 moy_hijhij_xy[kg] += h_ij * h_ij;
2311 moy_hijhij_xz[kg] += h_ik * h_ik;
2312 moy_hijhij_yy[kg] += h_jj * h_jj;
2313 moy_hijhij_yz[kg] += h_jk * h_jk;
2314 moy_hijhij_zz[kg] += h_kk * h_kk;
2316 moy_hijlij_xx[kg] += h_ii * l_ii;
2317 moy_hijlij_xy[kg] += h_ij * l_ij;
2318 moy_hijlij_xz[kg] += h_ik * l_ik;
2319 moy_hijlij_yy[kg] += h_jj * l_jj;
2320 moy_hijlij_yz[kg] += h_jk * l_jk;
2321 moy_hijlij_zz[kg] += h_kk * l_kk;
2324 if (turbulent_viscosity)
2326 const double mijhij = m_ii * h_ii
2336 moy_mijhij[kg] += mijhij;
2340 moy_mijhij_xx[kg] += m_ii * h_ii;
2341 moy_mijhij_xy[kg] += m_ij * h_ij;
2342 moy_mijhij_xz[kg] += m_ik * h_ik;
2343 moy_mijhij_yy[kg] += m_jj * h_jj;
2344 moy_mijhij_yz[kg] += m_jk * h_jk;
2345 moy_mijhij_zz[kg] += m_kk * h_kk;
2354void calculer_constante_direct(
const bool global,
2355 const bool clipping,
2356 const Nom& description,
2357 const ArrOfDouble& moy_mij_0,
2358 const ArrOfDouble& moy_lij_0,
2359 const bool flag_mixte,
2360 const ArrOfDouble& moy_hij_0,
2361 const IJK_Field_vector3_double& velocity,
2362 const ArrOfDouble_with_ghost& delta_z,
2363 ArrOfDouble_with_ghost& constante_modele)
2365 const IJK_Field_double& vitesse_k = velocity[2];
2368 ArrOfDouble moy_mij = moy_mij_0;
2369 ArrOfDouble moy_lij = moy_lij_0;
2370 ArrOfDouble moy_hij = moy_hij_0;
2372 const int nk = vitesse_k.
nk();
2376 "Dynamic correction of constant [ " << description <<
2377 " ] type= direct global= " << (int)global <<
2378 " clipping= " << (
int)clipping <<
2379 " mixte= " << (int)flag_mixte <<
" :"
2384 double moy_mij_global = 0;
2385 double moy_lij_global = 0;
2386 double moy_hij_global = 0;
2387 for (
int k = 0; k < nk; k++)
2389 const int kg = k + offset;
2391 moy_mij_global += moy_mij[kg]*delta_z[k];
2392 moy_lij_global += moy_lij[kg]*delta_z[k];
2395 moy_hij_global += moy_hij[kg]*delta_z[k];
2400 tmp[0] = moy_mij_global;
2401 tmp[1] = moy_lij_global;
2402 tmp[2] = moy_hij_global;
2405 double c_global = (tmp[0]==0.) ? 1. : (tmp[1] - tmp[2])/tmp[0];
2408 c_global = max(0., c_global);
2410 Cout <<
"(global) constante_modele= " << c_global << finl;
2412 for (
int k = 0; k < nk; k++)
2414 constante_modele[k] = c_global;
2426 for (
int k = 0; k < nk; k++)
2428 const int kg = k + offset;
2432 constante_modele[k] = (moy_mij[kg]==0.) ? 1. : (moy_lij[kg] - moy_hij[kg])/moy_mij[kg];
2436 constante_modele[k] = (moy_mij[kg]==0.) ? 1. : moy_lij[kg]/moy_mij[kg];
2440 constante_modele[k] = max(0., constante_modele[k]);
2442 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2447void calculer_constante_lilly(
const bool global,
2448 const bool clipping,
2449 const Nom& description,
2450 const ArrOfDouble& moy_mijmij_0,
2451 const ArrOfDouble& moy_mijlij_0,
2452 const bool flag_mixte,
2453 const ArrOfDouble& moy_mijhij_0,
2454 const IJK_Field_vector3_double& velocity,
2455 const ArrOfDouble_with_ghost& delta_z,
2456 ArrOfDouble_with_ghost& constante_modele)
2458 const IJK_Field_double& vitesse_k = velocity[2];
2461 ArrOfDouble moy_mijmij = moy_mijmij_0;
2462 ArrOfDouble moy_mijlij = moy_mijlij_0;
2463 ArrOfDouble moy_mijhij = moy_mijhij_0;
2465 const int nk = vitesse_k.
nk();
2468 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= lilly global= " << (int)global <<
" clipping= " << (
int)clipping <<
" mixte= " << (int)flag_mixte <<
" :" << finl;
2472 double moy_mijmij_global = 0;
2473 double moy_mijlij_global = 0;
2474 double moy_mijhij_global = 0;
2475 for (
int k = 0; k < nk; k++)
2477 const int kg = k + offset;
2479 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2480 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2483 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2488 tmp[0] = moy_mijmij_global;
2489 tmp[1] = moy_mijlij_global;
2490 tmp[2] = moy_mijhij_global;
2493 double c_global = (tmp[0]==0.) ? 1. : (tmp[1] - tmp[2])/tmp[0];
2496 c_global = max(0., c_global);
2498 Cout <<
"(global) constante_modele= " << c_global << finl;
2500 for (
int k = 0; k < nk; k++)
2502 constante_modele[k] = c_global;
2514 for (
int k = 0; k < nk; k++)
2516 const int kg = k + offset;
2520 constante_modele[k] = (moy_mijmij[kg]==0.) ? 1. : (moy_mijlij[kg] - moy_mijhij[kg])/moy_mijmij[kg];
2524 constante_modele[k] = (moy_mijmij[kg]==0.) ? 1. : moy_mijlij[kg]/moy_mijmij[kg];
2528 constante_modele[k] = max(0., constante_modele[k]);
2530 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2535void calculer_constante_twoparameters(
const bool global,
2536 const bool clipping,
2537 const Nom& description,
2538 const ArrOfDouble& moy_mijmij_0,
2539 const ArrOfDouble& moy_hijhij_0,
2540 const ArrOfDouble& moy_mijlij_0,
2541 const ArrOfDouble& moy_hijlij_0,
2542 const ArrOfDouble& moy_mijhij_0,
2543 const IJK_Field_vector3_double& velocity,
2544 const ArrOfDouble_with_ghost& delta_z,
2545 ArrOfDouble_with_ghost& constante_modele)
2547 const IJK_Field_double& vitesse_k = velocity[2];
2550 ArrOfDouble moy_mijmij = moy_mijmij_0;
2551 ArrOfDouble moy_hijhij = moy_hijhij_0;
2552 ArrOfDouble moy_mijlij = moy_mijlij_0;
2553 ArrOfDouble moy_hijlij = moy_hijlij_0;
2554 ArrOfDouble moy_mijhij = moy_mijhij_0;
2556 const int nk = vitesse_k.
nk();
2559 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= twoparameters global= " << (int)global <<
" clipping= " << (
int)clipping <<
" :" << finl;
2563 double moy_mijmij_global = 0;
2564 double moy_hijhij_global = 0;
2565 double moy_mijlij_global = 0;
2566 double moy_hijlij_global = 0;
2567 double moy_mijhij_global = 0;
2568 for (
int k = 0; k < nk; k++)
2570 const int kg = k + offset;
2572 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2573 moy_hijhij_global += moy_hijhij[kg]*delta_z[k];
2574 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2575 moy_hijlij_global += moy_hijlij[kg]*delta_z[k];
2576 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2580 tmp[0] = moy_mijmij_global;
2581 tmp[1] = moy_hijhij_global;
2582 tmp[2] = moy_mijlij_global;
2583 tmp[3] = moy_hijlij_global;
2584 tmp[4] = moy_mijhij_global;
2587 double c_global = ((tmp[0]*tmp[1] - tmp[4]*tmp[4])==0.) ? 1. :
2588 (tmp[2]*tmp[1] - tmp[3]*tmp[4])/(tmp[0]*tmp[1] - tmp[4]*tmp[4]);
2591 c_global = max(0., c_global);
2593 Cout <<
"(global) constante_modele= " << c_global << finl;
2595 for (
int k = 0; k < nk; k++)
2597 constante_modele[k] = c_global;
2608 for (
int k = 0; k < nk; k++)
2610 const int kg = k + offset;
2612 constante_modele[k] = ((moy_mijmij[kg]*moy_hijhij[kg] - moy_mijhij[kg]*moy_mijhij[kg])==0.) ? 1. :
2613 (moy_mijlij[kg]*moy_hijhij[kg] - moy_hijlij[kg]*moy_mijhij[kg])/(moy_mijmij[kg]*moy_hijhij[kg] - moy_mijhij[kg]*moy_mijhij[kg]);
2616 constante_modele[k] = max(0., constante_modele[k]);
2618 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2623void calculer_constante_twonoerror(
const bool global,
2624 const bool clipping,
2625 const Nom& description,
2626 const ArrOfDouble& moy_lij_0,
2627 const ArrOfDouble& moy_mij_0,
2628 const ArrOfDouble& moy_hij_0,
2629 const ArrOfDouble& moy_mijmij_0,
2630 const ArrOfDouble& moy_hijhij_0,
2631 const ArrOfDouble& moy_mijlij_0,
2632 const ArrOfDouble& moy_hijlij_0,
2633 const ArrOfDouble& moy_mijhij_0,
2634 const IJK_Field_vector3_double& velocity,
2635 const ArrOfDouble_with_ghost& delta_z,
2636 ArrOfDouble_with_ghost& constante_modele)
2638 const IJK_Field_double& vitesse_k = velocity[2];
2641 ArrOfDouble moy_lij = moy_lij_0;
2642 ArrOfDouble moy_mij = moy_mij_0;
2643 ArrOfDouble moy_hij = moy_hij_0;
2644 ArrOfDouble moy_mijmij = moy_mijmij_0;
2645 ArrOfDouble moy_hijhij = moy_hijhij_0;
2646 ArrOfDouble moy_mijlij = moy_mijlij_0;
2647 ArrOfDouble moy_hijlij = moy_hijlij_0;
2648 ArrOfDouble moy_mijhij = moy_mijhij_0;
2650 const int nk = vitesse_k.
nk();
2653 Cout <<
"Dynamic correction of constant [ " << description <<
" ] type= twonoerror global= " << (int)global <<
" clipping= " << (
int)clipping <<
" :" << finl;
2657 double moy_lij_global = 0;
2658 double moy_mij_global = 0;
2659 double moy_hij_global = 0;
2660 double moy_mijmij_global = 0;
2661 double moy_hijhij_global = 0;
2662 double moy_mijlij_global = 0;
2663 double moy_hijlij_global = 0;
2664 double moy_mijhij_global = 0;
2665 for (
int k = 0; k < nk; k++)
2667 const int kg = k + offset;
2669 moy_lij_global += moy_lij[kg]*delta_z[k];
2670 moy_mij_global += moy_mij[kg]*delta_z[k];
2671 moy_hij_global += moy_hij[kg]*delta_z[k];
2672 moy_mijmij_global += moy_mijmij[kg]*delta_z[k];
2673 moy_hijhij_global += moy_hijhij[kg]*delta_z[k];
2674 moy_mijlij_global += moy_mijlij[kg]*delta_z[k];
2675 moy_hijlij_global += moy_hijlij[kg]*delta_z[k];
2676 moy_mijhij_global += moy_mijhij[kg]*delta_z[k];
2680 tmp[0] = moy_lij_global;
2681 tmp[1] = moy_mij_global;
2682 tmp[2] = moy_hij_global;
2683 tmp[3] = moy_mijmij_global;
2684 tmp[4] = moy_hijhij_global;
2685 tmp[5] = moy_mijlij_global;
2686 tmp[6] = moy_hijlij_global;
2687 tmp[7] = moy_mijhij_global;
2690 double c_global = ((tmp[2]*tmp[3] - tmp[1]*tmp[7] + tmp[2]*tmp[7] - tmp[1]*tmp[4])==0.) ? 1. :
2691 (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]);
2694 c_global = max(0., c_global);
2696 Cout <<
"(global) constante_modele= " << c_global << finl;
2698 for (
int k = 0; k < nk; k++)
2700 constante_modele[k] = c_global;
2714 for (
int k = 0; k < nk; k++)
2716 const int kg = k + offset;
2718 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. :
2719 (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]);
2722 constante_modele[k] = max(0., constante_modele[k]);
2724 Cout <<
"k= " << kg <<
" constante_modele= " << constante_modele[k] << finl;
2729void multiplier_par_constante(
const bool face,
2730 ArrOfDouble_with_ghost& constante_modele,
2731 const IJK_Field_vector3_double& velocity,
2732 IJK_Field_double& turbulent_mu)
2734 const IJK_Field_double& vitesse_k = velocity[2];
2737 const int ni = vitesse_k.
ni();
2738 const int nj = vitesse_k.
nj();
2739 const int nk = vitesse_k.
nk();
2743 for (
int k = 0; k < nk; k++)
2745 for (
int j = 0; j < nj; j++)
2747 for (
int i = 0; i < ni; i++)
2749 const int kg = k + offset;
2750 const double constante_face = kg==0 ? 0. : 0.5*(constante_modele[k] + constante_modele[k-1]);
2751 turbulent_mu(i,j,k) = constante_face * turbulent_mu(i,j,k);
2758 for (
int k = 0; k < nk; k++)
2760 for (
int j = 0; j < nj; j++)
2762 for (
int i = 0; i < ni; i++)
2764 turbulent_mu(i,j,k) = constante_modele[k] * turbulent_mu(i,j,k);
2771bool calculer_constante_modele(
const Nom& turbulent_viscosity_dynamic_type,
2772 const Nom& description,
2773 const ArrOfDouble& moy_lij,
2774 const ArrOfDouble& moy_mij,
2775 const ArrOfDouble& moy_hij,
2776 const ArrOfDouble& moy_mijmij,
2777 const ArrOfDouble& moy_hijhij,
2778 const ArrOfDouble& moy_mijlij,
2779 const ArrOfDouble& moy_hijlij,
2780 const ArrOfDouble& moy_mijhij,
2781 const IJK_Field_vector3_double& velocity,
2782 const ArrOfDouble_with_ghost& delta_z,
2783 ArrOfDouble_with_ghost& constante_modele)
2785 bool mot_cle_reconnu = 0;
2787 const bool clipping = turbulent_viscosity_dynamic_type.
finit_par(
"clipping");
2788 Nom dynamic_type = clipping ? turbulent_viscosity_dynamic_type.
getPrefix(
"clipping") : turbulent_viscosity_dynamic_type;
2790 const bool global = dynamic_type.
finit_par(
"global");
2791 dynamic_type = global ? dynamic_type.
getPrefix(
"global") : dynamic_type;
2793 if ( dynamic_type ==
Nom(
"direct")
2794 || dynamic_type ==
Nom(
"directmixte") )
2796 mot_cle_reconnu = 1;
2797 const bool mixte = ( dynamic_type ==
Nom(
"directmixte") );
2799 calculer_constante_direct(global, clipping,
2806 else if ( dynamic_type ==
Nom(
"lilly")
2807 || dynamic_type ==
Nom(
"lillymixte") )
2809 mot_cle_reconnu = 1;
2810 const bool mixte = ( dynamic_type ==
Nom(
"lillymixte") );
2812 calculer_constante_lilly(global, clipping,
2814 moy_mijmij, moy_mijlij,
2819 else if ( dynamic_type ==
Nom(
"twoparameters") )
2821 mot_cle_reconnu = 1;
2822 calculer_constante_twoparameters(global, clipping,
2824 moy_mijmij, moy_hijhij,
2825 moy_mijlij, moy_hijlij,
2830 else if ( dynamic_type ==
Nom(
"twonoerror") )
2832 mot_cle_reconnu = 1;
2833 calculer_constante_twonoerror(global, clipping,
2835 moy_lij, moy_mij, moy_hij,
2836 moy_mijmij, moy_hijhij,
2837 moy_mijlij, moy_hijlij,
2842 return mot_cle_reconnu;
2846void calculer_ml_dynamic_uscalar_vector(
const bool anisotropic,
2847 const bool vectorial,
2848 const IJK_Field_vector3_double& velocity,
2849 const IJK_Field_vector3_double& velocity_filtre,
2850 const IJK_Field_double& champ_scalar,
2851 const IJK_Field_double& champ_scalar_filtre,
2852 double scalar_kmin,
double scalar_kmax,
2853 const int turbulent_viscosity,
2854 const IJK_Field_double& turbulent_mu_x,
2855 const IJK_Field_double& turbulent_mu_y,
2856 const IJK_Field_double& turbulent_mu_z,
2857 const IJK_Field_double& turbulent_mu_filtre_x,
2858 const IJK_Field_double& turbulent_mu_filtre_y,
2859 const IJK_Field_double& turbulent_mu_filtre_z,
2860 const int structural_uscalar,
2861 const IJK_Field_vector3_double& structural_uscalar_vector,
2862 const IJK_Field_vector3_double& structural_uscalar_filtre_vector,
2863 const ArrOfDouble_with_ghost& delta_z,
2864 const double facteur_delta_x,
2865 const double facteur_delta_y,
2866 const ArrOfDouble_with_ghost& delta_z_pour_delta,
2867 const double facteur_delta_filtre_x,
2868 const double facteur_delta_filtre_y,
2869 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
2875 const IJK_Field_double& vitesse_i = velocity[0];
2876 const IJK_Field_double& vitesse_j = velocity[1];
2877 const IJK_Field_double& vitesse_k = velocity[2];
2879 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
2880 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
2881 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
2883 const IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
2884 const IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
2885 const IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
2887 const IJK_Field_double& structural_uscalar_filtre_x = structural_uscalar_filtre_vector[0];
2888 const IJK_Field_double& structural_uscalar_filtre_y = structural_uscalar_filtre_vector[1];
2889 const IJK_Field_double& structural_uscalar_filtre_z = structural_uscalar_filtre_vector[2];
2893 const double dx_pour_delta = facteur_delta_x*dx;
2894 const double dy_pour_delta = facteur_delta_y*dy;
2896 const int ni = vitesse_k.
ni();
2897 const int nj = vitesse_k.
nj();
2898 const int nk = vitesse_k.
nk();
2903 IJK_Field_local_double& bf_i = tmp_b[0];
2904 IJK_Field_local_double& bf_j = tmp_b[1];
2905 IJK_Field_local_double& bf_k = tmp_b[2];
2906 IJK_Field_local_double& bus_i = tmp_b[3];
2907 IJK_Field_local_double& bus_j = tmp_b[4];
2908 IJK_Field_local_double& bus_k = tmp_b[5];
2909 IJK_Field_local_double& bg_i = tmp_b[6];
2910 IJK_Field_local_double& bg_j = tmp_b[7];
2911 IJK_Field_local_double& bg_k = tmp_b[8];
2913 IJK_Field_local_double& af_i = tmp_a[0];
2914 IJK_Field_local_double& af_j = tmp_a[1];
2915 IJK_Field_local_double& af_k = tmp_a[2];
2916 IJK_Field_local_double& aus_i = tmp_a[3];
2917 IJK_Field_local_double& aus_j = tmp_a[4];
2918 IJK_Field_local_double& aus_k = tmp_a[5];
2919 IJK_Field_local_double& ag_i = tmp_a[6];
2920 IJK_Field_local_double& ag_j = tmp_a[7];
2921 IJK_Field_local_double& ag_k = tmp_a[8];
2923 ArrOfDouble& moy_li_x = ml[0][0];
2924 ArrOfDouble& moy_li_y = ml[0][1];
2925 ArrOfDouble& moy_li_z = ml[0][2];
2927 ArrOfDouble& moy_mi_x = ml[1][0];
2928 ArrOfDouble& moy_mi_y = ml[1][1];
2929 ArrOfDouble& moy_mi_z = ml[1][2];
2931 ArrOfDouble& moy_hi_x = ml[2][0];
2932 ArrOfDouble& moy_hi_y = ml[2][1];
2933 ArrOfDouble& moy_hi_z = ml[2][2];
2935 ArrOfDouble& moy_mimi_x = ml[3][0];
2936 ArrOfDouble& moy_mimi_y = ml[3][1];
2937 ArrOfDouble& moy_mimi_z = ml[3][2];
2938 ArrOfDouble& moy_mimi = ml[3][6];
2940 ArrOfDouble& moy_hihi_x = ml[4][0];
2941 ArrOfDouble& moy_hihi_y = ml[4][1];
2942 ArrOfDouble& moy_hihi_z = ml[4][2];
2943 ArrOfDouble& moy_hihi = ml[4][6];
2945 ArrOfDouble& moy_mili_x = ml[5][0];
2946 ArrOfDouble& moy_mili_y = ml[5][1];
2947 ArrOfDouble& moy_mili_z = ml[5][2];
2948 ArrOfDouble& moy_mili = ml[5][6];
2950 ArrOfDouble& moy_hili_x = ml[6][0];
2951 ArrOfDouble& moy_hili_y = ml[6][1];
2952 ArrOfDouble& moy_hili_z = ml[6][2];
2953 ArrOfDouble& moy_hili = ml[6][6];
2955 ArrOfDouble& moy_mihi_x = ml[7][0];
2956 ArrOfDouble& moy_mihi_y = ml[7][1];
2957 ArrOfDouble& moy_mihi_z = ml[7][2];
2958 ArrOfDouble& moy_mihi = ml[7][6];
2971 const int ghost_size_filter = kernel->ghost_size();
2972 const int size_uniform = kernel->size_uniform();
2973 const int shift_uniform = kernel->shift_uniform();
2974 for (
int k = 0; k < nk; k++)
2976 const int kg = k + offset;
3019 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
3020 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
3022 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
3025 const int size_k_elem = kernel->size_k_elem(kg, nktot);
3026 const int shift_k_elem = kernel->shift_k_elem(kg);
3027 const bool ponderation_filter_kernel = kernel->ponderation();
3028 const bool normalisation_filter_kernel = kernel->normalisation();
3030 double facteur_elem = 0.;
3031 if (ponderation_filter_kernel)
3033 if (normalisation_filter_kernel)
3035 double longueur_elem = 0.;
3036 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3038 const int kpg = kg + kp;
3039 if (kpg<-1 || kpg>nktot)
3041 Cerr <<
"This should not happen." << finl;
3044 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3045 const double filter_coef_z = filter_kernel_z[kp+10];
3046 longueur_elem += filter_coef_z * dz;
3048 facteur_elem = 1./longueur_elem;
3052 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
3056 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
3058 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
3060 bus_i(i, j, 0) = 0.;
3061 bus_j(i, j, 0) = 0.;
3062 bus_k(i, j, 0) = 0.;
3063 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3065 const int kpg = kg + kp;
3066 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3068 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3069 const double filter_coef_z = filter_kernel_z[kp+10];
3070 const double scalar = champ_scalar(i,j,k+kp);
3072 const double uf_i = vitesse_i(i,j,k+kp);
3073 const double vf_j = vitesse_j(i,j,k+kp);
3074 const double wf_k = vitesse_k(i,j,k+kp);
3076 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
3077 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
3078 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
3080 const double ue = 0.5 * (uf_i + uf_ip1);
3081 const double ve = 0.5 * (vf_j + vf_jp1);
3082 const double we = 0.5 * (wf_k + wf_kp1);
3084 if (ponderation_filter_kernel)
3086 bus_i(i, j, 0) += ue*scalar * filter_coef_z * dz * facteur_elem;
3087 bus_j(i, j, 0) += ve*scalar * filter_coef_z * dz * facteur_elem;
3088 bus_k(i, j, 0) += we*scalar * filter_coef_z * dz * facteur_elem;
3092 bus_i(i, j, 0) += ue*scalar * filter_coef_z;
3093 bus_j(i, j, 0) += ve*scalar * filter_coef_z;
3094 bus_k(i, j, 0) += we*scalar * filter_coef_z;
3099 if (turbulent_viscosity)
3104 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3106 const int kpg = kg + kp;
3107 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3109 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3110 const double filter_coef_z = filter_kernel_z[kp+10];
3113 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);
3117 const double dz_pour_delta = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z_pour_delta[k+kp];
3118 const double dz_m1_pour_delta = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1+kp];
3119 const double dz_p1_pour_delta = (kpg+1<0 || kpg+1>(nktot-1)) ? 0. : delta_z_pour_delta[k+1+kp];
3120 const double delta_m_pour_delta = (kpg-1<0 || kpg>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_m1_pour_delta);
3121 const double delta_p_pour_delta = (kpg<0 || kpg+1>(nktot-1)) ? 0. : 0.5*(dz_pour_delta + dz_p1_pour_delta);
3122 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);
3125 if (ponderation_filter_kernel)
3127 bf_i(i, j, 0) += f[0] * filter_coef_z * dz * facteur_elem;
3128 bf_j(i, j, 0) += f[1] * filter_coef_z * dz * facteur_elem;
3129 bf_k(i, j, 0) += f[2] * filter_coef_z * dz * facteur_elem;
3133 bf_i(i, j, 0) += f[0] * filter_coef_z;
3134 bf_j(i, j, 0) += f[1] * filter_coef_z;
3135 bf_k(i, j, 0) += f[2] * filter_coef_z;
3141 if (structural_uscalar)
3146 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
3148 const int kpg = kg + kp;
3149 if (!(kernel->is_at_wall_elem(kpg, nktot)))
3151 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
3152 const double filter_coef_z = filter_kernel_z[kp+10];
3153 const double gxf_i = -structural_uscalar_x(i,j,k+kp);
3154 const double gyf_j = -structural_uscalar_y(i,j,k+kp);
3155 const double gzf_k = -structural_uscalar_z(i,j,k+kp);
3157 const double gxf_ip1 = -structural_uscalar_x(i+1,j,k+kp);
3158 const double gyf_jp1 = -structural_uscalar_y(i,j+1,k+kp);
3159 const double gzf_kp1 = kpg==(nktot-1) ? 0. : -structural_uscalar_z(i,j,k+1+kp);
3161 const double gx_e = 0.5 * (gxf_i + gxf_ip1);
3162 const double gy_e = 0.5 * (gyf_j + gyf_jp1);
3163 const double gz_e = 0.5 * (gzf_k + gzf_kp1);
3165 if (ponderation_filter_kernel)
3167 bg_i(i, j, 0) += gx_e * filter_coef_z * dz * facteur_elem;
3168 bg_j(i, j, 0) += gy_e * filter_coef_z * dz * facteur_elem;
3169 bg_k(i, j, 0) += gz_e * filter_coef_z * dz * facteur_elem;
3173 bg_i(i, j, 0) += gx_e * filter_coef_z;
3174 bg_j(i, j, 0) += gy_e * filter_coef_z;
3175 bg_k(i, j, 0) += gz_e * filter_coef_z;
3182 for (
int j = 0; j < nj; j++)
3184 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
3186 aus_i(i, 0, 0) = 0.;
3187 aus_j(i, 0, 0) = 0.;
3188 aus_k(i, 0, 0) = 0.;
3189 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3191 const double filter_coef_y = filter_kernel_y[jp+10];
3192 aus_i(i, 0, 0) += bus_i(i, j+jp, 0) * filter_coef_y;
3193 aus_j(i, 0, 0) += bus_j(i, j+jp, 0) * filter_coef_y;
3194 aus_k(i, 0, 0) += bus_k(i, j+jp, 0) * filter_coef_y;
3196 if (turbulent_viscosity)
3201 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3203 const double filter_coef_y = filter_kernel_y[jp+10];
3204 af_i(i, 0, 0) += bf_i(i, j+jp, 0) * filter_coef_y;
3205 af_j(i, 0, 0) += bf_j(i, j+jp, 0) * filter_coef_y;
3206 af_k(i, 0, 0) += bf_k(i, j+jp, 0) * filter_coef_y;
3209 if (structural_uscalar)
3214 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
3216 const double filter_coef_y = filter_kernel_y[jp+10];
3217 ag_i(i, 0, 0) += bg_i(i, j+jp, 0) * filter_coef_y;
3218 ag_j(i, 0, 0) += bg_j(i, j+jp, 0) * filter_coef_y;
3219 ag_k(i, 0, 0) += bg_k(i, j+jp, 0) * filter_coef_y;
3224 for (
int i = 0; i < ni; i++)
3229 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3231 const double filter_coef_x = filter_kernel_x[ip+10];
3232 rus_i += aus_i(i+ip, 0, 0) * filter_coef_x;
3233 rus_j += aus_j(i+ip, 0, 0) * filter_coef_x;
3234 rus_k += aus_k(i+ip, 0, 0) * filter_coef_x;
3237 const double scalar = champ_scalar_filtre(i,j,k);
3239 const double uf_i = vitesse_i_filtre(i,j,k);
3240 const double vf_j = vitesse_j_filtre(i,j,k);
3241 const double wf_k = vitesse_k_filtre(i,j,k);
3243 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
3244 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
3245 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
3247 const double ue = 0.5 * (uf_i + uf_ip1);
3248 const double ve = 0.5 * (vf_j + vf_jp1);
3249 const double we = 0.5 * (wf_k + wf_kp1);
3251 const double l_i = rus_i - ue*scalar;
3252 const double l_j = rus_j - ve*scalar;
3253 const double l_k = rus_k - we*scalar;
3257 moy_li_x[kg] += l_i;
3258 moy_li_y[kg] += l_j;
3259 moy_li_z[kg] += l_k;
3262 if (turbulent_viscosity)
3267 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3269 const double filter_coef_x = filter_kernel_x[ip+10];
3270 rf_i += af_i(i+ip, 0, 0) * filter_coef_x;
3271 rf_j += af_j(i+ip, 0, 0) * filter_coef_x;
3272 rf_k += af_k(i+ip, 0, 0) * filter_coef_x;
3277 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);
3281 const double dx_filtre = facteur_delta_filtre_x*dx;
3282 const double dy_filtre = facteur_delta_filtre_y*dy;
3283 const double dz_filtre = delta_z_pour_delta_filtre[k];
3284 const double delta_m_filtre = kg==0 ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k-1]);
3285 const double delta_p_filtre = kg==(nktot-1) ? 0. : 0.5*(dz_filtre + delta_z_pour_delta_filtre[k+1]);
3286 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);
3289 m_i = f_filtre[0] - rf_i;
3290 m_j = f_filtre[1] - rf_j;
3291 m_k = f_filtre[2] - rf_k;
3293 const double mimi = m_i * m_i
3297 const double mili = m_i * l_i
3301 moy_mimi[kg] += mimi;
3302 moy_mili[kg] += mili;
3306 moy_mi_x[kg] += m_i;
3307 moy_mi_y[kg] += m_j;
3308 moy_mi_z[kg] += m_k;
3310 moy_mimi_x[kg] += m_i * m_i;
3311 moy_mimi_y[kg] += m_j * m_j;
3312 moy_mimi_z[kg] += m_k * m_k;
3314 moy_mili_x[kg] += m_i * l_i;
3315 moy_mili_y[kg] += m_j * l_j;
3316 moy_mili_z[kg] += m_k * l_k;
3320 if (structural_uscalar)
3325 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
3327 const double filter_coef_x = filter_kernel_x[ip+10];
3328 rg_i += ag_i(i+ip, 0, 0) * filter_coef_x;
3329 rg_j += ag_j(i+ip, 0, 0) * filter_coef_x;
3330 rg_k += ag_k(i+ip, 0, 0) * filter_coef_x;
3333 const double gxf_i = -structural_uscalar_filtre_x(i,j,k);
3334 const double gyf_j = -structural_uscalar_filtre_y(i,j,k);
3335 const double gzf_k = -structural_uscalar_filtre_z(i,j,k);
3337 const double gxf_ip1 = -structural_uscalar_filtre_x(i+1,j,k);
3338 const double gyf_jp1 = -structural_uscalar_filtre_y(i,j+1,k);
3339 const double gzf_kp1 = kg==(nktot-1) ? 0. : -structural_uscalar_filtre_z(i,j,k+1);
3341 const double gx_e = 0.5 * (gxf_i + gxf_ip1);
3342 const double gy_e = 0.5 * (gyf_j + gyf_jp1);
3343 const double gz_e = 0.5 * (gzf_k + gzf_kp1);
3349 const double hihi = h_i * h_i
3353 const double hili = h_i * l_i
3357 moy_hihi[kg] += hihi;
3358 moy_hili[kg] += hili;
3362 moy_hi_x[kg] += h_i;
3363 moy_hi_y[kg] += h_j;
3364 moy_hi_z[kg] += h_k;
3366 moy_hihi_x[kg] += h_i * h_i;
3367 moy_hihi_y[kg] += h_j * h_j;
3368 moy_hihi_z[kg] += h_k * h_k;
3370 moy_hili_x[kg] += h_i * l_i;
3371 moy_hili_y[kg] += h_j * l_j;
3372 moy_hili_z[kg] += h_k * l_k;
3375 if (turbulent_viscosity)
3377 const double mihi = m_i * h_i
3381 moy_mihi[kg] += mihi;
3385 moy_mihi_x[kg] += m_i * h_i;
3386 moy_mihi_y[kg] += m_j * h_j;
3387 moy_mihi_z[kg] += m_k * h_k;
3397void calculer_turbulent_mu_scalar(
const bool anisotropic,
3398 const Nom& turbulent_viscosity_model,
3399 const double turbulent_viscosity_model_constant,
3400 const double variation_cste_modele_fonctionnel_,
3401 const double smoothing_center_fr_,
3402 const double smoothing_factor_fr_,
3403 const double Re_tau_fr_,
3404 const double Re_tau_ch_,
3405 const double pond_fr_,
3406 const double pond_ch_,
3407 const double center_constant_,
3408 const double Lz_tot_,
3409 IJK_Field_vector3_double& velocity,
3410 IJK_Field_vector3_double& velocity_filtre,
3411 IJK_Field_double& rho,
3412 IJK_Field_double& rho_filtre,
3413 double rho_kmin,
double rho_kmax,
3414 IJK_Field_double& scalar,
3415 IJK_Field_double& scalar_filtre,
3416 double scalar_kmin,
double scalar_kmax,
3417 const ArrOfDouble_with_ghost& delta_z,
3418 const double facteur_delta_x,
3419 const double facteur_delta_y,
3420 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3421 const double facteur_delta_filtre_x,
3422 const double facteur_delta_filtre_y,
3423 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3427 const bool flag_turbulent_mu_filtre,
3428 IJK_Field_double& turbulent_mu_filtre,
3429 IJK_Field_double& turbulent_mu,
3434 choix_modele(turbulent_viscosity_model, model);
3436 calculer_turbulent_mu(anisotropic,
3437 *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_,
3438 velocity, rho, scalar, scalar_kmin, scalar_kmax,
3439 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3440 turbulent_mu, splitting);
3441 int ghost_size_filter;
3442 int ghost_size_velocity;
3443 int ghost_size_scalar;
3444 if (flag_turbulent_mu_filtre)
3446 ghost_size_filter = 1 + kernel->ghost_size();
3447 ghost_size_velocity = max((
int) 2, ghost_size_filter);
3448 ghost_size_scalar = max((
int) 2, ghost_size_filter);
3454 const int flag_add = 0;
3455 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]);
3456 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]);
3457 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]);
3458 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);
3466 if (&scalar != &rho)
3469 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);
3473 calculer_turbulent_mu(anisotropic,
3474 *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_,
3475 velocity_filtre, rho_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
3476 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3477 turbulent_mu_filtre, splitting);
3484void calculer_turbulent_mu_tensor(
const bool anisotropic,
3485 const Nom& turbulent_viscosity_model,
3486 const double turbulent_viscosity_model_constant,
3487 const ArrOfDouble& turbulent_viscosity_tensor_coefficients,
3488 const double variation_cste_modele_fonctionnel_,
3489 const double smoothing_center_fr_,
3490 const double smoothing_factor_fr_,
3491 const double Re_tau_fr_,
3492 const double Re_tau_ch_,
3493 const double pond_fr_,
3494 const double pond_ch_,
3495 const double center_constant_,
3496 const double Lz_tot_,
3497 IJK_Field_vector3_double& velocity,
3498 IJK_Field_vector3_double& velocity_filtre,
3499 IJK_Field_double& rho,
3500 IJK_Field_double& rho_filtre,
3501 double rho_kmin,
double rho_kmax,
3502 IJK_Field_double& scalar,
3503 IJK_Field_double& scalar_filtre,
3504 double scalar_kmin,
double scalar_kmax,
3505 const ArrOfDouble_with_ghost& delta_z,
3506 const double facteur_delta_x,
3507 const double facteur_delta_y,
3508 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3509 const double facteur_delta_filtre_x,
3510 const double facteur_delta_filtre_y,
3511 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3515 const bool flag_turbulent_mu_filtre,
3522 const double& coefficient_xx = turbulent_viscosity_tensor_coefficients[0];
3523 const double& coefficient_xy = turbulent_viscosity_tensor_coefficients[1];
3524 const double& coefficient_xz = turbulent_viscosity_tensor_coefficients[2];
3525 const double& coefficient_yy = turbulent_viscosity_tensor_coefficients[3];
3526 const double& coefficient_yz = turbulent_viscosity_tensor_coefficients[4];
3527 const double& coefficient_zz = turbulent_viscosity_tensor_coefficients[5];
3529 IJK_Field_double& turbulent_mu_xx = turbulent_mu_tensor[0];
3530 IJK_Field_double& turbulent_mu_xy = turbulent_mu_tensor[1];
3531 IJK_Field_double& turbulent_mu_xz = turbulent_mu_tensor[2];
3532 IJK_Field_double& turbulent_mu_yy = turbulent_mu_tensor[3];
3533 IJK_Field_double& turbulent_mu_yz = turbulent_mu_tensor[4];
3534 IJK_Field_double& turbulent_mu_zz = turbulent_mu_tensor[5];
3536 IJK_Field_double& turbulent_mu_filtre_xx = turbulent_mu_filtre_tensor[0];
3537 IJK_Field_double& turbulent_mu_filtre_xy = turbulent_mu_filtre_tensor[1];
3538 IJK_Field_double& turbulent_mu_filtre_xz = turbulent_mu_filtre_tensor[2];
3539 IJK_Field_double& turbulent_mu_filtre_yy = turbulent_mu_filtre_tensor[3];
3540 IJK_Field_double& turbulent_mu_filtre_yz = turbulent_mu_filtre_tensor[4];
3541 IJK_Field_double& turbulent_mu_filtre_zz = turbulent_mu_filtre_tensor[5];
3543 choix_modele(turbulent_viscosity_model, model);
3551 calculer_turbulent_mu_scalar(anisotropic,
3552 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_,
3553 velocity, velocity_filtre,
3554 rho, rho_filtre, rho_kmin, rho_kmax,
3555 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
3556 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3557 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3558 kernel, tmp_b, tmp_a,
3559 flag_turbulent_mu_filtre, turbulent_mu_filtre_xx,
3560 turbulent_mu_xx, splitting);
3562 multiplier_champ(coefficient_xy, turbulent_mu_xx, turbulent_mu_xy);
3563 multiplier_champ(coefficient_xz, turbulent_mu_xx, turbulent_mu_xz);
3564 multiplier_champ(coefficient_yy, turbulent_mu_xx, turbulent_mu_yy);
3565 multiplier_champ(coefficient_yz, turbulent_mu_xx, turbulent_mu_yz);
3566 multiplier_champ(coefficient_zz, turbulent_mu_xx, turbulent_mu_zz);
3567 multiplier_champ(coefficient_xx, turbulent_mu_xx, turbulent_mu_xx);
3569 if (flag_turbulent_mu_filtre)
3571 multiplier_champ(coefficient_xy, turbulent_mu_filtre_xx, turbulent_mu_filtre_xy);
3572 multiplier_champ(coefficient_xz, turbulent_mu_filtre_xx, turbulent_mu_filtre_xz);
3573 multiplier_champ(coefficient_yy, turbulent_mu_filtre_xx, turbulent_mu_filtre_yy);
3574 multiplier_champ(coefficient_yz, turbulent_mu_filtre_xx, turbulent_mu_filtre_yz);
3575 multiplier_champ(coefficient_zz, turbulent_mu_filtre_xx, turbulent_mu_filtre_zz);
3576 multiplier_champ(coefficient_xx, turbulent_mu_filtre_xx, turbulent_mu_filtre_xx);
3584void calculer_turbulent_mu_vector(
const bool anisotropic,
3585 const Nom& turbulent_viscosity_model,
3586 const double turbulent_viscosity_model_constant,
3587 const ArrOfDouble& turbulent_diffusivity_vector_coefficients,
3588 const double variation_cste_modele_fonctionnel_,
3589 const double smoothing_center_fr_,
3590 const double smoothing_factor_fr_,
3591 const double Re_tau_fr_,
3592 const double Re_tau_ch_,
3593 const double pond_fr_,
3594 const double pond_ch_,
3595 const double center_constant_,
3596 const double Lz_tot_,
3597 IJK_Field_vector3_double& velocity,
3598 IJK_Field_vector3_double& velocity_filtre,
3599 IJK_Field_double& rho,
3600 IJK_Field_double& rho_filtre,
3601 double rho_kmin,
double rho_kmax,
3602 IJK_Field_double& scalar,
3603 IJK_Field_double& scalar_filtre,
3604 double scalar_kmin,
double scalar_kmax,
3605 const ArrOfDouble_with_ghost& delta_z,
3606 const double facteur_delta_x,
3607 const double facteur_delta_y,
3608 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3609 const double facteur_delta_filtre_x,
3610 const double facteur_delta_filtre_y,
3611 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
3615 const bool flag_turbulent_mu_filtre,
3616 IJK_Field_vector3_double& turbulent_mu_filtre_vector,
3617 IJK_Field_vector3_double& turbulent_mu_vector,
3622 const double& coefficient_x = turbulent_diffusivity_vector_coefficients[0];
3623 const double& coefficient_y = turbulent_diffusivity_vector_coefficients[1];
3624 const double& coefficient_z = turbulent_diffusivity_vector_coefficients[2];
3626 IJK_Field_double& turbulent_mu_x = turbulent_mu_vector[0];
3627 IJK_Field_double& turbulent_mu_y = turbulent_mu_vector[1];
3628 IJK_Field_double& turbulent_mu_z = turbulent_mu_vector[2];
3630 IJK_Field_double& turbulent_mu_filtre_x = turbulent_mu_filtre_vector[0];
3631 IJK_Field_double& turbulent_mu_filtre_y = turbulent_mu_filtre_vector[1];
3632 IJK_Field_double& turbulent_mu_filtre_z = turbulent_mu_filtre_vector[2];
3634 choix_modele(turbulent_viscosity_model, model);
3642 calculer_turbulent_mu_scalar(anisotropic,
3643 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_,
3644 velocity, velocity_filtre,
3645 rho, rho_filtre, rho_kmin, rho_kmax,
3646 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
3647 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
3648 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
3649 kernel, tmp_b, tmp_a,
3650 flag_turbulent_mu_filtre, turbulent_mu_filtre_x,
3651 turbulent_mu_x, splitting);
3653 multiplier_champ(coefficient_y, turbulent_mu_x, turbulent_mu_y);
3654 multiplier_champ(coefficient_z, turbulent_mu_x, turbulent_mu_z);
3655 multiplier_champ(coefficient_x, turbulent_mu_x, turbulent_mu_x);
3657 if (flag_turbulent_mu_filtre)
3659 multiplier_champ(coefficient_y, turbulent_mu_filtre_x, turbulent_mu_filtre_y);
3660 multiplier_champ(coefficient_z, turbulent_mu_filtre_x, turbulent_mu_filtre_z);
3661 multiplier_champ(coefficient_x, turbulent_mu_filtre_x, turbulent_mu_filtre_x);
3668void calculer_structural_uu_gradient(
const double structural_uu_model_constant,
3669 const ArrOfDouble& structural_uu_tensor_coefficients,
3670 const IJK_Field_vector3_double& velocity,
3671 const ArrOfDouble_with_ghost& delta_z_maillage,
3672 const double facteur_x_pour_delta,
3673 const double facteur_y_pour_delta,
3674 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3677 const IJK_Field_double& vitesse_i = velocity[0];
3678 const IJK_Field_double& vitesse_j = velocity[1];
3679 const IJK_Field_double& vitesse_k = velocity[2];
3681 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
3682 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
3683 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
3684 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
3685 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
3686 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
3688 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
3689 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
3690 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
3691 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
3692 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
3693 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
3695 const double deltaunsurdx = facteur_x_pour_delta;
3696 const double deltaunsurdy = facteur_y_pour_delta;
3701 const int ni = vitesse_k.
ni();
3702 const int nj = vitesse_k.
nj();
3703 const int nk = vitesse_k.
nk();
3705 for (
int k = 0; k < nk; k++)
3707 for (
int j = 0; j < nj; j++)
3709 for (
int i = 0; i < ni; i++)
3711 const int kg = k + offset;
3713 const double dz = delta_z_maillage[k];
3714 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
3715 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
3716 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
3718 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
3719 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
3720 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
3721 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
3723 const double uf_i = vitesse_i(i,j,k);
3724 const double uf_ip1 = vitesse_i(i+1,j,k);
3725 const double uf_im1 = vitesse_i(i-1,j,k);
3726 const double uf_i_jm1 = vitesse_i(i,j-1,k);
3727 const double uf_i_jp1 = vitesse_i(i,j+1,k);
3728 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
3729 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
3730 const double uf_i_jm1_km1 = kg==0 ? 0. : vitesse_i(i,j-1,k-1);
3731 const double uf_i_jp1_km1 = kg==0 ? 0. : vitesse_i(i,j+1,k-1);
3732 const double uf_i_jm1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j-1,k+1);
3733 const double uf_ip1_jp1 = vitesse_i(i+1,j+1,k);
3734 const double uf_ip1_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i+1,j,k+1);
3735 const double uf_ip1_jm1 = vitesse_i(i+1,j-1,k);
3736 const double uf_ip1_km1 = kg==0 ? 0. : vitesse_i(i+1,j,k-1);
3737 const double uf_im1_jm1 = vitesse_i(i-1,j-1,k);
3738 const double uf_im1_km1 = kg==0 ? 0. : vitesse_i(i-1,j,k-1);
3740 const double vf_j = vitesse_j(i,j,k);
3741 const double vf_j_im1 = vitesse_j(i-1,j,k);
3742 const double vf_j_ip1 = vitesse_j(i+1,j,k);
3743 const double vf_jp1 = vitesse_j(i,j+1,k);
3744 const double vf_jm1 = vitesse_j(i,j-1,k);
3745 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
3746 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
3747 const double vf_j_im1_km1 = kg==0 ? 0. : vitesse_j(i-1,j,k-1);
3748 const double vf_j_ip1_km1 = kg==0 ? 0. : vitesse_j(i+1,j,k-1);
3749 const double vf_j_im1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i-1,j,k+1);
3750 const double vf_jp1_ip1 = vitesse_j(i+1,j+1,k);
3751 const double vf_jp1_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j+1,k+1);
3752 const double vf_jp1_im1 = vitesse_j(i-1,j+1,k);
3753 const double vf_jp1_km1 = kg==0 ? 0. : vitesse_j(i,j+1,k-1);
3754 const double vf_jm1_im1 = vitesse_j(i-1,j-1,k);
3755 const double vf_jm1_km1 = kg==0 ? 0. : vitesse_j(i,j-1,k-1);
3757 const double wf_k = vitesse_k(i,j,k);
3758 const double wf_k_im1 = vitesse_k(i-1,j,k);
3759 const double wf_k_ip1 = vitesse_k(i+1,j,k);
3760 const double wf_k_jm1 = vitesse_k(i,j-1,k);
3761 const double wf_k_jp1 = vitesse_k(i,j+1,k);
3762 const double wf_k_im1_jm1 = vitesse_k(i-1,j-1,k);
3763 const double wf_k_ip1_jm1 = vitesse_k(i+1,j-1,k);
3764 const double wf_k_im1_jp1 = vitesse_k(i-1,j+1,k);
3765 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
3766 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
3767 const double wf_kp1_ip1 = kg==(nktot-1) ? 0. : vitesse_k(i+1,j,k+1);
3768 const double wf_kp1_jp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j+1,k+1);
3769 const double wf_kp1_im1 = kg==(nktot-1) ? 0. : vitesse_k(i-1,j,k+1);
3770 const double wf_kp1_jm1 = kg==(nktot-1) ? 0. : vitesse_k(i,j-1,k+1);
3771 const double wf_km1_im1 = kg==0 ? 0. : vitesse_k(i-1,j,k-1);
3772 const double wf_km1_jm1 = kg==0 ? 0. : vitesse_k(i,j-1,k-1);
3774 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
3775 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
3776 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
3778 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
3779 const double dujdy_im1 = deltaunsurdy * (vf_jp1_im1 - vf_j_im1);
3780 const double dukdz_im1 = deltaunsurdz * (wf_kp1_im1 - wf_k_im1);
3782 const double duidx_jm1 = deltaunsurdx * (uf_ip1_jm1 - uf_i_jm1);
3783 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
3784 const double dukdz_jm1 = deltaunsurdz * (wf_kp1_jm1 - wf_k_jm1);
3786 const double duidx_km1 = deltaunsurdx * (uf_ip1_km1 - uf_i_km1);
3787 const double dujdy_km1 = deltaunsurdy * (vf_jp1_km1 - vf_j_km1);
3788 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
3790 const double duidx_im1_jm1 = deltaunsurdx * (uf_i_jm1 - uf_im1_jm1);
3791 const double dujdy_im1_jm1 = deltaunsurdy * (vf_j_im1 - vf_jm1_im1);
3793 const double dujdy_jm1_km1 = deltaunsurdy * (vf_j_km1 - vf_jm1_km1);
3794 const double dukdz_jm1_km1 = deltaunsurdz * (wf_k_jm1 - wf_km1_jm1);
3796 const double duidx_im1_km1 = deltaunsurdx * (uf_i_km1 - uf_im1_km1);
3797 const double dukdz_im1_km1 = deltaunsurdz * (wf_k_im1 - wf_km1_im1);
3799 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
3800 const double duidy_ip1j = deltaunsurdy * (uf_ip1 - uf_ip1_jm1);
3801 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
3802 const double duidy_ip1jp1 = deltaunsurdy * (uf_ip1_jp1 - uf_ip1);
3803 const double duidy_ij_km1 = deltaunsurdy * (uf_i_km1 - uf_i_jm1_km1);
3804 const double duidy_ijp1_km1 = deltaunsurdy * (uf_i_jp1_km1 - uf_i_km1);
3806 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
3807 const double duidz_ip1k = deltaunsurdelta_m * (uf_ip1 - uf_ip1_km1);
3808 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
3809 const double duidz_ip1kp1 = deltaunsurdelta_p * (uf_ip1_kp1 - uf_ip1);
3810 const double duidz_ik_jm1 = deltaunsurdelta_m * (uf_i_jm1 - uf_i_jm1_km1);
3811 const double duidz_ikp1_jm1 = deltaunsurdelta_p * (uf_i_jm1_kp1 - uf_i_jm1);
3813 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
3814 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
3815 const double dujdx_ijp1 = deltaunsurdx * (vf_jp1 - vf_jp1_im1);
3816 const double dujdx_ip1jp1 = deltaunsurdx * (vf_jp1_ip1 - vf_jp1);
3817 const double dujdx_ij_km1 = deltaunsurdx * (vf_j_km1 - vf_j_im1_km1);
3818 const double dujdx_ip1j_km1 = deltaunsurdx * (vf_j_ip1_km1 - vf_j_km1);
3820 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
3821 const double dujdz_jp1k = deltaunsurdelta_m * (vf_jp1 - vf_jp1_km1);
3822 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
3823 const double dujdz_jp1kp1 = deltaunsurdelta_p * (vf_jp1_kp1 - vf_jp1);
3824 const double dujdz_jk_im1 = deltaunsurdelta_m * (vf_j_im1 - vf_j_im1_km1);
3825 const double dujdz_jkp1_im1 = deltaunsurdelta_p * (vf_j_im1_kp1 - vf_j_im1);
3827 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
3828 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
3829 const double dukdx_ikp1 = deltaunsurdx * (wf_kp1 - wf_kp1_im1);
3830 const double dukdx_ip1kp1 = deltaunsurdx * (wf_kp1_ip1 - wf_kp1);
3831 const double dukdx_ik_jm1 = deltaunsurdx * (wf_k_jm1 - wf_k_im1_jm1);
3832 const double dukdx_ip1k_jm1 = deltaunsurdx * (wf_k_ip1_jm1 - wf_k_jm1);
3834 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
3835 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
3836 const double dukdy_jkp1 = deltaunsurdy * (wf_kp1 - wf_kp1_jm1);
3837 const double dukdy_jp1kp1 = deltaunsurdy * (wf_kp1_jp1 - wf_kp1);
3838 const double dukdy_jk_im1 = deltaunsurdy * (wf_k_im1 - wf_k_im1_jm1);
3839 const double dukdy_jp1k_im1 = deltaunsurdy * (wf_k_im1_jp1 - wf_k_im1);
3841 const double g_e_ii = duidx;
3842 const double g_e_ij = 0.25 * (duidy_ip1jp1 + duidy_ijp1 + duidy_ip1j + duidy_ij);
3843 const double g_e_ik = 0.25 * (duidz_ip1kp1 + duidz_ikp1 + duidz_ip1k + duidz_ik);
3844 const double g_e_ji = 0.25 * (dujdx_ip1jp1 + dujdx_ip1j + dujdx_ijp1 + dujdx_ij);
3845 const double g_e_jj = dujdy;
3846 const double g_e_jk = 0.25 * (dujdz_jp1kp1 + dujdz_jkp1 + dujdz_jp1k + dujdz_jk);
3847 const double g_e_ki = 0.25 * (dukdx_ip1kp1 + dukdx_ip1k + dukdx_ikp1 + dukdx_ik);
3848 const double g_e_kj = 0.25 * (dukdy_jp1kp1 + dukdy_jp1k + dukdy_jkp1 + dukdy_jk);
3849 const double g_e_kk = dukdz;
3851 const double g_aij_ii = 0.25 * (duidx_im1_jm1 + duidx_jm1 + duidx_im1 + duidx);
3852 const double g_aij_ij = duidy_ij;
3853 const double g_aij_ik = 0.25 * (duidz_ikp1_jm1 + duidz_ikp1 + duidz_ik_jm1 + duidz_ik);
3854 const double g_aij_ji = dujdx_ij;
3855 const double g_aij_jj = 0.25 * (dujdy_im1_jm1 + dujdy_jm1 + dujdy_im1 + dujdy);
3856 const double g_aij_jk = 0.25 * (dujdz_jkp1_im1 + dujdz_jkp1 + dujdz_jk_im1 + dujdz_jk);
3858 const double g_aik_ii = 0.25 * (duidx_im1_km1 + duidx_km1 + duidx_im1 + duidx);
3859 const double g_aik_ij = 0.25 * (duidy_ijp1_km1 + duidy_ijp1 + duidy_ij_km1 + duidy_ij);
3860 const double g_aik_ik = duidz_ik;
3861 const double g_aik_ki = dukdx_ik;
3862 const double g_aik_kj = 0.25 * (dukdy_jp1k_im1 + dukdy_jp1k + dukdy_jk_im1 + dukdy_jk);
3863 const double g_aik_kk = 0.25 * (dukdz_im1_km1 + dukdz_km1 + dukdz_im1 + dukdz);
3865 const double g_ajk_ji = 0.25 * (dujdx_ip1j_km1 + dujdx_ip1j + dujdx_ij_km1 + dujdx_ij);
3866 const double g_ajk_jj = 0.25 * (dujdy_jm1_km1 + dujdy_km1 + dujdy_jm1 + dujdy);
3867 const double g_ajk_jk = dujdz_jk;
3868 const double g_ajk_ki = 0.25 * (dukdx_ip1k_jm1 + dukdx_ip1k + dukdx_ik_jm1 + dukdx_ik);
3869 const double g_ajk_kj = dukdy_jk;
3870 const double g_ajk_kk = 0.25 * (dukdz_jm1_km1 + dukdz_km1 + dukdz_jm1 + dukdz);
3872 const double c_ii = g_e_ii*g_e_ii + g_e_ij*g_e_ij + g_e_ik*g_e_ik;
3873 const double c_ij = g_aij_ii*g_aij_ji + g_aij_ij*g_aij_jj + g_aij_ik*g_aij_jk;
3874 const double c_ik = g_aik_ii*g_aik_ki + g_aik_ij*g_aik_kj + g_aik_ik*g_aik_kk;
3875 const double c_jj = g_e_ji*g_e_ji + g_e_jj*g_e_jj + g_e_jk*g_e_jk;
3876 const double c_jk = g_ajk_ji*g_ajk_ki + g_ajk_jj*g_ajk_kj + g_ajk_jk*g_ajk_kk;
3877 const double c_kk = g_e_ki*g_e_ki + g_e_kj*g_e_kj + g_e_kk*g_e_kk;
3879 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii/12.;
3880 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij/12.;
3881 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik/12.;
3882 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj/12.;
3883 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk/12.;
3884 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk/12.;
3890void calculer_laplacien_u(
const IJK_Field_vector3_double& velocity,
3891 const ArrOfDouble_with_ghost& delta_z_maillage,
3892 const double facteur_x_pour_delta,
3893 const double facteur_y_pour_delta,
3894 const ArrOfDouble_with_ghost& delta_z_pour_delta,
3895 IJK_Field_vector3_double& laplacien_velocity)
3897 const IJK_Field_double& vitesse_i = velocity[0];
3898 const IJK_Field_double& vitesse_j = velocity[1];
3899 const IJK_Field_double& vitesse_k = velocity[2];
3901 IJK_Field_double& laplacien_i = laplacien_velocity[0];
3902 IJK_Field_double& laplacien_j = laplacien_velocity[1];
3903 IJK_Field_double& laplacien_k = laplacien_velocity[2];
3905 const double deltaunsurdx = facteur_x_pour_delta;
3906 const double deltaunsurdy = facteur_y_pour_delta;
3911 const int ni = vitesse_k.
ni();
3912 const int nj = vitesse_k.
nj();
3913 const int nk = vitesse_k.
nk();
3915 for (
int k = 0; k < nk; k++)
3917 for (
int j = 0; j < nj; j++)
3919 for (
int i = 0; i < ni; i++)
3921 const int kg = k + offset;
3923 const double dz = delta_z_maillage[k];
3924 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
3925 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
3926 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
3928 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
3929 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
3930 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
3931 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
3933 const double uf_i = vitesse_i(i,j,k);
3934 const double uf_ip1 = vitesse_i(i+1,j,k);
3935 const double uf_im1 = vitesse_i(i-1,j,k);
3936 const double uf_i_jm1 = vitesse_i(i,j-1,k);
3937 const double uf_i_jp1 = vitesse_i(i,j+1,k);
3938 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
3939 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
3941 const double vf_j = vitesse_j(i,j,k);
3942 const double vf_j_im1 = vitesse_j(i-1,j,k);
3943 const double vf_j_ip1 = vitesse_j(i+1,j,k);
3944 const double vf_jp1 = vitesse_j(i,j+1,k);
3945 const double vf_jm1 = vitesse_j(i,j-1,k);
3946 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
3947 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
3949 const double wf_k = vitesse_k(i,j,k);
3950 const double wf_k_im1 = vitesse_k(i-1,j,k);
3951 const double wf_k_ip1 = vitesse_k(i+1,j,k);
3952 const double wf_k_jm1 = vitesse_k(i,j-1,k);
3953 const double wf_k_jp1 = vitesse_k(i,j+1,k);
3954 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
3955 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
3957 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
3958 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
3959 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
3961 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
3962 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
3963 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
3965 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
3966 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
3968 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
3969 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
3971 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
3972 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
3974 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
3975 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
3977 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
3978 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
3980 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
3981 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
3983 const double d2uidx2f_i = deltaunsurdx * (duidx - duidx_im1);
3984 const double d2ujdy2f_j = deltaunsurdy * (dujdy - dujdy_jm1);
3985 const double d2ukdz2f_k = deltaunsurdelta_m * (dukdz - dukdz_km1);
3987 const double d2uidy2f_i = deltaunsurdy * (duidy_ijp1 - duidy_ij);
3988 const double d2uidz2f_i = deltaunsurdz * (duidz_ikp1 - duidz_ik);
3990 const double d2ujdx2f_j = deltaunsurdx * (dujdx_ip1j - dujdx_ij);
3991 const double d2ujdz2f_j = deltaunsurdz * (dujdz_jkp1 - dujdz_jk);
3993 const double d2ukdx2f_k = deltaunsurdx * (dukdx_ip1k - dukdx_ik);
3994 const double d2ukdy2f_k = deltaunsurdy * (dukdy_jp1k - dukdy_jk);
3996 const double laplacien_uf_i = d2uidx2f_i + d2uidy2f_i + d2uidz2f_i;
3997 const double laplacien_vf_j = d2ujdx2f_j + d2ujdy2f_j + d2ujdz2f_j;
3998 const double laplacien_wf_k = d2ukdx2f_k + d2ukdy2f_k + d2ukdz2f_k;
4000 laplacien_i(i,j,k) = laplacien_uf_i;
4001 laplacien_j(i,j,k) = laplacien_vf_j;
4002 laplacien_k(i,j,k) = laplacien_wf_k;
4008void calculer_structural_uu_su_laplacien_u(
const double structural_uu_model_constant,
4009 const ArrOfDouble& structural_uu_tensor_coefficients,
4010 const IJK_Field_vector3_double& velocity,
4011 const IJK_Field_vector3_double& laplacien_velocity,
4014 const IJK_Field_double& vitesse_i = velocity[0];
4015 const IJK_Field_double& vitesse_j = velocity[1];
4016 const IJK_Field_double& vitesse_k = velocity[2];
4018 const IJK_Field_double& laplacien_i = laplacien_velocity[0];
4019 const IJK_Field_double& laplacien_j = laplacien_velocity[1];
4020 const IJK_Field_double& laplacien_k = laplacien_velocity[2];
4022 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4023 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4024 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4025 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4026 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4027 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4029 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4030 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4031 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4032 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4033 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4034 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4039 const int ni = vitesse_k.
ni();
4040 const int nj = vitesse_k.
nj();
4041 const int nk = vitesse_k.
nk();
4043 for (
int k = 0; k < nk; k++)
4045 for (
int j = 0; j < nj; j++)
4047 for (
int i = 0; i < ni; i++)
4049 const int kg = k + offset;
4051 const double uf_i = vitesse_i(i,j,k);
4052 const double uf_ip1 = vitesse_i(i+1,j,k);
4053 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4054 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4056 const double vf_j = vitesse_j(i,j,k);
4057 const double vf_j_im1 = vitesse_j(i-1,j,k);
4058 const double vf_jp1 = vitesse_j(i,j+1,k);
4059 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4061 const double wf_k = vitesse_k(i,j,k);
4062 const double wf_k_im1 = vitesse_k(i-1,j,k);
4063 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4064 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4066 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4067 const double u_ik = 0.5*(uf_i + uf_i_km1);
4068 const double v_ij = 0.5*(vf_j + vf_j_im1);
4069 const double v_jk = 0.5*(vf_j + vf_j_km1);
4070 const double w_ik = 0.5*(wf_k + wf_k_im1);
4071 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4073 const double ue = 0.5 * (uf_i + uf_ip1);
4074 const double ve = 0.5 * (vf_j + vf_jp1);
4075 const double we = 0.5 * (wf_k + wf_kp1);
4077 const double laplacien_uf_i = laplacien_i(i,j,k);
4078 const double laplacien_vf_j = laplacien_j(i,j,k);
4079 const double laplacien_wf_k = laplacien_k(i,j,k);
4081 const double laplacien_uf_ip1 = laplacien_i(i+1,j,k);
4082 const double laplacien_vf_jp1 = laplacien_j(i,j+1,k);
4083 const double laplacien_wf_kp1 = kg==(nktot-1) ? 0. : laplacien_k(i,j,k+1);
4085 const double laplacien_uf_i_jm1 = laplacien_i(i,j-1,k);
4086 const double laplacien_uf_i_km1 = kg==0 ? 0. : laplacien_i(i,j,k-1);
4087 const double laplacien_vf_j_im1 = laplacien_j(i-1,j,k);
4088 const double laplacien_vf_j_km1 = kg==0 ? 0. : laplacien_j(i,j,k-1);
4089 const double laplacien_wf_k_im1 = laplacien_k(i-1,j,k);
4090 const double laplacien_wf_k_jm1 = laplacien_k(i,j-1,k);
4092 const double laplacien_u_aij = 0.5*(laplacien_uf_i + laplacien_uf_i_jm1);
4093 const double laplacien_u_aik = 0.5*(laplacien_uf_i + laplacien_uf_i_km1);
4094 const double laplacien_v_aij = 0.5*(laplacien_vf_j + laplacien_vf_j_im1);
4095 const double laplacien_v_ajk = 0.5*(laplacien_vf_j + laplacien_vf_j_km1);
4096 const double laplacien_w_aik = 0.5*(laplacien_wf_k + laplacien_wf_k_im1);
4097 const double laplacien_w_ajk = 0.5*(laplacien_wf_k + laplacien_wf_k_jm1);
4099 const double laplacien_u_e = 0.5 * (laplacien_uf_i + laplacien_uf_ip1);
4100 const double laplacien_v_e = 0.5 * (laplacien_vf_j + laplacien_vf_jp1);
4101 const double laplacien_w_e = 0.5 * (laplacien_wf_k + laplacien_wf_kp1);
4103 const double udu_ii = ue*laplacien_u_e/24.;
4104 const double udu_ij = u_ij*laplacien_v_aij/24.;
4105 const double udu_ik = u_ik*laplacien_w_aik/24.;
4106 const double udu_ji = v_ij*laplacien_u_aij/24.;
4107 const double udu_jj = ve*laplacien_v_e/24.;
4108 const double udu_jk = v_jk*laplacien_w_ajk/24.;
4109 const double udu_ki = w_ik*laplacien_u_aik/24.;
4110 const double udu_kj = w_jk*laplacien_v_ajk/24.;
4111 const double udu_kk = we*laplacien_w_e/24.;
4113 const double su_laplacien_u_ii = - udu_ii - udu_ii;
4114 const double su_laplacien_u_ij = - udu_ij - udu_ji;
4115 const double su_laplacien_u_ik = - udu_ik - udu_ki;
4116 const double su_laplacien_u_jj = - udu_jj - udu_jj;
4117 const double su_laplacien_u_jk = - udu_jk - udu_kj;
4118 const double su_laplacien_u_kk = - udu_kk - udu_kk;
4120 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * su_laplacien_u_ii;
4121 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * su_laplacien_u_ij;
4122 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * su_laplacien_u_ik;
4123 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * su_laplacien_u_jj;
4124 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * su_laplacien_u_jk;
4125 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * su_laplacien_u_kk;
4131void calculer_structural_uu_convection(
const double structural_uu_model_constant,
4132 const ArrOfDouble& structural_uu_tensor_coefficients,
4133 const IJK_Field_vector3_double& velocity,
4136 const IJK_Field_double& vitesse_i = velocity[0];
4137 const IJK_Field_double& vitesse_j = velocity[1];
4138 const IJK_Field_double& vitesse_k = velocity[2];
4140 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4141 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4142 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4143 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4144 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4145 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4147 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4148 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4149 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4150 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4151 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4152 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4157 const int ni = vitesse_k.
ni();
4158 const int nj = vitesse_k.
nj();
4159 const int nk = vitesse_k.
nk();
4161 for (
int k = 0; k < nk; k++)
4163 for (
int j = 0; j < nj; j++)
4165 for (
int i = 0; i < ni; i++)
4167 const int kg = k + offset;
4169 const double uf_i = vitesse_i(i,j,k);
4170 const double uf_ip1 = vitesse_i(i+1,j,k);
4171 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4172 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4174 const double vf_j = vitesse_j(i,j,k);
4175 const double vf_j_im1 = vitesse_j(i-1,j,k);
4176 const double vf_jp1 = vitesse_j(i,j+1,k);
4177 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4179 const double wf_k = vitesse_k(i,j,k);
4180 const double wf_k_im1 = vitesse_k(i-1,j,k);
4181 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4182 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4184 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4185 const double u_ik = 0.5*(uf_i + uf_i_km1);
4186 const double v_ij = 0.5*(vf_j + vf_j_im1);
4187 const double v_jk = 0.5*(vf_j + vf_j_km1);
4188 const double w_ik = 0.5*(wf_k + wf_k_im1);
4189 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4191 const double ue = 0.5 * (uf_i + uf_ip1);
4192 const double ve = 0.5 * (vf_j + vf_jp1);
4193 const double we = 0.5 * (wf_k + wf_kp1);
4195 const double uu_ii = ue*ue;
4196 const double uu_ij = u_ij*v_ij;
4197 const double uu_ik = u_ik*w_ik;
4198 const double uu_jj = ve*ve;
4199 const double uu_jk = v_jk*w_jk;
4200 const double uu_kk = we*we;
4202 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * uu_ii;
4203 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * uu_ij;
4204 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * uu_ik;
4205 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * uu_jj;
4206 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * uu_jk;
4207 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * uu_kk;
4213void calculer_structural_uu_similarity_comp(
const double structural_uu_model_constant,
4214 const ArrOfDouble& structural_uu_tensor_coefficients,
4215 const IJK_Field_double& rho,
4216 const IJK_Field_vector3_double& velocity,
4217 const IJK_Field_vector3_double& velocity_filtre,
4218 const ArrOfDouble_with_ghost& delta_z,
4219 const double facteur_delta_x,
4220 const double facteur_delta_y,
4221 const ArrOfDouble_with_ghost& delta_z_pour_delta,
4227 const IJK_Field_double& vitesse_i = velocity[0];
4228 const IJK_Field_double& vitesse_j = velocity[1];
4229 const IJK_Field_double& vitesse_k = velocity[2];
4230 const IJK_Field_double& masse_vol_ijk = rho;
4231 IJK_Field_local_double& masse_vol_ijk_filtre = tmp_b[15];
4232 IJK_Field_local_double& aa_rho_ijk_filtre = tmp_a[15];
4238 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4239 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4240 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4241 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4242 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4243 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4245 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4246 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4247 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4248 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4249 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4250 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4254 const double dx_pour_delta = facteur_delta_x*dx;
4255 const double dy_pour_delta = facteur_delta_y*dy;
4257 const int ni = vitesse_k.
ni();
4258 const int nj = vitesse_k.
nj();
4259 const int nk = vitesse_k.
nk();
4263 IJK_Field_local_double& b_ii = tmp_b[0];
4264 IJK_Field_local_double& b_ij = tmp_b[1];
4265 IJK_Field_local_double& b_ik = tmp_b[2];
4266 IJK_Field_local_double& b_jj = tmp_b[3];
4267 IJK_Field_local_double& b_jk = tmp_b[4];
4268 IJK_Field_local_double& b_kk = tmp_b[5];
4269 IJK_Field_local_double& bb_uii = tmp_b[6];
4270 IJK_Field_local_double& bb_uij = tmp_b[7];
4271 IJK_Field_local_double& bb_vjj = tmp_b[8];
4272 IJK_Field_local_double& bb_vij = tmp_b[9];
4273 IJK_Field_local_double& bb_wkk = tmp_b[10];
4274 IJK_Field_local_double& bb_uik = tmp_b[11];
4275 IJK_Field_local_double& bb_vjk = tmp_b[12];
4276 IJK_Field_local_double& bb_wik = tmp_b[13];
4277 IJK_Field_local_double& bb_wjk = tmp_b[14];
4279 IJK_Field_local_double& a_ii = tmp_a[0];
4280 IJK_Field_local_double& a_ij = tmp_a[1];
4281 IJK_Field_local_double& a_ik = tmp_a[2];
4282 IJK_Field_local_double& a_jj = tmp_a[3];
4283 IJK_Field_local_double& a_jk = tmp_a[4];
4284 IJK_Field_local_double& a_kk = tmp_a[5];
4285 IJK_Field_local_double& aa_uii = tmp_a[6];
4286 IJK_Field_local_double& aa_uij = tmp_a[7];
4287 IJK_Field_local_double& aa_vjj = tmp_a[8];
4288 IJK_Field_local_double& aa_vij = tmp_a[9];
4289 IJK_Field_local_double& aa_wkk = tmp_a[10];
4290 IJK_Field_local_double& aa_uik = tmp_a[11];
4291 IJK_Field_local_double& aa_vjk = tmp_a[12];
4292 IJK_Field_local_double& aa_wik = tmp_a[13];
4293 IJK_Field_local_double& aa_wjk = tmp_a[14];
4295 const int ghost_size_filter = kernel->ghost_size();
4296 const int size_uniform = kernel->size_uniform();
4297 const int shift_uniform = kernel->shift_uniform();
4298 for (
int k = 0; k < nk; k++)
4300 const int kg = k + offset;
4302 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
4303 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
4304 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
4305 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
4306 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
4307 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);
4309 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
4310 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
4313 const int size_k_elem = kernel->size_k_elem(kg, nktot);
4314 const int size_k_face = kernel->size_k_face(kg, nktot);
4315 const int shift_k_elem = kernel->shift_k_elem(kg);
4316 const int shift_k_face = kernel->shift_k_face(kg);
4317 const bool ponderation_filter_kernel = kernel->ponderation();
4318 const bool normalisation_filter_kernel = kernel->normalisation();
4320 double facteur_elem = 0.;
4321 if (ponderation_filter_kernel)
4323 if (normalisation_filter_kernel)
4325 double longueur_elem = 0.;
4326 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4328 const int kpg = kg + kp;
4329 if (kpg<-1 || kpg>nktot)
4331 Cerr <<
"This should not happen." << finl;
4334 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4335 const double filter_coef_z = filter_kernel_z[kp+10];
4336 longueur_elem += filter_coef_z * dz;
4338 facteur_elem = 1./longueur_elem;
4342 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
4345 double facteur_face = 0.;
4346 if (ponderation_filter_kernel)
4348 if (normalisation_filter_kernel)
4350 double longueur_face = 0.;
4351 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4353 const int kpg = kg + kp;
4354 if (kpg<0 || kpg>nktot)
4356 Cerr <<
"This should not happen." << finl;
4359 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4360 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4361 const double dzf = 0.5*(dz + dz_m1);
4362 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4363 longueur_face += filter_coef_z_face * dzf;
4365 facteur_face = 1./longueur_face;
4369 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
4373 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
4375 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4378 bb_uii(i, j, 0) = 0.;
4379 bb_uij(i, j, 0) = 0.;
4383 bb_vjj(i, j, 0) = 0.;
4384 bb_vij(i, j, 0) = 0.;
4387 bb_wkk(i, j, 0) = 0.;
4388 bb_uik(i, j, 0) = 0.;
4389 bb_vjk(i, j, 0) = 0.;
4390 bb_wik(i, j, 0) = 0.;
4391 bb_wjk(i, j, 0) = 0.;
4392 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4394 const int kpg = kg + kp;
4395 if (!(kernel->is_at_wall_elem(kpg, nktot)))
4397 const double filter_coef_z = filter_kernel_z[kp+10];
4399 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
4400 const double uf_i = vitesse_i(i,j,k+kp);
4401 const double vf_j = vitesse_j(i,j,k+kp);
4402 const double wf_k = vitesse_k(i,j,k+kp);
4404 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
4405 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
4406 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
4408 const double uf_i_jm1 = vitesse_i(i,j-1,k+kp);
4409 const double vf_j_im1 = vitesse_j(i-1,j,k+kp);
4411 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4412 const double v_ij = 0.5*(vf_j + vf_j_im1);
4414 const double ue = 0.5 * (uf_i + uf_ip1);
4415 const double ve = 0.5 * (vf_j + vf_jp1);
4416 const double we = 0.5 * (wf_k + wf_kp1);
4418 if (ponderation_filter_kernel)
4420 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4421 b_ii(i, j, 0) += rho_ijk*ue*ue * filter_coef_z * dz * facteur_elem;
4422 b_ij(i, j, 0) += rho_ijk*u_ij*v_ij * filter_coef_z * dz * facteur_elem;
4423 b_jj(i, j, 0) += rho_ijk*ve*ve * filter_coef_z * dz * facteur_elem;
4424 b_kk(i, j, 0) += rho_ijk*we*we * filter_coef_z * dz * facteur_elem;
4425 bb_uii(i, j, 0) += rho_ijk*ue * filter_coef_z * dz * facteur_elem;
4426 bb_uij(i, j, 0) += rho_ijk*u_ij * filter_coef_z * dz * facteur_elem;
4427 bb_vij(i, j, 0) += rho_ijk*v_ij * filter_coef_z * dz * facteur_elem;
4428 bb_vjj(i, j, 0) += rho_ijk*ve * filter_coef_z * dz * facteur_elem;
4429 bb_wkk(i, j, 0) += rho_ijk*we * filter_coef_z * dz * facteur_elem;
4430 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z * dz * facteur_elem;
4434 b_ii(i, j, 0) += rho_ijk*ue*ue * filter_coef_z;
4435 b_ij(i, j, 0) += rho_ijk*u_ij*v_ij * filter_coef_z;
4436 b_jj(i, j, 0) += rho_ijk*ve*ve * filter_coef_z;
4437 b_kk(i, j, 0) += rho_ijk*we*we * filter_coef_z;
4438 bb_uii(i, j, 0) += rho_ijk*ue * filter_coef_z;
4439 bb_uij(i, j, 0) += rho_ijk*u_ij * filter_coef_z;
4440 bb_vij(i, j, 0) += rho_ijk*v_ij * filter_coef_z;
4441 bb_vjj(i, j, 0) += rho_ijk*ve * filter_coef_z;
4442 bb_wkk(i, j, 0) += rho_ijk*we * filter_coef_z;
4443 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z;
4447 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4449 const int kpg = kg + kp;
4450 if (!(kernel->is_at_wall_face(kpg, nktot)))
4452 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4454 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
4455 const double uf_i = vitesse_i(i,j,k+kp);
4456 const double vf_j = vitesse_j(i,j,k+kp);
4457 const double wf_k = vitesse_k(i,j,k+kp);
4459 const double uf_i_km1 = kpg==0 ? 0. : vitesse_i(i,j,k-1+kp);
4460 const double vf_j_km1 = kpg==0 ? 0. : vitesse_j(i,j,k-1+kp);
4461 const double wf_k_im1 = vitesse_k(i-1,j,k+kp);
4462 const double wf_k_jm1 = vitesse_k(i,j-1,k+kp);
4464 const double u_ik = 0.5*(uf_i + uf_i_km1);
4465 const double v_jk = 0.5*(vf_j + vf_j_km1);
4466 const double w_ik = 0.5*(wf_k + wf_k_im1);
4467 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4469 if (ponderation_filter_kernel)
4471 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4472 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4473 const double dzf = 0.5*(dz + dz_m1);
4474 b_ik(i, j, 0) += rho_ijk*u_ik*w_ik * filter_coef_z_face * dzf * facteur_face;
4475 b_jk(i, j, 0) += rho_ijk*v_jk*w_jk * filter_coef_z_face * dzf * facteur_face;
4476 bb_uik(i, j, 0) += rho_ijk*u_ik * filter_coef_z_face * dzf * facteur_face;
4477 bb_vjk(i, j, 0) += rho_ijk*v_jk * filter_coef_z_face * dzf * facteur_face;
4478 bb_wik(i, j, 0) += rho_ijk*w_ik * filter_coef_z_face * dzf * facteur_face;
4479 bb_wjk(i, j, 0) += rho_ijk*w_jk * filter_coef_z_face * dzf * facteur_face;
4483 b_ik(i, j, 0) += rho_ijk*u_ik*w_ik * filter_coef_z_face;
4484 b_jk(i, j, 0) += rho_ijk*v_jk*w_jk * filter_coef_z_face;
4485 bb_uik(i, j, 0) += rho_ijk*u_ik * filter_coef_z_face;
4486 bb_vjk(i, j, 0) += rho_ijk*v_jk * filter_coef_z_face;
4487 bb_wik(i, j, 0) += rho_ijk*w_ik * filter_coef_z_face;
4488 bb_wjk(i, j, 0) += rho_ijk*w_jk * filter_coef_z_face;
4494 for (
int j = 0; j < nj; j++)
4496 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4499 aa_uii(i, 0, 0) = 0.;
4500 aa_uij(i, 0, 0) = 0.;
4504 aa_vjj(i, 0, 0) = 0.;
4505 aa_vij(i, 0, 0) = 0.;
4508 aa_wkk(i, 0, 0) = 0.;
4509 aa_uik(i, 0, 0) = 0.;
4510 aa_vjk(i, 0, 0) = 0.;
4511 aa_wik(i, 0, 0) = 0.;
4512 aa_wjk(i, 0, 0) = 0.;
4513 aa_rho_ijk_filtre(i, 0, 0) = 0.;
4514 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
4516 const double filter_coef_y = filter_kernel_y[jp+10];
4517 a_ii(i, 0, 0) += b_ii(i, j+jp, 0) * filter_coef_y;
4518 aa_uii(i, 0, 0) += bb_uii(i, j+jp, 0) * filter_coef_y;
4519 aa_uij(i, 0, 0) += bb_uij(i, j+jp, 0) * filter_coef_y;
4520 a_ij(i, 0, 0) += b_ij(i, j+jp, 0) * filter_coef_y;
4521 a_ik(i, 0, 0) += b_ik(i, j+jp, 0) * filter_coef_y;
4522 a_jj(i, 0, 0) += b_jj(i, j+jp, 0) * filter_coef_y;
4523 aa_vjj(i, 0, 0) += bb_vjj(i, j+jp, 0) * filter_coef_y;
4524 aa_vij(i, 0, 0) += bb_vij(i, j+jp, 0) * filter_coef_y;
4525 a_jk(i, 0, 0) += b_jk(i, j+jp, 0) * filter_coef_y;
4526 a_kk(i, 0, 0) += b_kk(i, j+jp, 0) * filter_coef_y;
4527 aa_wkk(i, 0, 0) += bb_wkk(i, j+jp, 0) * filter_coef_y;
4528 aa_uik(i, 0, 0) += bb_uik(i, j+jp, 0) * filter_coef_y;
4529 aa_vjk(i, 0, 0) += bb_vjk(i, j+jp, 0) * filter_coef_y;
4530 aa_wik(i, 0, 0) += bb_wik(i, j+jp, 0) * filter_coef_y;
4531 aa_wjk(i, 0, 0) += bb_wjk(i, j+jp, 0) * filter_coef_y;
4532 aa_rho_ijk_filtre(i, 0, 0) += masse_vol_ijk_filtre(i, j+jp, 0)* filter_coef_y;
4536 for (
int i = 0; i < ni; i++)
4547 double rho_uij = 0.;
4548 double rho_uik = 0.;
4549 double rho_vij = 0.;
4550 double rho_vjk = 0.;
4551 double rho_wik = 0.;
4552 double rho_wjk = 0.;
4553 double rho_filtre = 0.;
4554 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
4556 const double filter_coef_x = filter_kernel_x[ip+10];
4557 r_ii += a_ii(i+ip, 0, 0) * filter_coef_x;
4558 r_ij += a_ij(i+ip, 0, 0) * filter_coef_x;
4559 r_ik += a_ik(i+ip, 0, 0) * filter_coef_x;
4560 r_jj += a_jj(i+ip, 0, 0) * filter_coef_x;
4561 r_jk += a_jk(i+ip, 0, 0) * filter_coef_x;
4562 r_kk += a_kk(i+ip, 0, 0) * filter_coef_x;
4563 rho_ue += aa_uii(i+ip, 0, 0) * filter_coef_x;
4564 rho_ve += aa_vjj(i+ip, 0, 0) * filter_coef_x;
4565 rho_we += aa_wkk(i+ip, 0, 0) * filter_coef_x;
4566 rho_uij += aa_uij(i+ip, 0, 0) * filter_coef_x;
4567 rho_uik += aa_uik(i+ip, 0, 0) * filter_coef_x;
4568 rho_vij += aa_vij(i+ip, 0, 0) * filter_coef_x;
4569 rho_vjk += aa_vjk(i+ip, 0, 0) * filter_coef_x;
4570 rho_wik += aa_wik(i+ip, 0, 0) * filter_coef_x;
4571 rho_wjk += aa_wjk(i+ip, 0, 0) * filter_coef_x;
4572 rho_filtre += aa_rho_ijk_filtre(i+ip, 0, 0)* filter_coef_x;
4575 const double c_ii = (r_ii)/rho_filtre - (rho_ue*rho_ue)/(rho_filtre*rho_filtre);
4576 const double c_ij = (r_ij)/rho_filtre - (rho_uij*rho_vij)/(rho_filtre*rho_filtre);
4577 const double c_ik = (r_ik)/rho_filtre - (rho_uik*rho_wik)/(rho_filtre*rho_filtre);
4578 const double c_jj = (r_jj)/rho_filtre - (rho_ve*rho_ve)/(rho_filtre*rho_filtre);
4579 const double c_jk = (r_jk)/rho_filtre - (rho_vjk*rho_wjk)/(rho_filtre*rho_filtre);
4580 const double c_kk = (r_kk)/rho_filtre - (rho_we*rho_we)/(rho_filtre*rho_filtre);
4582 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii;
4583 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij;
4584 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik;
4585 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj;
4586 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk;
4587 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk;
4594void calculer_structural_uu_similarity(
const double structural_uu_model_constant,
4595 const ArrOfDouble& structural_uu_tensor_coefficients,
4596 const IJK_Field_vector3_double& velocity,
4597 const IJK_Field_vector3_double& velocity_filtre,
4598 const ArrOfDouble_with_ghost& delta_z,
4599 const double facteur_delta_x,
4600 const double facteur_delta_y,
4601 const ArrOfDouble_with_ghost& delta_z_pour_delta,
4607 const IJK_Field_double& vitesse_i = velocity[0];
4608 const IJK_Field_double& vitesse_j = velocity[1];
4609 const IJK_Field_double& vitesse_k = velocity[2];
4611 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
4612 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
4613 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
4615 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4616 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4617 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4618 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4619 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4620 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4622 const double& coefficient_xx = structural_uu_tensor_coefficients[0];
4623 const double& coefficient_xy = structural_uu_tensor_coefficients[1];
4624 const double& coefficient_xz = structural_uu_tensor_coefficients[2];
4625 const double& coefficient_yy = structural_uu_tensor_coefficients[3];
4626 const double& coefficient_yz = structural_uu_tensor_coefficients[4];
4627 const double& coefficient_zz = structural_uu_tensor_coefficients[5];
4631 const double dx_pour_delta = facteur_delta_x*dx;
4632 const double dy_pour_delta = facteur_delta_y*dy;
4634 const int ni = vitesse_k.
ni();
4635 const int nj = vitesse_k.
nj();
4636 const int nk = vitesse_k.
nk();
4641 IJK_Field_local_double& b_ii = tmp_b[0];
4642 IJK_Field_local_double& b_ij = tmp_b[1];
4643 IJK_Field_local_double& b_ik = tmp_b[2];
4644 IJK_Field_local_double& b_jj = tmp_b[3];
4645 IJK_Field_local_double& b_jk = tmp_b[4];
4646 IJK_Field_local_double& b_kk = tmp_b[5];
4648 IJK_Field_local_double& a_ii = tmp_a[0];
4649 IJK_Field_local_double& a_ij = tmp_a[1];
4650 IJK_Field_local_double& a_ik = tmp_a[2];
4651 IJK_Field_local_double& a_jj = tmp_a[3];
4652 IJK_Field_local_double& a_jk = tmp_a[4];
4653 IJK_Field_local_double& a_kk = tmp_a[5];
4655 const int ghost_size_filter = kernel->ghost_size();
4656 const int size_uniform = kernel->size_uniform();
4657 const int shift_uniform = kernel->shift_uniform();
4658 for (
int k = 0; k < nk; k++)
4660 const int kg = k + offset;
4662 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
4663 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
4664 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
4665 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
4666 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
4667 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);
4669 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
4670 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
4673 const int size_k_elem = kernel->size_k_elem(kg, nktot);
4674 const int size_k_face = kernel->size_k_face(kg, nktot);
4675 const int shift_k_elem = kernel->shift_k_elem(kg);
4676 const int shift_k_face = kernel->shift_k_face(kg);
4677 const bool ponderation_filter_kernel = kernel->ponderation();
4678 const bool normalisation_filter_kernel = kernel->normalisation();
4680 double facteur_elem = 0.;
4681 if (ponderation_filter_kernel)
4683 if (normalisation_filter_kernel)
4685 double longueur_elem = 0.;
4686 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4688 const int kpg = kg + kp;
4689 if (kpg<-1 || kpg>nktot)
4691 Cerr <<
"This should not happen." << finl;
4694 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4695 const double filter_coef_z = filter_kernel_z[kp+10];
4696 longueur_elem += filter_coef_z * dz;
4698 facteur_elem = 1./longueur_elem;
4702 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
4705 double facteur_face = 0.;
4706 if (ponderation_filter_kernel)
4708 if (normalisation_filter_kernel)
4710 double longueur_face = 0.;
4711 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4713 const int kpg = kg + kp;
4714 if (kpg<0 || kpg>nktot)
4716 Cerr <<
"This should not happen." << finl;
4719 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4720 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4721 const double dzf = 0.5*(dz + dz_m1);
4722 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4723 longueur_face += filter_coef_z_face * dzf;
4725 facteur_face = 1./longueur_face;
4729 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
4733 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
4735 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4743 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
4745 const int kpg = kg + kp;
4746 if (!(kernel->is_at_wall_elem(kpg, nktot)))
4748 const double filter_coef_z = filter_kernel_z[kp+10];
4750 const double uf_i = vitesse_i(i,j,k+kp);
4751 const double vf_j = vitesse_j(i,j,k+kp);
4752 const double wf_k = vitesse_k(i,j,k+kp);
4754 const double uf_ip1 = vitesse_i(i+1,j,k+kp);
4755 const double vf_jp1 = vitesse_j(i,j+1,k+kp);
4756 const double wf_kp1 = kpg==(nktot-1) ? 0. : vitesse_k(i,j,k+1+kp);
4758 const double uf_i_jm1 = vitesse_i(i,j-1,k+kp);
4759 const double vf_j_im1 = vitesse_j(i-1,j,k+kp);
4761 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4762 const double v_ij = 0.5*(vf_j + vf_j_im1);
4764 const double ue = 0.5 * (uf_i + uf_ip1);
4765 const double ve = 0.5 * (vf_j + vf_jp1);
4766 const double we = 0.5 * (wf_k + wf_kp1);
4768 if (ponderation_filter_kernel)
4770 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4771 b_ii(i, j, 0) += ue*ue * filter_coef_z * dz * facteur_elem;
4772 b_ij(i, j, 0) += u_ij*v_ij * filter_coef_z * dz * facteur_elem;
4773 b_jj(i, j, 0) += ve*ve * filter_coef_z * dz * facteur_elem;
4774 b_kk(i, j, 0) += we*we * filter_coef_z * dz * facteur_elem;
4778 b_ii(i, j, 0) += ue*ue * filter_coef_z;
4779 b_ij(i, j, 0) += u_ij*v_ij * filter_coef_z;
4780 b_jj(i, j, 0) += ve*ve * filter_coef_z;
4781 b_kk(i, j, 0) += we*we * filter_coef_z;
4785 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
4787 const int kpg = kg + kp;
4788 if (!(kernel->is_at_wall_face(kpg, nktot)))
4790 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
4792 const double uf_i = vitesse_i(i,j,k+kp);
4793 const double vf_j = vitesse_j(i,j,k+kp);
4794 const double wf_k = vitesse_k(i,j,k+kp);
4796 const double uf_i_km1 = kpg==0 ? 0. : vitesse_i(i,j,k-1+kp);
4797 const double vf_j_km1 = kpg==0 ? 0. : vitesse_j(i,j,k-1+kp);
4798 const double wf_k_im1 = vitesse_k(i-1,j,k+kp);
4799 const double wf_k_jm1 = vitesse_k(i,j-1,k+kp);
4801 const double u_ik = 0.5*(uf_i + uf_i_km1);
4802 const double v_jk = 0.5*(vf_j + vf_j_km1);
4803 const double w_ik = 0.5*(wf_k + wf_k_im1);
4804 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4806 if (ponderation_filter_kernel)
4808 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
4809 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
4810 const double dzf = 0.5*(dz + dz_m1);
4811 b_ik(i, j, 0) += u_ik*w_ik * filter_coef_z_face * dzf * facteur_face;
4812 b_jk(i, j, 0) += v_jk*w_jk * filter_coef_z_face * dzf * facteur_face;
4816 b_ik(i, j, 0) += u_ik*w_ik * filter_coef_z_face;
4817 b_jk(i, j, 0) += v_jk*w_jk * filter_coef_z_face;
4823 for (
int j = 0; j < nj; j++)
4825 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
4833 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
4835 const double filter_coef_y = filter_kernel_y[jp+10];
4836 a_ii(i, 0, 0) += b_ii(i, j+jp, 0) * filter_coef_y;
4837 a_ij(i, 0, 0) += b_ij(i, j+jp, 0) * filter_coef_y;
4838 a_ik(i, 0, 0) += b_ik(i, j+jp, 0) * filter_coef_y;
4839 a_jj(i, 0, 0) += b_jj(i, j+jp, 0) * filter_coef_y;
4840 a_jk(i, 0, 0) += b_jk(i, j+jp, 0) * filter_coef_y;
4841 a_kk(i, 0, 0) += b_kk(i, j+jp, 0) * filter_coef_y;
4845 for (
int i = 0; i < ni; i++)
4853 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
4855 const double filter_coef_x = filter_kernel_x[ip+10];
4856 r_ii += a_ii(i+ip, 0, 0) * filter_coef_x;
4857 r_ij += a_ij(i+ip, 0, 0) * filter_coef_x;
4858 r_ik += a_ik(i+ip, 0, 0) * filter_coef_x;
4859 r_jj += a_jj(i+ip, 0, 0) * filter_coef_x;
4860 r_jk += a_jk(i+ip, 0, 0) * filter_coef_x;
4861 r_kk += a_kk(i+ip, 0, 0) * filter_coef_x;
4864 const double uf_i = vitesse_i_filtre(i,j,k);
4865 const double vf_j = vitesse_j_filtre(i,j,k);
4866 const double wf_k = vitesse_k_filtre(i,j,k);
4868 const double uf_ip1 = vitesse_i_filtre(i+1,j,k);
4869 const double vf_jp1 = vitesse_j_filtre(i,j+1,k);
4870 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k_filtre(i,j,k+1);
4872 const double uf_i_jm1 = vitesse_i_filtre(i,j-1,k);
4873 const double uf_i_km1 = kg==0 ? 0. : vitesse_i_filtre(i,j,k-1);
4874 const double vf_j_im1 = vitesse_j_filtre(i-1,j,k);
4875 const double vf_j_km1 = kg==0 ? 0. : vitesse_j_filtre(i,j,k-1);
4876 const double wf_k_im1 = vitesse_k_filtre(i-1,j,k);
4877 const double wf_k_jm1 = vitesse_k_filtre(i,j-1,k);
4879 const double u_ij = 0.5*(uf_i + uf_i_jm1);
4880 const double u_ik = 0.5*(uf_i + uf_i_km1);
4881 const double v_ij = 0.5*(vf_j + vf_j_im1);
4882 const double v_jk = 0.5*(vf_j + vf_j_km1);
4883 const double w_ik = 0.5*(wf_k + wf_k_im1);
4884 const double w_jk = 0.5*(wf_k + wf_k_jm1);
4886 const double ue = 0.5 * (uf_i + uf_ip1);
4887 const double ve = 0.5 * (vf_j + vf_jp1);
4888 const double we = 0.5 * (wf_k + wf_kp1);
4890 const double c_ii = r_ii - ue*ue;
4891 const double c_ij = r_ij - u_ij*v_ij;
4892 const double c_ik = r_ik - u_ik*w_ik;
4893 const double c_jj = r_jj - ve*ve;
4894 const double c_jk = r_jk - v_jk*w_jk;
4895 const double c_kk = r_kk - we*we;
4897 structural_uu_xx(i,j,k) = - coefficient_xx * structural_uu_model_constant * c_ii;
4898 structural_uu_xy(i,j,k) = - coefficient_xy * structural_uu_model_constant * c_ij;
4899 structural_uu_xz(i,j,k) = - coefficient_xz * structural_uu_model_constant * c_ik;
4900 structural_uu_yy(i,j,k) = - coefficient_yy * structural_uu_model_constant * c_jj;
4901 structural_uu_yz(i,j,k) = - coefficient_yz * structural_uu_model_constant * c_jk;
4902 structural_uu_zz(i,j,k) = - coefficient_zz * structural_uu_model_constant * c_kk;
4914void calculer_structural_uu_similarity_Streher(
const double structural_uu_model_constant,
4915 const IJK_Field_vector3_double& velocity,
4919 const IJK_Field_double& vitesse_i = velocity[0];
4920 const IJK_Field_double& vitesse_j = velocity[1];
4921 const IJK_Field_double& vitesse_k = velocity[2];
4923 const int ni = vitesse_k.
ni();
4924 const int nj = vitesse_k.
nj();
4925 const int nk = vitesse_k.
nk();
4927 IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
4928 IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
4929 IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
4930 IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
4931 IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
4932 IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
4937 for (
int k = 0; k < nk; k++)
4939 const int kg = k + offset;
4940 for (
int j = 0; j < nj; j++)
4942 for (
int i = 0; i < ni; i++)
4944 const double uf_im1 = vitesse_i(i-1,j,k);
4945 const double uf_i = vitesse_i(i,j,k);
4946 const double uf_i_jm2 = vitesse_i(i,j-2,k);
4947 const double uf_i_jm1 = vitesse_i(i,j-1,k);
4948 const double uf_i_jp1 = vitesse_i(i,j+1,k);
4949 const double uf_i_km2 = kg<=1 ? 0. : vitesse_i(i,j,k-2);
4950 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
4951 const double uf_i_kp1 = kg>=(nktot-1) ? 0. : vitesse_i(i,j,k+1);
4952 const double uf_ip1 = vitesse_i(i+1,j,k);
4953 const double uf_ip2 = vitesse_i(i+2,j,k);
4955 const double vf_jm1 = vitesse_j(i,j-1,k);
4956 const double vf_j = vitesse_j(i,j,k);
4957 const double vf_j_im2 = vitesse_j(i-2,j,k);
4958 const double vf_j_im1 = vitesse_j(i-1,j,k);
4959 const double vf_j_ip1 = vitesse_j(i+1,j,k);
4960 const double vf_j_km2 = kg<=1 ? 0. : vitesse_j(i,j,k-2);
4961 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
4962 const double vf_j_kp1 = kg>=(nktot-1) ? 0. : vitesse_j(i,j,k+1);
4963 const double vf_jp1 = vitesse_j(i,j+1,k);
4964 const double vf_jp2 = vitesse_j(i,j+2,k);
4966 const double wf_km1 = kg<=1 ? 0. : vitesse_k(i,j,k-1);
4967 const double wf_k = vitesse_k(i,j,k);
4968 const double wf_k_im2 = vitesse_k(i-2,j,k);
4969 const double wf_k_im1 = vitesse_k(i-1,j,k);
4970 const double wf_k_ip1 = vitesse_k(i+1,j,k);
4971 const double wf_k_jm2 = vitesse_k(i,j-2,k);
4972 const double wf_k_jm1 = vitesse_k(i,j-1,k);
4973 const double wf_k_jp1 = vitesse_k(i,j+1,k);
4974 const double wf_kp1 = kg>=(nktot-1) ? 0. : vitesse_k(i,j,k+1);
4975 const double wf_kp2 = kg>=(nktot-2) ? 0. : vitesse_k(i,j,k+2);
4977 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.;
4978 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.;
4979 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.;
4980 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.;
4981 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.;
4982 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.;
4984 structural_uu_xx(i,j,k) = - c_ii * structural_uu_model_constant;
4985 structural_uu_xy(i,j,k) = - c_ij * structural_uu_model_constant;
4986 structural_uu_xz(i,j,k) = - c_ik * structural_uu_model_constant;
4987 structural_uu_yy(i,j,k) = - c_jj * structural_uu_model_constant;
4988 structural_uu_yz(i,j,k) = - c_jk * structural_uu_model_constant;
4989 structural_uu_zz(i,j,k) = - c_kk * structural_uu_model_constant;
4996void calculer_structural_uu(
const Nom& structural_uu_model,
4997 const double structural_uu_model_constant,
4998 const ArrOfDouble& structural_uu_tensor_coefficients,
4999 IJK_Field_double& rho,
5000 IJK_Field_vector3_double& velocity,
5001 IJK_Field_vector3_double& velocity_filtre,
5002 const ArrOfDouble_with_ghost& delta_z,
5003 const double facteur_delta_x,
5004 const double facteur_delta_y,
5005 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5006 const double facteur_delta_filtre_x,
5007 const double facteur_delta_filtre_y,
5008 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
5013 const bool flag_structural_uu_filtre,
5017 int ghost_size_filter;
5018 int ghost_size_velocity;
5019 int ghost_size_structural_uu_tmp;
5021 if ( structural_uu_model ==
Nom(
"gradient") )
5023 calculer_structural_uu_gradient(structural_uu_model_constant,
5024 structural_uu_tensor_coefficients,
5026 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5027 structural_uu_tensor);
5029 else if ( structural_uu_model ==
Nom(
"gradient_filtre") )
5031 calculer_structural_uu_gradient(structural_uu_model_constant,
5032 structural_uu_tensor_coefficients,
5034 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5035 structural_uu_tmp_tensor);
5037 ghost_size_filter = 1 + kernel->ghost_size();
5038 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5046 const int flag_add = 0;
5047 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]);
5048 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]);
5049 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]);
5050 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]);
5051 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]);
5052 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]);
5054 else if ( structural_uu_model ==
Nom(
"su_laplacien_u") )
5060 calculer_laplacien_u(velocity,
5061 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5068 calculer_structural_uu_su_laplacien_u(structural_uu_model_constant,
5069 structural_uu_tensor_coefficients,
5072 structural_uu_tensor);
5074 else if ( structural_uu_model ==
Nom(
"convection") )
5076 calculer_structural_uu_convection(structural_uu_model_constant,
5077 structural_uu_tensor_coefficients,
5079 structural_uu_tensor);
5081 else if ( structural_uu_model ==
Nom(
"convection_filtre") )
5083 calculer_structural_uu_convection(structural_uu_model_constant,
5084 structural_uu_tensor_coefficients,
5086 structural_uu_tmp_tensor);
5088 ghost_size_filter = 1 + kernel->ghost_size();
5089 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5097 const int flag_add = 0;
5098 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]);
5099 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]);
5100 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]);
5101 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]);
5102 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]);
5103 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]);
5105 else if ( structural_uu_model ==
Nom(
"similarity") )
5107 ghost_size_filter = 1 + kernel->ghost_size();
5108 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5113 const int flag_add = 0;
5114 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]);
5115 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]);
5116 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]);
5122 calculer_structural_uu_similarity(structural_uu_model_constant,
5123 structural_uu_tensor_coefficients,
5124 velocity, velocity_filtre,
5125 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5126 kernel, tmp_b, tmp_a,
5127 structural_uu_tensor);
5129 else if ( structural_uu_model ==
Nom(
"similarity_comp") )
5131 ghost_size_filter = 1 + kernel->ghost_size();
5132 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5137 const int flag_add = 0;
5138 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]);
5139 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]);
5140 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]);
5146 calculer_structural_uu_similarity_comp(structural_uu_model_constant,
5147 structural_uu_tensor_coefficients,
5149 velocity, velocity_filtre,
5150 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
5151 kernel, tmp_b, tmp_a,
5152 structural_uu_tensor);
5154 else if ( structural_uu_model ==
Nom(
"similarity_streher") )
5156 ghost_size_filter = 1 + kernel->ghost_size();
5157 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5162 const int flag_add = 0;
5163 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]);
5164 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]);
5165 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]);
5171 calculer_structural_uu_similarity_Streher(structural_uu_model_constant,
5174 structural_uu_tensor);
5178 Cerr <<
"The name of the structural model for uu is unknown." << finl;
5182 if (flag_structural_uu_filtre)
5184 ghost_size_filter = 1 + kernel->ghost_size();
5185 ghost_size_velocity = max((
int) 2, ghost_size_filter);
5190 const int flag_add = 0;
5191 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]);
5192 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]);
5193 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]);
5200 if ( structural_uu_model ==
Nom(
"gradient") )
5202 calculer_structural_uu_gradient(structural_uu_model_constant,
5203 structural_uu_tensor_coefficients,
5205 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5206 structural_uu_filtre_tensor);
5208 else if ( structural_uu_model ==
Nom(
"gradient_filtre") )
5210 calculer_structural_uu_gradient(structural_uu_model_constant,
5211 structural_uu_tensor_coefficients,
5213 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5214 structural_uu_tmp_tensor);
5216 ghost_size_filter = 1 + kernel->ghost_size();
5217 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5225 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]);
5226 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]);
5227 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]);
5228 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]);
5229 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]);
5230 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]);
5232 else if ( structural_uu_model ==
Nom(
"su_laplacien_u") )
5234 calculer_laplacien_u(velocity_filtre,
5235 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
5242 calculer_structural_uu_su_laplacien_u(structural_uu_model_constant,
5243 structural_uu_tensor_coefficients,
5246 structural_uu_filtre_tensor);
5248 else if ( structural_uu_model ==
Nom(
"convection") )
5250 calculer_structural_uu_convection(structural_uu_model_constant,
5251 structural_uu_tensor_coefficients,
5253 structural_uu_filtre_tensor);
5255 else if ( structural_uu_model ==
Nom(
"convection_filtre") )
5257 calculer_structural_uu_convection(structural_uu_model_constant,
5258 structural_uu_tensor_coefficients,
5260 structural_uu_tmp_tensor);
5262 ghost_size_filter = 1 + kernel->ghost_size();
5263 ghost_size_structural_uu_tmp = max((
int) 2, ghost_size_filter);
5271 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]);
5272 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]);
5273 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]);
5274 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]);
5275 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]);
5276 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]);
5278 else if ( structural_uu_model ==
Nom(
"similarity") )
5280 Cerr <<
"The use of a dynamic constant with the SIMILARITY structural model is not allowed." << finl;
5286void calculer_structural_uscalar_gradient(
const double structural_uscalar_model_constant,
5287 const ArrOfDouble& structural_uscalar_vector_coefficients,
5288 const IJK_Field_vector3_double& velocity,
5289 const IJK_Field_double& champ_scalar,
5290 double scalar_kmin,
double scalar_kmax,
5291 const ArrOfDouble_with_ghost& delta_z_maillage,
5292 const double facteur_x_pour_delta,
5293 const double facteur_y_pour_delta,
5294 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5295 IJK_Field_vector3_double& structural_uscalar_vector)
5297 const IJK_Field_double& vitesse_i = velocity[0];
5298 const IJK_Field_double& vitesse_j = velocity[1];
5299 const IJK_Field_double& vitesse_k = velocity[2];
5301 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5302 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5303 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5305 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5306 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5307 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5309 const double deltaunsurdx = facteur_x_pour_delta;
5310 const double deltaunsurdy = facteur_y_pour_delta;
5315 const int ni = vitesse_k.
ni();
5316 const int nj = vitesse_k.
nj();
5317 const int nk = vitesse_k.
nk();
5319 for (
int k = 0; k < nk; k++)
5321 for (
int j = 0; j < nj; j++)
5323 for (
int i = 0; i < ni; i++)
5325 const int kg = k + offset;
5327 const double dz = delta_z_maillage[k];
5328 const double dz_m1 = kg==0 ? 0. : delta_z_maillage[k-1];
5329 const double delta_m = kg==0 ? 0.5*dz : 0.5*(dz + delta_z_maillage[k-1]);
5330 const double delta_p = kg==(nktot-1) ? 0.5*dz : 0.5*(dz + delta_z_maillage[k+1]);
5332 const double deltaunsurdz = delta_z_pour_delta[k] * 1./dz;
5333 const double deltaunsurdz_m1 = kg==0 ? 0. : delta_z_pour_delta[k-1] * 1./dz_m1;
5334 const double deltaunsurdelta_m = kg==0 ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k-1]) * 1./delta_m;
5335 const double deltaunsurdelta_p = kg==(nktot-1) ? 0. : 0.5*(delta_z_pour_delta[k] + delta_z_pour_delta[k+1]) * 1./delta_p;
5337 const double uf_i = vitesse_i(i,j,k);
5338 const double uf_ip1 = vitesse_i(i+1,j,k);
5339 const double uf_im1 = vitesse_i(i-1,j,k);
5340 const double uf_i_jm1 = vitesse_i(i,j-1,k);
5341 const double uf_i_jp1 = vitesse_i(i,j+1,k);
5342 const double uf_i_km1 = kg==0 ? 0. : vitesse_i(i,j,k-1);
5343 const double uf_i_kp1 = kg==(nktot-1) ? 0. : vitesse_i(i,j,k+1);
5345 const double vf_j = vitesse_j(i,j,k);
5346 const double vf_j_im1 = vitesse_j(i-1,j,k);
5347 const double vf_j_ip1 = vitesse_j(i+1,j,k);
5348 const double vf_jp1 = vitesse_j(i,j+1,k);
5349 const double vf_jm1 = vitesse_j(i,j-1,k);
5350 const double vf_j_km1 = kg==0 ? 0. : vitesse_j(i,j,k-1);
5351 const double vf_j_kp1 = kg==(nktot-1) ? 0. : vitesse_j(i,j,k+1);
5353 const double wf_k = vitesse_k(i,j,k);
5354 const double wf_k_im1 = vitesse_k(i-1,j,k);
5355 const double wf_k_ip1 = vitesse_k(i+1,j,k);
5356 const double wf_k_jm1 = vitesse_k(i,j-1,k);
5357 const double wf_k_jp1 = vitesse_k(i,j+1,k);
5358 const double wf_kp1 = kg==(nktot-1) ? 0. : vitesse_k(i,j,k+1);
5359 const double wf_km1 = kg==0 ? 0. : vitesse_k(i,j,k-1);
5361 const double duidx = deltaunsurdx * (uf_ip1 - uf_i);
5362 const double dujdy = deltaunsurdy * (vf_jp1 - vf_j);
5363 const double dukdz = deltaunsurdz * (wf_kp1 - wf_k);
5365 const double duidx_im1 = deltaunsurdx * (uf_i - uf_im1);
5366 const double dujdy_jm1 = deltaunsurdy * (vf_j - vf_jm1);
5367 const double dukdz_km1 = deltaunsurdz_m1 * (wf_k - wf_km1);
5369 const double duidy_ij = deltaunsurdy * (uf_i - uf_i_jm1);
5370 const double duidy_ijp1 = deltaunsurdy * (uf_i_jp1 - uf_i);
5372 const double duidz_ik = deltaunsurdelta_m * (uf_i - uf_i_km1);
5373 const double duidz_ikp1 = deltaunsurdelta_p * (uf_i_kp1 - uf_i);
5375 const double dujdx_ij = deltaunsurdx * (vf_j - vf_j_im1);
5376 const double dujdx_ip1j = deltaunsurdx * (vf_j_ip1 - vf_j);
5378 const double dujdz_jk = deltaunsurdelta_m * (vf_j - vf_j_km1);
5379 const double dujdz_jkp1 = deltaunsurdelta_p * (vf_j_kp1 - vf_j);
5381 const double dukdx_ik = deltaunsurdx * (wf_k - wf_k_im1);
5382 const double dukdx_ip1k = deltaunsurdx * (wf_k_ip1 - wf_k);
5384 const double dukdy_jk = deltaunsurdy * (wf_k - wf_k_jm1);
5385 const double dukdy_jp1k = deltaunsurdy * (wf_k_jp1 - wf_k);
5387 const double g_fi_ii = 0.5 * (duidx_im1 + duidx);
5388 const double g_fi_ij = 0.5 * (duidy_ijp1 + duidy_ij);
5389 const double g_fi_ik = 0.5 * (duidz_ikp1 + duidz_ik);
5390 const double g_fj_ji = 0.5 * (dujdx_ip1j + dujdx_ij);
5391 const double g_fj_jj = 0.5 * (dujdy_jm1 + dujdy);
5392 const double g_fj_jk = 0.5 * (dujdz_jkp1 + dujdz_jk);
5393 const double g_fk_ki = 0.5 * (dukdx_ip1k + dukdx_ik);
5394 const double g_fk_kj = 0.5 * (dukdy_jp1k + dukdy_jk);
5395 const double g_fk_kk = 0.5 * (dukdz_km1 + dukdz);
5397 const double scalar = champ_scalar(i,j,k);
5399 const double scalar_im1 = champ_scalar(i-1,j,k);
5400 const double scalar_ip1 = champ_scalar(i+1,j,k);
5401 const double scalar_im1_jm1 = champ_scalar(i-1,j-1,k);
5402 const double scalar_ip1_jm1 = champ_scalar(i+1,j-1,k);
5403 const double scalar_im1_km1 = kg==0 ? scalar_kmin : champ_scalar(i-1,j,k-1);
5404 const double scalar_ip1_km1 = kg==0 ? scalar_kmin : champ_scalar(i+1,j,k-1);
5406 const double scalar_jm1 = champ_scalar(i,j-1,k);
5407 const double scalar_jp1 = champ_scalar(i,j+1,k);
5408 const double scalar_jm1_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j-1,k-1);
5409 const double scalar_jp1_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j+1,k-1);
5411 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
5412 const double scalar_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j,k+1);
5414 const double scalar_im1_jp1 = champ_scalar(i-1,j+1,k);
5415 const double scalar_im1_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i-1,j,k+1);
5416 const double scalar_jm1_kp1 = kg==(nktot-1) ? scalar_kmax : champ_scalar(i,j-1,k+1);
5418 const double dscalardxf_i = deltaunsurdx * (scalar - scalar_im1);
5419 const double dscalardxf_ip1 = deltaunsurdx * (scalar_ip1 - scalar);
5420 const double dscalardxf_i_jm1 = deltaunsurdx * (scalar_jm1 - scalar_im1_jm1);
5421 const double dscalardxf_ip1_jm1 = deltaunsurdx * (scalar_ip1_jm1 - scalar_jm1);
5422 const double dscalardxf_i_km1 = deltaunsurdx * (scalar_km1 - scalar_im1_km1);
5423 const double dscalardxf_ip1_km1 = deltaunsurdx * (scalar_ip1_km1 - scalar_km1);
5425 const double dscalardyf_j = deltaunsurdy * (scalar - scalar_jm1);
5426 const double dscalardyf_jp1 = deltaunsurdy * (scalar_jp1 - scalar);
5427 const double dscalardyf_j_im1 = deltaunsurdy * (scalar_im1 - scalar_im1_jm1);
5428 const double dscalardyf_jp1_im1 = deltaunsurdy * (scalar_im1_jp1 - scalar_im1);
5429 const double dscalardyf_j_km1 = deltaunsurdy * (scalar_km1 - scalar_jm1_km1);
5430 const double dscalardyf_jp1_km1 = deltaunsurdy * (scalar_jp1_km1 - scalar_km1);
5432 const double dscalardzf_k = deltaunsurdelta_m * (scalar - scalar_km1);
5433 const double dscalardzf_kp1 = deltaunsurdelta_p * (scalar_kp1 - scalar);
5434 const double dscalardzf_k_im1 = deltaunsurdelta_m * (scalar_im1 - scalar_im1_km1);
5435 const double dscalardzf_kp1_im1 = deltaunsurdelta_p * (scalar_im1_kp1 - scalar_im1);
5436 const double dscalardzf_k_jm1 = deltaunsurdelta_m * (scalar_jm1 - scalar_jm1_km1);
5437 const double dscalardzf_kp1_jm1 = deltaunsurdelta_p * (scalar_jm1_kp1 - scalar_jm1);
5439 const double q_fi_i = dscalardxf_i;
5440 const double q_fi_j = 0.25 * (dscalardyf_jp1_im1 + dscalardyf_jp1 + dscalardyf_j_im1 + dscalardyf_j);
5441 const double q_fi_k = 0.25 * (dscalardzf_kp1_im1 + dscalardzf_kp1 + dscalardzf_k_im1 + dscalardzf_k);
5443 const double q_fj_i = 0.25 * (dscalardxf_ip1_jm1 + dscalardxf_ip1 + dscalardxf_i_jm1 + dscalardxf_i);
5444 const double q_fj_j = dscalardyf_j;
5445 const double q_fj_k = 0.25 * (dscalardzf_kp1_jm1 + dscalardzf_kp1 + dscalardzf_k_jm1 + dscalardzf_k);
5447 const double q_fk_i = 0.25 * (dscalardxf_ip1_km1 + dscalardxf_ip1 + dscalardxf_i_km1 + dscalardxf_i);
5448 const double q_fk_j = 0.25 * (dscalardyf_jp1_km1 + dscalardyf_jp1 + dscalardyf_j_km1 + dscalardyf_j);
5449 const double q_fk_k = dscalardzf_k;
5451 const double c_i = g_fi_ii*q_fi_i + g_fi_ij*q_fi_j + g_fi_ik*q_fi_k;
5452 const double c_j = g_fj_ji*q_fj_i + g_fj_jj*q_fj_j + g_fj_jk*q_fj_k;
5453 const double c_k = g_fk_ki*q_fk_i + g_fk_kj*q_fk_j + g_fk_kk*q_fk_k;
5455 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_i/12.;
5456 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_j/12.;
5457 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_k/12.;
5465void calculer_structural_uscalar_similarity_comp(
const double structural_uscalar_model_constant,
5466 const ArrOfDouble& structural_uscalar_vector_coefficients,
5467 const IJK_Field_double& rho,
5468 const IJK_Field_vector3_double& velocity,
5469 const IJK_Field_vector3_double& velocity_filtre,
5470 const IJK_Field_double& champ_scalar,
5471 const IJK_Field_double& champ_scalar_filtre,
5472 double scalar_kmin,
double scalar_kmax,
5473 const ArrOfDouble_with_ghost& delta_z,
5474 const double facteur_delta_x,
5475 const double facteur_delta_y,
5476 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5480 IJK_Field_vector3_double& structural_uscalar_vector)
5482 const IJK_Field_double& vitesse_i = velocity[0];
5483 const IJK_Field_double& vitesse_j = velocity[1];
5484 const IJK_Field_double& vitesse_k = velocity[2];
5485 const IJK_Field_double& masse_vol_ijk = rho;
5486 IJK_Field_local_double& masse_vol_ijk_filtre = tmp_b[9];
5487 IJK_Field_local_double& aa_rho_ijk_filtre = tmp_a[9];
5493 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5494 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5495 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5497 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5498 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5499 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5503 const double dx_pour_delta = facteur_delta_x*dx;
5504 const double dy_pour_delta = facteur_delta_y*dy;
5506 const int ni = vitesse_k.
ni();
5507 const int nj = vitesse_k.
nj();
5508 const int nk = vitesse_k.
nk();
5513 IJK_Field_local_double& b_is = tmp_b[0];
5514 IJK_Field_local_double& b_js = tmp_b[1];
5515 IJK_Field_local_double& b_ks = tmp_b[2];
5516 IJK_Field_local_double& bb_is = tmp_b[3];
5517 IJK_Field_local_double& bb_js = tmp_b[4];
5518 IJK_Field_local_double& bb_ks = tmp_b[5];
5519 IJK_Field_local_double& bbT_i = tmp_b[6];
5520 IJK_Field_local_double& bbT_j = tmp_b[7];
5521 IJK_Field_local_double& bbT_k = tmp_b[8];
5523 IJK_Field_local_double& a_is = tmp_a[0];
5524 IJK_Field_local_double& a_js = tmp_a[1];
5525 IJK_Field_local_double& a_ks = tmp_a[2];
5526 IJK_Field_local_double& aa_is = tmp_a[3];
5527 IJK_Field_local_double& aa_js = tmp_a[4];
5528 IJK_Field_local_double& aa_ks = tmp_a[5];
5529 IJK_Field_local_double& aaT_i = tmp_a[6];
5530 IJK_Field_local_double& aaT_j = tmp_a[7];
5531 IJK_Field_local_double& aaT_k = tmp_a[8];
5533 const int ghost_size_filter = kernel->ghost_size();
5534 const int size_uniform = kernel->size_uniform();
5535 const int shift_uniform = kernel->shift_uniform();
5536 for (
int k = 0; k < nk; k++)
5538 const int kg = k + offset;
5540 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
5541 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
5542 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
5544 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
5545 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
5546 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);
5548 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
5549 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
5552 const int size_k_elem = kernel->size_k_elem(kg, nktot);
5553 const int size_k_face = kernel->size_k_face(kg, nktot);
5554 const int shift_k_elem = kernel->shift_k_elem(kg);
5555 const int shift_k_face = kernel->shift_k_face(kg);
5556 const bool ponderation_filter_kernel = kernel->ponderation();
5557 const bool normalisation_filter_kernel = kernel->normalisation();
5559 double facteur_elem = 0.;
5560 if (ponderation_filter_kernel)
5562 if (normalisation_filter_kernel)
5564 double longueur_elem = 0.;
5565 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5567 const int kpg = kg + kp;
5568 if (kpg<-1 || kpg>nktot)
5570 Cerr <<
"This should not happen." << finl;
5573 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5574 const double filter_coef_z = filter_kernel_z[kp+10];
5575 longueur_elem += filter_coef_z * dz;
5577 facteur_elem = 1./longueur_elem;
5581 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
5584 double facteur_face = 0.;
5585 if (ponderation_filter_kernel)
5587 if (normalisation_filter_kernel)
5589 double longueur_face = 0.;
5590 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5592 const int kpg = kg + kp;
5593 if (kpg<0 || kpg>nktot)
5595 Cerr <<
"This should not happen." << finl;
5598 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5599 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5600 const double dzf = 0.5*(dz + dz_m1);
5601 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5602 longueur_face += filter_coef_z_face * dzf;
5604 facteur_face = 1./longueur_face;
5608 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
5612 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
5614 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5619 bb_is(i, j, 0) = 0.;
5620 bb_js(i, j, 0) = 0.;
5621 bb_ks(i, j, 0) = 0.;
5622 bbT_i(i, j, 0) = 0.;
5623 bbT_j(i, j, 0) = 0.;
5624 bbT_k(i, j, 0) = 0.;
5625 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5627 const int kpg = kg + kp;
5628 if (!(kernel->is_at_wall_elem(kpg, nktot)))
5630 const double filter_coef_z = filter_kernel_z[kp+10];
5632 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
5633 const double scalar = champ_scalar(i,j,k+kp);
5636 const double scalarf_i = (scalar);
5637 const double scalarf_j = (scalar);
5639 const double uf_i = 0.5*(vitesse_i(i,j,k+kp)+vitesse_i(i+1,j,k+kp));
5640 const double vf_j = 0.5*(vitesse_j(i,j,k+kp)+vitesse_j(i,j+1,k+kp));
5642 if (ponderation_filter_kernel)
5644 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5645 b_is(i, j, 0) += rho_ijk*uf_i*scalarf_i * filter_coef_z * dz * facteur_elem;
5646 b_js(i, j, 0) += rho_ijk*vf_j*scalarf_j * filter_coef_z * dz * facteur_elem;
5647 bb_is(i, j, 0) += rho_ijk*uf_i * filter_coef_z * dz * facteur_elem;
5648 bb_js(i, j, 0) += rho_ijk*vf_j * filter_coef_z * dz * facteur_elem;
5649 bbT_i(i, j, 0) += rho_ijk*scalarf_i * filter_coef_z * dz * facteur_elem;
5650 bbT_j(i, j, 0) += rho_ijk*scalarf_j * filter_coef_z * dz * facteur_elem;
5651 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z * dz * facteur_elem;
5655 b_is(i, j, 0) += rho_ijk*uf_i*scalarf_i * filter_coef_z;
5656 b_js(i, j, 0) += rho_ijk*vf_j*scalarf_j * filter_coef_z;
5657 bb_is(i, j, 0) += rho_ijk*uf_i * filter_coef_z;
5658 bb_js(i, j, 0) += rho_ijk*vf_j * filter_coef_z;
5659 bbT_i(i, j, 0) += rho_ijk*scalarf_i * filter_coef_z;
5660 bbT_j(i, j, 0) += rho_ijk*scalarf_j * filter_coef_z;
5661 masse_vol_ijk_filtre(i, j, 0) += rho_ijk * filter_coef_z;
5665 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5667 const int kpg = kg + kp;
5668 if (!(kernel->is_at_wall_face(kpg, nktot)))
5670 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5672 const double rho_ijk = masse_vol_ijk(i,j,k+kp);
5673 const double scalar = champ_scalar(i,j,k+kp);
5675 const double scalarf_k = (scalar);
5677 const double wf_k = kpg==(nktot-1) ? 0. : 0.5*(vitesse_k(i,j,k+kp)+vitesse_k(i,j,k+kp+1));
5679 if (ponderation_filter_kernel)
5681 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5682 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5683 const double dzf = 0.5*(dz + dz_m1);
5684 b_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5685 bb_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5686 bbT_k(i, j, 0) += rho_ijk*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5690 b_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face;
5691 bb_ks(i, j, 0) += rho_ijk*wf_k*scalarf_k * filter_coef_z_face;
5692 bbT_k(i, j, 0) += rho_ijk*scalarf_k * filter_coef_z_face;
5698 for (
int j = 0; j < nj; j++)
5700 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5705 aa_is(i, 0, 0) = 0.;
5706 aa_js(i, 0, 0) = 0.;
5707 aa_ks(i, 0, 0) = 0.;
5708 aaT_i(i, 0, 0) = 0.;
5709 aaT_j(i, 0, 0) = 0.;
5710 aaT_k(i, 0, 0) = 0.;
5711 aa_rho_ijk_filtre(i, 0, 0) = 0.;
5712 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
5714 const double filter_coef_y = filter_kernel_y[jp+10];
5715 a_is(i, 0, 0) += b_is(i, j+jp, 0) * filter_coef_y;
5716 a_js(i, 0, 0) += b_js(i, j+jp, 0) * filter_coef_y;
5717 a_ks(i, 0, 0) += b_ks(i, j+jp, 0) * filter_coef_y;
5718 aa_is(i, 0, 0) += bb_is(i, j+jp, 0) * filter_coef_y;
5719 aa_js(i, 0, 0) += bb_js(i, j+jp, 0) * filter_coef_y;
5720 aa_ks(i, 0, 0) += bb_ks(i, j+jp, 0) * filter_coef_y;
5721 aaT_i(i, 0, 0) += bbT_i(i, j+jp, 0) * filter_coef_y;
5722 aaT_j(i, 0, 0) += bbT_j(i, j+jp, 0) * filter_coef_y;
5723 aaT_k(i, 0, 0) += bbT_k(i, j+jp, 0) * filter_coef_y;
5724 aa_rho_ijk_filtre(i, 0, 0) += masse_vol_ijk_filtre(i, j+jp, 0)* filter_coef_y;
5728 for (
int i = 0; i < ni; i++)
5733 double rho_uf_i = 0.;
5734 double rho_vf_j = 0.;
5735 double rho_wf_k = 0.;
5736 double rho_scalarf_i = 0.;
5737 double rho_scalarf_j = 0.;
5738 double rho_scalarf_k = 0.;
5739 double rho_filtre = 0.;
5740 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
5742 const double filter_coef_x = filter_kernel_x[ip+10];
5743 r_is += a_is(i+ip, 0, 0) * filter_coef_x;
5744 r_js += a_js(i+ip, 0, 0) * filter_coef_x;
5745 r_ks += a_ks(i+ip, 0, 0) * filter_coef_x;
5746 rho_uf_i += aa_is(i+ip, 0, 0) * filter_coef_x;
5747 rho_vf_j += aa_js(i+ip, 0, 0) * filter_coef_x;
5748 rho_wf_k += aa_ks(i+ip, 0, 0) * filter_coef_x;
5749 rho_scalarf_i += aaT_i(i+ip, 0, 0) * filter_coef_x;
5750 rho_scalarf_j += aaT_j(i+ip, 0, 0) * filter_coef_x;
5751 rho_scalarf_k += aaT_k(i+ip, 0, 0) * filter_coef_x;
5752 rho_filtre += aa_rho_ijk_filtre(i+ip, 0, 0)* filter_coef_x;
5755 Cerr <<
"i=" << i << finl;
5756 Cerr <<
"j=" << j << finl;
5757 Cerr <<
"k=" << k << finl;
5758 Cerr <<
"rho_filtre=" << rho_filtre << finl;
5759 Cerr <<
"r_is=" << r_is << finl;
5760 Cerr <<
"rho_uf_i=" << rho_uf_i << finl;
5761 Cerr <<
"rho_scalarf_i=" << rho_scalarf_i << finl;
5762 Cerr <<
"-----------------------" << finl;
5764 const double c_is = (r_is)/rho_filtre - (rho_uf_i*rho_scalarf_i)/(rho_filtre*rho_filtre);
5765 const double c_js = (r_js)/rho_filtre - (rho_vf_j*rho_scalarf_j)/(rho_filtre*rho_filtre);
5766 const double c_ks = (r_ks)/rho_filtre - (rho_wf_k*rho_scalarf_k)/(rho_filtre*rho_filtre);
5768 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_is;
5769 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_js;
5770 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_ks;
5777void calculer_structural_uscalar_similarity(
const double structural_uscalar_model_constant,
5778 const ArrOfDouble& structural_uscalar_vector_coefficients,
5779 const IJK_Field_vector3_double& velocity,
5780 const IJK_Field_vector3_double& velocity_filtre,
5781 const IJK_Field_double& champ_scalar,
5782 const IJK_Field_double& champ_scalar_filtre,
5783 double scalar_kmin,
double scalar_kmax,
5784 const ArrOfDouble_with_ghost& delta_z,
5785 const double facteur_delta_x,
5786 const double facteur_delta_y,
5787 const ArrOfDouble_with_ghost& delta_z_pour_delta,
5791 IJK_Field_vector3_double& structural_uscalar_vector)
5793 const IJK_Field_double& vitesse_i = velocity[0];
5794 const IJK_Field_double& vitesse_j = velocity[1];
5795 const IJK_Field_double& vitesse_k = velocity[2];
5797 const IJK_Field_double& vitesse_i_filtre = velocity_filtre[0];
5798 const IJK_Field_double& vitesse_j_filtre = velocity_filtre[1];
5799 const IJK_Field_double& vitesse_k_filtre = velocity_filtre[2];
5801 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
5802 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
5803 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
5805 const double& coefficient_x = structural_uscalar_vector_coefficients[0];
5806 const double& coefficient_y = structural_uscalar_vector_coefficients[1];
5807 const double& coefficient_z = structural_uscalar_vector_coefficients[2];
5811 const double dx_pour_delta = facteur_delta_x*dx;
5812 const double dy_pour_delta = facteur_delta_y*dy;
5814 const int ni = vitesse_k.
ni();
5815 const int nj = vitesse_k.
nj();
5816 const int nk = vitesse_k.
nk();
5821 IJK_Field_local_double& b_is = tmp_b[0];
5822 IJK_Field_local_double& b_js = tmp_b[1];
5823 IJK_Field_local_double& b_ks = tmp_b[2];
5825 IJK_Field_local_double& a_is = tmp_a[0];
5826 IJK_Field_local_double& a_js = tmp_a[1];
5827 IJK_Field_local_double& a_ks = tmp_a[2];
5829 const int ghost_size_filter = kernel->ghost_size();
5830 const int size_uniform = kernel->size_uniform();
5831 const int shift_uniform = kernel->shift_uniform();
5832 for (
int k = 0; k < nk; k++)
5834 const int kg = k + offset;
5836 const double dz_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z[k];
5837 const double dz_m1_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z[k-1];
5838 const double delta_m_glo = kg==0 ? 0.5*dz_glo : 0.5*(dz_glo + dz_m1_glo);
5840 const double dz_pour_delta_glo = (kg<0 || kg>(nktot-1)) ? 0. : delta_z_pour_delta[k];
5841 const double dz_m1_pour_delta_glo = (kg-1<0 || kg-1>(nktot-1)) ? 0. : delta_z_pour_delta[k-1];
5842 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);
5844 const FixedVector<double, 21> filter_kernel_z = kernel->inhomogeneous(
true, k, kg, nktot, dz_pour_delta_glo, delta_z);
5845 const FixedVector<double, 21> filter_kernel_z_face = kernel->inhomogeneous(
false, k, kg, nktot, delta_m_pour_delta_glo, delta_z);
5848 const int size_k_elem = kernel->size_k_elem(kg, nktot);
5849 const int size_k_face = kernel->size_k_face(kg, nktot);
5850 const int shift_k_elem = kernel->shift_k_elem(kg);
5851 const int shift_k_face = kernel->shift_k_face(kg);
5852 const bool ponderation_filter_kernel = kernel->ponderation();
5853 const bool normalisation_filter_kernel = kernel->normalisation();
5855 double facteur_elem = 0.;
5856 if (ponderation_filter_kernel)
5858 if (normalisation_filter_kernel)
5860 double longueur_elem = 0.;
5861 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5863 const int kpg = kg + kp;
5864 if (kpg<-1 || kpg>nktot)
5866 Cerr <<
"This should not happen." << finl;
5869 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5870 const double filter_coef_z = filter_kernel_z[kp+10];
5871 longueur_elem += filter_coef_z * dz;
5873 facteur_elem = 1./longueur_elem;
5877 facteur_elem = dz_glo==0. ? 0. : 1./dz_glo;
5880 double facteur_face = 0.;
5881 if (ponderation_filter_kernel)
5883 if (normalisation_filter_kernel)
5885 double longueur_face = 0.;
5886 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5888 const int kpg = kg + kp;
5889 if (kpg<0 || kpg>nktot)
5891 Cerr <<
"This should not happen." << finl;
5894 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5895 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5896 const double dzf = 0.5*(dz + dz_m1);
5897 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5898 longueur_face += filter_coef_z_face * dzf;
5900 facteur_face = 1./longueur_face;
5904 facteur_face = delta_m_glo==0. ? 0. : 1./delta_m_glo;
5908 for (
int j = -ghost_size_filter; j < nj+ghost_size_filter; j++)
5910 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5915 for (
int kp = -shift_k_elem; kp < size_k_elem-shift_k_elem; kp++)
5917 const int kpg = kg + kp;
5918 if (!(kernel->is_at_wall_elem(kpg, nktot)))
5920 const double filter_coef_z = filter_kernel_z[kp+10];
5922 const double scalar = champ_scalar(i,j,k+kp);
5923 const double scalar_im1 = champ_scalar(i-1,j,k+kp);
5924 const double scalar_jm1 = champ_scalar(i,j-1,k+kp);
5925 const double scalarf_i = 0.5*(scalar + scalar_im1);
5926 const double scalarf_j = 0.5*(scalar + scalar_jm1);
5928 const double uf_i = vitesse_i(i,j,k+kp);
5929 const double vf_j = vitesse_j(i,j,k+kp);
5931 if (ponderation_filter_kernel)
5933 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5934 b_is(i, j, 0) += uf_i*scalarf_i * filter_coef_z * dz * facteur_elem;
5935 b_js(i, j, 0) += vf_j*scalarf_j * filter_coef_z * dz * facteur_elem;
5939 b_is(i, j, 0) += uf_i*scalarf_i * filter_coef_z;
5940 b_js(i, j, 0) += vf_j*scalarf_j * filter_coef_z;
5944 for (
int kp = -shift_k_face; kp < size_k_face-shift_k_face; kp++)
5946 const int kpg = kg + kp;
5947 if (!(kernel->is_at_wall_face(kpg, nktot)))
5949 const double filter_coef_z_face = filter_kernel_z_face[kp+10];
5951 const double scalar = champ_scalar(i,j,k+kp);
5952 const double scalar_km1 = kpg==0 ? scalar_kmin : champ_scalar(i,j,k-1+kp);
5953 const double scalarf_k = 0.5*(scalar + scalar_km1);
5955 const double wf_k = vitesse_k(i,j,k+kp);
5957 if (ponderation_filter_kernel)
5959 const double dz = (kpg<0 || kpg>(nktot-1)) ? 0. : delta_z[k+kp];
5960 const double dz_m1 = (kpg-1<0 || kpg-1>(nktot-1)) ? 0. : delta_z[k-1+kp];
5961 const double dzf = 0.5*(dz + dz_m1);
5962 b_ks(i, j, 0) += wf_k*scalarf_k * filter_coef_z_face * dzf * facteur_face;
5966 b_ks(i, j, 0) += wf_k*scalarf_k * filter_coef_z_face;
5972 for (
int j = 0; j < nj; j++)
5974 for (
int i = -ghost_size_filter; i < ni+ghost_size_filter; i++)
5979 for (
int jp = -shift_uniform; jp < size_uniform-shift_uniform; jp++)
5981 const double filter_coef_y = filter_kernel_y[jp+10];
5982 a_is(i, 0, 0) += b_is(i, j+jp, 0) * filter_coef_y;
5983 a_js(i, 0, 0) += b_js(i, j+jp, 0) * filter_coef_y;
5984 a_ks(i, 0, 0) += b_ks(i, j+jp, 0) * filter_coef_y;
5988 for (
int i = 0; i < ni; i++)
5993 for (
int ip = -shift_uniform; ip < size_uniform-shift_uniform; ip++)
5995 const double filter_coef_x = filter_kernel_x[ip+10];
5996 r_is += a_is(i+ip, 0, 0) * filter_coef_x;
5997 r_js += a_js(i+ip, 0, 0) * filter_coef_x;
5998 r_ks += a_ks(i+ip, 0, 0) * filter_coef_x;
6001 const double scalar = champ_scalar_filtre(i,j,k);
6002 const double scalar_im1 = champ_scalar_filtre(i-1,j,k);
6003 const double scalar_jm1 = champ_scalar_filtre(i,j-1,k);
6004 const double scalar_km1 = kg==0 ? scalar_kmin : champ_scalar_filtre(i,j,k-1);
6005 const double scalarf_i = 0.5*(scalar + scalar_im1);
6006 const double scalarf_j = 0.5*(scalar + scalar_jm1);
6007 const double scalarf_k = 0.5*(scalar + scalar_km1);
6009 const double uf_i = vitesse_i_filtre(i,j,k);
6010 const double vf_j = vitesse_j_filtre(i,j,k);
6011 const double wf_k = vitesse_k_filtre(i,j,k);
6013 const double c_is = r_is - uf_i*scalarf_i;
6014 const double c_js = r_js - vf_j*scalarf_j;
6015 const double c_ks = r_ks - wf_k*scalarf_k;
6017 structural_uscalar_x(i,j,k) = - coefficient_x * structural_uscalar_model_constant * c_is;
6018 structural_uscalar_y(i,j,k) = - coefficient_y * structural_uscalar_model_constant * c_js;
6019 structural_uscalar_z(i,j,k) = - coefficient_z * structural_uscalar_model_constant * c_ks;
6025void calculer_structural_uscalar_similarity_Streher(
const double structural_uscalar_model_constant,
6026 const ArrOfDouble& structural_uscalar_vector_coefficients,
6027 const IJK_Field_vector3_double& velocity,
6028 const IJK_Field_double& champ_scalar,
6029 double scalar_kmin,
double scalar_kmax,
6030 IJK_Field_vector3_double& structural_uscalar_vector)
6032 const IJK_Field_double& vitesse_i = velocity[0];
6033 const IJK_Field_double& vitesse_j = velocity[1];
6034 const IJK_Field_double& vitesse_k = velocity[2];
6036 const int ni = vitesse_k.
ni();
6037 const int nj = vitesse_k.
nj();
6038 const int nk = vitesse_k.
nk();
6040 IJK_Field_double& structural_uscalar_x = structural_uscalar_vector[0];
6041 IJK_Field_double& structural_uscalar_y = structural_uscalar_vector[1];
6042 IJK_Field_double& structural_uscalar_z = structural_uscalar_vector[2];
6047 for (
int k = 0; k < nk; k++)
6049 const int kg = k + offset;
6050 for (
int j = 0; j < nj; j++)
6052 for (
int i = 0; i < ni; i++)
6056 const double uf_i = vitesse_i(i,j,k);
6061 const double vf_j = vitesse_j(i,j,k);
6066 const double wf_k = vitesse_k(i,j,k);
6070 const double sf_im2 = champ_scalar(i-2,j,k);
6071 const double sf_im1 = champ_scalar(i-1,j,k);
6072 const double sf_i = champ_scalar(i,j,k);
6073 const double sf_ip1 = champ_scalar(i+1,j,k);
6076 const double sf_jm2 = champ_scalar(i,j-2,k);
6077 const double sf_jm1 = champ_scalar(i,j-1,k);
6078 const double sf_j = champ_scalar(i,j,k);
6079 const double sf_jp1 = champ_scalar(i,j+1,k);
6082 const double sf_km2 = kg<=1 ? scalar_kmin : champ_scalar(i,j,k-2);
6083 const double sf_km1 = kg==0 ? scalar_kmin : champ_scalar(i,j,k-1);
6084 const double sf_k = kg >=(nktot-1) ? scalar_kmax : champ_scalar(i,j,k);
6085 const double sf_kp1 = kg >=(nktot-2) ? scalar_kmax : champ_scalar(i,j,k+1);
6089 const double c_is = uf_i*(sf_i+sf_im1)/2. - (uf_i)*(sf_im2+sf_im1+sf_i+sf_ip1)/4.;
6090 const double c_js = vf_j*(sf_j+sf_jm1)/2. - (vf_j)*(sf_jm2+sf_jm1+sf_j+sf_jp1)/4.;
6091 const double c_ks = wf_k*(sf_k+sf_km1)/2. - (wf_k)*(sf_km2+sf_km1+sf_k+sf_kp1)/4.;
6093 structural_uscalar_x(i,j,k) = - structural_uscalar_model_constant * c_is;
6094 structural_uscalar_y(i,j,k) = - structural_uscalar_model_constant * c_js;
6095 structural_uscalar_z(i,j,k) = - structural_uscalar_model_constant * c_ks;
6103void calculer_structural_uscalar(
const Nom& structural_uscalar_model,
6104 const double structural_uscalar_model_constant,
6105 const ArrOfDouble& structural_uscalar_vector_coefficients,
6106 IJK_Field_double& rho,
6107 IJK_Field_vector3_double& velocity,
6108 IJK_Field_vector3_double& velocity_filtre,
6109 IJK_Field_double& scalar,
6110 IJK_Field_double& scalar_filtre,
6111 double scalar_kmin,
double scalar_kmax,
6112 const ArrOfDouble_with_ghost& delta_z,
6113 const double facteur_delta_x,
6114 const double facteur_delta_y,
6115 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6116 const double facteur_delta_filtre_x,
6117 const double facteur_delta_filtre_y,
6118 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6122 IJK_Field_vector3_double& structural_uscalar_tmp_vector,
6123 const bool flag_structural_uscalar_filtre,
6124 IJK_Field_vector3_double& structural_uscalar_filtre_vector,
6125 IJK_Field_vector3_double& structural_uscalar_vector)
6127 int ghost_size_filter;
6128 int ghost_size_velocity;
6129 int ghost_size_scalar;
6130 int ghost_size_structural_uscalar_tmp;
6133 if ( structural_uscalar_model ==
Nom(
"gradient") )
6135 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6136 structural_uscalar_vector_coefficients,
6137 velocity, scalar, scalar_kmin, scalar_kmax,
6138 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6139 structural_uscalar_vector);
6141 else if ( structural_uscalar_model ==
Nom(
"gradient_filtre") )
6143 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6144 structural_uscalar_vector_coefficients,
6145 velocity, scalar, scalar_kmin, scalar_kmax,
6146 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6147 structural_uscalar_tmp_vector);
6149 ghost_size_filter = 1 + kernel->ghost_size();
6150 ghost_size_structural_uscalar_tmp = max((
int) 2, ghost_size_filter);
6155 const int flag_add = 0;
6156 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]);
6157 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]);
6158 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]);
6160 else if ( structural_uscalar_model ==
Nom(
"similarity") )
6162 ghost_size_filter = 1 + kernel->ghost_size();
6163 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6164 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6170 const int flag_add = 0;
6171 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]);
6172 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]);
6173 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]);
6174 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);
6181 calculer_structural_uscalar_similarity(structural_uscalar_model_constant,
6182 structural_uscalar_vector_coefficients,
6183 velocity, velocity_filtre,
6184 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6185 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6186 kernel, tmp_b, tmp_a,
6187 structural_uscalar_vector);
6189 else if ( structural_uscalar_model ==
Nom(
"similarity_comp") )
6191 ghost_size_filter = 1 + kernel->ghost_size();
6192 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6193 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6199 const int flag_add = 0;
6200 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]);
6201 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]);
6202 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]);
6203 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);
6210 calculer_structural_uscalar_similarity_comp(structural_uscalar_model_constant,
6211 structural_uscalar_vector_coefficients,
6213 velocity, velocity_filtre,
6214 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6215 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6216 kernel, tmp_b, tmp_a,
6217 structural_uscalar_vector);
6219 else if ( structural_uscalar_model ==
Nom(
"similarity_streher") )
6221 ghost_size_filter = 1 + kernel->ghost_size();
6222 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6223 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6229 const int flag_add = 0;
6230 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]);
6231 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]);
6232 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]);
6233 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);
6240 calculer_structural_uscalar_similarity_Streher(structural_uscalar_model_constant,
6241 structural_uscalar_vector_coefficients,
6243 scalar, scalar_kmin, scalar_kmax,
6244 structural_uscalar_vector);
6248 Cerr <<
"The name of the structural model for uscalar is unknown." << finl;
6252 if (flag_structural_uscalar_filtre)
6254 ghost_size_filter = 1 + kernel->ghost_size();
6255 ghost_size_velocity = max((
int) 2, ghost_size_filter);
6256 ghost_size_scalar = max((
int) 2, ghost_size_filter);
6262 const int flag_add = 0;
6263 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]);
6264 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]);
6265 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]);
6266 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);
6273 if ( structural_uscalar_model ==
Nom(
"gradient") )
6275 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6276 structural_uscalar_vector_coefficients,
6277 velocity_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
6278 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6279 structural_uscalar_filtre_vector);
6281 else if ( structural_uscalar_model ==
Nom(
"gradient_filtre") )
6283 calculer_structural_uscalar_gradient(structural_uscalar_model_constant,
6284 structural_uscalar_vector_coefficients,
6285 velocity_filtre, scalar_filtre, scalar_kmin, scalar_kmax,
6286 delta_z, facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6287 structural_uscalar_tmp_vector);
6289 ghost_size_filter = 1 + kernel->ghost_size();
6290 ghost_size_structural_uscalar_tmp = max((
int) 2, ghost_size_filter);
6295 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]);
6296 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]);
6297 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]);
6299 else if ( structural_uscalar_model ==
Nom(
"similarity") )
6301 Cerr <<
"The use of a dynamic constant with the SIMILARITY structural model is not allowed." << finl;
6308void modification_modele_dynamic_uu_scalar(
const bool anisotropic,
6309 const Nom& turbulent_viscosity_dynamic_type,
6310 const Nom& structural_uu_dynamic_type,
6311 const IJK_Field_vector3_double& velocity,
6312 const IJK_Field_vector3_double& velocity_filtre,
6313 const IJK_Field_double& scalar,
6314 const IJK_Field_double& scalar_filtre,
6315 double scalar_kmin,
double scalar_kmax,
6316 const ArrOfDouble_with_ghost& delta_z,
6317 const double facteur_delta_x,
6318 const double facteur_delta_y,
6319 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6320 const double facteur_delta_filtre_x,
6321 const double facteur_delta_filtre_y,
6322 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6326 ArrOfDouble_with_ghost& constante_modele,
6328 const int turbulent_viscosity,
6329 IJK_Field_double& turbulent_mu,
6330 IJK_Field_double& turbulent_mu_filtre,
6331 const int structural_uu,
6335 int ghost_size_filter;
6336 int ghost_size_turbulent_mu;
6337 int ghost_size_structural_uu;
6338 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6339 && structural_uu_dynamic_type ==
Nom(
"not_dynamic") )
6345 if (turbulent_viscosity)
6347 ghost_size_filter = 1 + kernel->ghost_size();
6348 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6355 for (
int j=0 ; j<6 ; j++)
6357 ghost_size_filter = 1 + kernel->ghost_size();
6358 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6364 const bool tensorial_struct = structural_uu_dynamic_type.
finit_par(
"tensorial");
6366 calculer_ml_dynamic_uu_tensor(anisotropic, tensorial_struct,
6367 velocity, velocity_filtre,
6368 turbulent_viscosity,
6375 turbulent_mu_filtre,
6376 turbulent_mu_filtre,
6377 turbulent_mu_filtre,
6378 turbulent_mu_filtre,
6379 turbulent_mu_filtre,
6380 turbulent_mu_filtre,
6382 structural_uu_tensor,
6383 structural_uu_filtre_tensor,
6384 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6385 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6386 kernel, tmp_b, tmp_a,
6398 ArrOfDouble& moy_lij = ml[0][6];
6399 ArrOfDouble& moy_mij = ml[1][6];
6400 ArrOfDouble& moy_hij = ml[2][6];
6401 ArrOfDouble& moy_mijmij = ml[3][6];
6402 ArrOfDouble& moy_hijhij = ml[4][6];
6403 ArrOfDouble& moy_mijlij = ml[5][6];
6404 ArrOfDouble& moy_hijlij = ml[6][6];
6405 ArrOfDouble& moy_mijhij = ml[7][6];
6407 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6408 Nom(
"uu, viscosity"),
6409 moy_lij, moy_mij, moy_hij,
6410 moy_mijmij, moy_hijhij,
6411 moy_mijlij, moy_hijlij,
6417 const bool flag_face =
false;
6418 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu);
6419 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre);
6422 const bool struct_reconnu = calculer_constante_modele(structural_uu_dynamic_type,
6423 Nom(
"uu, structural"),
6424 moy_lij, moy_hij, moy_mij,
6425 moy_hijhij, moy_mijmij,
6426 moy_hijlij, moy_mijlij,
6432 for (
int j=0 ; j<6 ; j++)
6434 const bool flag_face = (j==2||j==4);
6435 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6436 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6440 if (tensorial_struct)
6442 Nom struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"tensorial");
6443 for (
int j=0 ; j<6 ; j++)
6445 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6446 Nom(
"uu, structural, tensorial, j= ") +
Nom(j),
6447 lij[j], hij[j], mij[j],
6448 hijhij[j], mijmij[j],
6449 hijlij[j], mijlij[j],
6455 const bool flag_face = (j==2||j==4);
6456 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6457 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6461 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6467 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6468 const bool twopass_struct = structural_uu_dynamic_type.
finit_par(
"_twopass");
6469 if (twopass_visc || twopass_struct)
6471 if (!turbulent_viscosity)
6473 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;
6478 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;
6482 Nom visc_dynamic_type;
6483 Nom struct_dynamic_type;
6486 Cout <<
"Second pass, dynamic correction of constant: uu, viscosity" << finl;
6487 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6488 struct_dynamic_type =
Nom(
"not_dynamic");
6492 Cout <<
"Second pass, dynamic correction of constant: uu, structural" << finl;
6493 visc_dynamic_type =
Nom(
"not_dynamic");
6494 struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"_twopass");
6497 modification_modele_dynamic_uu_scalar(anisotropic,
6499 struct_dynamic_type,
6500 velocity, velocity_filtre,
6501 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6502 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6503 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6504 kernel, tmp_b, tmp_a,
6505 constante_modele, ml,
6506 turbulent_viscosity, turbulent_mu, turbulent_mu_filtre,
6507 structural_uu, structural_uu_tensor, structural_uu_filtre_tensor);
6510 if ((!visc_reconnu) && (!struct_reconnu) && (!twopass_visc) && (!tensorial_struct) && (!twopass_struct))
6512 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6519void modification_modele_dynamic_uu_tensor(
const bool anisotropic,
6520 const Nom& turbulent_viscosity_dynamic_type,
6521 const Nom& structural_uu_dynamic_type,
6522 const IJK_Field_vector3_double& velocity,
6523 const IJK_Field_vector3_double& velocity_filtre,
6524 const IJK_Field_double& scalar,
6525 const IJK_Field_double& scalar_filtre,
6526 double scalar_kmin,
double scalar_kmax,
6527 const ArrOfDouble_with_ghost& delta_z,
6528 const double facteur_delta_x,
6529 const double facteur_delta_y,
6530 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6531 const double facteur_delta_filtre_x,
6532 const double facteur_delta_filtre_y,
6533 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6537 ArrOfDouble_with_ghost& constante_modele,
6539 const int turbulent_viscosity,
6542 const int structural_uu,
6546 IJK_Field_double& turbulent_mu_xx = turbulent_mu_tensor[0];
6547 IJK_Field_double& turbulent_mu_xy = turbulent_mu_tensor[1];
6548 IJK_Field_double& turbulent_mu_xz = turbulent_mu_tensor[2];
6549 IJK_Field_double& turbulent_mu_yy = turbulent_mu_tensor[3];
6550 IJK_Field_double& turbulent_mu_yz = turbulent_mu_tensor[4];
6551 IJK_Field_double& turbulent_mu_zz = turbulent_mu_tensor[5];
6553 IJK_Field_double& turbulent_mu_filtre_xx = turbulent_mu_filtre_tensor[0];
6554 IJK_Field_double& turbulent_mu_filtre_xy = turbulent_mu_filtre_tensor[1];
6555 IJK_Field_double& turbulent_mu_filtre_xz = turbulent_mu_filtre_tensor[2];
6556 IJK_Field_double& turbulent_mu_filtre_yy = turbulent_mu_filtre_tensor[3];
6557 IJK_Field_double& turbulent_mu_filtre_yz = turbulent_mu_filtre_tensor[4];
6558 IJK_Field_double& turbulent_mu_filtre_zz = turbulent_mu_filtre_tensor[5];
6560 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
6562 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6563 && structural_uu_dynamic_type ==
Nom(
"not_dynamic") )
6569 if (turbulent_viscosity)
6571 for (
int j=0 ; j<6 ; j++)
6573 ghost_size_filter = 1 + kernel->ghost_size();
6574 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6582 for (
int j=0 ; j<6 ; j++)
6584 ghost_size_filter = 1 + kernel->ghost_size();
6585 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6591 const bool tensorial_visc = turbulent_viscosity_dynamic_type.
finit_par(
"tensorial");
6592 const bool tensorial_struct = structural_uu_dynamic_type.
finit_par(
"tensorial");
6593 const bool tensorial = tensorial_visc || tensorial_struct;
6595 calculer_ml_dynamic_uu_tensor(anisotropic, tensorial,
6596 velocity, velocity_filtre,
6597 turbulent_viscosity,
6604 turbulent_mu_filtre_xx,
6605 turbulent_mu_filtre_xy,
6606 turbulent_mu_filtre_xz,
6607 turbulent_mu_filtre_yy,
6608 turbulent_mu_filtre_yz,
6609 turbulent_mu_filtre_zz,
6611 structural_uu_tensor,
6612 structural_uu_filtre_tensor,
6613 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6614 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6615 kernel, tmp_b, tmp_a,
6627 ArrOfDouble& moy_lij = ml[0][6];
6628 ArrOfDouble& moy_mij = ml[1][6];
6629 ArrOfDouble& moy_hij = ml[2][6];
6630 ArrOfDouble& moy_mijmij = ml[3][6];
6631 ArrOfDouble& moy_hijhij = ml[4][6];
6632 ArrOfDouble& moy_mijlij = ml[5][6];
6633 ArrOfDouble& moy_hijlij = ml[6][6];
6634 ArrOfDouble& moy_mijhij = ml[7][6];
6636 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6637 Nom(
"uu, viscosity"),
6638 moy_lij, moy_mij, moy_hij,
6639 moy_mijmij, moy_hijhij,
6640 moy_mijlij, moy_hijlij,
6646 for (
int j=0 ; j<6 ; j++)
6648 const bool flag_face =
false;
6649 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_tensor[j]);
6650 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_tensor[j]);
6654 const bool struct_reconnu = calculer_constante_modele(structural_uu_dynamic_type,
6655 Nom(
"uu, structural"),
6656 moy_lij, moy_hij, moy_mij,
6657 moy_hijhij, moy_mijmij,
6658 moy_hijlij, moy_mijlij,
6664 for (
int j=0 ; j<6 ; j++)
6666 const bool flag_face = (j==2||j==4);
6667 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6668 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6674 Nom visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"tensorial");
6675 for (
int j=0 ; j<6 ; j++)
6677 const bool reconnu = calculer_constante_modele(visc_dynamic_type,
6678 Nom(
"uu, viscosity, tensorial, j= ") +
Nom(j),
6679 lij[j], mij[j], hij[j],
6680 mijmij[j], hijhij[j],
6681 mijlij[j], hijlij[j],
6687 const bool flag_face =
false;
6688 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_tensor[j]);
6689 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_tensor[j]);
6693 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6699 if (tensorial_struct)
6701 Nom struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"tensorial");
6702 for (
int j=0 ; j<6 ; j++)
6704 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6705 Nom(
"uu, structural, tensorial, j= ") +
Nom(j),
6706 lij[j], hij[j], mij[j],
6707 hijhij[j], mijmij[j],
6708 hijlij[j], mijlij[j],
6714 const bool flag_face = (j==2||j==4);
6715 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_tensor[j]);
6716 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uu_filtre_tensor[j]);
6720 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6726 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6727 const bool twopass_struct = structural_uu_dynamic_type.
finit_par(
"_twopass");
6728 if (twopass_visc || twopass_struct)
6730 if (!turbulent_viscosity)
6732 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;
6737 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;
6741 Nom visc_dynamic_type;
6742 Nom struct_dynamic_type;
6745 Cout <<
"Second pass, dynamic correction of constant: uu, viscosity" << finl;
6746 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6747 struct_dynamic_type =
Nom(
"not_dynamic");
6751 Cout <<
"Second pass, dynamic correction of constant: uu, structural" << finl;
6752 visc_dynamic_type =
Nom(
"not_dynamic");
6753 struct_dynamic_type = structural_uu_dynamic_type.
getPrefix(
"_twopass");
6756 modification_modele_dynamic_uu_tensor(anisotropic,
6758 struct_dynamic_type,
6759 velocity, velocity_filtre,
6760 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6761 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6762 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6763 kernel, tmp_b, tmp_a,
6764 constante_modele, ml,
6765 turbulent_viscosity, turbulent_mu_tensor, turbulent_mu_filtre_tensor,
6766 structural_uu, structural_uu_tensor, structural_uu_filtre_tensor);
6769 if ((!visc_reconnu) && (!struct_reconnu) && (!tensorial_visc) && (!tensorial_struct) && (!twopass_visc) && (!twopass_struct))
6771 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6778void modification_modele_dynamic_uscalar_scalar(
const bool anisotropic,
6779 const Nom& turbulent_viscosity_dynamic_type,
6780 const Nom& structural_uscalar_dynamic_type,
6781 const IJK_Field_vector3_double& velocity,
6782 const IJK_Field_vector3_double& velocity_filtre,
6783 const IJK_Field_double& scalar,
6784 const IJK_Field_double& scalar_filtre,
6785 double scalar_kmin,
double scalar_kmax,
6786 const ArrOfDouble_with_ghost& delta_z,
6787 const double facteur_delta_x,
6788 const double facteur_delta_y,
6789 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6790 const double facteur_delta_filtre_x,
6791 const double facteur_delta_filtre_y,
6792 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
6796 ArrOfDouble_with_ghost& constante_modele,
6798 const int turbulent_viscosity,
6799 IJK_Field_double& turbulent_mu,
6800 IJK_Field_double& turbulent_mu_filtre,
6801 const int structural_uscalar,
6802 IJK_Field_vector3_double& structural_uscalar_vector,
6803 IJK_Field_vector3_double& structural_uscalar_filtre_vector)
6805 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
6806 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
6807 && structural_uscalar_dynamic_type ==
Nom(
"not_dynamic") )
6813 if (turbulent_viscosity)
6815 ghost_size_filter = 1 + kernel->ghost_size();
6816 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
6821 if (structural_uscalar)
6823 for (
int j=0 ; j<3 ; j++)
6825 ghost_size_filter = 1 + kernel->ghost_size();
6826 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
6832 const bool vectorial_struct = structural_uscalar_dynamic_type.
finit_par(
"vectorial");
6834 calculer_ml_dynamic_uscalar_vector(anisotropic, vectorial_struct,
6835 velocity, velocity_filtre,
6836 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6837 turbulent_viscosity,
6841 turbulent_mu_filtre,
6842 turbulent_mu_filtre,
6843 turbulent_mu_filtre,
6845 structural_uscalar_vector,
6846 structural_uscalar_filtre_vector,
6847 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6848 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6849 kernel, tmp_b, tmp_a,
6861 ArrOfDouble& moy_li = ml[0][6];
6862 ArrOfDouble& moy_mi = ml[1][6];
6863 ArrOfDouble& moy_hi = ml[2][6];
6864 ArrOfDouble& moy_mimi = ml[3][6];
6865 ArrOfDouble& moy_hihi = ml[4][6];
6866 ArrOfDouble& moy_mili = ml[5][6];
6867 ArrOfDouble& moy_hili = ml[6][6];
6868 ArrOfDouble& moy_mihi = ml[7][6];
6870 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
6871 Nom(
"uscalar, viscosity"),
6872 moy_li, moy_mi, moy_hi,
6880 const bool flag_face =
false;
6881 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu);
6882 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre);
6885 const bool struct_reconnu = calculer_constante_modele(structural_uscalar_dynamic_type,
6886 Nom(
"uscalar, structural"),
6887 moy_li, moy_hi, moy_mi,
6895 for (
int j=0 ; j<3 ; j++)
6897 const bool flag_face = (j==2);
6898 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
6899 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
6903 if (vectorial_struct)
6905 Nom struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"vectorial");
6906 for (
int j=0 ; j<3 ; j++)
6908 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
6909 Nom(
"uscalar, structural, vectorial, j= ") +
Nom(j),
6910 li[j], hi[j], mi[j],
6918 const bool flag_face = (j==2);
6919 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
6920 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
6924 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6930 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
6931 const bool twopass_struct = structural_uscalar_dynamic_type.
finit_par(
"_twopass");
6932 if (twopass_visc || twopass_struct)
6934 if (!turbulent_viscosity)
6936 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;
6939 if (!structural_uscalar)
6941 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;
6945 Nom visc_dynamic_type;
6946 Nom struct_dynamic_type;
6949 Cout <<
"Second pass, dynamic correction of constant: uscalar, viscosity" << finl;
6950 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
6951 struct_dynamic_type =
Nom(
"not_dynamic");
6955 Cout <<
"Second pass, dynamic correction of constant: uscalar, structural" << finl;
6956 visc_dynamic_type =
Nom(
"not_dynamic");
6957 struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"_twopass");
6960 modification_modele_dynamic_uscalar_scalar(anisotropic,
6962 struct_dynamic_type,
6963 velocity, velocity_filtre,
6964 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
6965 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
6966 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
6967 kernel, tmp_b, tmp_a,
6968 constante_modele, ml,
6969 turbulent_viscosity, turbulent_mu, turbulent_mu_filtre,
6970 structural_uscalar, structural_uscalar_vector, structural_uscalar_filtre_vector);
6973 if ((!visc_reconnu) && (!struct_reconnu) && (!vectorial_struct) && (!twopass_visc) && (!twopass_struct))
6975 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
6982void modification_modele_dynamic_uscalar_vector(
const bool anisotropic,
6983 const Nom& turbulent_viscosity_dynamic_type,
6984 const Nom& structural_uscalar_dynamic_type,
6985 const IJK_Field_vector3_double& velocity,
6986 const IJK_Field_vector3_double& velocity_filtre,
6987 const IJK_Field_double& scalar,
6988 const IJK_Field_double& scalar_filtre,
6989 double scalar_kmin,
double scalar_kmax,
6990 const ArrOfDouble_with_ghost& delta_z,
6991 const double facteur_delta_x,
6992 const double facteur_delta_y,
6993 const ArrOfDouble_with_ghost& delta_z_pour_delta,
6994 const double facteur_delta_filtre_x,
6995 const double facteur_delta_filtre_y,
6996 const ArrOfDouble_with_ghost& delta_z_pour_delta_filtre,
7000 ArrOfDouble_with_ghost& constante_modele,
7002 const int turbulent_viscosity,
7003 IJK_Field_vector3_double& turbulent_mu_vector,
7004 IJK_Field_vector3_double& turbulent_mu_filtre_vector,
7005 const int structural_uscalar,
7006 IJK_Field_vector3_double& structural_uscalar_vector,
7007 IJK_Field_vector3_double& structural_uscalar_filtre_vector)
7009 IJK_Field_double& turbulent_mu_x = turbulent_mu_vector[0];
7010 IJK_Field_double& turbulent_mu_y = turbulent_mu_vector[1];
7011 IJK_Field_double& turbulent_mu_z = turbulent_mu_vector[2];
7013 IJK_Field_double& turbulent_mu_filtre_x = turbulent_mu_filtre_vector[0];
7014 IJK_Field_double& turbulent_mu_filtre_y = turbulent_mu_filtre_vector[1];
7015 IJK_Field_double& turbulent_mu_filtre_z = turbulent_mu_filtre_vector[2];
7017 if ( turbulent_viscosity_dynamic_type ==
Nom(
"not_dynamic")
7018 && structural_uscalar_dynamic_type ==
Nom(
"not_dynamic") )
7024 int ghost_size_filter, ghost_size_turbulent_mu, ghost_size_structural_uu;
7025 if (turbulent_viscosity)
7027 for (
int j=0 ; j<3 ; j++)
7029 ghost_size_filter = 1 + kernel->ghost_size();
7030 ghost_size_turbulent_mu = max((
int) 2, ghost_size_filter);
7036 if (structural_uscalar)
7038 for (
int j=0 ; j<3 ; j++)
7040 ghost_size_filter = 1 + kernel->ghost_size();
7041 ghost_size_structural_uu = max((
int) 2, ghost_size_filter);
7047 const bool vectorial_visc = turbulent_viscosity_dynamic_type.
finit_par(
"vectorial");
7048 const bool vectorial_struct = structural_uscalar_dynamic_type.
finit_par(
"vectorial");
7049 const bool vectorial = vectorial_visc || vectorial_struct;
7051 calculer_ml_dynamic_uscalar_vector(anisotropic, vectorial,
7052 velocity, velocity_filtre,
7053 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
7054 turbulent_viscosity,
7058 turbulent_mu_filtre_x,
7059 turbulent_mu_filtre_y,
7060 turbulent_mu_filtre_z,
7062 structural_uscalar_vector,
7063 structural_uscalar_filtre_vector,
7064 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
7065 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
7066 kernel, tmp_b, tmp_a,
7078 ArrOfDouble& moy_li = ml[0][6];
7079 ArrOfDouble& moy_mi = ml[1][6];
7080 ArrOfDouble& moy_hi = ml[2][6];
7081 ArrOfDouble& moy_mimi = ml[3][6];
7082 ArrOfDouble& moy_hihi = ml[4][6];
7083 ArrOfDouble& moy_mili = ml[5][6];
7084 ArrOfDouble& moy_hili = ml[6][6];
7085 ArrOfDouble& moy_mihi = ml[7][6];
7087 const bool visc_reconnu = calculer_constante_modele(turbulent_viscosity_dynamic_type,
7088 Nom(
"uscalar, viscosity"),
7089 moy_li, moy_mi, moy_hi,
7097 for (
int j=0 ; j<3 ; j++)
7099 const bool flag_face =
false;
7100 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_vector[j]);
7101 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_vector[j]);
7105 const bool struct_reconnu = calculer_constante_modele(structural_uscalar_dynamic_type,
7106 Nom(
"uscalar, structural"),
7107 moy_li, moy_hi, moy_mi,
7115 for (
int j=0 ; j<3 ; j++)
7117 const bool flag_face = (j==2);
7118 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
7119 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
7125 Nom visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"vectorial");
7126 for (
int j=0 ; j<3 ; j++)
7128 const bool reconnu = calculer_constante_modele(visc_dynamic_type,
7129 Nom(
"uscalar, viscosity, vectorial, j= ") +
Nom(j),
7130 li[j], mi[j], hi[j],
7138 const bool flag_face =
false;
7139 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_vector[j]);
7140 multiplier_par_constante(flag_face, constante_modele, velocity, turbulent_mu_filtre_vector[j]);
7144 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7150 if (vectorial_struct)
7152 Nom struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"vectorial");
7153 for (
int j=0 ; j<3 ; j++)
7155 const bool reconnu = calculer_constante_modele(struct_dynamic_type,
7156 Nom(
"uscalar, structural, vectorial, j= ") +
Nom(j),
7157 li[j], hi[j], mi[j],
7165 const bool flag_face = (j==2);
7166 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_vector[j]);
7167 multiplier_par_constante(flag_face, constante_modele, velocity, structural_uscalar_filtre_vector[j]);
7171 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7177 const bool twopass_visc = turbulent_viscosity_dynamic_type.
finit_par(
"_twopass");
7178 const bool twopass_struct = structural_uscalar_dynamic_type.
finit_par(
"_twopass");
7179 if (twopass_visc || twopass_struct)
7181 if (!turbulent_viscosity)
7183 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;
7186 if (!structural_uscalar)
7188 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;
7192 Nom visc_dynamic_type;
7193 Nom struct_dynamic_type;
7196 Cout <<
"Second pass, dynamic correction of constant: uscalar, viscosity" << finl;
7197 visc_dynamic_type = turbulent_viscosity_dynamic_type.
getPrefix(
"_twopass");
7198 struct_dynamic_type =
Nom(
"not_dynamic");
7202 Cout <<
"Second pass, dynamic correction of constant: uscalar, structural" << finl;
7203 visc_dynamic_type =
Nom(
"not_dynamic");
7204 struct_dynamic_type = structural_uscalar_dynamic_type.
getPrefix(
"_twopass");
7207 modification_modele_dynamic_uscalar_vector(anisotropic,
7209 struct_dynamic_type,
7210 velocity, velocity_filtre,
7211 scalar, scalar_filtre, scalar_kmin, scalar_kmax,
7212 delta_z, facteur_delta_x, facteur_delta_y, delta_z_pour_delta,
7213 facteur_delta_filtre_x, facteur_delta_filtre_y, delta_z_pour_delta_filtre,
7214 kernel, tmp_b, tmp_a,
7215 constante_modele, ml,
7216 turbulent_viscosity, turbulent_mu_vector, turbulent_mu_filtre_vector,
7217 structural_uscalar, structural_uscalar_vector, structural_uscalar_filtre_vector);
7220 if ((!visc_reconnu) && (!struct_reconnu) && (!vectorial_visc) && (!vectorial_struct) && (!twopass_visc) && (!twopass_struct))
7222 Cerr <<
"Error: The type of the dynamic correction of the constant is invalid." << finl;
7241 Nom ijk_splitting_name;
7280 Nom post_splitting_name =
"??";
7363 Nom geom_name_pour_delta =
Nom(
"__identique_au_maillage__");
7439 param.
ajouter(
"spectral_splitting", &post_splitting_name);
7462 param.
ajouter(
"ijk_grid_geometry_pour_delta", &geom_name_pour_delta);
7526 if (geom_name_pour_delta ==
Nom(
"__identique_au_maillage__"))
7534 Cerr <<
"Lecture de la taille du filtre depuis le Domaine_IJK " << geom_name_pour_delta <<
"." << finl;
7536 const double dx_maillage =
domaine_.get_constant_delta(DIRECTION_I);
7537 const double dy_maillage =
domaine_.get_constant_delta(DIRECTION_J);
7544 for (
int i=-2 ; i<
domaine_.get_nb_elem_local(DIRECTION_K)+2 ; i++)
7553 Cerr <<
" Error: (Inconsistent parameters) The keyword DEBIT_MASSIQUE cannot be used with TERME_SOURCE_ACCELERATION_CONdoubleANT." << finl;
7558 Cerr <<
"Simulation en mode : TERME SOURCE IMPOSE." << finl;
7562 Cerr <<
"Simulation en mode : DEBIT IMPOSE." << finl;
7569 Cerr <<
" You need to specify an dt_post_spectral X," <<
7570 " were X is the number of step between 2 post" << finl;
7573 else if ( (post_splitting_name ==
"??") )
7575 Cerr <<
" You need to specify an other splitting like : spectral_splitting post_splitting " << finl;
7576 Cerr <<
"in order to compute FFT on planes you must only split in z direction" << finl;
7581#if defined(WITH_FFTW)
7585 if (decoupage_selon_x_ou_y > 1 )
7587 Cerr <<
"In order to compute FFT on planes you must only split in z direction the spectral_splitting" << finl;
7591 Cerr <<
" Module FFTW desactive impossible de faire la FFT " << finl;
7602 if (decoupage_selon_x_ou_y > 1 )
7604 Cerr <<
"In order to save lata on planes you must only split in z direction the sauvegarde_splitting" << finl;
7609 Cerr <<
"Initialisation de la sauvegarde des lata par plan" << finl;
7621 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;
7627 Cerr <<
"Erreur: TURBULENT_VISCOSITY_TENSOR_COEFFICIENTS doit etre un vecteur de 6 composantes (xx, xy, xz, yy, yz, zz)." << finl;
7632 Cerr <<
"Erreur: TURBULENT_VISCOSITY_TENSOR_COEFFICIENTS doit etre un vecteur de 3 composantes (x, y, z)." << finl;
7637 Cerr <<
"Erreur: sTRUCTURAL_UU_TENSOR_COEFFICIENTS doit etre un vecteur de 6 composantes (xx, xy, xz, yy, yz, zz)." << finl;
7642 Cerr <<
"Erreur: sTRUCTURAL_USCALAR_VECTOR_COEFFICIENTS doit etre un vecteur de 3 composantes (x, y, z)." << finl;
7660 Cerr <<
"Error: (Inconsistent parameters) "
7661 <<
"The TURBULENT_VISCOSITY flag was activated but no large eddy simulation formulation was specified. "
7662 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7667 Cerr <<
"Error: (Inconsistent parameters) "
7668 <<
"The TURBULENT_DIFFUSIVITY flag was activated but no large eddy simulation formulation was specified. "
7669 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7674 Cerr <<
"Error: (Inconsistent parameters) "
7675 <<
"The sTRUCTURAL_UU flag was activated but no large eddy simulation formulation was specified. "
7676 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7681 Cerr <<
"Error: (Inconsistent parameters) "
7682 <<
"The sTRUCTURAL_USCALAR flag was activated but no large eddy simulation formulation was specified. "
7683 <<
"To specify a large eddy simulation formulation, you may use the keyword LARGE_EDDY_SIMULATION_FORMULATION with the parameters FAVRE, VELOCITY or NONE." << finl;
7691 Cerr <<
"Error: (Inconsistent parameters) "
7692 <<
"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. "
7702 Cerr <<
"Error: (Inconsistent parameters) "
7703 <<
"A velocity turbulent diffusion type was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7709 Cerr <<
"Error: (Inconsistent parameters) "
7710 <<
"A subgrid viscosity model was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7716 Cerr <<
"Error: (Inconsistent parameters) "
7717 <<
"A subgrid viscosity model constant was specified but the TURBULENT_VISCOSITY flag has not been activated. "
7726 Cerr <<
"Error: (Inconsistent parameters) "
7727 <<
"The TURBULENT_VISCOSITY flag expect a velocity turbulent diffusion type but no velocity turbulent diffusion type was specified. "
7728 <<
"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;
7733 Cerr <<
"Error: (Inconsistent parameters) "
7734 <<
"The TURBULENT_VISCOSITY flag expect a subgrid viscosity model but no model was specified. "
7735 <<
"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;
7740 Cerr <<
"Error: (Inconsistent parameters) "
7741 <<
"The TURBULENT_VISCOSITY flag expect a subgrid viscosity model constant but no constant was specified. "
7742 <<
"To specify a constant, you may use the keyword TURBULENT_VISCOSITY_MODEL_CONdoubleANT." << finl;
7751 Cerr <<
"Error: (Inconsistent parameters) "
7752 <<
"A scalar turbulent diffusion type was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7758 Cerr <<
"Error: (Inconsistent parameters) "
7759 <<
"A subgrid diffusivity model was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7765 Cerr <<
"Error: (Inconsistent parameters) "
7766 <<
"A subgrid diffusivity model constant was specified but the TURBULENT_DIFFUSIVITY flag has not been activated. "
7775 Cerr <<
"Error: (Inconsistent parameters) "
7776 <<
"The TURBULENT_DIFFUSIVITY flag expect a scalar turbulent diffusion type but no scalar turbulent diffusion type was specified. "
7777 <<
"To specify a scalar turbulent diffusion type, you may use the keyword TYPE_SCALAR_TURBULENT_DIFFUSION with the parameters NORMAL, ANISOTROPIC or NONE" << finl;
7782 Cerr <<
"Error: (Inconsistent parameters) "
7783 <<
"The TURBULENT_DIFFUSIVITY flag expect a subgrid diffusivity model but no model was specified. "
7784 <<
"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;
7789 Cerr <<
"Error: (Inconsistent parameters) "
7790 <<
"The TURBULENT_DIFFUSIVITY flag expect a subgrid diffusivity model constant but no constant was specified. "
7791 <<
"To specify a constant, you may use the keyword TURBULENT_DIFFUSIVITY_MODEL_CONdoubleANT." << finl;
7800 Cerr <<
"Error: (Inconsistent parameters) "
7801 <<
"A structural model for uu was specified but the sTRUCTURAL_UU flag has not been activated. "
7807 Cerr <<
"Error: (Inconsistent parameters) "
7808 <<
"A structural model for uu constant was specified but the sTRUCTURAL_UU flag has not been activated. "
7817 Cerr <<
"Error: (Inconsistent parameters) "
7818 <<
"The sTRUCTURAL_UU flag expect a structural model but no model was specified. "
7819 <<
"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;
7824 Cerr <<
"Error: (Inconsistent parameters) "
7825 <<
"The sTRUCTURAL_UU flag expect a structural model constant but no constant was specified. "
7826 <<
"To specify a constant, you may use the keyword sTRUCTURAL_UU_MODEL_CONdoubleANT." << finl;
7835 Cerr <<
"Error: (Inconsistent parameters) "
7836 <<
"A structural model for uscalar was specified but the sTRUCTURAL_USCALAR flag has not been activated. "
7842 Cerr <<
"Error: (Inconsistent parameters) "
7843 <<
"A structural model for uscalar constant was specified but the sTRUCTURAL_USCALAR flag has not been activated. "
7852 Cerr <<
"Error: (Inconsistent parameters) "
7853 <<
"The sTRUCTURAL_USCALAR flag expect a subgrid diffusivity model but no model was specified. "
7854 <<
"To specify a model, you may use the keyword sTRUCTURAL_USCALAR_MODEL with the parameters GRADIENT, GRADIENT_FILTRE, SIMILARITY or NONE." << finl;
7859 Cerr <<
"Error: (Inconsistent parameters) "
7860 <<
"The sTRUCTURAL_USCALAR flag expect a subgrid diffusivity model constant but no constant was specified. "
7861 <<
"To specify a constant, you may use the keyword sTRUCTURAL_USCALAR_MODEL_CONdoubleANT." << finl;
7952 "The boundary is oscillating at amplitude "
7954 <<
" and frequency "
7965 "Simulation in forced T bulk mode with value "
7993static 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)
7995 const int ni = vx.
ni();
7996 const int nj = vx.
nj();
7997 const int nk = vx.
nk();
8003 for (
int k = 0; k < nk; k++)
8005 double somme_rhov = 0;
8006 for (
int j = 0; j < nj; j++)
8008 for (
int i = 0; i < ni; i++)
8010 double rhov = vx(i,j,k) * (rho(i-1,j,k) + rho(i,j,k)) * 0.5;
8016 double volume = dx * dy * delta_z[k];
8017 debit += volume * somme_rhov;
8026 debit = tmp[0] / longeur_Lx_tot;
8034 Cout <<
"DNS_QC_double::initialise()" << finl;
8037 Cerr.setf(ios::scientific);
8039 Cout.setf(ios::scientific);
8042 Cout <<
"precision de sortie du out et du err modifier" << finl;
8046 Cout <<
" Cp_gaz = " <<
Cp_gaz_
8063 int Nx_tot =
domaine_.get_nb_elem_tot(0) + 1;
8064 int Ny_tot =
domaine_.get_nb_elem_tot(1) + 1;
8065 int Nz_tot =
domaine_.get_nb_elem_tot(2) + 1;
8080 for (
int k = 0; k < nk; k++ )
8082 for (
int j = 0; j < nj; j++)
8084 for (
int i = 0; i < ni; i++)
8087 rho_(i,j,k) = Pth_sur_R / t;
8102 Cerr <<
"Erreur dans l'initialisation: la vitesse initiale doit etre fournie avec trois expressions" << finl;
8108 for (
int i = 0; i < 3; i++)
8120 rho_.echange_espace_virtuel(1);
8131 Cerr <<
" les stats ne sont pas converger pas de productions spectrale allowed." << finl;
8158static void force_zero_normal_velocity_on_walls(IJK_Field_double& vz)
8160 const int nj = vz.
nj();
8161 const int ni = vz.
ni();
8166 for (
int j = 0; j < nj; j++)
8168 for (
int i = 0; i < ni; i++)
8174 if (kmin + vz.
nk() == nktot)
8176 const int k = vz.
nk()-1;
8177 for (
int j = 0; j < nj; j++)
8179 for (
int i = 0; i < ni; i++)
8187static double calculer_dtstab_diffusion_temperature_local(
const IJK_Field_double& lambda,
8188 const IJK_Field_double& rho,
8189 const double cp_gaz)
8197 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8200 double inv_dtstab = 1e-20;
8201 for (
int k = 0; k < nk; k++)
8203 const double dz = delta_z[k + k_offset];
8204 const double coeff = 2. * (1./(dx*dx) + 1./(dy*dy) + 1./(dz*dz)) / cp_gaz;
8205 for (
int j = 0; j < nj; j++)
8207 for (
int i = 0; i < ni; i++)
8209 double dt = lambda(i,j,k) / rho(i,j,k) * coeff;
8210 inv_dtstab = max(dt, inv_dtstab);
8214 return 1. / inv_dtstab;
8217static double calculer_dtstab_diffusion_temperature_local_sans_rho(
const bool anisotropic,
8218 const IJK_Field_double& lambda_x,
8219 const IJK_Field_double& lambda_y,
8220 const IJK_Field_double& lambda_z,
8221 const double cp_gaz)
8229 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8232 double inv_dtstab = 1e-20;
8233 for (
int k = 0; k < nk; k++)
8235 const double dz = delta_z[k + k_offset];
8241 coeff_x = 2. * (1./(dx)) / cp_gaz;
8242 coeff_y = 2. * (1./(dy)) / cp_gaz;
8243 coeff_z = 2. * (1./(dz)) / cp_gaz;
8247 coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8248 coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8249 coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8251 for (
int j = 0; j < nj; j++)
8253 for (
int i = 0; i < ni; i++)
8255 double dt_x = lambda_x(i,j,k) * coeff_x;
8256 double dt_y = lambda_y(i,j,k) * coeff_y;
8257 double dt_z = lambda_z(i,j,k) * coeff_z;
8258 double dt = dt_x + dt_y + dt_z;
8259 inv_dtstab = max(dt, inv_dtstab);
8263 return 1. / inv_dtstab;
8266static double calculer_dtstab_diffusion_temperature_local_avec_turbulent_favre(
const bool anisotropic,
8267 const IJK_Field_double& lambda,
8268 const IJK_Field_double& lambda_turbulent_xx,
8269 const IJK_Field_double& lambda_turbulent_xy,
8270 const IJK_Field_double& lambda_turbulent_xz,
8271 const IJK_Field_double& lambda_turbulent_yy,
8272 const IJK_Field_double& lambda_turbulent_yz,
8273 const IJK_Field_double& lambda_turbulent_zz,
8274 const IJK_Field_double& rho,
8275 const double cp_gaz)
8277 const IJK_Field_double& lambda_turbulent_yx = lambda_turbulent_xy;
8278 const IJK_Field_double& lambda_turbulent_zx = lambda_turbulent_xz;
8279 const IJK_Field_double& lambda_turbulent_zy = lambda_turbulent_yz;
8287 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8290 double inv_dtstab = 1e-20;
8291 for (
int k = 0; k < nk; k++)
8293 const double dz = delta_z[k + k_offset];
8294 const double coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8295 const double coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8296 const double coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8312 for (
int j = 0; j < nj; j++)
8314 for (
int i = 0; i < ni; i++)
8316 double dt_xx = ( lambda(i,j,k) + lambda_turbulent_xx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8317 double dt_xy = ( lambda(i,j,k) + lambda_turbulent_xy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8318 double dt_xz = ( lambda(i,j,k) + lambda_turbulent_xz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8319 double dt_yx = ( lambda(i,j,k) + lambda_turbulent_yx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8320 double dt_yy = ( lambda(i,j,k) + lambda_turbulent_yy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8321 double dt_yz = ( lambda(i,j,k) + lambda_turbulent_yz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8322 double dt_zx = ( lambda(i,j,k) + lambda_turbulent_zx(i,j,k)*fac_x ) / rho(i,j,k) * coeff_x;
8323 double dt_zy = ( lambda(i,j,k) + lambda_turbulent_zy(i,j,k)*fac_y ) / rho(i,j,k) * coeff_y;
8324 double dt_zz = ( lambda(i,j,k) + lambda_turbulent_zz(i,j,k)*fac_z ) / rho(i,j,k) * coeff_z;
8325 double dt_x = dt_xx + dt_xy + dt_xz;
8326 double dt_y = dt_yx + dt_yy + dt_yz;
8327 double dt_z = dt_zx + dt_zy + dt_zz;
8328 double dt = max(dt_x , max(dt_y, dt_z));
8329 inv_dtstab = max(dt, inv_dtstab);
8333 return 1. / inv_dtstab;
8336static double calculer_dtstab_diffusion_temperature_local_avec_turbulent_velocity(
const bool anisotropic,
8337 const IJK_Field_double& lambda,
8338 const IJK_Field_double& lambda_turbulent_xx,
8339 const IJK_Field_double& lambda_turbulent_xy,
8340 const IJK_Field_double& lambda_turbulent_xz,
8341 const IJK_Field_double& lambda_turbulent_yy,
8342 const IJK_Field_double& lambda_turbulent_yz,
8343 const IJK_Field_double& lambda_turbulent_zz,
8344 const IJK_Field_double& rho,
8345 const double cp_gaz)
8347 const IJK_Field_double& lambda_turbulent_yx = lambda_turbulent_xy;
8348 const IJK_Field_double& lambda_turbulent_zx = lambda_turbulent_xz;
8349 const IJK_Field_double& lambda_turbulent_zy = lambda_turbulent_yz;
8357 const ArrOfDouble& delta_z = geom.
get_delta(DIRECTION_K);
8360 double inv_dtstab = 1e-20;
8361 for (
int k = 0; k < nk; k++)
8363 const double dz = delta_z[k + k_offset];
8364 const double coeff_x = 2. * (1./(dx*dx)) / cp_gaz;
8365 const double coeff_y = 2. * (1./(dy*dy)) / cp_gaz;
8366 const double coeff_z = 2. * (1./(dz*dz)) / cp_gaz;
8382 for (
int j = 0; j < nj; j++)
8384 for (
int i = 0; i < ni; i++)
8386 double dt_xx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xx(i,j,k)*fac_x ) * coeff_x;
8387 double dt_xy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xy(i,j,k)*fac_y ) * coeff_y;
8388 double dt_xz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_xz(i,j,k)*fac_z ) * coeff_z;
8389 double dt_yx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yx(i,j,k)*fac_x ) * coeff_x;
8390 double dt_yy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yy(i,j,k)*fac_y ) * coeff_y;
8391 double dt_yz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_yz(i,j,k)*fac_z ) * coeff_z;
8392 double dt_zx = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zx(i,j,k)*fac_x ) * coeff_x;
8393 double dt_zy = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zy(i,j,k)*fac_y ) * coeff_y;
8394 double dt_zz = ( lambda(i,j,k)/rho(i,j,k) + lambda_turbulent_zz(i,j,k)*fac_z ) * coeff_z;
8395 double dt_x = dt_xx + dt_xy + dt_xz;
8396 double dt_y = dt_yx + dt_yy + dt_yz;
8397 double dt_z = dt_zx + dt_zy + dt_zz;
8398 double dt = max(dt_x , max(dt_y, dt_z));
8399 inv_dtstab = max(dt, inv_dtstab);
8403 return 1. / inv_dtstab;
8413 const double dx =
velocity_[2].get_domaine().get_constant_delta(DIRECTION_I);
8414 const double dy =
velocity_[2].get_domaine().get_constant_delta(DIRECTION_J);
8417 const double surface = 1. / (ni*nj);
8418 const int offset =
temperature_.get_domaine().get_offset_local(DIRECTION_K);
8422 ArrOfDouble flux_cv(nktot);
8423 ArrOfDouble flux_cd(nktot);
8428 for (
int k = 0; k < nk; k++)
8430 double partiel_flux_cv = 0.;
8431 double partiel_flux_cd = 0.;
8433 if ( (k + offset) == (nktot-1) )
8436 for (
int j = 0; j < nj; j++)
8438 for (
int i = 0; i < ni; i++)
8444 else if ( (k + offset) == 0 )
8447 for (
int j = 0; j < nj; j++)
8449 for (
int i = 0; i < ni; i++)
8459 for (
int j = 0; j < nj; j++)
8461 for (
int i = 0; i < ni; i++)
8467 const double lambda_face = (L0 * L1) / ( d0 * L0 + d1 *L1);
8472 double flux = lambda_face * ( T_inf - T_sup);
8474 partiel_flux_cv += v * facteur;
8475 partiel_flux_cd += flux;
8479 flux_cv[k+offset] = partiel_flux_cv;
8480 flux_cd[k+offset] = partiel_flux_cd;
8498 Cerr <<
"T= " <<
current_time_ <<
" Checkpointing dans le fichier " << fichier_sauvegarde << finl;
8499 SFichier fichier(fichier_sauvegarde);
8501 fichier.
setf(std::ios_base::scientific);
8507 <<
" fichier_reprise_vitesse " << lata_name <<
"\n";
8508 fichier <<
" fichier_reprise_rho " << lata_name <<
"\n"
8509 <<
" timestep_reprise_vitesse " << (int) 1 <<
"\n"
8510 <<
" timestep_reprise_rho " << (
int) 1 <<
"\n";
8519 Nom lata_name(fichier_sauvegarde);
8520 lata_name +=
".lata";
8525 for (
int i = 0; i < 3; i++)
8537 if (ni > 0 || nj > 0 || nk > 0)
8547 dumplata_header(lata_name,
rho_ );
8550 dumplata_scalar(lata_name,
"RHO",
rho_, 0);
8560 Cerr <<
"Reprise du calcul dans le fichier " << fichier_reprise << finl;
8572 Cerr <<
"Avant ajout statistiques" << finl;
8574 Cerr <<
"Apres ajout statistiques" << finl;
8588 for (
int k = 0 ; k < nk ; k++)
8590 for (
int j = 0 ; j < nj ; j++)
8592 for (
int i = 0 ; i < ni ; i++)
8614 Nom nom_fichier_sauvegarde(lata_name);
8616 nom_fichier_sauvegarde +=
Nom(
".sauv");
8618 Nom lata_name_lata(nom_fichier_sauvegarde);
8619 lata_name_lata +=
".lata";
8623 dumplata_header(lata_name_lata,
rho_ );
8688 Cerr <<
" Martinn n= " << n << finl;
8708 if (ni > 0 || nj > 0 || nk > 0)
8731 if (ni > 0 || nj > 0 || nk > 0)
8754 if (ni > 0 || nj > 0 || nk > 0)
8778 if (ni > 0 || nj > 0 || nk > 0)
8785 dumplata_scalar(lata_name_lata,
"PRESSURE",
pressure_, 0);
8800 if (ni > 0 || nj > 0 || nk > 0)
8807 dumplata_scalar(lata_name_lata,
"TEMPERATURE",
temperature_, 0);
8822 if (ni > 0 || nj > 0 || nk > 0)
8824 dumplata_scalar_parallele_plan(lata_name_lata,
"RHO",
rho_sauvegarde_, 0);
8829 dumplata_scalar(lata_name_lata,
"RHO",
rho_, 0);
8844 if (ni > 0 || nj > 0 || nk > 0)
8866 if (ni > 0 || nj > 0 || nk > 0)
8877 n--,dumplata_scalar(lata_name_lata,
"PRESSURE_RHS",
pressure_rhs_, 0);
8881 n--,dumplata_scalar(lata_name_lata,
"U_DIV_RHO_U",
u_div_rho_u_, 0);
8883 n--,dumplata_scalar(lata_name_lata,
"DRHO_DT",
d_rho_, 0);
8885 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_MU",
turbulent_mu_, 0);
8899 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_KAPPA",
turbulent_kappa_, 0);
8927 n--,dumplata_scalar(lata_name_lata,
"RHO_FILTRE",
rho_filtre_, 0);
8972 Cerr <<
" Martinn n2= " << n << finl;
8973 Cerr <<
"Il y a des noms de champs a postraiter inconnus ou dupliques dans la liste de champs a postraiter"
8982 Nom nom_fichier(
"moyenne_spatiale_");
8983 nom_fichier +=
Nom(current_time);
8984 nom_fichier +=
Nom(
".txt");
8987 f.
setf(ios::scientific);
8993 Nom nom_fichier_ec(
"spatiale_ec_");
8994 nom_fichier_ec +=
Nom(current_time);
8995 nom_fichier_ec +=
Nom(
".txt");
8998 fk.
setf(ios::scientific);
9006 Nom nom_fichier(
"statistiques_");
9007 nom_fichier +=
Nom(current_time);
9008 nom_fichier +=
Nom(
".txt");
9011 fs.
setf(ios::scientific);
9018 Nom nom_fichier(
"stat_ec_");
9019 nom_fichier +=
Nom(current_time);
9020 nom_fichier +=
Nom(
".txt");
9023 fk.
setf(ios::scientific);
9035 Nom nom_fichier_sauvegarde(lata_name);
9037 nom_fichier_sauvegarde +=
Nom(
".sauv");
9039 Nom lata_name_lata(nom_fichier_sauvegarde);
9040 lata_name_lata +=
".lata";
9044 dumplata_header(lata_name_lata,
rho_ );
9109 Cerr <<
" Martinn n= " << n << finl;
9129 if (ni > 0 || nj > 0 || nk > 0)
9152 if (ni > 0 || nj > 0 || nk > 0)
9175 if (ni > 0 || nj > 0 || nk > 0)
9199 if (ni > 0 || nj > 0 || nk > 0)
9206 dumplata_scalar(lata_name_lata,
"PRESSURE",
pressure_, 0);
9221 if (ni > 0 || nj > 0 || nk > 0)
9228 dumplata_scalar(lata_name_lata,
"TEMPERATURE",
temperature_, 0);
9243 if (ni > 0 || nj > 0 || nk > 0)
9245 dumplata_scalar_parallele_plan(lata_name_lata,
"RHO",
rho_sauvegarde_, 0);
9250 dumplata_scalar(lata_name_lata,
"RHO",
rho_, 0);
9265 if (ni > 0 || nj > 0 || nk > 0)
9287 if (ni > 0 || nj > 0 || nk > 0)
9298 n--,dumplata_scalar(lata_name_lata,
"PRESSURE_RHS",
pressure_rhs_, 0);
9302 n--,dumplata_scalar(lata_name_lata,
"U_DIV_RHO_U",
u_div_rho_u_, 0);
9304 n--,dumplata_scalar(lata_name_lata,
"DRHO_DT",
d_rho_, 0);
9306 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_MU",
turbulent_mu_, 0);
9320 n--,dumplata_scalar(lata_name_lata,
"TURBULENT_KAPPA",
turbulent_kappa_, 0);
9348 n--,dumplata_scalar(lata_name_lata,
"RHO_FILTRE",
rho_filtre_, 0);
9393 Cerr <<
" Martinn n2= " << n << finl;
9394 Cerr <<
"Il y a des noms de champs a postraiter inconnus ou dupliques dans la liste de champs a postraiter"
9407 Nom nom_fichier(
"moyenne_spatiale_");
9408 nom_fichier +=
Nom(current_time);
9409 nom_fichier +=
Nom(
".txt");
9412 f.
setf(ios::scientific);
9418 Nom nom_fichier_ec(
"spatiale_ec_");
9419 nom_fichier_ec +=
Nom(current_time);
9420 nom_fichier_ec +=
Nom(
".txt");
9423 fk.
setf(ios::scientific);
9431 Nom nom_fichier(
"statistiques_");
9432 nom_fichier +=
Nom(current_time);
9433 nom_fichier +=
Nom(
".txt");
9436 fs.
setf(ios::scientific);
9443 Nom nom_fichier(
"stat_ec_");
9444 nom_fichier +=
Nom(current_time);
9445 nom_fichier +=
Nom(
".txt");
9448 fk.
setf(ios::scientific);
9456 Cerr <<
"IJK_problem_double::run()" << finl;
9459 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;
9462 Cerr <<
" Attention la convection de la vitesse est negligee " << finl;
9464 Cerr <<
" Attention la convection de la masse volumique est negligee " << finl;
9466 Cerr <<
" Attention la diffusion visqueuse est negligee " << finl;
9468 Cerr <<
" Attention la diffusion thermique est negligee " << finl;
9471 int ghost_size_filter = 0, ghost_size_d_velocity_tmp;
9481 Cerr <<
"Filter: The ghost size is " <<
kernel_->ghost_size() << finl;
9483 ghost_size_filter = 1 +
kernel_->ghost_size();
9486 int ghost_size_velocity =
flag_u_filtre_ ? max((
int) 2, ghost_size_filter) : 2;
9487 int ghost_size_rho =
flag_rho_filtre_ ? max((
int) 2, ghost_size_filter) : 2;
9571 bool save_current_timestep=
false;
9582 Cerr <<
"Taille du filtre explicite identique a celle du filtre." << finl;
9590 const double n_mailles =
kernel_->n_mailles();
9591 Cerr <<
"Taille du filtre explicite fixee a " << n_mailles <<
" mailles." << finl;
9599 for (
int i=0 ; i<18 ; i++)
9608 tmp_b_[i].allocate(ni, nj, ghost_size_filter, ghost_size_filter);
9609 tmp_a_[i].allocate(ni, ghost_size_filter, ghost_size_filter, ghost_size_filter);
9612 for (
int i=0; i<8; i++)
9614 for (
int j=0; j<7; j++)
9616 ml_[i][j].resize_array(nktot+1);
9809 const int nb_allocated_arrays = 21;
9810 Cerr <<
" Allocating " << nb_allocated_arrays <<
" arrays, approx total size= "
9811 << (double)(
unsigned long)
molecular_mu_.data().size_array() *
sizeof(double) * nb_allocated_arrays * 9.537E-07 <<
" MB per core" << finl;
9817 Cerr <<
"The diffusion is 'simple': the flux is 'molecular_mu * grad u'" << finl;
9823 Cerr <<
"The diffusion is 'simple_with_transpose': the flux is 'molecular_mu * (grad u + grad^T u)'" << finl;
9829 Cerr <<
"The diffusion is 'full': the flux is 'molecular_mu * (grad u + grad^T u - 2/3 * div u * Id)'" << finl;
9835 Cerr <<
"The diffusion is 'none': no molecular diffusion" << finl;
9839 Cerr <<
"Unknown velocity diffusion operator! " << finl;
9845 Cerr <<
"The velocity turbulent diffusion is 'simple': the flux is 'turbulent_mu * grad u'" << finl;
9851 Cerr <<
"The velocity turbulent diffusion is 'simple_with_transpose': the flux is 'turbulent_mu * (grad u + grad^T u)'" << finl;
9857 Cerr <<
"The velocity turbulent diffusion is 'full': the flux is 'turbulent_mu * (grad u + grad^T u - 2/3 * div u * Id)'" << finl;
9863 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;
9869 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;
9875 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;
9881 Cerr <<
"The velocity turbulent diffusion is 'none': no turbulent diffusion" << finl;
9885 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
9891 Cerr <<
"A structural model will be added to the velocity turbulent diffusion. The structural uu tensor coefficients are:";
9905 Cerr <<
"A structural model will be added to the scalar turbulent diffusion. The structural uscalar vector coefficients are:"
9915 Cerr <<
"The scalar turbulent diffusion is 'normal': the flux is 'lambda * grad s'" << finl;
9920 Cerr <<
"The scalar turbulent diffusion is 'anisotropic': the flux is 'lambda^a * grad^a s' where (grad^a)_i = Delta_i (grad)_i" << finl;
9925 Cerr <<
"The scalar turbulent diffusion is 'none': no scalar turbulent diffusion" << finl;
9929 Cerr <<
"Unknown scalar turbulent diffusion operator! " << finl;
9936 IJK_Field_double* ptr_turbulent_mu_xx;
9937 IJK_Field_double* ptr_turbulent_mu_xy;
9938 IJK_Field_double* ptr_turbulent_mu_xz;
9939 IJK_Field_double* ptr_turbulent_mu_yy;
9940 IJK_Field_double* ptr_turbulent_mu_yz;
9941 IJK_Field_double* ptr_turbulent_mu_zz;
9951 Cerr <<
"The turbulent viscosity is tensorial. The turbulent viscosity tensor coefficients are:"
9968 Cerr <<
"The turbulent viscosity is not tensorial." << finl;
9971 IJK_Field_double& ref_turbulent_mu_xx = *ptr_turbulent_mu_xx;
9972 IJK_Field_double& ref_turbulent_mu_xy = *ptr_turbulent_mu_xy;
9973 IJK_Field_double& ref_turbulent_mu_xz = *ptr_turbulent_mu_xz;
9974 IJK_Field_double& ref_turbulent_mu_yy = *ptr_turbulent_mu_yy;
9975 IJK_Field_double& ref_turbulent_mu_yz = *ptr_turbulent_mu_yz;
9976 IJK_Field_double& ref_turbulent_mu_zz = *ptr_turbulent_mu_zz;
9981 IJK_Field_double* ptr_turbulent_kappa_x;
9982 IJK_Field_double* ptr_turbulent_kappa_y;
9983 IJK_Field_double* ptr_turbulent_kappa_z;
9990 Cerr <<
"The turbulent diffusivity is vectorial. The turbulent diffusivity vector coefficients are:"
10001 Cerr <<
"The turbulent diffusivity is not tensorial." << finl;
10004 IJK_Field_double& ref_turbulent_kappa_x = *ptr_turbulent_kappa_x;
10005 IJK_Field_double& ref_turbulent_kappa_y = *ptr_turbulent_kappa_y;
10006 IJK_Field_double& ref_turbulent_kappa_z = *ptr_turbulent_kappa_z;
10056 force_zero_normal_velocity_on_walls(
velocity_[2]);
10058 statistics().create_custom_counter(
"calcul dtstab QC",2,
"TrioCFD");
10059 statistics().create_custom_counter(
"update statistiques",2,
"TrioCFD");
10060 statistics().create_custom_counter(
"calcul terme acceleration",2,
"TrioCFD");
10061 statistics().create_custom_counter(
"checkpointing",2,
"TrioCFD");
10062 statistics().create_custom_counter(
"TF update",2,
"TrioCFD");
10069 rho_.echange_espace_virtuel(2);
10070 velocity_[0].echange_espace_virtuel(2);
10071 velocity_[1].echange_espace_virtuel(2);
10072 velocity_[2].echange_espace_virtuel(2);
10079 Cerr <<
"*****************************************************************************\n"
10080 <<
" Attention : projection du champ de vitesse initial sur div(u)=0\n"
10081 <<
"*****************************************************************************" << finl;
10089 velocity_[0].echange_espace_virtuel(1);
10090 velocity_[1].echange_espace_virtuel(1);
10091 velocity_[2].echange_espace_virtuel(1);
10097 ArrOfDouble tmp_size3(3);
10118 Cerr <<
" Post-traitement Spectral " << finl;
10119 Nom Nom_post_test =
"Spectrale";
10125 double previous_time = 0;
10132 Cerr <<
"*****************************************************************************\n"
10133 <<
" Attention : On ne fait que postraiter les statistiques depuis les lata\n"
10134 <<
"*****************************************************************************" << finl;
10137 statistics().start_timeloop();
10138 for (
int tstep = 0; tstep <
nb_timesteps_ && stop == 0; tstep++)
10140 statistics().start_time_step();
10141 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10151 statlata_fichier +=
Nom(
".sauv");
10174 const int flag_add = 0;
10175 velocity_[0].echange_espace_virtuel(ghost_size_velocity);
10176 velocity_[1].echange_espace_virtuel(ghost_size_velocity);
10177 velocity_[2].echange_espace_virtuel(ghost_size_velocity);
10185 const int flag_add = 0;
10186 rho_.echange_espace_virtuel(ghost_size_rho);
10192 const int flag_add = 0;
10193 pressure_.echange_espace_virtuel(ghost_size_pressure);
10197 rho_.echange_espace_virtuel(1);
10204 rho_.echange_espace_virtuel(2);
10205 velocity_[0].echange_espace_virtuel(2);
10206 velocity_[1].echange_espace_virtuel(2);
10207 velocity_[2].echange_espace_virtuel(2);
10213 velocity_[0].echange_espace_virtuel(1);
10214 velocity_[1].echange_espace_virtuel(1);
10215 velocity_[2].echange_espace_virtuel(1);
10217 statistics().begin_count(
"calcul dtstab QC",statistics().get_last_opened_counter_level()+1);
10221 double dt_diff = 1.e20;
10222 double dt_diff_mu = 1.e20;
10235 dt_diff = dt_diff_mu;
10240 dt_diff = dt_diff_mu;
10244 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.);
10245 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.);
10246 dt_diff = min(dt_diff_mu, dt_diff_kappa);
10251 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.);
10252 dt_diff = min(dt_diff_mu, dt_diff_kappa);
10256 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.);
10257 dt_diff = dt_diff_mu;
10261 Cerr <<
"This should not happen." << finl;
10266 statistics().end_count(
"calcul dtstab QC");
10267 tmp_size3[0] = dt_conv;
10268 tmp_size3[1] = dt_diff;
10269 tmp_size3[2] = dt_diff_mu;
10271 dt_conv = tmp_size3[0];
10272 dt_diff = tmp_size3[1];
10273 dt_diff_mu = tmp_size3[2];
10276 const double dt_theorique = 1. / (1./dt_conv + 1./dt_diff);
10297 save_current_timestep =
true;
10299 assert(
timestep_ > 0 &&
"You can't have a null timestep");
10303 <<
" dtconv= " << dt_conv
10304 <<
" dtdiff_t= " << dt_diff
10305 <<
" dtdiff_v= " << dt_diff_mu;
10306 Cout <<
" theorique_dt= " << dt_theorique
10307 <<
" dt_limited " << dt_regule
10327 statistics().begin_count(
"calcul terme acceleration",statistics().get_last_opened_counter_level()+1);
10334 double acceleration_du_dt = 0.;
10343 acceleration_du_dt = ecart_debit - ecart_ancien;
10353 double d = derivative_2nd_order_t /
timestep_;
10357 Cout <<
"Current heat sink: " <<
puit_
10360 <<
" Old T_bulk: " << old_t_bulk
10361 <<
" factor " << fac
10375 <<
" da/dt= " << acceleration_du_dt << finl;
10380 envoyer_broadcast(
puit_, 0);
10394 statistics().end_count(
"calcul terme acceleration");
10397 for (
int rk_step = 0; rk_step < 3; rk_step++)
10402 statistics().begin_count(STD_COUNTERS::postreatment,statistics().get_last_opened_counter_level()+1);
10404 statistics().end_count(STD_COUNTERS::postreatment);
10414 statistics().begin_count(STD_COUNTERS::postreatment,statistics().get_last_opened_counter_level()+1);
10415 statistics().begin_count(
"update statistiques",statistics().get_last_opened_counter_level()+1);
10426 statistics().end_count(
"update statistiques");
10427 statistics().begin_count(
"TF update",statistics().get_last_opened_counter_level()+1);
10430 int un_sur_20 = tstep%20;
10434 statistics().end_count(
"TF update");
10435 statistics().end_count(STD_COUNTERS::postreatment);
10460 envoyer_broadcast(stop, 0);
10467 statistics().begin_count(
"checkpointing",statistics().get_last_opened_counter_level()+1);
10469 statistics().end_count(
"checkpointing");
10474 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10476 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10479 if (save_current_timestep)
10481 save_current_timestep=
false;
10483 Cerr <<
"Yanis: Raw data cycle " << finl;
10485 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10487 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10500 Cerr <<
"Yanis: Raw data " << finl;
10501 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10503 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10507 Cerr <<
"Yanis: Stats " << finl;
10512 statistics().end_count(STD_COUNTERS::timeloop,0,0);
10513 Nom Nom_post =
"Spectrale_";
10516 statistics().begin_count(STD_COUNTERS::timeloop,statistics().get_last_opened_counter_level()+1);
10522 Cerr <<
"tstep " << tstep
10524 <<
" cpu_time " << statistics().get_time_since_last_open(STD_COUNTERS::timeloop) << finl;
10526 statistics().end_count(STD_COUNTERS::timeloop);
10527 statistics().end_time_step(tstep);
10529 statistics().end_timeloop();
10530 statistics().print_TU_files(
"Time loop statistics");
10535int calculer_k_pour_bord(
const IJK_Field_double& temperature,
const bool bord_kmax)
10558 if (kmin + temperature.
nk() == nktot)
10561 k = temperature.
nk() - 1;
10575int calculer_flux_thermique_bord(
const IJK_Field_double& temperature,
10576 const double lambda_de_t_paroi,
10577 const int turbulent_diffusivity,
10578 const IJK_Field_double& lambda_turbulent,
10579 const int flag_lambda_anisotropic,
10580 const int structural_uscalar,
10581 const IJK_Field_double& structural_uscalar_z,
10582 const double T_paroi_impose,
10583 IJK_Field_local_double& flux_bord,
10584 const bool bord_kmax)
10587 int k = calculer_k_pour_bord(temperature, bord_kmax);
10592 const int ni = temperature.
ni();
10593 const int nj = temperature.
nj();
10597 const double delta_k = geometry.
get_delta(DIRECTION_K)[k + kmin];
10600 for (
int j = 0; j < nj; j++)
10602 for (
int i = 0; i < ni; i++)
10604 const int sens = bord_kmax ? -1 : 1;
10608 const double xf_0 = coord_z[k+kmin+bord_kmax];
10609 const double xf_1 = coord_z[k+kmin+bord_kmax+sens*1];
10610 const double xf_2 = coord_z[k+kmin+bord_kmax+sens*2];
10612 const double x_p = xf_0;
10613 const double x_0 = 0.5*(xf_0+xf_1);
10614 const double x_1 = 0.5*(xf_1+xf_2);
10616 double T_p = T_paroi_impose;
10618 const double T_0 = temperature(i,j,k);
10619 const double T_1 = temperature(i,j,k+sens*1);
10620 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))));
10624 if (turbulent_diffusivity && (!flag_lambda_anisotropic))
10626 l = lambda_turbulent(i,j,k) + lambda_de_t_paroi;
10628 else if (turbulent_diffusivity && flag_lambda_anisotropic)
10630 l = delta_k*lambda_turbulent(i,j,k) + lambda_de_t_paroi;
10634 l = lambda_de_t_paroi;
10646 if (structural_uscalar)
10648 const double s = structural_uscalar_z(i,j,k);
10655 flux_bord(i,j,0) = flux;
10664 IJK_Field_double& temperature,
10665 const int turbulent_diffusivity,
10666 const IJK_Field_double& lambda_turbulent,
10667 const int flag_lambda_anisotropic,
10668 const int structural_uscalar,
10669 const IJK_Field_double& structural_uscalar_z,
10670 const double P_th_initial,
10671 double& P_th_final,
10672 const double fractionnal_timestep,
10673 double& d_Pth_divise_par_gammamoins1)
const
10675 IJK_Field_local_double flux_bord;
10677 const int imax = temperature.
ni();
10678 const int jmax = temperature.
nj();
10680 double P_th = P_th_initial;
10682 const int max_point_fixe = 3;
10683 double somme_flux_entrants;
10685 for (
int point_fixe_iter = 0; point_fixe_iter < max_point_fixe; point_fixe_iter++)
10689 double somme_flux_kmin = 0.;
10690 double somme_flux_kmax = 0.;
10691 for (
int plan_cl = 0; plan_cl < 2; plan_cl++)
10693 double somme_flux = 0.;
10695 int k = calculer_k_pour_bord(temperature, plan_cl);
10698 for (
int j = 0; j < jmax; j++)
10700 for (
int i = 0; i < imax; i++)
10708 calculer_flux_thermique_bord(temperature, lambda_de_t_paroi,
10709 0, lambda_turbulent, flag_lambda_anisotropic,
10710 0, structural_uscalar_z,
10711 T_paroi_impose, flux_bord, plan_cl);
10713 for (
int j = 0; j < jmax; j++)
10715 for (
int i = 0; i < imax; i++)
10717 somme_flux += flux_bord(i,j,0);
10723 somme_flux_kmax = somme_flux;
10725 somme_flux_kmin = somme_flux;
10731 somme_flux_entrants =0;
10733 somme_flux_entrants = somme_flux_kmin - somme_flux_kmax;
10736 assert_parallel(P_th);
10737 if (point_fixe_iter== max_point_fixe-1)
10739 Cout <<
"calcul_p_thermo iter " << point_fixe_iter <<
" flux k=0: " << somme_flux_kmin
10740 <<
" flux k=kmax: " << somme_flux_kmax <<
" P_th: " << P_th <<
" ";
10746 Cout <<
"dP_th/dt= " << d_Pth_divise_par_gammamoins1 * (
gamma_ - 1) << finl;
10749static void force_2d(IJK_Field_double& f)
10751 const int ni = f.
ni();
10752 const int nj = f.
nj();
10753 const int nk = f.
nk();
10754 for (
int k = 0; k < nk; k++)
10756 for (
int j = 1; j < nj; j++)
10758 for (
int i = 0; i < ni; i++)
10760 f(i, j, k) = f(i, 0, k);
10768 IJK_Field_vector3_double& velocity,
10769 const ArrOfDouble_with_ghost& delta_z,
10770 const double facteur_delta_x,
10771 const double facteur_delta_y,
10772 const ArrOfDouble_with_ghost& delta_z_pour_delta,
10776 IJK_Field_vector3_double& d_velocity_tmp,
10777 IJK_Field_vector3_double& d_velocity,
10778 IJK_Field_double& u_div_rho_u)
10780 int ghost_size_filter;
10781 int ghost_size_d_velocity_tmp;
10789 compute_divergence_times_constant(rho_v[0], rho_v[1], rho_v[2], 1., u_div_rho_u);
10792 multiplier_champ_rho_face_i(
false, u_div_rho_u, 1., velocity[0], d_velocity_tmp[0]);
10793 multiplier_champ_rho_face_j(
false, u_div_rho_u, 1., velocity[1], d_velocity_tmp[1]);
10794 multiplier_champ_rho_face_k(
false, u_div_rho_u, 1., 0., velocity[2], d_velocity_tmp[2]);
10796 ghost_size_filter = 1 + kernel->ghost_size();
10797 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
10802 const int flag_add = 1;
10803 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]);
10804 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]);
10805 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]);
10812 compute_divergence_times_constant(rho_v[0], rho_v[1], rho_v[2], 1., u_div_rho_u);
10815 multiplier_champ_rho_face_i(
true, u_div_rho_u, 1., velocity[0], d_velocity[0]);
10816 multiplier_champ_rho_face_j(
true, u_div_rho_u, 1., velocity[1], d_velocity[1]);
10817 multiplier_champ_rho_face_k(
true, u_div_rho_u, 1., 0., velocity[2], d_velocity[2]);
10827 velocity[0], velocity[1], velocity[2],
10828 d_velocity[0], d_velocity[1], d_velocity[2]);
10834 velocity[0], velocity[1], velocity[2],
10835 d_velocity[0], d_velocity[1], d_velocity[2]);
10840 velocity[0], velocity[1], velocity[2],
10841 d_velocity[0], d_velocity[1], d_velocity[2],
10848 velocity[0], velocity[1], velocity[2],
10849 d_velocity[0], d_velocity[1], d_velocity[2],
10853 ghost_size_filter = 1 + kernel->ghost_size();
10854 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
10859 const int flag_add = 1;
10860 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]);
10861 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]);
10862 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]);
10869 velocity[0], velocity[1], velocity[2],
10870 d_velocity[0], d_velocity[1], d_velocity[2]);
10875 velocity[0], velocity[1], velocity[2],
10876 d_velocity[0], d_velocity[1], d_velocity[2]);
10881 velocity[0], velocity[1], velocity[2],
10882 d_velocity[0], d_velocity[1], d_velocity[2],
10889 velocity[0], velocity[1], velocity[2],
10890 d_velocity[0], d_velocity[1], d_velocity[2],
10899 const IJK_Field_double& turbulent_mu_xx,
10900 const IJK_Field_double& turbulent_mu_xy,
10901 const IJK_Field_double& turbulent_mu_xz,
10902 const IJK_Field_double& turbulent_mu_yy,
10903 const IJK_Field_double& turbulent_mu_yz,
10904 const IJK_Field_double& turbulent_mu_zz,
10905 const ArrOfDouble_with_ghost& delta_z,
10906 const double facteur_delta_x,
10907 const double facteur_delta_y,
10908 const ArrOfDouble_with_ghost& delta_z_pour_delta,
10912 IJK_Field_vector3_double& d_velocity_tmp,
10913 IJK_Field_vector3_double& d_velocity)
10915 const IJK_Field_double& turbulent_mu_yx = turbulent_mu_xy;
10916 const IJK_Field_double& turbulent_mu_zx = turbulent_mu_xz;
10917 const IJK_Field_double& turbulent_mu_zy = turbulent_mu_yz;
10918 int ghost_size_filter;
10919 int ghost_size_d_velocity_tmp;
10934 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10948 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10955 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
10968 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10982 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
10996 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11003 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11016 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11020 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
11024 ghost_size_filter = 1 + kernel->ghost_size();
11025 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
11030 const int flag_add = 1;
11031 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]);
11032 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]);
11033 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]);
11049 d_velocity[0], d_velocity[1], d_velocity[2]);
11063 d_velocity[0], d_velocity[1], d_velocity[2]);
11070 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11083 d_velocity[0], d_velocity[1], d_velocity[2]);
11097 d_velocity[0], d_velocity[1], d_velocity[2]);
11111 d_velocity[0], d_velocity[1], d_velocity[2]);
11118 compute_divergence(velocity[0], velocity[1], velocity[2],
divergence_);
11131 d_velocity[0], d_velocity[1], d_velocity[2]);
11135 Cerr <<
"Unknown velocity turbulent diffusion operator! " << finl;
11144 const ArrOfDouble_with_ghost& delta_z,
11145 const double facteur_delta_x,
11146 const double facteur_delta_y,
11147 const ArrOfDouble_with_ghost& delta_z_pour_delta,
11151 IJK_Field_vector3_double& d_velocity_tmp,
11152 IJK_Field_vector3_double& d_velocity)
11154 const IJK_Field_double& structural_uu_xx = structural_uu_tensor[0];
11155 const IJK_Field_double& structural_uu_xy = structural_uu_tensor[1];
11156 const IJK_Field_double& structural_uu_xz = structural_uu_tensor[2];
11157 const IJK_Field_double& structural_uu_yx = structural_uu_tensor[1];
11158 const IJK_Field_double& structural_uu_yy = structural_uu_tensor[3];
11159 const IJK_Field_double& structural_uu_yz = structural_uu_tensor[4];
11160 const IJK_Field_double& structural_uu_zx = structural_uu_tensor[2];
11161 const IJK_Field_double& structural_uu_zy = structural_uu_tensor[4];
11162 const IJK_Field_double& structural_uu_zz = structural_uu_tensor[5];
11163 int ghost_size_filter;
11164 int ghost_size_d_velocity_tmp;
11177 d_velocity_tmp[0], d_velocity_tmp[1], d_velocity_tmp[2]);
11179 ghost_size_filter = 1 + kernel->ghost_size();
11180 ghost_size_d_velocity_tmp = max((
int) 2, ghost_size_filter);
11185 const int flag_add = 1;
11186 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]);
11187 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]);
11188 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]);
11202 d_velocity[0], d_velocity[1], d_velocity[2]);
11207 const IJK_Field_double& turbulent_kappa_x,
11208 const IJK_Field_double& turbulent_kappa_y,
11209 const IJK_Field_double& turbulent_kappa_z,
11210 IJK_Field_double& d_rho,
11211 const IJK_Field_local_double& boundary_flux_kmin,
11212 const IJK_Field_local_double& boundary_flux_kmax)
11218 turbulent_kappa_z);
11221 boundary_flux_kmin, boundary_flux_kmax);
11227 turbulent_kappa_z);
11230 boundary_flux_kmin, boundary_flux_kmax);
11234 Cerr <<
"Unknown scalar turbulent diffusion operator! " << finl;
11244 statistics().create_custom_counter(
"qc convection rho",2,
"TrioCFD");
11245 statistics().create_custom_counter(
"qc calcul pthermo,t,rho_v,etc",2,
"TrioCFD");
11246 statistics().create_custom_counter(
"qc diffusion vitesse",2,
"TrioCFD");
11247 statistics().create_custom_counter(
"qc diffusion turbulente vitesse",2,
"TrioCFD");
11248 statistics().create_custom_counter(
"qc diffusion vitesse modele structurel",2,
"TrioCFD");
11249 statistics().create_custom_counter(
"qc convection vitesse",2,
"TrioCFD");
11250 statistics().create_custom_counter(
"qc rk3 update",2,
"TrioCFD");
11251 statistics().create_custom_counter(
"qc diffusion temperature",2,
"TrioCFD");
11252 statistics().create_custom_counter(
"qc turbulent diffusivity",2,
"TrioCFD");
11253 statistics().create_custom_counter(
"qc turbulent diffusivity structurel",2,
"TrioCFD");
11254 statistics().create_custom_counter(
"qc prepare rhs",2,
"TrioCFD");
11255 statistics().create_custom_counter(
"qc resoudre systeme",2,
"TrioCFD");
11256 statistics().create_custom_counter(
"qc ajouter grad p",2,
"TrioCFD");
11259 const double fractionnal_timestep = compute_fractionnal_timestep_rk3(total_timestep, rk_step);
11269 assert(rk_step>=0 && rk_step<3);
11280 statistics().begin_count(
"qc convection rho",statistics().get_last_opened_counter_level()+1);
11305 statistics().end_count(
"qc convection rho");
11313 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11318 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_,
11332 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_,
11342 statistics().end_count(
"qc turbulent diffusivity");
11347 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11359 statistics().end_count(
"qc turbulent diffusivity structurel");
11391 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11399 calculer_flux_thermique_bord(
rho_, 0.,
11403 calculer_flux_thermique_bord(
rho_, 0.,
11408 rho_.echange_espace_virtuel(1);
11425 calculer_flux_thermique_bord(
rho_, 0.,
11429 calculer_flux_thermique_bord(
rho_, 0.,
11434 rho_.echange_espace_virtuel(1);
11444 statistics().end_count(
"qc turbulent diffusivity");
11451 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11458 calculer_flux_thermique_bord(
rho_, 0.,
11462 calculer_flux_thermique_bord(
rho_, 0.,
11467 rho_.echange_espace_virtuel(1);
11483 statistics().end_count(
"qc turbulent diffusivity structurel");
11490 const int kmax =
d_rho_.nk();
11491 for (
int k = 0; k < kmax; k++)
11503 rho_.echange_espace_virtuel(1);
11505 statistics().begin_count(
"qc calcul pthermo,t,rho_v,etc",statistics().get_last_opened_counter_level()+1);
11509 double d_Pth_divise_par_gammamoins1;
11515 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11520 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_,
11534 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_,
11544 statistics().end_count(
"qc turbulent diffusivity");
11549 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11561 statistics().end_count(
"qc turbulent diffusivity structurel");
11593 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
11620 statistics().end_count(
"qc turbulent diffusivity");
11625 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
11639 statistics().end_count(
"qc turbulent diffusivity structurel");
11645 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);
11649 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);
11668 statistics().end_count(
"qc calcul pthermo,t,rho_v,etc");
11671 rho_v_[0].echange_espace_virtuel(2);
11672 rho_v_[1].echange_espace_virtuel(2);
11673 rho_v_[2].echange_espace_virtuel(2);
11677 statistics().begin_count(
"qc diffusion vitesse",statistics().get_last_opened_counter_level()+1);
11700 velocity_[0].echange_espace_virtuel(1);
11701 velocity_[1].echange_espace_virtuel(1);
11702 velocity_[2].echange_espace_virtuel(1);
11718 Cerr <<
"Unknown velocity diffusion operator! " << finl;
11722 statistics().end_count(
"qc diffusion vitesse");
11731 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
11737 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_,
11751 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_,
11761 statistics().end_count(
"qc diffusion turbulente vitesse");
11766 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
11776 statistics().end_count(
"qc diffusion vitesse modele structurel");
11808 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
11856 statistics().end_count(
"qc diffusion turbulente vitesse");
11865 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
11888 statistics().end_count(
"qc diffusion vitesse modele structurel");
11896 statistics().begin_count(
"qc convection vitesse",statistics().get_last_opened_counter_level()+1);
11911 statistics().end_count(
"qc convection vitesse");
11919 int dir = DIRECTION_J;
11921 const int ni = dv.
ni();
11922 const int nj = dv.
nj();
11925 for(
int k = 0; k < kmax; k++)
11927 for (
int j = 0; j < nj; j++)
11929 for (
int i = 0; i < ni; i++)
11931 const double volume = get_channel_control_volume(dv, k,
delta_z_local_);
11932 const double force = volumic_force * volume * (
rho_(i, j, k) +
rho_(i, j-1, k))*0.5;
11933 dv(i, j, k) += force;
11951 statistics().begin_count(
"qc rk3 update",statistics().get_last_opened_counter_level()+1);
11952 for (
int dir = 0; dir < 3; dir++)
11955 for (
int k = 0; k < kmax; k++)
11958 if (dir == DIRECTION_I)
11962 const double volume = get_channel_control_volume(dvx, k,
delta_z_local_);
11963 const double f = force_volumique * volume;
11964 const int ni = dvx.
ni();
11965 const int nj = dvx.
nj();
11967 for (
int j = 0; j < nj; j++)
11969 for (
int i = 0; i < ni; i++)
11976 if (dir == DIRECTION_K)
11980 const double volume = get_channel_control_volume(dvx, k,
delta_z_local_);
11981 const double f = force_volumique * volume;
11982 const int ni = dvx.
ni();
11983 const int nj = dvx.
nj();
11985 for (
int j = 0; j < nj; j++)
11987 for (
int i = 0; i < ni; i++)
11999 statistics().begin_count(
"qc convection vitesse",statistics().get_last_opened_counter_level()+1);
12011 statistics().end_count(
"qc convection vitesse");
12020 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
12026 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_,
12040 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_,
12051 statistics().end_count(
"qc diffusion turbulente vitesse");
12056 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
12057 Cerr <<
"avant calculer_structural_uu" << finl;
12067 statistics().end_count(
"qc diffusion vitesse modele structurel");
12099 statistics().begin_count(
"qc diffusion turbulente vitesse",statistics().get_last_opened_counter_level()+1);
12138 statistics().end_count(
"qc diffusion turbulente vitesse");
12147 statistics().begin_count(
"qc diffusion vitesse modele structurel",statistics().get_last_opened_counter_level()+1);
12163 statistics().end_count(
"qc diffusion vitesse modele structurel");
12171 force_zero_normal_velocity_on_walls(
d_velocity_[2]);
12173 for (
int dir = 0; dir < 3; dir++)
12176 for (
int k = 0; k < kmax; k++)
12183 statistics().end_count(
"qc rk3 update");
12217 statistics().begin_count(
"qc diffusion temperature",statistics().get_last_opened_counter_level()+1);
12229 statistics().end_count(
"qc diffusion temperature");
12237 statistics().begin_count(
"qc turbulent diffusivity",statistics().get_last_opened_counter_level()+1);
12282 statistics().end_count(
"qc turbulent diffusivity");
12289 statistics().begin_count(
"qc turbulent diffusivity structurel",statistics().get_last_opened_counter_level()+1);
12316 statistics().end_count(
"qc turbulent diffusivity structurel");
12324 velocity_[0].echange_espace_virtuel(1);
12325 velocity_[1].echange_espace_virtuel(1);
12326 velocity_[2].echange_espace_virtuel(1);
12328 statistics().begin_count(
"qc prepare rhs",statistics().get_last_opened_counter_level()+1);
12335 const int ni =
rho_.ni();
12336 const int nj =
rho_.nj();
12337 const int nk =
rho_.nk();
12342 IJK_Field_double& rho =
rho_;
12345 for (
int k = 0; k < nk; k++)
12348 const double volume_maille = delta_x * delta_y * delta_z;
12349 const double facteur = d_Pth_divise_par_gammamoins1 * volume_maille;
12353 for (
int j = 0; j < nj; j++)
12355 for (
int i = 0; i < ni; i++)
12363 for (
int j = 0; j < nj; j++)
12365 for (
int i = 0; i < ni; i++)
12374 statistics().end_count(
"qc prepare rhs");
12378 statistics().begin_count(
"qc resoudre systeme",statistics().get_last_opened_counter_level()+1);
12381 statistics().end_count(
"qc resoudre systeme");
12386 statistics().begin_count(
"qc ajouter grad p",statistics().get_last_opened_counter_level()+1);
12387 add_gradient_times_constant_over_rho(
pressure_,
rho_, -fractionnal_timestep,
12389 statistics().end_count(
"qc ajouter grad p");
12393 double reference_pression = 0;
12395 Cout <<
"reference_pression= " << reference_pression << finl;
12399 rho_.echange_espace_virtuel(2);
12400 velocity_[0].echange_espace_virtuel(2);
12401 velocity_[1].echange_espace_virtuel(2);
12402 velocity_[2].echange_espace_virtuel(2);
12410 const double dx =
pressure_.get_domaine().get_constant_delta(DIRECTION_I);
12411 const double dy =
pressure_.get_domaine().get_constant_delta(DIRECTION_J);
12413 double integrale_pression = 0.;
12414 for (
int k = 0; k < nk; k++)
12416 for (
int j = 0; j < nj; j++)
12418 for (
int i = 0; i < ni; i++)
12424 ArrOfDouble tmp(1);
12425 tmp[0] = integrale_pression;
12435 for (
int k = 0; k < nk; k++)
12437 for (
int j = 0; j < nj; j++)
12439 for (
int i = 0; i < ni; i++)
12441 pressure_(i,j,k) -= reference_pression;
12449 const int ni =
rho_.ni();
12450 const int nj =
rho_.nj();
12451 const int nk =
rho_.nk();
12452 const double dx =
rho_.get_domaine().get_constant_delta(DIRECTION_I);
12453 const double dy =
rho_.get_domaine().get_constant_delta(DIRECTION_J);
12455 double integral_rho = 0.;
12456 for (
int k = 0; k < nk; k++)
12458 for (
int j = 0; j < nj; j++)
12460 for (
int i = 0; i < ni; i++)
12466 ArrOfDouble tmp(1);
12467 tmp[0] = integral_rho;
12479 const double dx =
temperature_.get_domaine().get_constant_delta(DIRECTION_I);
12480 const double dy =
temperature_.get_domaine().get_constant_delta(DIRECTION_J);
12482 double integral_t = 0.;
12483 for (
int k = 0; k < nk; k++)
12485 for (
int j = 0; j < nj; j++)
12487 for (
int i = 0; i < ni; i++)
12493 ArrOfDouble tmp(1);
12494 tmp[0] = integral_t;
12502 const int ni =
rho_.ni();
12503 const int nj =
rho_.nj();
12504 const int nk =
rho_.nk();
12505 const double dx =
rho_.get_domaine().get_constant_delta(DIRECTION_I);
12506 const double dy =
rho_.get_domaine().get_constant_delta(DIRECTION_J);
12508 double integral_t = 0.;
12509 double integral_rho = 0.;
12510 for (
int k = 0; k < nk; k++)
12512 for (
int j = 0; j < nj; j++)
12514 for (
int i = 0; i < ni; i++)
12521 ArrOfDouble tmp(1);
12522 tmp[0] = integral_t;
12527 ArrOfDouble tmp2(1);
12528 tmp2[0] = integral_rho;
IJK_Field_double velocity_elem_Y_sauvegarde_
bool disable_solveur_poisson_
Entree & interpreter(Entree &) override
IJK_Field_double velocity_elem_X_
bool diff_qdm_negligeable_
bool sauvegarde_post_instantanes_
IJK_Field_double pressure_sauvegarde_
OpConvQuickSharpIJK_double velocity_convection_op_quicksharp_
FixedVector< IJK_Field_double, 6 > turbulent_mu_tensor_
OpDiffTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_anisotropic_
IJK_Field_double molecular_mu_
double smoothing_factor_fr_
IJK_Field_vector3_double turbulent_kappa_vector_
double T_paroi_impose_kmin_
double lambda_de_t_paroi_kmin_
OpDiffStdWithLaminarTransposeAndDivergenceTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_full_anisotropic_
Nom turbulent_viscosity_dynamic_type_
int compteur_post_instantanes_
OpConvCentre2IJKScalar_double rho_convection_op_centre2_
bool flag_oscillating_boundary
OpConvAmontIJK_double velocity_convection_op_amont_
bool flag_nu_anisotropic_
ArrOfDouble turbulent_viscosity_tensor_coefficients_
OpDiffStdWithLaminarTransposeAndDivergenceTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_full_
double constante_specifique_gaz_
bool flag_structural_uu_tmp_
bool variation_cste_modele_fonctionnel_
IJK_Field_local_double boundary_flux_kmin_
IJK_Field_double velocity_elem_Z_
IJK_Field_double temperature_filtre_
Domaine_IJK post_splitting_
IJK_Field_double turbulent_mu_filtre_
IJK_Field_double turbulent_kappa_filtre_
double terme_source_acceleration_
IJK_Field_double turbulent_kappa_
bool diff_temp_negligeable_
Filter_kernel_base * kernel_
bool conv_rho_negligeable_
void calculer_velocity_elem()
double smoothing_center_fr_
IJK_Field_vector3_double turbulent_kappa_filtre_vector_
IJK_Field_double div_lambda_grad_T_volume_
bool turbulent_diffusivity_
Noms expression_vitesse_initiale_
IJK_Field_double pressure_rhs_
Motcles liste_post_instantanes_
FixedVector< IJK_Field_double, 6 > structural_uu_tensor_
IJK_Field_double rho_sauvegarde_
FixedVector< IJK_Field_double, 6 > turbulent_mu_filtre_tensor_
IJK_Field_vector3_double velocity_filtre_
IJK_Field_double temperature_
void compute_rho_bulk(double &rho_bulk_)
bool flag_filtrage_turbulent_diffusion_qdm_
void calculer_convection_vitesse(IJK_Field_vector3_double &rho_v, IJK_Field_vector3_double &velocity, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity, IJK_Field_double &u_div_rho_u)
void calculer_diffusion_scalar(const IJK_Field_double &rho, const IJK_Field_double &turbulent_kappa_x, const IJK_Field_double &turbulent_kappa_y, const IJK_Field_double &turbulent_kappa_z, IJK_Field_double &d_rho, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
double lambda_de_t_paroi_kmax_
IJK_Field_double u_div_rho_u_
int timestep_reprise_rho_
OpDiffStructuralOnlyZeroatwallIJK_double velocity_turbulent_diffusion_op_structural_
Statistiques_dns_qc_ijk statistiques_
OpDiffTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_
Boundary_Conditions boundary_conditions_
IJK_Field_vector3_double d_velocity_
IJK_Field_double molecular_lambda_sauvegarde_
OpConvCentre4IJK_double velocity_convection_op_
IJK_Field_local_double boundary_flux_kmax_
OpDiffStdWithLaminarTransposeTensorialAnisotropicZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_with_transpose_anisotropic_
Nom structural_uu_dynamic_type_
IJK_Field_double divergence_
double terme_source_acceleration_constant_
ArrOfDouble turbulent_diffusivity_vector_coefficients_
OpDiffStdWithLaminarTransposeTensorialZeroatwallIJK_double velocity_turbulent_diffusion_op_simple_with_transpose_
bool flag_structural_uscalar_tmp_
IJK_Field_vector3_double structural_uscalar_filtre_vector_
double turbulent_viscosity_model_constant_
IJK_Field_double pressure_
bool flag_kappa_vectorial_
void calculer_moyennes_flux()
Nom sauvegarde_splitting_name_
FixedVector< IJK_Field_double, 6 > structural_uu_filtre_tensor_
IJK_Field_double rho_filtre_
IJK_Field_vector3_double velocity_sauvegarde_
bool projection_initiale_demandee_
bool lecture_post_instantanes_filtrer_p_
bool convection_velocity_centre2_
void save_stats(double current_time)
bool flag_save_each_delta_t_
double rho_paroi_impose_kmin_
bool flag_d_velocity_tmp_
Multigrille_Adrien poisson_solver_
bool lecture_post_instantanes_filtrer_rho_
bool convection_rho_centre4_
ArrOfDouble_with_ghost delta_z_local_pour_delta_filtre_
Nom expression_temperature_initiale_
double t_debut_statistiques_
OpDiffIJK_double velocity_diffusion_op_simple_
void ecrire_fichier_sauv(const char *fichier_sauvegarde, const char *lata_name)
bool formulation_velocity_
OpDiffStdWithLaminarTransposeAndDivergenceIJK_double velocity_diffusion_op_full_
IJK_Field_double turbulent_mu_
bool conv_qdm_negligeable_
double T_paroi_impose_kmax_
void sauvegarder_qc(const char *fichier_sauvegarde)
IJK_Field_double temperature_sauvegarde_
OpConvCentre2IJK_double velocity_convection_op_centre_2_
Nom turbulent_diffusivity_model_
bool flag_structural_uscalar_filtre_
double structural_uu_model_constant_
OpConvAmontIJK_double rho_convection_op_amont_
int timestep_reprise_vitesse_
bool convection_rho_centre2_
OpDiffStructuralOnlyIJKScalar_double operateur_diffusion_temperature_structural_
void compute_rho_t_bulk(double &rho_bulk_, double &t_bulk_)
OpConvCentre4IJK_double rho_convection_op_centre4_
bool flag_turbulent_mu_filtre_
double rho_paroi_impose_kmax_
Nom large_eddy_simulation_formulation_
FixedVector< IJK_Field_local_double, 18 > tmp_a_
void save_raw_data(const char *lata_name, double current_time)
IJK_Field_vector3_double rho_v_
double structural_uscalar_model_constant_
Nom type_velocity_diffusion_
bool flag_structural_uu_filtre_
IJK_Field_double velocity_elem_X_sauvegarde_
Nom turbulent_viscosity_model_
bool flag_kappa_anisotropic_
void calculer_turbulent_diffusion_vitesse(IJK_Field_vector3_double &velocity, const IJK_Field_double &turbulent_mu_xx, const IJK_Field_double &turbulent_mu_xy, const IJK_Field_double &turbulent_mu_xz, const IJK_Field_double &turbulent_mu_yy, const IJK_Field_double &turbulent_mu_yz, const IJK_Field_double &turbulent_mu_zz, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity)
Domaine_IJK sauvegarde_splitting_
bool flag_temperature_filtre_
OpDiffStdWithLaminarTransposeIJK_double velocity_diffusion_op_simple_with_transpose_
ArrOfDouble_with_ghost constante_modele_
Nom fichier_reprise_vitesse_
Nom type_scalar_turbulent_diffusion_
ArrOfDouble structural_uu_tensor_coefficients_
double dt_save_oscillating_cycle_raw_data_
bool lecture_post_instantanes_filtrer_tous_
void calculer_structural_diffusion_vitesse(IJK_Field_vector3_double &velocity, const FixedVector< IJK_Field_double, 6 > &structural_uu_tensor, const ArrOfDouble_with_ghost &delta_z, const double facteur_delta_x, const double facteur_delta_y, const ArrOfDouble_with_ghost &delta_z_pour_delta, T &kernel, FixedVector< IJK_Field_local_double, 18 > &tmp_b, FixedVector< IJK_Field_local_double, 18 > &tmp_a, IJK_Field_vector3_double &d_velocity_tmp, IJK_Field_vector3_double &d_velocity)
double amplitude_oscillating_boundary_
bool flag_convection_qdm_sans_divergence_
double P_thermodynamique_
Nom turbulent_diffusivity_dynamic_type_
Nom structural_uscalar_model_
IJK_Field_vector3_double structural_uscalar_tmp_vector_
bool convection_rho_amont_
void compute_t_bulk(double &t_bulk_)
IJK_Field_double velocity_elem_Y_
FixedVector< FixedVector< ArrOfDouble, 7 >, 8 > ml_
OpDiffVectorialAnisotropicIJKScalar_double operateur_diffusion_turbulent_scalar_anisotropic_
FixedVector< Redistribute_Field, 3 > redistribute_to_sauvegarde_splitting_faces_
bool postraiter_sous_pas_de_temps_
int mode_terme_source_impose_
IJK_Field_double RK3_F_rho_
double facteur_delta_filtre_y_
void fixer_reference_pression(double &reference_pression)
ArrOfDouble_with_ghost delta_z_local_pour_delta_
void translation_pression(const double &reference_pression)
bool flag_convection_qdm_sans_rho_
void rk3_sub_step(const int rk_step, const double total_timestep)
IJK_Field_double molecular_mu_sauvegarde_
bool flag_filtrage_structural_diffusion_qdm_
void calcul_p_thermo_et_bilan(const IJK_Field_double &rho, IJK_Field_double &temperature, const int turbulent_diffusivity, const IJK_Field_double &lambda_turbulent, const int flag_lambda_anisotropic, const int structural_uscalar, const IJK_Field_double &structural_uscalar_z, const double P_th_initial, double &P_th_final, const double fractionnal_timestep, double &d_Pth_divise_par_gammamoins1) const
IJK_Field_vector3_double d_velocity_tmp_
double frequency_oscillating_boundary_
double terme_source_acceleration_z_
double turbulent_diffusivity_model_constant_
bool lecture_post_instantanes_
OpDiffVectorialIJKScalar_double operateur_diffusion_turbulent_scalar_
Redistribute_Field redistribute_to_sauvegarde_splitting_elem_
IJK_Field_vector3_double velocity_
double facteur_delta_filtre_x_
bool flag_filtrage_convection_qdm_
IJK_Field_vector3_double RK3_F_velocity_
FixedVector< IJK_Field_double, 6 > structural_uu_tmp_tensor_
IJK_Field_vector3_double structural_uscalar_vector_
double volume_total_domaine_
Nom type_velocity_turbulent_diffusion_
Fourier_trans partie_fourier_
bool flag_turbulent_kappa_filtre_
bool lecture_post_instantanes_filtrer_u_
IJK_Field_double molecular_lambda_
OpConvQuickIJKScalar_double rho_convection_op_
void posttraiter_champs_instantanes(const char *lata_name, double time)
ArrOfDouble structural_uscalar_vector_coefficients_
bool turbulent_viscosity_
FixedVector< IJK_Field_local_double, 18 > tmp_b_
Nom structural_uscalar_dynamic_type_
ArrOfDouble_with_ghost delta_z_local_
void reprendre_qc(const char *fichier_reprise)
IJK_Field_double velocity_elem_Z_sauvegarde_
bool convection_velocity_amont_
OpDiffIJKScalar_double operateur_diffusion_temperature_
bool convection_velocity_quicksharp_
static void verifier(const char *msg, const IJK_Field_float &)
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
int get_offset_local(int direction) const
Returns the local offset in requested direction.
int get_nb_elem_local(int direction) const
Returns the number of elements owned by this processor in the given direction.
int get_nb_items_local(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
double get_constant_delta(int direction) const
Returns the size of cells in a direction.
const ArrOfDouble & get_delta(int direction) const
Returns the array of mesh cell sizes in requested direction.
int get_nb_items_global(Localisation loc, int direction) const
Returns the number of local items (on this processor) for the given localisation in the requested dir...
int get_nb_elem_tot(int direction) const
Returns the total (global) number of mesh cells in requested direction.
const ArrOfDouble & get_node_coordinates(int direction) const
Returns an array with the coordinates of all nodes in the mesh in requested direction.
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
virtual int ouvrir(const char *name, IOS_OPEN_MODE mode=ios::in)
Class defining operators and methods for all reading operation in an input flow (file,...
const Domaine_IJK & get_domaine() const
void echange_espace_virtuel()
void resize(int n, int new_ghost)
void allocate(int ni, int nj, int nk, int ghosts, int additional_k_layers=0, int nb_compo=1, bool external_storage=false)
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
const Domaine_IJK & get_domaine() const
void echange_espace_virtuel()
static Objet_U & objet_global(const Nom &nom)
cherche l'objet demande dans l'Interprete_bloc courant (Interprete_bloc::interprete_courant()) et dan...
Classe de base des objets "interprete".
Cette classe implemente les operateurs et les methodes virtuelles de la classe EFichier de la facon s...
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual int finit_par(const char *const n) const
const Nom getPrefix(const char *const) const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
static const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
int lire_avec_accolades(Entree &is)
Alias of lire_avec_accolades_depuis.
static void mp_sum_for_each(T &arg1, T &arg2)
C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: ...
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
static void mp_min_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
void precision(int pre) override
void setf(IOS_FORMAT code) override
Classe de base des flux de sortie.