16#ifndef Navier_Stokes_FTD_IJK_included
17#define Navier_Stokes_FTD_IJK_included
19#include <Champs_compris_IJK_interface.h>
20#include <Cut_cell_surface_efficace.h>
21#include <Operateur_IJK_faces_diff.h>
22#include <Operateur_IJK_faces_conv.h>
23#include <Fluide_Diphasique_IJK.h>
24#include <Schema_Temps_IJK_base.h>
25#include <Boundary_Conditions.h>
26#include <Champs_compris_IJK.h>
27#include <Multigrille_Adrien.h>
28#include <init_forcage_THI.h>
29#include <IJK_Field_vector.h>
30#include <corrections_qdm.h>
31#include <IJK_Interfaces.h>
32#include <Equation_base.h>
134 for (
int dir = 0; dir < 3; dir++)
147 void calculer_vitesse_gauche(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
double& vx_moy,
double& vy_moy,
double& vz_moy);
148 void calculer_vitesse_droite(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
double& vx_moy,
double& vy_moy,
double& vz_moy);
151 void calculer_base_amont_bulle(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const DoubleTab& ubulles, DoubleTab& d1_amont_, DoubleTab& d2_amont_, DoubleTab& d3_amont_, DoubleTab& compteur_base_);
154 void calculer_v_amont_bulle(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const IJK_Field_double& wx,
const IJK_Field_double& wy,
const IJK_Field_double& wz, DoubleTab& v_amont_, DoubleTab& w_amont_,
const DoubleTab& d1_amont_,
const DoubleTab& d2_amont_,
const DoubleTab& d3_amont_, DoubleTab& compteur_);
157 void calculer_terme_S_x(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const IJK_Field_double& p, DoubleTab& S,
const int nx);
158 void calculer_terme_S_y(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const IJK_Field_double& p, DoubleTab& S,
const int ny);
159 void calculer_terme_S_z(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const IJK_Field_double& p, DoubleTab& S,
const int nz);
160 void calculer_terme_volumique(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz,
const IJK_Field_double& rho_,
const IJK_Field_double& indica_, DoubleTab& S);
162 void calculer_vitesses_bulle(
const IJK_Field_double& vx,
const IJK_Field_double& vy,
const IJK_Field_double& vz, DoubleTab& u_bulles_, DoubleTab& compteur_vBulles_);
171 void calculer_dv(
const double timestep,
const double time,
const int rk_step);
173 void compute_add_THI_force(
const IJK_Field_vector3_double& vitesse,
const int time_iteration,
const double dt,
const double current_time,
const Domaine_IJK& my_splitting);
203 void euler_explicit_update(
const IJK_Field_double& dv, IJK_Field_double& v,
const int k_layer)
const;
210 void rk3_sub_step(
const int rk_step,
const double total_timestep,
const double fractionnal_timestep,
const double time);
221 void deplacer_interfaces(
const double timestep,
const int rk_step, ArrOfDouble& var_volume_par_bulle,
const int first_step_interface_smoothing);
class Champ_base This class is the base of the fields hierarchy.
Similar to Champs_compris_interface but for IJK scalar and vector fields.
std::tuple< Motcle, Entity, Nature_du_champ, bool > FieldInfo_t
Same as Champs_compris, but specialised for IJK fields and also supports quering for vectorial fields...
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
class Equation_base The role of an equation is the calculation of one or more fields....
Base class for an incompressible fluid and its properties:
Milieu_base This class is the base of the (physical) medium hierarchy.
A character string (Nom) in uppercase.
Operateur & operateur(int) override
double velocity_bubble_integral_err_
FixedVector< Redistribute_Field, 3 > redistribute_to_splitting_ft_faces_
Parser parser_derivee_acceleration_
Vecteur3 terme_pression_ter_
Vecteur3 calculer_grad_p_moyen(const IJK_Field_double &pression)
int get_upstream_stencil() const
Vecteur3 terme_interfaces_bf_mass_solver_bis_
void set_time_for_corrections()
int get_compute_rising_velocities() const
bool has_champ(const Motcle &nom) const override
const IJK_Field_double & get_rho_field() const
double get_vitesse_upstream() const
IJK_Field_vector3_double force_rappel_ft_
const IJK_Field_vector3_double & get_velocity_ft() const
Vecteur3 rho_du_euler_ap_prediction_
IJK_Field_vector3_double rho_u_euler_av_rho_mu_ind_champ_
double vap_velocity_tmoy_
Fluide_Diphasique_IJK & milieu_ijk()
const Fluide_Diphasique_IJK & milieu_ijk() const
void calculer_vitesse_ft()
IJK_Field_double inv_rho_field_
double calculer_true_moyenne_de_phase_vap(const IJK_Field_double &vx)
void initialise_velocity_from_file(const Nom &fichier_reprise_vitesse)
void calculer_terme_source_acceleration(IJK_Field_double &vx, const double time, const double timestep, const int rk_step)
void create_forced_dilation()
IJK_Field_vector3_double rho_u_euler_ap_projection_champ_
Vecteur3 rho_u_euler_av_rho_mu_ind_
bool harmonic_nu_in_diff_operator_
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_min_
IJK_Field_double pressure_rhs_
velocity_convection_options_
@ non_conservative_simple
IJK_Field_vector3_double terme_repulsion_interfaces_ft_
void maj_indicatrice_rho_mu(const bool parcourir=true)
void get_redistribute_from_splitting_ft_faces(const IJK_Field_vector3_double &faces_ft, IJK_Field_vector3_double &faces_ns)
bool use_inv_rho_in_poisson_solver_
bool include_pressure_gradient_in_ustar_
IJK_Field_vector3_double velocity_
Vecteur3 rho_u_euler_ap_projection_
void compute_and_add_qdm_corrections()
int nombre_d_operateurs() const override
Probleme_FTD_IJK_base & probleme_ijk()
int use_bubbles_velocities_from_interface_
IJK_Field_vector3_double terme_pression_in_ustar_local_
Champs_compris_IJK_interface::FieldInfo_t FieldInfo_t
int get_improved_initial_pressure_guess() const
friend class Statistiques_dns_ijk_FT
bool use_harmonic_viscosity_
double facteur_variable_source_
Vecteur3 terme_interfaces_bf_mass_solver_
int compute_rising_velocities_
IJK_Field_double pressure_
IJK_Field_vector3_double variable_source_
IJK_Field_double potential_phi_
double nb_diam_ortho_shear_perio_
IJK_Field_double kappa_ns_
double velocity_bubble_new_
Vecteur3 rho_u_euler_av_prediction_
const Schema_Temps_IJK_base & schema_temps_ijk() const
OBS_PTR(Milieu_base) le_fluide_
Noms expression_vitesse_initiale_
IJK_Field_vector3_double terme_diffusion_mass_solver_
bool test_etapes_et_bilan_
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
Boundary_Conditions boundary_conditions_
int stencil_vitesse_entree_
FixedVector< Redistribute_Field, 3 > redistribute_from_splitting_ft_faces_
int use_bubbles_velocities_from_barycentres_
IJK_Field_double RK3_F_pressure_
IJK_Field_vector3_double rho_u_euler_av_prediction_champ_
IJK_Field_vector3_double terme_repulsion_interfaces_ns_
double vol_bulle_monodisperse_
DoubleTab centre_gravite_bulles_
Multigrille_Adrien poisson_solver_
IJK_Field_double kappa_ft_
bool correction_semi_locale_volume_bulle_
void initialise_ns_fields()
IJK_Field_double rho_field_
int vitesse_entree_compo_to_force_
OBS_PTR(IJK_Interfaces) interfaces_
IJK_Field_vector3_double terme_source_interfaces_ns_
Vecteur3 terme_moyen_convection_mass_solver_
bool disable_convection_qdm_
const Operateur & operateur(int) const override
void rk3_sub_step(const int rk_step, const double total_timestep, const double fractionnal_timestep, const double time)
Vecteur3 integrated_residu_
bool diffusion_alternative_
bool harmonic_nu_in_calc_with_indicatrice_
void set_fichier_reprise_vitesse(const Nom &prefix)
void calculer_terme_volumique(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &rho_, const IJK_Field_double &indica_, DoubleTab &S)
Vecteur3 terme_interfaces_conv_diff_mass_solver_
IJK_Field_vector3_double rho_v_
bool refuse_patch_conservation_QdM_RK3_source_interf_
IJK_Field_vector3_double RK3_F_velocity_
int get_disable_convection_qdm() const
double coef_rayon_force_rappel_
bool disable_diffusion_qdm_
void update_v_ghost_from_rho_v()
const IJK_Field_double & get_pressure() const
double coef_force_time_n_
int fill_rising_velocities_
Vecteur3 terme_moyen_diffusion_mass_solver_
bool has_champ_vectoriel(const Motcle &nom) const override
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const override
void sauvegarder_equation(const Nom &, SFichier &) const
IJK_Field_vector3_double terme_pression_local_
void compute_add_external_forces(const int dir)
bool disable_solveur_poisson_
bool get_upstream_velocity_measured() const
friend class Postprocessing_IJK
Vecteur3 u_euler_ap_rho_mu_ind_
Vecteur3 terme_convection_
int get_use_bubbles_velocities_from_interface() const
IJK_Field_double pressure_ghost_cells_
int deactivate_remeshing_velocity_
double upstream_velocity_bubble_factor_deriv_
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_max_
bool suppression_rejetons_
IJK_Field_vector3_double velocity_ft_
void set_param_reprise_pb(Param &)
bool improved_initial_pressure_guess_
Vecteur3 rho_u_euler_ap_rho_mu_ind_
void initialise_ijk_fields()
double L_boite_vol_controle_
const Milieu_base & milieu() const override
double coef_immobilisation_
IJK_Field_vector3_double force_rappel_
Vecteur3 terme_interfaces_
int correction_bilan_qdm_
ArrOfInt correction_force_
IJK_Field_vector3_double terme_abs_repulsion_interfaces_ns_
double calculer_true_moyenne_de_phase_liq(const IJK_Field_double &vx)
void deplacer_interfaces(const double timestep, const int rk_step, ArrOfDouble &var_volume_par_bulle, const int first_step_interface_smoothing)
double get_rho_field_ijk(int i, int j, int k) const
void euler_explicit_update(const IJK_Field_double &dv, IJK_Field_double &v, const int k_layer) const
void build_redistribute_extended_splitting_ft()
Nom expression_potential_phi_
void calculer_vitesse_gauche(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, double &vx_moy, double &vy_moy, double &vz_moy)
void forcage_control_ecoulement()
Vecteur3 calculer_grad_p_over_rho_moyen(const IJK_Field_double &pression)
IJK_Field_vector3_double & get_velocity()
init_forcage_THI forcage_
int timestep_reprise_vitesse_
Vecteur3 rho_du_euler_ap_projection_
void calculer_terme_asservissement(double &ax, double &ay, double &az)
bool & get_upstream_velocity_measured()
double get_nb_diam_upstream() const
void completer() override
Completes the construction (initialization) of objects associated with the equation.
void calculer_v_amont_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &wx, const IJK_Field_double &wy, const IJK_Field_double &wz, DoubleTab &v_amont_, DoubleTab &w_amont_, const DoubleTab &d1_amont_, const DoubleTab &d2_amont_, const DoubleTab &d3_amont_, DoubleTab &compteur_)
IJK_Field_double molecular_mu_
IJK_Field_vector3_double terme_abs_repulsion_interfaces_ft_
IJK_Field_vector3_double rho_du_euler_ap_prediction_champ_
double calculer_moyenne_de_phase_liq(const IJK_Field_double &vx)
ArrOfDouble terme_source_correction_
Schema_Temps_IJK_base & schema_temps_ijk()
Operateur_IJK_faces_diff velocity_diffusion_op_
Champ_Inc_base & inconnue() override
IJK_Field_vector3_double terme_source_interfaces_ft_
void initialise_velocity_using_expression(const Noms &expression_vitesse_initiale)
Vecteur3 calculer_inv_rho_grad_p_moyen(const IJK_Field_double &inv_rho, const IJK_Field_double &pression)
const Boundary_Conditions & get_boundary_conditions() const
void compute_add_THI_force_sur_d_velocity(const IJK_Field_vector3_double &vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK &my_splitting, const int facteur)
TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface_
void complete_initialise_ijk_fields()
double liq_velocity_tmoy_
const IJK_Field_vector3_double & get_velocity() const
Redistribute_Field redistribute_to_splitting_ft_elem_
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const override
void calculer_terme_S_z(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int nz)
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
bool use_inv_rho_for_mass_solver_and_calculer_rho_v_
const IJK_Field_double & get_molecular_mu() const
double upstream_velocity_bubble_factor_
int & get_compute_rising_velocities()
double velocity_bubble_scope_
const Champ_Inc_base & inconnue() const override
corrections_qdm qdm_corrections_
int & get_use_bubbles_velocities_from_barycentres()
int get_upstream_dir() const
void update_indicatrice_variables_monofluides()
Noms expression_variable_source_
IJK_Field_vector3_double backup_terme_source_interfaces_ns_
Redistribute_Field & redistrib_from_ft_elem()
bool projection_initiale_demandee_
int & get_use_bubbles_velocities_from_interface()
Redistribute_Field redistribute_from_splitting_ft_elem_
Nom expression_pression_initiale_
DoubleTab vitesses_translation_bulles_
void compute_and_add_qdm_corrections_monophasic()
void deplacer_interfaces_rk3(const double timestep, const int rk_step, ArrOfDouble &var_volume_par_bulle)
void discretiser() override
Discretizes the equation.
IJK_Field_double d_pressure_
void compute_var_volume_par_bulle(ArrOfDouble &var_volume_par_bulle)
void compute_add_THI_force(const IJK_Field_vector3_double &vitesse, const int time_iteration, const double dt, const double current_time, const Domaine_IJK &my_splitting)
int get_disable_diffusion_qdm() const
double terme_source_acceleration_z_
IJK_Field_vector3_double rho_du_euler_ap_projection_champ_
velocity_diffusion_options_
void euler_time_step(ArrOfDouble &var_volume_par_bulle)
Nom expression_derivee_acceleration_
bool upstream_velocity_measured_
IJK_Field_double div_rhou_
double velocity_bubble_old_
Vecteur3 terme_interfaces_af_mass_solver_
IJK_Field_vector3_double terme_diffusion_local_
double upstream_velocity_bubble_factor_integral_
void calculer_terme_source_acceleration_z(IJK_Field_double &vz, const double time, const double timestep, const int rk_step)
Nom fichier_reprise_vitesse_
void compute_correction_for_momentum_balance(const int rk_step)
IJK_Field_vector3_double d_velocity_
void calculer_dv(const double timestep, const double time, const int rk_step)
TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face_
void associer_interfaces(const IJK_Interfaces &inter)
void associer_pb_base(const Probleme_base &) override
Associates with the Problem passed as parameter.
bool get_flag_variable_source() const
double calculer_moyenne_de_phase_vap(const IJK_Field_double &vx)
Redistribute_Field redistribute_from_splitting_ft_elem_ghostz_
void update_v_or_rhov(bool with_p=false)
DoubleTab mean_bubble_rotation_vector_
int & get_fill_rising_velocities()
void terme_source_gravite(IJK_Field_double &dv, int k_index, int dir) const
const IJK_Field_double & get_pressure_ghost_cells() const
void calculer_terme_S_y(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int ny)
void associer_milieu_base(const Milieu_base &) override
Nom expression_derivee_facteur_variable_source_
double coeff_evol_volume_
bool resolution_fluctuations_
IJK_Field_vector3_double terme_convection_mass_solver_
void write_check_etapes_et_termes(const int rk_step)
IJK_Field_vector3_double zero_field_ft_
Parser parser_derivee_facteur_variable_source_
void write_qdm_corrections_information()
Champs_compris_IJK champs_compris_
Vecteur3 terme_pression_bis_
void redistribute_from_splitting_ft_elem(const IJK_Field_double &input_field, IJK_Field_double &output_field)
void fill_variable_source_and_potential_phi(const double time)
int get_fill_rising_velocities() const
IJK_Field_vector3_double rho_u_euler_ap_rho_mu_ind_champ_
double coef_ammortissement_
IJK_Field_vector3_double psi_velocity_
double vitesse_upstream_reprise_
void redistribute_to_splitting_ft_elem(const IJK_Field_double &input_field, IJK_Field_double &output_field)
Nom expression_vitesse_upstream_
void calculer_vitesse_droite(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, double &vx_moy, double &vy_moy, double &vz_moy)
int preparer_calcul() override
Everything that does not depend on other possible problems.
IJK_Field_vector3_double d_v_diff_et_conv_
IJK_Field_vector3_double laplacien_velocity_
bool flag_variable_source_
double terme_source_acceleration_
Operateur_IJK_faces_conv velocity_convection_op_
void calculer_terme_S_x(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const IJK_Field_double &p, DoubleTab &S, const int nx)
void calculer_vitesses_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, DoubleTab &u_bulles_, DoubleTab &compteur_vBulles_)
Redistribute_Field & redistrib_to_ft_elem()
IJK_Field_vector3_double backup_terme_source_interfaces_ft_
bool disable_source_interf_
int get_use_bubbles_velocities_from_barycentres() const
void test_etapes_et_bilan_rho_u_euler(bool apres)
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
void set_param(Param &titi) const override
Vecteur3 terme_diffusion_
double diam_bulle_monodisperse_
int get_suppression_rejetons() const
Vecteur3 terme_pression_in_ustar_
void calculer_base_amont_bulle(const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, const DoubleTab &ubulles, DoubleTab &d1_amont_, DoubleTab &d2_amont_, DoubleTab &d3_amont_, DoubleTab &compteur_base_)
class Nom: a character string for naming TRUST objects.
An array of character strings (VECT(Nom)).
class Operateur Generic class of the operator hierarchy.
Helper class to factorize the readOn method of Objet_U classes.
Representation of data for the Parser class.
class Probleme_base It is a Probleme_U that is not a coupling.
SFichier is to the C++ ofstream class what Sortie is to the C++ ostream class.