16#include <Traitement_particulier_NS_THI_VDF.h>
17#include <Domaine_VDF.h>
18#include <Domaine_Cl_VDF.h>
19#include <Periodique.h>
20#include <Champ_Face_VDF.h>
21#include <Navier_Stokes_std.h>
22#include <calcul_spectres.h>
52 const Domaine& domaine = zdis.
domaine();
53 int nb_som = domaine.
nb_som();
57 double temps_crt = mon_equation->inconnue().temps();
62 calc_sp_nouveau_2(vit,
nb_som_dir,temps_crt,Ec,D);
64 SFichier fic2 (
"Sorties_THI_2",ios::app);
65 fic2 << temps_crt <<
" " << Ec <<
" " << D << finl;
69 Cerr <<
"Traitement_particulier_NS_THI_VDF::init_calc_spectre n'est pas parallelise..." << finl;
76 const Domaine& domaine = zdis.
domaine();
77 int nb_som = domaine.
nb_som();
79 double temps_crt = mon_equation->inconnue().temps();
85 calc_sp_nouveau_2(vit,
nb_som_dir,temps_crt,Eccoup,D);
88 SFichier fic2 (
"Sorties_THI_2",ios::app);
89 fic2 << temps_crt <<
" " << Eccoup <<
" " << D << finl;
93 Cerr <<
"Traitement_particulier_NS_THI_VDF::calcul_spectre n'est pas parallelise..." << finl;
103 double temps_crt = mon_equation->inconnue().temps();
106 double skewness=0., Ec=0., D=0.;
112 SFichier fic (
"Sorties_THI",ios::app);
113 fic << temps_crt <<
" " << Ec <<
" " << D <<
" " << skewness << finl;
115 Cerr <<
"temps=" << temps_crt <<
" Ec=" << Ec <<
" D=" << D <<
" skewness=" << skewness << finl;
121 DoubleTab& vitesse = mon_equation->inconnue().valeurs();
122 Cerr <<
"Renormalisation pour les premiers instants de la turb_grille" << finl;
130 const Domaine& domaine = zdis.
domaine();
131 int nb_som = domaine.
nb_som();
133 double temps_crt = mon_equation->inconnue().temps();
137 calc_sp_nouveau_2(vit,
nb_som_dir,temps_crt,Ec,dD);
140 Cerr <<
"Ec = " << Ec << finl;
141 Cerr <<
"Renormalisation!!" << finl;
161 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
163 const Domaine& domaine = zdisbase.
domaine();
164 const int nb_elem=domaine.
nb_elem();
168 const DoubleVect& vitesse =mon_equation->inconnue().valeurs();
170 DoubleTab vorticite(nb_elem, dim);
173 const IntTab& elem_faces = domaine_VDF.
elem_faces();
174 const DoubleVect& volumes_elem = domaine_VDF.
volumes();
175 const int nb_faces_elem = elem_faces.
line_size();
177 double somme_v2 = 0.;
178 double somme_v_elem = 0.;
179 double somme_w2 = 0.;
186 for (elem = 0; elem < nb_elem; elem++)
188 const double volume = volumes_elem[elem];
189 somme_v_elem += volume;
194 for (i_face = 0; i_face < nb_faces_elem; i_face++)
196 const int face = elem_faces(elem, i_face);
197 const double v = vitesse(face);
201 somme_v2 += volume * 0.5 * s;
207 for (i = 0; i < dim; i++)
209 const double w_i = vorticite(elem, i);
212 somme_w2 += volume * s;
215 const double mp_somme_volume =
mp_sum(somme_v_elem);
216 const double mp_somme_v2 =
mp_sum(somme_v2);
217 const double mp_somme_w2 =
mp_sum(somme_w2);
218 if (mp_somme_volume > 0.)
220 Ec = mp_somme_v2 * 0.5 / mp_somme_volume;
221 D = mp_somme_w2 * 0.5 / mp_somme_volume;
234 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
236 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
237 const Domaine& domaine_geom = domaine_vdf.
domaine();
238 const IntVect& orientation = domaine_vdf.
orientation();
239 const IntTab& face_sommets = domaine_vdf.
face_sommets();
240 const int nb_faces_ = domaine_vdf.
nb_faces();
241 const int nb_som = domaine_geom.
nb_som();
242 double temps_crt = mon_equation->inconnue().temps();
243 const char* methode_actuelle=
"Traitement_particulier_NS_THI_VDF::ch_vit_pour_fft";
246 int num_face,num_som,i,j,k;
251 for (num_face=0; num_face<nb_faces_; num_face++)
254 num_som = face_sommets(num_face,j);
255 k = orientation(num_face);
256 compteur(num_som,k)++;
257 vit(num_som,k) = vitesse[num_face];
264 for (num_som = 0; num_som < nb_som; num_som++)
266 corresp(i,j,k) = num_som;
287 vit(corresp(i,j,
nb_som_dir),0)=vit(corresp(i,j,0),0);
294 vit(corresp(i,
nb_som_dir,k),0)=vit(corresp(i,0,k),0);
302 vit(corresp(
nb_som_dir,j,k),1)=vit(corresp(0,j,k),1);
309 vit(corresp(i,j,
nb_som_dir),1)=vit(corresp(i,j,0),1);
317 vit(corresp(
nb_som_dir,j,k),2)=vit(corresp(0,j,k),2);
324 vit(corresp(i,
nb_som_dir,k),2)=vit(corresp(i,0,k),2);
333 Nom fichier_vit_0 =
"chp_vit_VDF_0_";
335 fichier_vit_0 += tps;
344 fic77 << vit(corresp(i,j,k),0) <<finl;
349 fic77 << vit(corresp(i,j,k),1) <<finl;
354 fic77 << vit(corresp(i,j,k),2) <<finl;
362 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
368 const DoubleTab& vitesse = mon_equation->inconnue().valeurs();
369 const IntTab& face_voisins = domaine_vdf.
face_voisins();
370 const IntTab& elem_faces = domaine_vdf.
elem_faces();
371 const IntVect& orientation = domaine_vdf.
orientation();
374 int num_face,elem,num_face_2,num_face_2_int,compt=0,ori,num_face_int,num_face_asso,elem_2;
375 double deriv,Skewness_num=0.,Skewness_den=0.,dist;
387 int nfin = ndeb + le_bord.
nb_faces();
389 for(num_face = ndeb; num_face<nfin; num_face++)
391 elem = face_voisins(num_face,1);
392 num_face_2_int = elem_faces(elem,
dimension);
393 elem_2 = face_voisins(num_face_2_int,1);
394 num_face_2 = elem_faces(elem_2,
dimension);
396 num_face_int = num_face;
397 deriv = vitesse(num_face_2)-vitesse(num_face_int);
398 dist = domaine_vdf.
dist_face(num_face_int,num_face_2,0);
401 num_face_asso = la_cl_perio.
face_associee(num_face-ndeb)+ndeb;
402 dist = domaine_vdf.
dist_face(num_face_asso,num_face_2,0);
405 Skewness_num += deriv*deriv*deriv;
406 Skewness_den += deriv*deriv;
412 ori = orientation(num_face);
417 elem = face_voisins(num_face,1);
420 num_face_2_int = elem_faces(elem,
dimension);
421 elem_2 = face_voisins(num_face_2_int,1);
424 num_face_2 = elem_faces(elem_2,
dimension);
426 deriv = vitesse(num_face_2)-vitesse(num_face);
427 deriv /= 2*domaine_vdf.
dist_face(num_face,num_face_2,0);
429 Skewness_num += deriv*deriv*deriv;
430 Skewness_den += deriv*deriv;
435 ori = orientation(num_face);
438 Skewness_num =
mp_sum(Skewness_num);
439 Skewness_den =
mp_sum(Skewness_den);
441 Skewness_num /= compt;
442 Skewness_den /= compt;
443 Skewness_den = pow(Skewness_den,1.5);
444 if (Skewness_den < 1.e-20 )
446 Cerr <<
"ATTENTION : denominateur de Skewness < 1.e-20!!!!!" << finl;
450 Skewness = -Skewness_num/Skewness_den;
458 const Domaine& domaine = zdis.
domaine();
459 int nb_som = domaine.
nb_som();
463 double temps_crt = mon_equation->inconnue().temps();
465 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
467 const int nb_faces_ = domaine_VDF.
nb_faces();
470 DoubleTab u_ap(nb_faces_);
476 Cerr <<
"dt=" << dt << finl;
477 if ((nb_op == 0)||(nb_op==1))
478 for (i=0; i<nb_faces_; i++)
480 u_ap[i] = u[i]/volumes_entrelaces[i] +u_av[i];
483 for (i=0; i<nb_faces_; i++)
485 u_ap[i] = u[i] +u_av[i];
489 calc_sp_nouveau_2_operateur(vit,
nb_som_dir,temps_crt,nb_op,dt,E_av);
492 calc_sp_nouveau_2_operateur(vit,
nb_som_dir,temps_crt,nb_op,dt,E_ap);
494 Nom fichier =
"Transfert_";
515 if (std::fabs(E_ap[j]-E_av[j])>1.e-30)
517 fic7 << j+1 <<
" " << (E_ap[j]-E_av[j])/dt << finl;
527 const Domaine_dis_base& zdisbase=mon_equation->inconnue().domaine_dis_base();
529 const Domaine& domaine_geom = domaine_vdf.
domaine();
530 const IntVect& orientation = domaine_vdf.
orientation();
531 const IntTab& face_sommets = domaine_vdf.
face_sommets();
532 const int nb_faces_ = domaine_vdf.
nb_faces();
533 const int nb_som = domaine_geom.
nb_som();
534 const char* methode_actuelle=
"Traitement_particulier_NS_THI_VDF::ch_vit_pour_fft_operateur";
537 int num_face,num_som,i,j,k;
542 for (num_face=0; num_face<nb_faces_; num_face++)
545 num_som = face_sommets(num_face,j);
546 k = orientation(num_face);
547 compteur(num_som,k)++;
548 vit(num_som,k) = u[num_face];
555 for (num_som = 0; num_som < nb_som; num_som++)
557 corresp(i,j,k) = num_som;
579 vit(corresp(i,j,
nb_som_dir),0)=vit(corresp(i,j,0),0);
586 vit(corresp(i,
nb_som_dir,k),0)=vit(corresp(i,0,k),0);
594 vit(corresp(
nb_som_dir,j,k),1)=vit(corresp(0,j,k),1);
601 vit(corresp(i,j,
nb_som_dir),1)=vit(corresp(i,j,0),1);
609 vit(corresp(
nb_som_dir,j,k),2)=vit(corresp(0,j,k),2);
616 vit(corresp(i,
nb_som_dir,k),2)=vit(corresp(i,0,k),2);
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
void calculer_rotationnel_ordre2_centre_element(DoubleTab &) const
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
virtual Frontiere_dis_base & frontiere_dis()
Renvoie la frontiere discretisee a laquelle les conditions aux limites s'appliquent.
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_face(int, int, int k) const
int nb_faces() const
renvoie le nombre global de faces.
DoubleVect & volumes_entrelaces()
double volumes(int i) const
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
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 premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
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,...
int num_premiere_face() const
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.
classe Periodique Cette classe represente une condition aux limites periodique.
int face_associee(int i) const
static int check_int_overflow(trustIdType)
static int nproc()
renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::curren...
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
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...
Classe de base des flux de sortie.
classe Traitement_particulier_NS_THI_VDF Cette classe permet de faire les traitements particuliers
void calcul_skewness_ordre_2(double &)
void calcul_Ec_D(double &, double &)
Calcul de Ec = 1/2 < u^2 > D = 1/2 < w^2 > ou w est le rotationnel de u.
void renorm_Ec() override
void ch_vit_pour_fft_operateur(DoubleTab &, DoubleTab &)
void calcul_spectre_operateur(int, DoubleTab &, DoubleTab &, double) override
void sorties_globales() override
void init_calc_spectre() override
void calcul_spectre() override
void ch_vit_pour_fft(DoubleTab &)
classe Traitement_particulier_THI Cette classe permet de faire les traitements particuliers
int & calcul_nb_som_dir(const Domaine &)
void msg_erreur_maillage(const char *)