16#include <Frontiere_dis_base.h>
17#include <Schema_Temps_base.h>
18#include <Navier_Stokes_std.h>
19#include <Champ_front_synt.h>
20#include <Champ_Uniforme.h>
21#include <Fluide_base.h>
22#include <Domaine_VF.h>
39 os << tab.
size() <<
" ";
40 for(
int i=0; i<tab.
size(); i++)
79 Cerr <<
"Error the dimension must be equal to 3" << finl;
84 les_mots[0]=
"moyenne";
85 les_mots[1]=
"lenghtScale";
86 les_mots[2]=
"nbModes";
87 les_mots[3]=
"turbKinEn";
88 les_mots[4]=
"turbDissRate";
89 les_mots[5]=
"KeOverKmin";
90 les_mots[6]=
"timeScale";
91 les_mots[7]=
"ratioCutoffWavenumber";
92 les_mots[8]=
"dir_fluct";
97 Cerr <<
"Error while reading Champ_front_synt" << finl;
98 Cerr <<
"We expected a { instead of " << motlu << finl;
105 int rang=les_mots.search(motlu);
113 for(
int i=0; i<dim; i++)
164 for(
int i=0; i<dim; i++)
174 Cerr <<
"Error while reading Champ_front_synt:" << finl;
175 Cerr <<
" Parameter " << motlu <<
" has been renamed to KeOverKmin since TRUST v1.9.0"<< finl;
176 Cerr <<
" Update your datafile."<< finl;
180 Cerr <<
"Error while reading Champ_front_synt:" << finl;
181 Cerr <<
" " << motlu <<
"is not understood."<< finl;
182 Cerr <<
" We are expecting a parameter among " << les_mots << finl;
191 Cerr <<
"Error while reading Champ_front_synt: wrong number of parameters" << finl;
192 Cerr <<
"You should specify all these parameters: " << les_mots << finl;
197 Cerr <<
"Error while reading Champ_front_synt" << finl;
198 Cerr <<
"There is at least one parameter among: timeScale, lenghtScale, nbModes, turbKinEn, turbDissRate and ratioCutoffWavenumber set to 0" << finl;
202 for(
int i=0; i<dim; i++)
253 double visc = ref_cast(
Fluide_base,mil).viscosite_cinematique().valeurs()(0,0);
262 DoubleVect aireFaces;
266 for(
int i=0; i<nb_face; i++)
267 sum_aire += aireFaces[i];
269 sum_aire =
mp_sum(sum_aire);
286 double kappa_eta = pow((
turbDissRate/(visc*visc*visc)),0.25);
289 double delta_kappa = pow( (std::min(kappa_eta,kappa_max) / kappa_min ), 1./(
nbModes-1.));
290 if (kappa_max <= kappa_min)
292 Cerr <<
"Error: kappa_max(=" << kappa_max <<
") <= kappa_min(=" << kappa_min <<
")" << finl;
293 Cerr <<
"You should either refine your mesh or increase the ratioCutoffWavenumber value in " <<
que_suis_je() << finl;
303 DoubleVect kappa_face(
nbModes+1);
304 DoubleVect kappa_center(
nbModes);
326 phi(i) = drand48()* 2*pi ;
327 alpha(i) = drand48()* 2*pi ;
328 psi(i) = drand48()* 2*pi ;
330 tetha(i) = acos(1-2*drand48()) ;
333 kappa_x(i) = sin(tetha(i))*cos(phi(i));
334 kappa_y(i) = sin(tetha(i))*sin(phi(i));
335 kappa_z(i) = cos(tetha(i));
338 sigma_x(i) = cos(phi(i))*cos(tetha(i))*cos(alpha(i)) - sin(phi(i))*sin(alpha(i));
339 sigma_y(i) = sin(phi(i))*cos(tetha(i))*cos(alpha(i)) + cos(phi(i))*sin(alpha(i));
340 sigma_z(i) = -sin(tetha(i))*cos(alpha(i));
344 for(
int i = 0; i<
nbModes+1; i++)
346 kappa_face(i) = kappa_min * pow(delta_kappa,i);
350 for(
int i = 0; i<
nbModes; i++)
352 kappa_center(i) = 1.0/2.0*(kappa_face(i+1)+kappa_face(i));
353 dkn(i) = kappa_face(i+1)- kappa_face(i);
357 DoubleTab centreGrav(nb_face);
360 for(
int i = 0; i<nb_face; i++ )
365 double x_center = centreGrav(i,0);
366 double y_center = centreGrav(i,1);
367 double z_center = centreGrav(i,2);
371 double kx = kappa_x(m) * kappa_center(m);
372 double ky = kappa_y(m) * kappa_center(m);
373 double kz = kappa_z(m) * kappa_center(m);
375 double arg = kx*x_center + ky*y_center + kz*z_center + psi(m);
377 double tfunk = cos(arg);
379 double karman_spectrum = amp/kappa_e * (2.*
turbKinEn/3.) * pow((kappa_center(m)/kappa_e),4)/pow(1+pow(kappa_center(m)/kappa_e, 2),17.0/6.0) * exp(-2*(pow(kappa_center(m)/kappa_eta, 2)));
380 double amplitude = sqrt(karman_spectrum * dkn(m));
382 turb(0) += 2*amplitude*tfunk*sigma_x(m);
383 turb(1) += 2*amplitude*tfunk*sigma_y(m);
384 turb(2) += 2*amplitude*tfunk*sigma_z(m);
397 double b = sqrt(1-a*a);
classe Ch_front_var_instationnaire_dep Cette classe abstraite represente un champ sur une frontiere,
int initialiser(double temps, const Champ_Inc_base &inco) override
Initialisation en debut de calcul.
int lire_dimension(Entree &, const Nom &)
Verification de la dimension du champ Renvoie la dimension du champ.
classe Champ_front_base Classe de base pour la hierarchie des champs aux frontieres.
virtual DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ.
classe Champ_front_synt Classe derivee de Champ_front_base
void mettre_a_jour(double temps) override
NE FAIT RIEN, a surcharger.
Champ_front_base & affecter_(const Champ_front_base &ch) override
Pas code !!
int initialiser(double temps, const Champ_Inc_base &inco) override
Mise a jour du temps.
double ratioCutoffWavenumber
DoubleTab & valeurs_au_temps(double temps) override
Renvoie les valeurs au temps desire.
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Milieu_base & milieu() const =0
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
void calculer_surfaces(DoubleVect_t &surf) const
Calcule la surface des faces.
void calculer_centres_gravite(DoubleTab_t &xv) const
Calcule les centres de gravite de chaque face.
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
virtual int nb_comp() const
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
const Faces_t & faces() const
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
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 double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static double mp_sum_as_double(int v)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")