135 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
142 DoubleTrav Sij_grid_scale(Sij_test_scale);
144 DoubleTrav S_test_scale_norme;
146 DoubleTrav S_grid_scale_norme;
158 DoubleTrav Lij(Sij_test_scale);
159 DoubleTrav Mij(Sij_test_scale);
160 DoubleTrav l(nb_elem_tot);
183 coeff_field_->changer_temps(temps);
184 la_viscosite_turbulente_->valeurs().echange_espace_virtuel();
185 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::mettre_a_jour la_viscosite_turbulente_ after", la_viscosite_turbulente_->valeurs());
187 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
192 const DoubleTab& vitesse = inco.
valeurs();
194 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_cell_cent_vel INPUT vitesse (inco.valeurs)", vitesse);
197 const IntTab& elem_faces = domaine_VDF.
elem_faces();
198 int num0, num1, num2, num3, num4 = -1, num5 = -1;
201 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
203 num0 = elem_faces(element_number, 0);
204 num1 = elem_faces(element_number, 1);
205 num2 = elem_faces(element_number, 2);
206 num3 = elem_faces(element_number, 3);
209 num4 = elem_faces(element_number, 4);
210 num5 = elem_faces(element_number, 5);
215 cell_cent_vel(element_number, 0) = 0.5 * (vitesse[num0] + vitesse[num2]);
216 cell_cent_vel(element_number, 1) = 0.5 * (vitesse[num1] + vitesse[num3]);
220 cell_cent_vel(element_number, 0) = 0.5 * (vitesse[num0] + vitesse[num3]);
221 cell_cent_vel(element_number, 1) = 0.5 * (vitesse[num1] + vitesse[num4]);
222 cell_cent_vel(element_number, 2) = 0.5 * (vitesse[num2] + vitesse[num5]);
226 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_cell_cent_vel OUTPUT cell_cent_vel", cell_cent_vel);
231 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field INPUT in_vel", in_vel);
232 const IntTab& face_voisins = domaine_VDF.
face_voisins();
234 const IntTab& elem_faces = domaine_VDF.
elem_faces();
236 int num0, num1, num2, num3, num4, num5;
237 int f0, f1, f2, f3, f4, f5;
240 DoubleTrav temp1(out_vel);
241 DoubleTrav temp2(out_vel);
247 for (element_number = 0; element_number < nb_elem; element_number++)
249 f0 = elem_faces(element_number, 0);
250 num0 = face_voisins(f0, 0);
251 f2 = elem_faces(element_number, 2);
252 num2 = face_voisins(f2, 1);
253 if ((num0 == -1) || (num2 == -1))
255 temp1(element_number, i) = in_vel(element_number, i);
260 temp1(element_number, i) = 0.25 * (in_vel(num0, i) + 2.0 * in_vel(element_number, i) + in_vel(num2, i));
265 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field temp1 1", temp1);
266 for (element_number = 0; element_number < nb_elem; element_number++)
268 f1 = elem_faces(element_number, 1);
269 num1 = face_voisins(f1, 0);
270 f3 = elem_faces(element_number, 3);
271 num3 = face_voisins(f3, 1);
272 if ((num1 == -1) || (num3 == -1))
274 out_vel(element_number, i) = temp1(element_number, i);
279 out_vel(element_number, i) = 0.25 * (temp1(num1, i) + 2.0 * temp1(element_number, i) + temp1(num3, i));
284 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field out_vel 1", out_vel);
288 for (element_number = 0; element_number < nb_elem; element_number++)
290 f0 = elem_faces(element_number, 0);
291 num0 = face_voisins(f0, 0);
292 f3 = elem_faces(element_number, 3);
293 num3 = face_voisins(f3, 1);
294 if ((num0 == -1) || (num3 == -1))
296 temp1(element_number, i) = in_vel(element_number, i);
301 temp1(element_number, i) = 0.25 * (in_vel(num0, i) + 2.0 * in_vel(element_number, i) + in_vel(num3, i));
306 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field temp1 2", temp1);
307 for (element_number = 0; element_number < nb_elem; element_number++)
309 f1 = elem_faces(element_number, 1);
310 num1 = face_voisins(f1, 0);
311 f4 = elem_faces(element_number, 4);
312 num4 = face_voisins(f4, 1);
313 if ((num1 == -1) || (num4 == -1))
315 temp2(element_number, i) = temp1(element_number, i);
320 temp2(element_number, i) = 0.25 * (temp1(num1, i) + 2.0 * temp1(element_number, i) + temp1(num4, i));
325 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field temp2 1", temp2);
326 for (element_number = 0; element_number < nb_elem; element_number++)
328 f2 = elem_faces(element_number, 2);
329 num2 = face_voisins(f2, 0);
330 f5 = elem_faces(element_number, 5);
331 num5 = face_voisins(f5, 1);
332 if ((num2 == -1) || (num5 == -1))
334 out_vel(element_number, i) = temp2(element_number, i);
339 out_vel(element_number, i) = 0.25 * (temp2(num2, i) + 2.0 * temp2(element_number, i) + temp2(num5, i));
347 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_filter_field OUTPUT out_vel", out_vel);
354 const IntTab& face_voisins = domaine_VDF.
face_voisins();
356 const IntTab& elem_faces = domaine_VDF.
elem_faces();
358 int num0, num1, num2, num3, num4, num5;
359 int f0, f1, f2, f3, f4, f5;
362 DoubleTrav temp1(in_vel);
363 DoubleTrav temp2(in_vel);
369 for (element_number = 0; element_number < nb_elem; element_number++)
371 f0 = elem_faces(element_number, 0);
372 num0 = face_voisins(f0, 0);
373 f2 = elem_faces(element_number, 2);
374 num2 = face_voisins(f2, 1);
375 if ((num0 == -1) || (num2 == -1))
378 temp1(element_number, i, j) = in_vel(element_number, i, j);
384 temp1(element_number, i, j) = 0.25 * (in_vel(num0, i, j) + 2.0 * in_vel(element_number, i, j) + in_vel(num2, i, j));
389 for (element_number = 0; element_number < nb_elem; element_number++)
391 f1 = elem_faces(element_number, 1);
392 num1 = face_voisins(f1, 0);
393 f3 = elem_faces(element_number, 3);
394 num3 = face_voisins(f3, 1);
395 if ((num1 == -1) || (num3 == -1))
398 in_vel(element_number, i, j) = temp1(element_number, i, j);
404 in_vel(element_number, i, j) = 0.25 * (temp1(num1, i, j) + 2.0 * temp1(element_number, i, j) + temp1(num3, i, j));
412 for (element_number = 0; element_number < nb_elem; element_number++)
414 f0 = elem_faces(element_number, 0);
415 num0 = face_voisins(f0, 0);
416 f3 = elem_faces(element_number, 3);
417 num3 = face_voisins(f3, 1);
418 if ((num0 == -1) || (num3 == -1))
421 temp1(element_number, i, j) = in_vel(element_number, i, j);
427 temp1(element_number, i, j) = 0.25 * (in_vel(num0, i, j) + 2.0 * in_vel(element_number, i, j) + in_vel(num3, i, j));
432 for (element_number = 0; element_number < nb_elem; element_number++)
434 f1 = elem_faces(element_number, 1);
435 num1 = face_voisins(f1, 0);
436 f4 = elem_faces(element_number, 4);
437 num4 = face_voisins(f4, 1);
438 if ((num1 == -1) || (num4 == -1))
441 temp2(element_number, i, j) = temp1(element_number, i, j);
447 temp2(element_number, i, j) = 0.25 * (temp1(num1, i, j) + 2.0 * temp1(element_number, i, j) + temp1(num4, i, j));
452 for (element_number = 0; element_number < nb_elem; element_number++)
454 f2 = elem_faces(element_number, 2);
455 num2 = face_voisins(f2, 0);
456 f5 = elem_faces(element_number, 5);
457 num5 = face_voisins(f5, 1);
458 if ((num2 == -1) || (num5 == -1))
461 in_vel(element_number, i, j) = temp2(element_number, i, j);
467 in_vel(element_number, i, j) = 0.25 * (temp2(num2, i, j) + 2.0 * temp2(element_number, i, j) + temp2(num5, i, j));
508 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Mij INPUT Sij_grid_scale", Sij_grid_scale);
509 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Mij INPUT Sij_test_scale", Sij_test_scale);
510 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Mij INPUT l", l);
514 DoubleTrav Sij_grid_scale_norme(nb_elem_tot);
515 DoubleTrav Sij_test_scale_norme(nb_elem_tot);
516 DoubleTrav S_norme_Sij_filt(Mij);
517 const double alpha = sqrt(6.0);
523 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
526 S_norme_Sij_filt(element_number, i, j) = Sij_grid_scale_norme(element_number) * Sij_grid_scale(element_number, i, j);
530 for (
int element_number = 0; element_number < nb_elem_tot; element_number++)
533 Mij(element_number, i, j) = 2 * l[element_number] * l[element_number]
534 * (S_norme_Sij_filt(element_number, i, j) - alpha * alpha * Sij_test_scale_norme(element_number) * Sij_test_scale(element_number, i, j));
535 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Mij OUTPUT Mij", Mij);
756 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Sij_vel_filt INPUT in_vel",in_vel);
758 const IntTab& face_voisins = domaine_VDF.
face_voisins();
759 const IntTab& elem_faces = domaine_VDF.
elem_faces();
762 int num0, num1, num2, num3, num4, num5;
763 int f0, f1, f2, f3, f4, f5;
767 for (element_number = 0; element_number < nb_elem; element_number++)
769 f0 = elem_faces(element_number, 0);
770 num0 = face_voisins(f0, 0);
772 num0 = element_number;
773 f1 = elem_faces(element_number, 1);
774 num1 = face_voisins(f1, 0);
776 num1 = element_number;
777 f2 = elem_faces(element_number, 2);
778 num2 = face_voisins(f2, 1);
780 num2 = element_number;
781 f3 = elem_faces(element_number, 3);
782 num3 = face_voisins(f3, 1);
784 num3 = element_number;
785 out_vel(element_number, 0, 0) = 0.5 * ((in_vel(num2, 0) - in_vel(num0, 0)) / domaine_VDF.
dim_elem(element_number, 0));
786 out_vel(element_number, 0, 1) = out_vel(element_number, 1, 0) = 0.25
787 * ((in_vel(num3, 0) - in_vel(num1, 0)) / domaine_VDF.
dim_elem(element_number, 1) + (in_vel(num2, 1) - in_vel(num0, 1)) / domaine_VDF.
dim_elem(element_number, 0));
788 out_vel(element_number, 1, 1) = 0.5 * ((in_vel(num3, 1) - in_vel(num1, 1)) / domaine_VDF.
dim_elem(element_number, 1));
793 for (element_number = 0; element_number < nb_elem; element_number++)
795 f0 = elem_faces(element_number, 0);
796 num0 = face_voisins(f0, 0);
798 num0 = element_number;
799 f1 = elem_faces(element_number, 1);
800 num1 = face_voisins(f1, 0);
802 num1 = element_number;
803 f2 = elem_faces(element_number, 2);
804 num2 = face_voisins(f2, 0);
806 num2 = element_number;
807 f3 = elem_faces(element_number, 3);
808 num3 = face_voisins(f3, 1);
810 num3 = element_number;
811 f4 = elem_faces(element_number, 4);
812 num4 = face_voisins(f4, 1);
814 num4 = element_number;
815 f5 = elem_faces(element_number, 5);
816 num5 = face_voisins(f5, 1);
818 num5 = element_number;
819 out_vel(element_number, 0, 0) = 0.5 * ((in_vel(num3, 0) - in_vel(num0, 0)) / domaine_VDF.
dim_elem(element_number, 0));
820 out_vel(element_number, 0, 1) = out_vel(element_number, 1, 0) = 0.25
821 * ((in_vel(num4, 0) - in_vel(num1, 0)) / domaine_VDF.
dim_elem(element_number, 1) + (in_vel(num3, 1) - in_vel(num0, 1)) / domaine_VDF.
dim_elem(element_number, 0));
822 out_vel(element_number, 0, 2) = out_vel(element_number, 2, 0) = 0.25
823 * ((in_vel(num5, 0) - in_vel(num2, 0)) / domaine_VDF.
dim_elem(element_number, 2) + (in_vel(num3, 2) - in_vel(num0, 2)) / domaine_VDF.
dim_elem(element_number, 0));
824 out_vel(element_number, 1, 1) = 0.5 * ((in_vel(num4, 1) - in_vel(num1, 1)) / domaine_VDF.
dim_elem(element_number, 1));
825 out_vel(element_number, 1, 2) = out_vel(element_number, 2, 1) = 0.25
826 * ((in_vel(num5, 1) - in_vel(num2, 1)) / domaine_VDF.
dim_elem(element_number, 2) + (in_vel(num4, 2) - in_vel(num1, 2)) / domaine_VDF.
dim_elem(element_number, 1));
827 out_vel(element_number, 2, 2) = 0.5 * ((in_vel(num5, 2) - in_vel(num2, 2)) / domaine_VDF.
dim_elem(element_number, 2));
831 Debog::verifier(
"Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calculer_Sij_vel_filt OUTPUT out_vel",out_vel);
852 DoubleVect& model_coeff = coeff_field_->valeurs();
854 const IntTab& face_voisins = domaine_VDF.
face_voisins();
857 const IntTab& elem_faces = domaine_VDF.
elem_faces();
859 int num0, num1, num2, num3, num4, num5;
860 int f0, f1, f2, f3, f4, f5;
862 DoubleTrav temp1(model_coeff);
863 DoubleTrav temp2(model_coeff);
865 for (element_number = 0; element_number < nb_elem_tot; element_number++)
867 if (std::fabs(bas(element_number)) < 1.e-12)
868 model_coeff[element_number] = 0.;
870 model_coeff[element_number] = haut[element_number] / bas[element_number];
875 for (element_number = 0; element_number < nb_elem; element_number++)
877 f0 = elem_faces(element_number, 0);
878 num0 = face_voisins(f0, 0);
879 f2 = elem_faces(element_number, 2);
880 num2 = face_voisins(f2, 1);
881 if ((num0 == -1) || (num2 == -1))
882 temp1(element_number) = 3.0 * model_coeff(element_number);
885 temp1(element_number) = model_coeff(num0) + model_coeff(element_number) + model_coeff(num2);
889 for (element_number = 0; element_number < nb_elem; element_number++)
891 f1 = elem_faces(element_number, 1);
892 num1 = face_voisins(f1, 0);
893 f3 = elem_faces(element_number, 3);
894 num3 = face_voisins(f3, 1);
895 if ((num1 == -1) || (num3 == -1))
896 model_coeff(element_number) = temp1(element_number) / 3.0;
899 model_coeff(element_number) = (temp1(num1) + temp1(element_number) + temp1(num3)) / 9.0;
905 for (element_number = 0; element_number < nb_elem; element_number++)
907 f0 = elem_faces(element_number, 0);
908 num0 = face_voisins(f0, 0);
909 f3 = elem_faces(element_number, 3);
910 num3 = face_voisins(f3, 1);
911 if ((num0 == -1) || (num3 == -1))
912 temp1(element_number) = 3.0 * model_coeff(element_number);
915 temp1(element_number) = model_coeff(num0) + model_coeff(element_number) + model_coeff(num3);
919 for (element_number = 0; element_number < nb_elem; element_number++)
921 f1 = elem_faces(element_number, 1);
922 num1 = face_voisins(f1, 0);
923 f4 = elem_faces(element_number, 4);
924 num4 = face_voisins(f4, 1);
925 if ((num1 == -1) || (num4 == -1))
926 temp2(element_number) = 3.0 * temp1(element_number);
929 temp2(element_number) = temp1(num1) + temp1(element_number) + temp1(num4);
933 for (element_number = 0; element_number < nb_elem; element_number++)
935 f2 = elem_faces(element_number, 2);
936 num2 = face_voisins(f2, 0);
937 f5 = elem_faces(element_number, 5);
938 num5 = face_voisins(f5, 1);
939 if ((num2 == -1) || (num5 == -1))
940 model_coeff(element_number) = temp2(element_number) / 9.0;
943 model_coeff(element_number) = (temp2(num2) + temp2(element_number) + temp2(num5)) / 27.0;
1077 double dt = mon_equation_->schema_temps().pas_de_temps();
1081 if (
elem_elem_(element_number, 1, 1, 1) == -1)
1083 for (j = 0; j < 8; j++)
1085 num[j] = element_number;
1091 for (i = 0; i < 3; i++)
1098 num[0] =
elem_elem_(element_number, 1, 1, 1);
1099 num[1] =
elem_elem_(element_number, 1, 1, indice(2));
1100 num[2] =
elem_elem_(element_number, 1, indice(1), 1);
1101 num[3] =
elem_elem_(element_number, 1, indice(1), indice(2));
1102 num[4] =
elem_elem_(element_number, indice(0), 1, 1);
1103 num[5] =
elem_elem_(element_number, indice(0), 1, indice(2));
1104 num[6] =
elem_elem_(element_number, indice(0), indice(1), 1);
1105 num[7] =
elem_elem_(element_number, indice(0), indice(1), indice(2));
1108 const DoubleTab& xp = domaine_VDF.
xp();
1110 for (i = 0; i < 3; i++)
1111 x(i) = xp(element_number, i) -
cell_cent_vel_(element_number, i) * dt;
1113 for (j = 0; j < 8; j++)
1115 for (i = 0; i < 3; i++)
1119 Cerr <<
"Problem with the algorithm Modele_turbulence_hyd_LES_SMAGO_DYN_VDF::calcul_voisins" << finl;
1122 dist(j) += (xp(num[j], i) - x(i)) * (xp(num[j], i) - x(i));
1124 dist(j) = sqrt(dist(j));
1129 d = (xp(num[0], 0) - xp(num[4], 0)) * (xp(num[0], 0) - xp(num[4], 0));
1130 d += (xp(num[0], 1) - xp(num[2], 1)) * (xp(num[0], 1) - xp(num[2], 1));
1131 d += (xp(num[0], 2) - xp(num[1], 2)) * (xp(num[0], 2) - xp(num[1], 2));
1133 for (j = 0; j < 8; j++)
1134 if (dist(j) * dist(j) < d / 10000)
1137 for (j = 0; j < 8; j++)
1139 num[j] = element_number;
1160 const IntTab& face_voisins = domaine_VDF.
face_voisins();
1161 const IntTab& elem_faces = domaine_VDF.
elem_faces();
1163 int element_number, f, elem;
1169 for (element_number = 0; element_number < nb_elem_tot; element_number++)
1171 elem_elem_(element_number, 1, 1, 1) = element_number;
1172 f = elem_faces(element_number, 0);
1173 elem_elem_(element_number, 0, 1, 1) = face_voisins(f, 0);
1177 f = elem_faces(elem, 1);
1178 elem_elem_(element_number, 0, 0, 1) = face_voisins(f, 0);
1179 f = elem_faces(elem, 2);
1180 elem_elem_(element_number, 0, 1, 0) = face_voisins(f, 0);
1181 f = elem_faces(elem, 4);
1182 elem_elem_(element_number, 0, 2, 1) = face_voisins(f, 1);
1183 f = elem_faces(elem, 5);
1184 elem_elem_(element_number, 0, 1, 2) = face_voisins(f, 1);
1186 f = elem_faces(element_number, 3);
1187 elem_elem_(element_number, 2, 1, 1) = face_voisins(f, 1);
1191 f = elem_faces(elem, 1);
1192 elem_elem_(element_number, 2, 0, 1) = face_voisins(f, 0);
1193 f = elem_faces(elem, 2);
1194 elem_elem_(element_number, 2, 1, 0) = face_voisins(f, 0);
1195 f = elem_faces(elem, 4);
1196 elem_elem_(element_number, 2, 2, 1) = face_voisins(f, 1);
1197 f = elem_faces(elem, 5);
1198 elem_elem_(element_number, 2, 1, 2) = face_voisins(f, 1);
1200 f = elem_faces(element_number, 1);
1201 elem_elem_(element_number, 1, 0, 1) = face_voisins(f, 1);
1205 f = elem_faces(elem, 2);
1206 elem_elem_(element_number, 1, 0, 0) = face_voisins(f, 0);
1207 f = elem_faces(elem, 5);
1208 elem_elem_(element_number, 1, 0, 2) = face_voisins(f, 1);
1210 f = elem_faces(element_number, 4);
1211 elem_elem_(element_number, 1, 2, 1) = face_voisins(f, 1);
1215 f = elem_faces(elem, 2);
1216 elem_elem_(element_number, 1, 2, 0) = face_voisins(f, 0);
1217 f = elem_faces(elem, 5);
1219 elem_elem_(element_number, 1, 2, 2) = face_voisins(f, 1);
1221 f = elem_faces(element_number, 2);
1222 elem_elem_(element_number, 1, 1, 0) = face_voisins(f, 0);
1223 f = elem_faces(element_number, 5);
1224 elem_elem_(element_number, 1, 1, 2) = face_voisins(f, 1);
1228 f = elem_faces(elem, 0);
1229 elem_elem_(element_number, 0, 2, 2) = face_voisins(f, 0);
1230 f = elem_faces(elem, 3);
1231 elem_elem_(element_number, 2, 2, 2) = face_voisins(f, 1);
1236 f = elem_faces(elem, 0);
1237 elem_elem_(element_number, 0, 2, 0) = face_voisins(f, 0);
1238 f = elem_faces(elem, 3);
1239 elem_elem_(element_number, 2, 2, 0) = face_voisins(f, 1);
1244 f = elem_faces(elem, 0);
1245 elem_elem_(element_number, 0, 0, 2) = face_voisins(f, 0);
1246 f = elem_faces(elem, 3);
1247 elem_elem_(element_number, 2, 0, 2) = face_voisins(f, 1);
1252 f = elem_faces(elem, 0);
1253 elem_elem_(element_number, 0, 0, 0) = face_voisins(f, 0);
1254 f = elem_faces(elem, 3);
1255 elem_elem_(element_number, 2, 0, 0) = face_voisins(f, 1);
1269 for (
int i = 0; i < 3; i++)
1270 for (
int j = 0; j < 3; j++)
1271 for (
int k = 0; k < 3; k++)
1272 if (
elem_elem_(element_number, i, j, k) == -1)
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.