16#include <IJK_Navier_Stokes_tools.h>
17#include <IJK_Thermal_Onefluid.h>
18#include <Probleme_FTD_IJK.h>
19#include <Schema_RK3_IJK.h>
24IJK_Thermal_Onefluid::IJK_Thermal_Onefluid()
39 os<<
" rho_cp_moy_harmonic \n";
41 os<<
" lambda_variable \n";
43 os<<
" lambda_moy_arith \n";
45 os<<
" depracated_rho_cp \n";
47 os<<
" conserv_energy_global \n";
92 if (ref_ijk_ft_ && sub_type(
Schema_RK3_IJK, ref_ijk_ft_->schema_temps_ijk()))
94 Cout <<
"Initial energy at time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time() <<
" is " <<
E0_ <<
" [W.m-3]." << finl;
95 Cerr <<
"Initial energy at time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time() <<
" is " <<
E0_ <<
" [W.m-3]." << finl;
110 Cout <<
"End of " <<
que_suis_je() <<
"::initialize()" << finl;
116 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
118 const int nx = indic.
ni();
119 const int ny = indic.
nj();
120 const int nz = indic.
nk();
121 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
122 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
125 for (
int k=0; k < nz ; k++)
126 for (
int j=0; j< ny; j++)
127 for (
int i=0; i < nx; i++)
129 double chi_l = indic(i,j,k);
131 if (rho_cp_harmonic_mean)
157 cp_.echange_espace_virtuel(
cp_.ghost());
181 const int ni = d_temperature.
ni();
182 const int nj = d_temperature.
nj();
183 const int nk = d_temperature.
nk();
184 const double vol_inv = 1./
vol_;
185 for (
int k = 0; k < nk; k++)
186 for (
int j = 0; j < nj; j++)
187 for (
int i = 0; i < ni; i++)
191 const double rhocpV_inv =
rho_cp_inv_(i,j,k) * vol_inv;
192 const double ope = div_coeff_grad_T_volume(i,j,k);
193 const double resu = ope*rhocpV_inv;
194 d_temperature(i,j,k) +=resu ;
201 const double rho = ref_ijk_ft_->eq_ns().get_rho_field_ijk(i,j,k);
202 const double cp =
cp_(i,j,k);
203 rhocpV = rho * cp *
vol_;
209 const double ope = div_coeff_grad_T_volume(i,j,k);
210 const double resu = ope/rhocpV;
211 d_temperature(i,j,k) +=resu ;
218 double rho_cp_u_mean = 0.;
221 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
222 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
224 if (rho_cp_harmonic_mean)
225 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx,
rho_cp_inv_, vx, 0., 3);
227 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx,
rho_cp_inv_, vx, 0., 1);
233 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx,
cp_, ref_ijk_ft_->eq_ns().get_rho_field(), 0., 0);
237 rho_cp_u_mean = calculer_rho_cp_u_moyen(vx,
rho_cp_, vx, 0., 1);
240 return rho_cp_u_mean;
248 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
249 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
251 if (rho_cp_harmonic_mean)
260 rho_cp =
cp_(i,j,k) * (ref_ijk_ft_->eq_ns().get_rho_field_ijk(i,j,k));
282 double theta_adim_moy = 0.;
285 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
286 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
288 if (rho_cp_harmonic_mean)
304 return theta_adim_moy;
312 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
313 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
314 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
315 double int_rhocpTrust = 0;
316 for (
int k = 0; k < nk; k++)
317 for (
int j = 0; j < nj; j++)
318 for (
int i = 0; i < ni; i++)
325 int_rhocpTrust =
mp_sum(int_rhocpTrust)/(double)(ntot);
326 if ((std::fabs(int_rhocpTrust) < DMINFLOAT) && (std::fabs(dE) > DMINFLOAT))
328 Cerr <<
"Trying to normalize the energy by an infinite coef : " << dE <<
" / " << int_rhocpTrust << finl;
333 Cerr <<
"Le coeff de manque d'energie dE/int_rhocpTrust vaut : " << dE/int_rhocpTrust << finl;
337 for (
int k = 0; k < nk; k++)
338 for (
int j = 0; j < nj; j++)
339 for (
int i = 0; i < ni; i++)
347 const double fractionnal_timestep,
const double time)
358 const double fractionnal_timestep,
const double time,
const double dE)
364 for (
int k = 0; k < kmax; k++)
370 Cerr <<
"[Energy-Budget-T"<<
rank_<<
"RK3 rustine step "<<rk_step<<
"] time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time()
372 <<
" " << ene_post <<
" [W.m-3]. [step"<< rk_step <<
"]" << finl;
392 for (
int k = 0; k < kmax; k++)
396 Cerr <<
"[Energy-Budget-T"<<
rank_<<
" euler rustine] time t=" << ref_ijk_ft_->schema_temps_ijk().get_current_time()
398 <<
" " << ene_post <<
" [W.m-3]."
411 d_temperature.
data()=0;
439 const int ni = d_temperature.
ni();
440 const int nj = d_temperature.
nj();
441 const int nk = d_temperature.
nk();
446 const double vol = dx*dy*dz;
447 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
448 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
449 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
450 for (
int k = 0; k < nk; k++)
451 for (
int j = 0; j < nj; j++)
452 for (
int i = 0; i < ni; i++)
454 const double I = indic(i,j,k);
461 for (
int k = 0; k < nk; k++)
462 for (
int j = 0; j < nj; j++)
463 for (
int i = 0; i < ni; i++)
466 d_temperature(i,j,k) -=
T_rust_(i,j,k) ;
507 for (
int k = 0; k < kmax; k++)
521 const double vol = dx*dy*dz;
522 for (
int k = 0; k < nk; k++)
523 for (
int j = 0; j < nj; j++)
524 for (
int i = 0; i < ni; i++)
529 const double rho_l = ref_ijk_ft_->milieu_ijk().get_rho_liquid();
530 const double rho_v = ref_ijk_ft_->milieu_ijk().get_rho_vapour();
531 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
533 for (
int k=0; k < nk ; k++)
534 for (
int j=0; j< nj; j++)
535 for (
int i=0; i < ni; i++)
537 const double chi_l = indic(i,j,k);
static void verifier(const char *msg, const IJK_Field_float &)
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
double get_constant_delta(int direction) const
Returns the size of cells in a direction.
Class defining operators and methods for all reading operation in an input flow (file,...
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
const Domaine_IJK & get_domaine() const
IJK_Field_double d_T_rustine_
void set_param(Param ¶m) const override
double get_rho_cp_u_ijk(const IJK_Field_double &vx, int i, int j, int k) const override
void add_temperature_diffusion() override
virtual void rk3_rustine_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time) override
double get_rho_cp_ijk(int i, int j, int k) const
void compute_diffusion_increment() override
void initialize(const Domaine_IJK &splitting) override
IJK_Field_double RK3_F_rustine_
double get_div_lambda_ijk(int i, int j, int k) const override
void compute_dT_rustine(const double dE)
void update_thermal_properties() override
double compute_rho_cp_u_mean(const IJK_Field_double &vx) override
bool rho_cp_moy_harmonic_
virtual void euler_rustine_step(const double timestep) override
IJK_Field_double div_rho_cp_T_
IJK_Field_double rho_cp_inv_
void compute_T_rust(const IJK_Field_vector3_double &velocity)
double compute_temperature_dimensionless_theta_mean(const IJK_Field_double &vx) override
void compute_temperature_convection_conservative(const IJK_Field_vector3_double &velocity) override
virtual double compute_global_energy()
std::shared_ptr< IJK_Field_double > div_coeff_grad_T_volume_
int type_temperature_convection_form_
Champs_compris_IJK champs_compris_
Operateur_IJK_elem_conv temperature_convection_op_
virtual bool get_conserv_energy_global()
Operateur_IJK_elem_diff temperature_diffusion_op_
Nom get_field_name_with_rank(Nom basename) const
virtual void update_thermal_properties()
IJK_Field_double rho_cp_T_
const double & get_E0() const
virtual void initialize(const Domaine_IJK &splitting)
virtual void set_param(Param ¶m) const override
IJK_Field_double temperature_adimensionnelle_theta_
bool conv_temperature_negligible_
std::shared_ptr< IJK_Field_double > d_temperature_
bool conserv_energy_global_
virtual void add_temperature_diffusion()
std::shared_ptr< IJK_Field_double > temperature_
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.