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);
void calculer_rotationnel_ordre2_centre_element(DoubleTab &) const
class Cond_lim_base Base class for the hierarchy of classes that represent the different boundary con...
virtual Frontiere_dis_base & frontiere_dis()
Returns the discretized boundary to which the boundary conditions apply.
int_t nb_som() const
Returns the number of vertices of the domain.
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_face(int, int, int k) const
Returns the distance between two face centers in direction k (Cartesian only).
int nb_faces() const
Returns the total number of faces.
DoubleVect & volumes_entrelaces()
double volumes(int i) const
int face_sommets(int i, int j) const
Returns the index of the i-th vertex of face num_face.
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.
int premiere_face_int() const
A face is internal if and only if it separates two elements.
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
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: a character string for naming TRUST objects.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
class Periodique This class represents a periodic boundary condition.
int face_associee(int i) const
static int check_int_overflow(trustIdType)
static int nproc()
Returns the number of processors in the current group. See Comm_Group::nproc() and PE_Groups::current...
static double mp_sum(double)
Computes the sum of x over all processors in the current group.
static int je_suis_maitre()
Returns 1 if on the master processor of the current group (i.e. me() == 0), 0 otherwise.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.
Base class for output streams.
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 &)
Traitement_particulier_THI This class performs specific post-processing treatments.
int & calcul_nb_som_dir(const Domaine &)
void msg_erreur_maillage(const char *)