16#include <Traitement_particulier_NS_Profils_VDF.h>
17#include <Domaine_VDF.h>
18#include <Schema_Temps_base.h>
19#include <communications.h>
21#include <Navier_Stokes_std.h>
22#include <Modele_turbulence_hyd_base.h>
55 if (motlu==
"nb_points")
61 Cerr <<
"Error while reading in Traitement_particulier_NS_Profils_VDF::readOn" << finl;
62 Cerr <<
"Possible key-words are : nb_points , { and } " << finl;
63 Cerr <<
"User specified :" << motlu << finl;
129 double tps = mon_equation->inconnue().temps();
142 static double temps_dern_post_inst = -100.;
146 ecriture_fichiers_moy_spat(umoy_x_m,umoy_2_m,umoy_3_m,umoy_4_m,umoy_x_p,umoy_2_p,umoy_3_p,umoy_4_p,
delta_Um,
delta_Up,
Nxy,
Yu_m,0);
147 ecriture_fichiers_moy_spat(umoy_y_m,vmoy_2_m,vmoy_3_m,vmoy_4_m,umoy_y_p,vmoy_2_p,vmoy_3_p,vmoy_4_p,
delta_Vm,
delta_Vp,
Nyy,
Yv_m,1);
148 ecriture_fichiers_moy_spat(umoy_z_m,wmoy_2_m,wmoy_3_m,wmoy_4_m,umoy_z_p,wmoy_2_p,wmoy_3_p,wmoy_4_p,
delta_Wm,
delta_Wp,
Nzy,
Yw_m,2);
151 temps_dern_post_inst = tps;
160 static double temps_dern_post_inst_nut = -100.;
161 if (std::fabs(tps-temps_dern_post_inst_nut)>=
dt_post_inst)
164 temps_dern_post_inst_nut = tps;
171 double tpsbis = mon_equation->inconnue().temps();
174 static int init_stat_temps = 0;
175 if((init_stat_temps==0)&&(
oui_repr != 1))
177 double dt_v = mon_equation->schema_temps().pas_de_temps();
204 static double temps_dern_post_stat = -100.;
205 if (std::fabs(tpsbis-temps_dern_post_stat)>=
dt_post_stat)
215 temps_dern_post_stat = tpsbis;
233 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
236 const DoubleTab& xv = domaine_VDF.
xv();
237 const DoubleTab& xp = domaine_VDF.
xp();
239 int nb_faces = domaine_VDF.
nb_faces();
242 const IntVect& orientation = domaine_VDF.
orientation();
244 int num_face,num_elem,ori,indic_m,indicv_m,indicw_m,indicuv_m,indic_p,indicv_p,indicw_p,indicuv_p,trouve;
248 indic_m = indic_p = 0;
249 indicv_m = indicv_p = 0;
250 indicw_m = indicw_p = 0;
251 indicuv_m = indicuv_p = 0;
320 Cerr << (int)system(
"mkdir Space_Avg") << finl;
321 Cerr << (int)system(
"mkdir Time_Avg") << finl;
329 for (num_face=0; num_face<nb_faces; num_face++)
331 ori = orientation(num_face);
361 Cerr <<
"Pb dans Traitement_particulier_NS_Profils_VDF::init_calcul_moyenne" << finl;
362 Cerr <<
"Pb avec la direction de la face!" << finl;
395 Cerr <<
"Pb dans Traitement_particulier_NS_Profils_VDF::init_calcul_moyenne" << finl;
396 Cerr <<
"Pb avec la direction de la face!" << finl;
404 for (num_elem=0; num_elem<nb_elems; num_elem++)
426 int numb_del_probes=0;
436 Cerr <<
"Probe Number " << i+1+numb_del_probes <<
" undefined in computational domain." << finl;
437 Cerr <<
"It will be deleted from profile list !" << finl;
501 Cerr <<
" UPPER/LOWER BOUNDS FOR PROFILES :" << finl;
504 Cerr <<
"Profile " << i+1 <<
" : X= " <<
positions(i) << finl;
505 Cerr <<
"xUm= " <<
xUm(i) <<
" xUp= " <<
xUp(i) << finl;
506 Cerr <<
"xElm= " <<
xUVm(i) <<
" xElp= " <<
xUVp(i) << finl;
515 indic_m = indic_p = 0;
516 indicv_m = indicv_p = 0;
517 indicw_m = indicw_p = 0;
518 indicuv_m = indicuv_p = 0;
520 for (num_face=0; num_face<nb_faces; num_face++)
522 ori = orientation(num_face);
533 for (j=0; j-(indic_m+1)<0; j++)
537 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
538 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
541 if(est_egal(y,
Yu_m(i,j)))
562 for (j=0; j-(indic_p+1)<0; j++)
566 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
567 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
570 if(est_egal(y,
Yu_p(i,j)))
596 for (j=0; j-(indicv_m+1)<0; j++)
600 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
601 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
604 if(est_egal(y,
Yv_m(i,j)))
625 for (j=0; j-(indicv_p+1)<0; j++)
629 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
630 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
633 if(est_egal(y,
Yv_p(i,j)))
659 for (j=0; j-(indicw_m+1)<0; j++)
663 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
664 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
667 if(est_egal(y,
Yw_m(i,j)))
688 for (j=0; j-(indicw_p+1)<0; j++)
692 Cerr <<
"Erreur dans la valeur du nombre de points pour le traitement particulier"<<finl;
693 Cerr <<
"qui est trop petite dans votre jeu de donnees=" <<
Nap << finl;
696 if(est_egal(y,
Yw_p(i,j)))
716 Cerr <<
"Cas de figure impossible..." << finl;
725 for (num_elem=0; num_elem<nb_elems; num_elem++)
732 for (j=0; j-(indicuv_m+1)<0; j++)
745 Yuv_m(i,indicuv_m)=y;
755 for (j=0; j-(indicuv_p+1)<0; j++)
768 Yuv_p(i,indicuv_p)=y;
781 Cerr <<
"indic_m = " << indic_m <<
" != indic_p = " << indic_p << finl;
782 Cerr <<
"Problem : move profile at position " <<
positions(i) <<
" !" << finl;
785 if(indicv_p!=indicv_m)
787 Cerr <<
"indicv_m = " << indicv_m <<
" != indicv_p = " << indicv_p << finl;
788 Cerr <<
"Problem : move profile at position " <<
positions(i) <<
" !" << finl;
791 if(indicw_p!=indicw_m)
793 Cerr <<
"indicw_m = " << indicw_m <<
" != indicw_p = " << indicw_p << finl;
794 Cerr <<
"Problem : move profile at position " <<
positions(i) <<
" !" << finl;
797 if(indicuv_p!=indicuv_m)
799 Cerr <<
"indicuv_m = " << indicuv_m <<
" != indicuv_p = " << indicuv_p << finl;
800 Cerr <<
"Problem : move profile at position " <<
positions(i) <<
" !" << finl;
824 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
826 const DoubleTab& xp = domaine_VDF.
xp();
828 const RefObjU& modele_turbulence = mon_equation->get_modele(TURBULENCE);
839 for (num_elem=0; num_elem<nb_elems; num_elem++)
842 u_moy(i,corresp(i,num_elem)) += nu_t[num_elem];
848 IntTab compt_p(compt);
851 DoubleTab u_moy_p(u_moy);
856 IntTab compt_tot(compt);
857 DoubleTab u_moy_tot(u_moy);
864 recevoir(compt_p,p,0,p);
867 recevoir(u_moy_p,p,0,p);
872 for (j=0; j<tab_Nuv(i); j++)
873 u_moy(i,j) = u_moy_tot(i,j)/compt_tot(i,j);
886 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
888 const DoubleTab& xv = domaine_VDF.
xv();
890 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
891 int nb_faces = domaine_VDF.
nb_faces();
892 const IntVect& orientation = domaine_VDF.
orientation();
894 int num_face,ori_face;
902 for(num_face=0; num_face<nb_faces; num_face++)
904 ori_face = orientation[num_face];
905 if ((ori_face==ori)&&(xv(num_face,
dir_profil)==xU(i)))
907 vit = vitesse[num_face];
908 u_moy(i,corresp(i,num_face)) += vit;
909 u_moy_2(i,corresp(i,num_face)) += vit*vit;
910 u_moy_3(i,corresp(i,num_face)) += vit*vit*vit;
911 u_moy_4(i,corresp(i,num_face)) += vit*vit*vit*vit;
917 IntTab compt_p(compt);
920 DoubleTab u_moy_p(u_moy);
923 DoubleTab u_moy_2_p(u_moy_2);
926 DoubleTab u_moy_3_p(u_moy_3);
929 DoubleTab u_moy_4_p(u_moy_4);
934 IntTab compt_tot(compt);
935 DoubleTab u_moy_tot(u_moy);
936 DoubleTab u_moy_2_tot(u_moy_2);
937 DoubleTab u_moy_3_tot(u_moy_3);
938 DoubleTab u_moy_4_tot(u_moy_4);
948 recevoir(compt_p,p,0,p);
951 recevoir(u_moy_p,p,0,p);
954 recevoir(u_moy_2_p,p,0,p);
955 u_moy_2_tot+=u_moy_2_p;
957 recevoir(u_moy_3_p,p,0,p);
958 u_moy_3_tot+=u_moy_3_p;
960 recevoir(u_moy_4_p,p,0,p);
961 u_moy_4_tot+=u_moy_4_p;
965 for (j=0; j<NN(i); j++)
967 u_moy(i,j) = u_moy_tot(i,j)/compt_tot(i,j);
968 u_moy_2(i,j) = u_moy_2_tot(i,j)/compt_tot(i,j);
969 u_moy_3(i,j) = u_moy_3_tot(i,j)/compt_tot(i,j);
970 u_moy_4(i,j) = u_moy_4_tot(i,j)/compt_tot(i,j);
988 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
990 const DoubleTab& xp = domaine_VDF.
xp();
992 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
993 const IntTab& elem_faces = domaine_VDF.
elem_faces();
997 int face_u_0,face_u_1,face_v_0,face_v_1;
1009 for (num_elem=0; num_elem<nb_elems; num_elem++)
1013 face_u_0 = elem_faces(num_elem,0);
1014 face_u_1 = elem_faces(num_elem,
dimension);
1015 vitu = 0.5*(vitesse[face_u_0]+vitesse[face_u_1]);
1016 face_v_0 = elem_faces(num_elem,1);
1017 face_v_1 = elem_faces(num_elem,1+
dimension);
1018 vitv = 0.5*(vitesse[face_v_0]+vitesse[face_v_1]);
1019 uv_moy(i,corresp(i,num_elem)) += vitu*vitv;
1020 u_moy_cent(i,corresp(i,num_elem)) += vitu;
1021 v_moy_cent(i,corresp(i,num_elem)) += vitv;
1027 IntTab compt_p(compt);
1030 DoubleTab uv_moy_p(uv_moy);
1033 DoubleTab u_moy_cent_p(u_moy_cent);
1036 DoubleTab v_moy_cent_p(v_moy_cent);
1041 IntTab compt_tot(compt);
1042 DoubleTab uv_moy_tot(uv_moy);
1043 DoubleTab u_moy_cent_tot(u_moy_cent);
1044 DoubleTab v_moy_cent_tot(v_moy_cent);
1053 recevoir(compt_p,p,0,p);
1056 recevoir(uv_moy_p,p,0,p);
1057 uv_moy_tot+=uv_moy_p;
1059 recevoir(u_moy_cent_p,p,0,p);
1060 u_moy_cent_tot+=u_moy_cent_p;
1062 recevoir(v_moy_cent_p,p,0,p);
1063 v_moy_cent_tot+=v_moy_cent_p;
1068 for (j=0; j<NN(i); j++)
1070 uv_moy(i,j) = uv_moy_tot(i,j)/compt_tot(i,j);
1071 u_moy_cent(i,j) = u_moy_cent_tot(i,j)/compt_tot(i,j);
1072 v_moy_cent(i,j) = v_moy_cent_tot(i,j)/compt_tot(i,j);
1075 for (j=0; j<NN(i); j++)
1076 uv_moy(i,j) += u_moy_cent(i,j)*v_moy_cent(i,j);
1090 double dt_v = mon_equation->schema_temps().pas_de_temps();
1091 DoubleTab umoy(u_moy_temp);
1095 for(j=0; j<
Nap; j++)
1097 umoy(i,j)=umoy_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1098 umoy(i,j)+=umoy_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1109void Traitement_particulier_NS_Profils_VDF::ecriture_fichiers_moy_spat(
const DoubleTab& umoy_m,
const DoubleTab& umoy_2_m,
const DoubleTab& umoy_3_m,
const DoubleTab& umoy_4_m,
const DoubleTab& umoy_p,
const DoubleTab& umoy_2_p,
const DoubleTab& umoy_3_p,
const DoubleTab& umoy_4_p,
const DoubleVect& delta_m,
const DoubleVect& delta_p,
const IntVect& NN,
const DoubleTab& Y,
const int ori)
1115 Nom nom_fic =
"./Space_Avg/Avg_vel_";
1155 double tps = mon_equation->inconnue().temps();
1161 DoubleTab umoy(umoy_m);
1162 DoubleTab umoy_2(umoy_2_m);
1163 DoubleTab umoy_3(umoy_3_m);
1164 DoubleTab umoy_4(umoy_4_m);
1166 for(j=0; j<NN(i); j++)
1168 umoy(i,j)=umoy_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1169 umoy(i,j)+=umoy_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1170 umoy_2(i,j)=umoy_2_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1171 umoy_2(i,j)+=umoy_2_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1172 umoy_3(i,j)=umoy_3_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1173 umoy_3(i,j)+=umoy_3_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1174 umoy_4(i,j)=umoy_4_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1175 umoy_4(i,j)+=umoy_4_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1180 double val_moy, val2,val3,val4;
1182 fic <<
"# Space Averaged Statistics" << finl ;
1183 fic <<
"# Y <U> Urms S=MOY[(u-umoy)^3]/(MOY[(u-umoy)^2])^3/2 F=MOY[(u-umoy)^4]/(MOY[(u-umoy)^2])^2 " << finl ;
1185 for (j=0; j<NN(i) ; j++)
1187 val_moy = umoy(i,j);
1189 val2 = sqrt(std::max(umoy_2(i,j)-val_moy*val_moy,0.0));
1198 val3 = umoy_3(i,j)+2*val_moy*val_moy*val_moy-3*umoy_2(i,j)*val_moy;
1199 val3 = val3/pow(val2,3);
1201 val4 = umoy_4(i,j)-4*umoy_3(i,j)*val_moy+6*umoy_2(i,j)*val_moy*val_moy-3*val_moy*val_moy*val_moy*val_moy;
1202 val4 = val4/pow(val2,4);
1205 if ((val_moy<0.)&&(std::fabs(val_moy)<1.e-10)) val_moy=0.;
1206 fic << Y (i,j) <<
" " << umoy(i,j) <<
" " << val2 <<
" " << val3 <<
" " << val4 << finl;
1227 nom_fic =
"./Space_Avg/Avg_vel_uvp_";
1232 nom_fic =
"./Space_Avg/Avg_nut_";
1257 double tps = mon_equation->inconnue().temps();
1266 DoubleTab umoy(umoy_m);
1267 for(j=0; j<NN(i); j++)
1269 umoy(i,j)=umoy_m(i,j)*delta_m(i)/(delta_m(i)+delta_p(i));
1270 umoy(i,j)+=umoy_p(i,j)*delta_p(i)/(delta_m(i)+delta_p(i));
1273 for (j=0; j<NN(i); j++)
1274 fic << Y (i,j) <<
" " << umoy(i,j) << finl;
1293 nom_fic =
"./Time_Avg/Avg_time_vel_";
1334 double tps = mon_equation->inconnue().temps();
1341 double val_moy,val2,val3,val4;
1343 fic <<
"# Time Averaged Statistics" << finl ;
1344 fic <<
"# Y <U> Urms S=MOY[(u-umoy)^3]/(MOY[(u-umoy)^2])^3/2 F=MOY[(u-umoy)^4]/(MOY[(u-umoy)^2])^2 " << finl ;
1346 for (j=0; j<NN(i) ; j++)
1348 val_moy = umoy(i,j)/dt;
1349 val2 = umoy_2(i,j)/dt -val_moy*val_moy;
1351 val2 = sqrt(std::max(val2,0.0));
1360 val3 = umoy_3(i,j)/dt+2*val_moy*val_moy*val_moy-3*umoy_2(i,j)/dt*val_moy;
1361 val3 = val3/pow(val2,3);
1363 val4 = umoy_4(i,j)/dt-4*umoy_3(i,j)/dt*val_moy+6*umoy_2(i,j)/dt*val_moy*val_moy-3*val_moy*val_moy*val_moy*val_moy;
1364 val4 = val4/pow(val2,4);
1366 if ((val_moy<0.)&&(std::fabs(val_moy)<1.e-10)) val_moy=0.;
1367 fic << Y (i,j) <<
" " << val_moy <<
" " << val2 <<
" " << val3 <<
" " << val4 << finl;
1388 nom_fic =
"./Time_Avg/Avg_time_vel_uvp_";
1393 nom_fic =
"./Time_Avg/Avg_time_nut_";
1418 double tps = mon_equation->inconnue().temps();
1426 for (j=0; j<NN(i) ; j++)
1427 fic << Y (i,j) <<
" " << umoy(i,j)/dt << finl;
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int nb_faces() const
renvoie le nombre global de faces.
double xv(int num_face, int k) const
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
double xp(int num_elem, int k) const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Champ_Fonc_base & viscosite_turbulente() const
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static int me()
renvoie mon rang dans le groupe de communication courant.
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),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Sortie & flush() override
Force l'ecriture sur disque des donnees dans le tampon Utilise l'implementation de la classe ofstream...
Classe de base des flux de sortie.
void ajoute_sans_ech_esp_virt(_SCALAR_TYPE_ alpha, const TRUSTVect &y, Mp_vect_options opt=VECT_REAL_ITEMS)
const Objet_U & valeur() const
class Trait_part_NS_Profils_VDF This classe enables a particular treatment
void calculer_moyenne_spatiale_vitesse(DoubleTab &, DoubleTab &, DoubleTab &, DoubleTab &, const IntTab &, const IntTab &, const IntVect &, const int, const DoubleTab &)
void calculer_moyenne_spatiale_nut(DoubleTab &, const IntTab &, const IntTab &, const IntVect &, const DoubleTab &)
Entree & lire(const Motcle &, Entree &) override
void ecriture_fichiers_moy_spat(const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleVect &, const DoubleVect &, const IntVect &, const DoubleTab &, const int)
void calculer_moyenne_spatiale_uv(DoubleTab &, const IntTab &, const IntTab &, const IntVect &, const DoubleTab &)
void ecriture_fichiers_moy_temp_1col(const DoubleTab &, const DoubleTab &, const IntVect &, const int, const double)
void post_traitement_particulier() override
void ecriture_fichiers_moy_temp(const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const IntVect &, const int, const double)
void calculer_integrale_temporelle(DoubleTab &, DoubleTab &, DoubleTab &, const DoubleVect &, const DoubleVect &)
void ecriture_fichiers_moy_spat_1col(const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleVect &, const DoubleVect &, const IntVect &, const int)
void init_calcul_moyenne() override
class Trait_part_NS_Profils_VDF
Entree & lire(Entree &) override