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);
classe Champ_base Cette classe est la base de la hierarchie des champs.
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.
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Une chaine de caractere (Nom) en majuscules.
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
Complete la construction (initialisation) des objets associes a l'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
Discretise l'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
S'associe au Probleme passe en parametre.
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
Tout ce qui ne depend pas des autres problemes eventuels.
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 Une chaine de caractere pour nommer les objets de TRUST
Un tableau de chaine de caracteres (VECT(Nom)).
classe Operateur Classe generique de la hierarchie des operateurs.
Helper class to factorize the readOn method of Objet_U classes.
Representation des donnees de la classe Parser.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...