588 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
590 const int nb_faces = domaine_VEF.
nb_faces();
591 const DoubleTab& coord_centre = domaine_VEF.
xv();
592 const double epsilon = 1.e-8;
598 Cerr <<
"Preparation pour le calcul en FFT." << finl;
599 Cerr <<
" (table de correspondance : coordonnees de centre de la face / index de face). " ;
605 int nb_coord_domaine_max = 0;
611 for (
int num_face=0; num_face<nb_faces; num_face++)
613 double coord = coord_centre(num_face,dim);
614 int trouve_coord = 0;
616 for (
int jj=0; jj<nb_coord_domaine(dim); jj++)
618 if (std::fabs(coord - coord_domaine(jj,dim)) < epsilon)
628 int jj=nb_coord_domaine(dim)-1;
630 while ( (jj > -1) && (coord_domaine(jj,dim) > coord) )
633 coord_domaine(jj+1,dim) = coord_domaine(jj,dim);
638 coord_domaine(jj+1,dim) = coord;
639 nb_coord_domaine(dim)++;
645 if ( nb_coord_domaine(dim) > nb_coord_domaine_max )
647 nb_coord_domaine_max = nb_coord_domaine(dim) ;
656 tab_domaine.
resize(nb_coord_domaine(0),nb_coord_domaine(1),nb_coord_domaine(2));
659 for (
int num_face=0; num_face<nb_faces; num_face++)
664 for (
int ii=0; ii<nb_coord_domaine(dim); ii++)
666 if ( std::fabs(coord_centre(num_face,dim) - coord_domaine(ii,dim)) < epsilon )
674 tab_domaine(index(0),index(1),index(2)) = num_face;
679 Cerr <<
"OK." << finl;
681 Cerr <<
"Remplissage de la table pour le calcul en FFT, spectres 3D." << finl;
682 Cerr <<
" (faces ordonnees en grilles cartesiennes, selon les coordonnees de leur centre). " ;
690 double ecart_min = 100;
694 for (
int ii=0; ii<nb_coord_domaine(dim)-1; ii++)
696 double ecart = coord_domaine(ii+1,dim) - coord_domaine(ii,dim);
697 if ( ecart < ecart_min_dir(dim) )
699 ecart_min_dir(dim) = ecart ;
702 if ( ecart_min_dir(dim) < ecart_min )
704 ecart_min = ecart_min_dir(dim) ;
708 IntVect ecart_min_dir_int(3);
712 ecart_min_dir_int(dim) = (int)( ecart_min_dir(dim) / ecart_min + 0.5 );
715 int ecart_base_int =
ppcm(ecart_min_dir_int(0),
716 ppcm(ecart_min_dir_int(1),
717 ecart_min_dir_int(2)));
720 double pas_base = ecart_base_int * ecart_min;
721 double pas = pas_base;
725 IntVect hexa(nb_faces);
731 while ( !fini && ( pas < L_BOITE/2. ) )
734 int nb_dans_hexa = 0;
735 for (
int num_face=0; num_face<nb_faces; num_face++)
740 if ( coord_centre(num_face,dim) + epsilon < pas )
747 hexa(nb_dans_hexa) = num_face;
752 nb_points = (int)(L_BOITE/pas + 0.5);
754 tab_calc_fft_3D.resize(nb_dans_hexa, nb_points+1,nb_points+1,nb_points+1);
755 tab_calc_fft_3D = -1;
757 IntTab coord_domaine_ok(nb_coord_domaine_max,
dimension);
760 for (
int num_face=0; num_face<nb_dans_hexa; num_face++)
764 coord_domaine_ok = 0;
768 for (
int ii=0; ii<nb_coord_domaine(dim)-1; ii++)
770 double ratio_double =
771 ( coord_domaine(ii,dim)-coord_centre(hexa(num_face),dim) ) / pas;
772 int ratio_int = (int)(ratio_double + 0.5);
773 if ( std::fabs(ratio_double - ratio_int) < epsilon )
775 coord_domaine_ok(ii,dim) = 1;
787 for (
int ii=0; ii<nb_coord_domaine(0)-1; ii++)
791 for (
int jj=0; jj<nb_coord_domaine(1)-1; jj++)
795 for (
int kk=0; kk<nb_coord_domaine(2)-1; kk++)
799 if ( coord_domaine_ok(ii,0) == 1
800 && coord_domaine_ok(jj,1) == 1
801 && coord_domaine_ok(kk,2) == 1 )
804 if ( tab_domaine(ii,jj,kk) != -1 )
807 tab_calc_fft_3D(num_spectre,ix,iy,iz) = tab_domaine(ii,jj,kk);
819 if ( !valide ) break ;
820 if ( rempli(2) ) iz++;
824 if ( !valide ) break ;
825 if ( rempli(1) ) iy++;
829 if ( !valide ) break ;
830 if ( rempli(0) ) ix++;
837 assert( ix == nb_points );
841 for (
int jj=0; jj<nb_points; jj++)
842 for (
int kk=0; kk<nb_points; kk++)
844 tab_calc_fft_3D(num_spectre, nb_points, jj, kk) =
845 tab_calc_fft_3D(num_spectre, 0 , jj, kk);
848 for (
int ii=0; ii<nb_points+1; ii++)
849 for (
int kk=0; kk<nb_points; kk++)
851 tab_calc_fft_3D(num_spectre, ii, nb_points, kk) =
852 tab_calc_fft_3D(num_spectre, ii, 0 , kk);
855 for (
int ii=0; ii<nb_points+1; ii++)
856 for (
int jj=0; jj<nb_points+1; jj++)
858 tab_calc_fft_3D(num_spectre, ii, jj, nb_points) =
859 tab_calc_fft_3D(num_spectre, ii, jj, 0 );
870 nb_spectres = num_spectre;
883 Cerr << finl <<
"Erreur dans Traitement_particulier_NS_THI_VEF::determine_tab_fft_VEF_3D" << finl;
884 Cerr <<
"La fonction n'est pas capable de trouver une ou des grilles cartesiennes 3D" << finl;
885 Cerr <<
"pour le calcul de spectres en FFT." << finl;
898 Cerr <<
"OK." << finl;
900 Cerr << nb_spectres <<
" grilles de " << nb_points <<
" points par cote seront utilisees pour calculer les spectres 3D." << finl << finl;
920 Cerr <<
"Remplissage de la table pour le calcul en FFT, spectres 1D." << finl;
921 Cerr <<
" (faces ordonnees en lignes droites, selon les coordonnees de leur centre). " ;
925 IntVect nb_coord_domaine_tri(nb_coord_domaine) ;
929 for (
int jj=1; jj<ii; jj++)
931 if ( nb_coord_domaine_tri(jj-1) > nb_coord_domaine_tri(jj) )
933 int temp = nb_coord_domaine_tri(jj-1);
934 nb_coord_domaine_tri(jj-1) = nb_coord_domaine_tri(jj);
935 nb_coord_domaine_tri(jj) = temp;
941 int nb_coord_domaine_max = nb_coord_domaine_tri(2) ;
942 int nb_spectres_max = nb_coord_domaine_tri(2) * nb_coord_domaine_tri(1) ;
945 tab_calc_fft_1D.resize(
dimension, nb_spectres_max, nb_coord_domaine_max) ;
946 tab_calc_fft_1D = -1 ;
948 tab_coord_1D.resize(
dimension, nb_spectres_max, nb_coord_domaine_max) ;
958 for (
int jj=0; jj<nb_coord_domaine(1)-1; jj++)
959 for (
int kk=0; kk<nb_coord_domaine(2)-1; kk++)
962 for (
int ii=0; ii<nb_coord_domaine(0)-1; ii++)
964 int num_face = tab_domaine(ii, jj, kk);
965 if ( num_face != -1 )
967 tab_calc_fft_1D(0, num_spectre(0), ix) = num_face;
968 tab_coord_1D (0, num_spectre(0), ix) = coord_domaine(ii, 0);
972 if ( ix == nb_points(0) )
976 else if ( ix > nb_points(0) )
980 for (
int index=0; index<ix; index++)
982 tab_calc_fft_1D(0, 0 , index) =
983 tab_calc_fft_1D(0, num_spectre(0), index) ;
984 tab_coord_1D (0, 0 , index) =
985 tab_coord_1D (0, num_spectre(0), index) ;
989 nb_spectres(0) = num_spectre(0);
993 for (
int ii=0; ii<nb_coord_domaine(0)-1; ii++)
994 for (
int kk=0; kk<nb_coord_domaine(2)-1; kk++)
997 for (
int jj=0; jj<nb_coord_domaine(1)-1; jj++)
999 int num_face = tab_domaine(ii, jj, kk);
1000 if ( num_face != -1 )
1002 tab_calc_fft_1D(1, num_spectre(1), iy) = num_face;
1003 tab_coord_1D (1, num_spectre(1), iy) = coord_domaine(jj, 1);
1007 if ( iy == nb_points(1) )
1011 else if ( iy > nb_points(1) )
1015 for (
int index=0; index<iy; index++)
1017 tab_calc_fft_1D(1, 0 , index) =
1018 tab_calc_fft_1D(1, num_spectre(1), index) ;
1019 tab_coord_1D (1, 0 , index) =
1020 tab_coord_1D (1, num_spectre(1), index) ;
1022 num_spectre(1) = 1 ;
1024 nb_spectres(1) = num_spectre(1);
1028 for (
int jj=0; jj<nb_coord_domaine(1)-1; jj++)
1029 for (
int ii=0; ii<nb_coord_domaine(0)-1; ii++)
1032 for (
int kk=0; kk<nb_coord_domaine(2)-1; kk++)
1034 int num_face = tab_domaine(ii, jj, kk);
1035 if ( num_face != -1 )
1037 tab_calc_fft_1D(2, num_spectre(2), iz) = num_face;
1038 tab_coord_1D (2, num_spectre(2), iz) = coord_domaine(kk, 2);
1042 if ( iz == nb_points(2) )
1046 else if ( iz > nb_points(2) )
1050 for (
int index=0; index<iz; index++)
1052 tab_calc_fft_1D(2, 0 , index) =
1053 tab_calc_fft_1D(2, num_spectre(2), index) ;
1054 tab_coord_1D (2, 0 , index) =
1055 tab_coord_1D (2, num_spectre(2), index) ;
1057 num_spectre(2) = 1 ;
1059 nb_spectres(2) = num_spectre(2);
1064 Cerr <<
"OK." << finl;
1066 Cerr <<
"Seront utilisees pour calculer les spectres 1D :" << finl;
1067 Cerr <<
"selon x, " << nb_spectres(0) <<
" lignes de " << nb_points(0) <<
" points," << finl;
1068 Cerr <<
"selon y, " << nb_spectres(1) <<
" lignes de " << nb_points(1) <<
" points," << finl;
1069 Cerr <<
"selon z, " << nb_spectres(2) <<
" lignes de " << nb_points(2) <<
" points." << finl << finl;
1127 double temps = mon_equation->inconnue().temps();
1128 temps /= temps_retournement;
1132 DoubleVect Ec(nb_points_3D);
1133 DoubleVect Ec_min(nb_points_3D);
1134 DoubleVect Ec_max(nb_points_3D);
1135 DoubleVect Ec_moy(nb_points_3D);
1138 Nom fichier =
Nom(
"spectre_3D_") + ext +
Nom(
"_") +
Nom(temps);
1139 Nom fichier_k =
Nom(
"spectre_k_3D_") + ext +
Nom(
"_") +
Nom(temps);
1141 for (
int num_spectre=0; num_spectre<nb_spectres_3D; num_spectre++)
1145 DoubleTab vit_u(nb_points_3D+1,nb_points_3D+1,nb_points_3D+1),
1146 vit_v(nb_points_3D+1,nb_points_3D+1,nb_points_3D+1),
1147 vit_w(nb_points_3D+1,nb_points_3D+1,nb_points_3D+1);
1152 calc_sp_operateur(vit_u, vit_v, vit_w, nb_points_3D, temps, 0,0, Ec);
1154 for (
int ii=0; ii<nb_points_3D; ii++)
1156 if ( Ec(ii) < Ec_min(ii) )
1158 Ec_min(ii) = Ec(ii);
1160 if ( Ec(ii) > Ec_max(ii) )
1162 Ec_max(ii) = Ec(ii);
1164 Ec_moy(ii) += Ec(ii)/nb_spectres_3D;
1168 int kc = nb_points_3D/2 ;
1172 SFichier fic_spectre_k (fichier_k);
1173 for (
int ii=1; ii<kc; ii++)
1175 fic_spectre << ii <<
" " << Ec_moy(ii-1) <<
" " << Ec_max(ii-1) <<
" " << Ec_min(ii-1) << finl;
1176 fic_spectre_k << ii <<
" " << Ec_moy(ii-1) * pow(ii,5./3.) <<
" " << Ec_max(ii-1) * pow(ii,5./3.) <<
" " << Ec_min(ii-1) * pow(ii,5./3.) << finl;
1180 fic_spectre << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1181 fic_spectre << kc <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1182 fic_spectre_k << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1183 fic_spectre_k << kc <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1185 for (
int ii=kc; ii<nb_points_3D+1; ii++)
1187 fic_spectre << ii <<
" " << Ec_moy(ii-1) <<
" " << Ec_max(ii-1) <<
" " << Ec_min(ii-1) << finl;
1188 fic_spectre_k << ii <<
" " << Ec_moy(ii-1) * pow(ii,5./3.) <<
" " << Ec_max(ii-1) * pow(ii,5./3.) <<
" " << Ec_min(ii-1) * pow(ii,5./3.) << finl;
1192 calc_Ec(Ec_moy, kc, Ec_spectre);
1195 DoubleVect Df(nb_points_3D);
1196 for (
int ii=0; ii<nb_points_3D; ii++)
1198 Df(ii) = (ii+1)*(ii+1)*Ec_moy(ii);
1201 calc_Ec(Df, kc, Df_spectre);
1204 Nom fichier_Ec_spectral =
Nom(
"Sorties_Ec_") + ext +
Nom(
"_spectral_3D") ;
1205 SFichier fic_Ec_spectral (fichier_Ec_spectral, ios::app);
1206 fic_Ec_spectral << temps <<
" " << Ec_spectre << finl;
1209 Nom fichier_Df_spectral =
Nom(
"Sorties_Df_") + ext +
Nom(
"_spectral_3D") ;
1210 SFichier fic_Df_spectral (fichier_Df_spectral, ios::app);
1211 fic_Df_spectral << temps <<
" " << Df_spectre << finl;
1226 double temps = mon_equation->inconnue().temps();
1227 temps /= temps_retournement;
1229 Nom fichier_spectre =
Nom(
"spectre_1D_") + ext +
Nom(
"_") +
Nom(temps) +
Nom(
"_");
1230 Nom fichier_k_spectre =
Nom(
"spectre_k_1D_") + ext +
Nom(
"_") +
Nom(temps) +
Nom(
"_");
1233 double Df_spectre = 0;
1249 direction =
Nom(
"x");
1254 direction =
Nom(
"y");
1259 direction =
Nom(
"z");
1264 Nom fichier_spectre_direction = fichier_spectre + direction +
Nom(
"_");
1265 Nom fichier_k_spectre_direction = fichier_k_spectre + direction +
Nom(
"_");
1272 DoubleTab Ec_comp_min(nb_points_1D(dir),
dimension);
1273 DoubleTab Ec_comp_max(nb_points_1D(dir),
dimension);
1274 DoubleTab Ec_comp_moy(nb_points_1D(dir),
dimension);
1276 Ec_comp_min = 1.e+20;
1279 int n = nb_points_1D(dir);
1280 DoubleVect trig(2*n);
1287 DoubleVect work(2*n*lot);
1292 int kc = nb_points_1D(dir)/2 ;
1294 for (
int num_spectre=0; num_spectre<nb_spectres_1D(dir); num_spectre++)
1298 DoubleVect vect_u(nb_points_1D(dir)+2),
1299 vect_v(nb_points_1D(dir)+2),
1300 vect_w(nb_points_1D(dir)+2);
1309 rfftmlt(vect_u.addr(),work.
addr(),trig.
addr(),ifax.
addr(),inc,jump,n,lot,isign);
1312 for (
int ii=0; ii<kc; ii++)
1314 double Ec_temp = vect_u(2*ii)*vect_u(2*ii)+vect_u(2*ii+1)*vect_u(2*ii+1);
1318 if ( Ec_temp < Ec_comp_min(ii,0) )
1320 Ec_comp_min(ii,0) = Ec_temp;
1322 if ( Ec_temp > Ec_comp_max(ii,0) )
1324 Ec_comp_max(ii,0) = Ec_temp;
1326 Ec_comp_moy(ii,0) += Ec_temp/nb_spectres_1D(dir);
1330 rfftmlt(vect_v.addr(),work.
addr(),trig.
addr(),ifax.
addr(),inc,jump,n,lot,isign);
1332 for (
int ii=0; ii<kc; ii++)
1334 double Ec_temp = vect_v(2*ii)*vect_v(2*ii)+vect_v(2*ii+1)*vect_v(2*ii+1);
1338 if ( Ec_temp < Ec_comp_min(ii,1) )
1340 Ec_comp_min(ii,1) = Ec_temp;
1342 if ( Ec_temp > Ec_comp_max(ii,1) )
1344 Ec_comp_max(ii,1) = Ec_temp;
1346 Ec_comp_moy(ii,1) += Ec_temp/nb_spectres_1D(dir);
1350 rfftmlt(vect_w.
addr(),work.
addr(),trig.
addr(),ifax.
addr(),inc,jump,n,lot,isign);
1352 for (
int ii=0; ii<kc; ii++)
1354 double Ec_temp = vect_w(2*ii)*vect_w(2*ii)+vect_w(2*ii+1)*vect_w(2*ii+1);
1358 if ( Ec_temp < Ec_comp_min(ii,2) )
1360 Ec_comp_min(ii,2) = Ec_temp;
1362 if ( Ec_temp > Ec_comp_max(ii,2) )
1364 Ec_comp_max(ii,2) = Ec_temp;
1366 Ec_comp_moy(ii,2) += Ec_temp/nb_spectres_1D(dir);
1374 SFichier fic_spectre_u (fichier_spectre_direction +
Nom(
"u") );
1375 SFichier fic_spectre_k_u (fichier_k_spectre_direction +
Nom(
"u") );
1376 SFichier fic_spectre_v (fichier_spectre_direction +
Nom(
"v") );
1377 SFichier fic_spectre_k_v (fichier_k_spectre_direction +
Nom(
"v") );
1378 SFichier fic_spectre_w (fichier_spectre_direction +
Nom(
"w") );
1379 SFichier fic_spectre_k_w (fichier_k_spectre_direction +
Nom(
"w") );
1380 SFichier fic_spectre_e (fichier_spectre_direction +
Nom(
"e") );
1381 SFichier fic_spectre_k_e (fichier_k_spectre_direction +
Nom(
"e") );
1383 DoubleVect Ec_comp_moy_e(nb_points_1D(dir));
1385 for (
int ii=1; ii<kc; ii++)
1387 Ec_comp_moy_e(ii) = Ec_comp_moy(ii,0) + Ec_comp_moy(ii,1) + Ec_comp_moy(ii,2);
1389 fic_spectre_u << ii <<
" " << Ec_comp_moy(ii,0) <<
" " << Ec_comp_max(ii,0) <<
" " << Ec_comp_min(ii,0) << finl;
1390 fic_spectre_k_u << ii <<
" " << Ec_comp_moy(ii,0) * pow(ii,5./3.) <<
" " << Ec_comp_max(ii,0) * pow(ii,5./3.) <<
" " << Ec_comp_min(ii,0) * pow(ii,5./3.) << finl;
1391 fic_spectre_v << ii <<
" " << Ec_comp_moy(ii,1) <<
" " << Ec_comp_max(ii,1) <<
" " << Ec_comp_min(ii,1) << finl;
1392 fic_spectre_k_v << ii <<
" " << Ec_comp_moy(ii,1) * pow(ii,5./3.) <<
" " << Ec_comp_max(ii,1) * pow(ii,5./3.) <<
" " << Ec_comp_min(ii,1) * pow(ii,5./3.) << finl;
1393 fic_spectre_w << ii <<
" " << Ec_comp_moy(ii,2) <<
" " << Ec_comp_max(ii,2) <<
" " << Ec_comp_min(ii,2) << finl;
1394 fic_spectre_k_w << ii <<
" " << Ec_comp_moy(ii,2) * pow(ii,5./3.) <<
" " << Ec_comp_max(ii,2) * pow(ii,5./3.) <<
" " << Ec_comp_min(ii,2) * pow(ii,5./3.) << finl;
1395 fic_spectre_e << ii <<
" " << Ec_comp_moy_e(ii) << finl;
1396 fic_spectre_k_e << ii <<
" " << Ec_comp_moy_e(ii) * pow(ii,5./3.) << finl;
1400 fic_spectre_u << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1401 fic_spectre_k_u << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1402 fic_spectre_v << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1403 fic_spectre_k_v << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1404 fic_spectre_w << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1405 fic_spectre_k_w << kc-1 <<
" " << (int)0 <<
" " << (
int)0 <<
" " << (int)0 << finl;
1409 DoubleVect Ec_comp_moy_u(nb_points_1D(dir));
1410 DoubleVect Ec_comp_moy_v(nb_points_1D(dir));
1411 DoubleVect Ec_comp_moy_w(nb_points_1D(dir));
1412 DoubleVect Df_comp_moy_u(nb_points_1D(dir));
1413 DoubleVect Df_comp_moy_v(nb_points_1D(dir));
1414 DoubleVect Df_comp_moy_w(nb_points_1D(dir));
1415 for (
int ii=0; ii<kc; ii++)
1417 Ec_comp_moy_u(ii) = Ec_comp_moy(ii+1,0);
1418 Ec_comp_moy_v(ii) = Ec_comp_moy(ii+1,1);
1419 Ec_comp_moy_w(ii) = Ec_comp_moy(ii+1,2);
1420 Df_comp_moy_u(ii) = (ii+1)*(ii+1)*Ec_comp_moy(ii+1,0);
1421 Df_comp_moy_v(ii) = (ii+1)*(ii+1)*Ec_comp_moy(ii+1,1);
1422 Df_comp_moy_w(ii) = (ii+1)*(ii+1)*Ec_comp_moy(ii+1,2);
1424 double Ec_spectre_u, Ec_spectre_v, Ec_spectre_w, Df_spectre_u, Df_spectre_v, Df_spectre_w;
1425 calc_Ec(Ec_comp_moy_u, kc, Ec_spectre_u);
1426 calc_Ec(Ec_comp_moy_v, kc, Ec_spectre_v);
1427 calc_Ec(Ec_comp_moy_w, kc, Ec_spectre_w);
1428 calc_Ec(Df_comp_moy_u, kc, Df_spectre_u);
1429 calc_Ec(Df_comp_moy_v, kc, Df_spectre_v);
1430 calc_Ec(Df_comp_moy_w, kc, Df_spectre_w);
1431 double Ec_spectre_e = Ec_spectre_u + Ec_spectre_v + Ec_spectre_w;
1432 double Df_spectre_e = Df_spectre_u + Df_spectre_v + Df_spectre_w;
1435 Nom fichier_Ec_spectral_direction =
Nom(
"Sorties_Ec_") + ext +
Nom(
"_spectral_1D_") + direction ;
1436 SFichier fic_Ec_spectral_u (fichier_Ec_spectral_direction +
Nom(
"_u"), ios::app );
1437 SFichier fic_Ec_spectral_v (fichier_Ec_spectral_direction +
Nom(
"_v"), ios::app );
1438 SFichier fic_Ec_spectral_w (fichier_Ec_spectral_direction +
Nom(
"_w"), ios::app );
1439 SFichier fic_Ec_spectral_e (fichier_Ec_spectral_direction +
Nom(
"_e"), ios::app );
1440 fic_Ec_spectral_u << temps <<
" " << Ec_spectre_u << finl;
1441 fic_Ec_spectral_v << temps <<
" " << Ec_spectre_v << finl;
1442 fic_Ec_spectral_w << temps <<
" " << Ec_spectre_w << finl;
1443 fic_Ec_spectral_e << temps <<
" " << Ec_spectre_e << finl;
1446 Nom fichier_Df_spectral_direction =
Nom(
"Sorties_Df_") + ext +
Nom(
"_spectral_1D_") + direction ;
1447 SFichier fic_Df_spectral_u (fichier_Df_spectral_direction +
Nom(
"_u"), ios::app );
1448 SFichier fic_Df_spectral_v (fichier_Df_spectral_direction +
Nom(
"_v"), ios::app );
1449 SFichier fic_Df_spectral_w (fichier_Df_spectral_direction +
Nom(
"_w"), ios::app );
1450 SFichier fic_Df_spectral_e (fichier_Df_spectral_direction +
Nom(
"_e"), ios::app );
1451 fic_Df_spectral_u << temps <<
" " << Df_spectre_u << finl;
1452 fic_Df_spectral_v << temps <<
" " << Df_spectre_v << finl;
1453 fic_Df_spectral_w << temps <<
" " << Df_spectre_w << finl;
1454 fic_Df_spectral_e << temps <<
" " << Df_spectre_e << finl;
1457 Ec_spectre += Ec_spectre_e ;
1458 Df_spectre += Df_spectre_e ;
1465 Nom fichier_Ec_spectral =
Nom(
"Sorties_Ec_") + ext +
Nom(
"_spectral_1D") ;
1466 SFichier fic_Ec_spectral (fichier_Ec_spectral, ios::app );
1467 fic_Ec_spectral << temps <<
" " << Ec_spectre << finl;
1469 Nom fichier_Df_spectral =
Nom(
"Sorties_Df_") + ext +
Nom(
"_spectral_1D") ;
1470 SFichier fic_Df_spectral (fichier_Df_spectral, ios::app );
1471 fic_Df_spectral << temps <<
" " << Df_spectre << finl;
1519 Nom fichier =
"isotropie_";
1522 DoubleTab isotrop(6), isotrop_moy(6), isotrop_max(6), isotrop_min(6);
1525 isotrop_min = 1e+20 ;
1527 for (
int num_spectre=0; num_spectre<nb_spectres_3D; num_spectre++)
1534 for(
int ii=0; ii<nb_points_3D; ii++)
1535 for(
int jj=0; jj<nb_points_3D; jj++)
1536 for(
int kk=0; kk<nb_points_3D; kk++)
1538 int num_face = tab_calc_fft_3D(num_spectre,ii,jj,kk);
1539 double u = vitesse(num_face,0) - moyenne_vitesse(0);
1540 double v = vitesse(num_face,1) - moyenne_vitesse(1);
1541 double w = vitesse(num_face,2) - moyenne_vitesse(2);
1543 isotrop(0) += u * u ;
1544 isotrop(1) += v * v ;
1545 isotrop(2) += w * w ;
1546 isotrop(3) += u * v ;
1547 isotrop(4) += u * w ;
1548 isotrop(5) += v * w ;
1550 int nb_points = nb_points_3D * nb_points_3D * nb_points_3D ;
1551 isotrop /= nb_points;
1553 for (
int ii=0; ii<6; ii++)
1555 if ( isotrop(ii) < isotrop_min(ii) )
1557 isotrop_min(ii) = isotrop(ii);
1559 if ( isotrop(ii) > isotrop_max(ii) )
1561 isotrop_max(ii) = isotrop(ii);
1563 isotrop_moy(ii) += isotrop(ii)/nb_spectres_3D;
1571 double temps = mon_equation->inconnue().temps();
1572 temps /= temps_retournement;
1573 Nom fichier_uu = fichier +
Nom(
"_uu");
1574 SFichier fic_uu (fichier_uu, ios::app);
1575 fic_uu << temps <<
" " << isotrop_moy(0) <<
" " << isotrop_max(0) <<
" " << isotrop_min(0) << finl ;
1577 Nom fichier_vv = fichier +
Nom(
"_vv");
1578 SFichier fic_vv (fichier_vv, ios::app);
1579 fic_vv << temps <<
" " << isotrop_moy(1) <<
" " << isotrop_max(1) <<
" " << isotrop_min(1) << finl ;
1581 Nom fichier_ww = fichier +
Nom(
"_ww");
1582 SFichier fic_ww (fichier_ww, ios::app);
1583 fic_ww << temps <<
" " << isotrop_moy(2) <<
" " << isotrop_max(2) <<
" " << isotrop_min(2) << finl ;
1585 Nom fichier_uv = fichier +
Nom(
"_uv");
1586 SFichier fic_uv (fichier_uv, ios::app);
1587 fic_uv << temps <<
" " << isotrop_moy(3) <<
" " << isotrop_max(3) <<
" " << isotrop_min(3) << finl ;
1589 Nom fichier_uw = fichier +
Nom(
"_uw");
1590 SFichier fic_uw (fichier_uw, ios::app);
1591 fic_uw << temps <<
" " << isotrop_moy(4) <<
" " << isotrop_max(4) <<
" " << isotrop_min(4) << finl ;
1593 Nom fichier_vw = fichier +
Nom(
"_vw");
1594 SFichier fic_vw (fichier_vw, ios::app);
1595 fic_vw << temps <<
" " << isotrop_moy(5) <<
" " << isotrop_max(5) <<
" " << isotrop_min(5) << finl ;
1602 Cerr <<
"Traitement_particulier_NS_THI_VEF::isotropie n'est pas parallelise" << finl;
1612 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
1615 const int nb_faces = domaine_VEF.
nb_faces();
1618 int nb_cl=les_cl.size();
1621 double Ec_min = 1e+20;
1624 DoubleVect ec_face_vect;
1628 for (
int num_cl=0; num_cl<nb_cl; num_cl++)
1632 int nb_faces_bord=le_bord.
nb_faces();
1634 int num2 = num1 + nb_faces_bord;
1639 IntVect fait(nb_faces_bord);
1641 for (
int num_face=num1; num_face<num2; num_face++)
1644 if (fait(num_face-num1) == 0)
1646 ec_face_vect(num_face)=0;
1647 for (
int dim=0; dim<nb_comp; dim++)
1649 ec_face_vect(num_face) += vitesse(num_face,dim) * vitesse(num_face,dim);
1653 fait(num_face-num1) = 1;
1654 fait(face_associee) = 1;
1663 for (
int num_face=num1; num_face<num2; num_face++)
1665 for (
int dim=0; dim<nb_comp; dim++)
1667 ec_face_vect(num_face) += vitesse(num_face,dim) * vitesse(num_face,dim);
1675 for (
int num_face=domaine_VEF.
premiere_face_int(); num_face<nb_faces; num_face++)
1677 for (
int dim=0; dim<nb_comp; dim++)
1679 ec_face_vect(num_face) += vitesse(num_face,dim) * vitesse(num_face,dim);
1688 for (
int i=0; i<nb_faces; i++)
1689 ec_face_vect(i) *= volumes_entrelaces(i);
1690 Ec = mp_somme_vect(ec_face_vect);
1692 Ec /= 2*volume_total;
1701 Nom fichier =
Nom(
"Sorties_Ec_") + ext +
Nom(
"_spatial");
1704 double temps = mon_equation->inconnue().temps();
1705 temps /= temps_retournement;
1706 fic << temps <<
" " << Ec <<
" " << Ec_max <<
" " << Ec_min << finl;