16#ifndef IJK_Interfaces_included
17#define IJK_Interfaces_included
19#include <Connectivite_frontieres.h>
20#include <IJK_Field_vector.h>
22#include <Linear_algebra_tools_impl.h>
23#include <Maillage_FT_IJK.h>
24#include <Equation_base.h>
25#include <Parcours_interface.h>
26#include <Remaillage_FT_IJK.h>
29#include <Linear_algebra_tools_impl.h>
30#include <SurfaceVapeurIJKComputation.h>
31#include <ComputeValParCompoInCell.h>
33#include <Intersection_Interface_ijk.h>
34#include <IJK_Composantes_Connex.h>
35#include <TRUSTTabFT_cut_cell.h>
37#include <Cut_cell_surface_efficace.h>
38#include <Domaine_dis_base.h>
39#include <Option_IJK.h>
40#include <Champs_compris_IJK_interface.h>
41#include <Champs_compris_IJK.h>
82 bool has_champ(
const Motcle& nom)
const override {
return champs_compris_.has_champ(nom); }
92 void dumplata_ft_mesh(
const char *filename,
const char *meshname,
int step)
const;
97 const int thermal_probes_ghost_cells=0,
98 const bool compute_vint=
true,
99 const bool is_switch=
false);
103 const char *lata_name,
104 const int lata_step)
const;
110 const DoubleTab& vitesses_translation_bulles,
111 const DoubleTab& mean_bubble_rotation_vector,
112 const DoubleTab& centre_gravite,
113 ArrOfDouble& var_volume);
115 DoubleTab& mean_bubble_rotation_vector,
116 DoubleTab& centre_gravite,
117 const int first_step_interface_smoothing = 0);
119 const DoubleTab& vitesses_translation_bulles,
120 const DoubleTab& mean_bubble_rotation_vector,
121 const DoubleTab& centre_gravite,
125 const int first_step_interface_smoothing = 0);
127 const DoubleTab& vitesses_translation_bulles,
128 const DoubleTab& mean_bubble_rotation_vector,
129 const DoubleTab& centre_gravite,
135 const DoubleTab& vitesses_translation_bulles,
136 const DoubleTab& mean_bubble_rotation_vector,
137 const DoubleTab& centre_gravite,
139 const int first_step_interface_smoothing = 0);
141 const DoubleTab& bounding_box_bulles,
142 const Cut_field_vector3_double& cut_field_velocity,
143 const DoubleTab& vitesses_translation_bulles,
144 const DoubleTab& mean_bubble_rotation_vector,
145 const DoubleTab& positions_bulles);
149 const DoubleTab& bounding_box_offsetp,
150 const DoubleTab& bounding_box_offsetm,
151 const DoubleTab& authorized_bounding_box,
152 ArrOfInt& masque_duplicata_pour_compo_reel);
155 const DoubleTab& authorized_bounding_box,
156 ArrOfInt& masque_duplicata_pour_compo);
171 IJK_Field_vector3_double& rappel,
172 const IJK_Field_vector3_double& vitesse,
173 const IJK_Field_double& indic_ns,
174 const IJK_Field_double& indic_ft,
175 const double coef_immo,
177 const double current_time,
178 const double coef_ammortissement,
179 const double coef_rayon_force_rappel,
181 double coef_mean_force,
182 double coef_force_time_n);
184 const IJK_Field_double& indic_ns,
185 const DoubleTab& individual_forces,
186 const ArrOfDouble& volume_reel,
187 const DoubleTab& position,
188 const double coef_rayon_force_rappel);
190 const IJK_Field_double& indic_ns,
191 const IJK_Field_double& indic_ft,
192 DoubleTab& individual_forces,
193 const ArrOfDouble& volume_reel,
194 const DoubleTab& position);
197 const IJK_Field_double& indic,
198 const ArrOfDouble& volume_reel,
199 const DoubleTab& position)
const;
212 void calcul_surface_efficace_face(TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face,
double timestep,
const Cut_field_vector3_double& total_velocity);
213 void calcul_surface_efficace_interface(TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface,
double timestep,
const Cut_field_vector3_double& velocity);
228 Cerr <<
"IJK_Interfaces::get_nb_bulles_ghost : On a " <<
nb_bulles_ghost_ <<
" bulles ghost." << finl;
257 Cerr <<
"Erreur IJK_Interfaces: Incoherence parametres jeu de donnees, seuil_indicatrice_petite_ <= seuil_indicatrice_negligeable_." << finl;
330 IJK_Field_double& kappa_ai,
331 IJK_Field_vector3_double& normale_cell,
332 const int igroup)
const;
336 ArrOfInt& liste_composantes_connexes_dans_element)
const;
347 ArrOfDouble& bubbles_rising_vel_mag);
351 DoubleTab& barycentres,
352 const int& store_values);
354 DoubleTab& centre_gravite)
const;
357 void calculer_surfactant(ArrOfDouble& surfactant,ArrOfDouble& surfactant_min,ArrOfDouble& surfactant_max)
const;
364 IJK_Field_double& kappa_ai,
365 IJK_Field_vector3_double& normale_cell)
const;
368 ArrOfInt& drapeau_liquide)
const;
371 const IntVect& vecteur_composantes,
372 ArrOfInt& drapeau_vapeur)
const;
374 ArrOfInt& drapeau_vapeur)
const;
379 IJK_Field_vector3_double& vpoint,
380 IJK_Field_vector3_double& vrepul,
381 IJK_Field_vector3_double& vabsrepul
386 ArrOfDouble& var_volume,
410 double get_barycentre(
bool next_time,
int bary_compo,
int phase,
int i,
int j,
int k)
const;
411 double get_barycentre_face(
bool next_time,
int face_dir,
int bary_compo,
int phase,
int i,
int j,
int k)
const;
434 double weighted_barycentre = initial_barycentre*initial_area;
435 double opposing_area = 1 - initial_area;
436 double opposing_barycentre = ((opposing_area == 0.) || (opposing_area == 1.)) ? 1./2. : (1./2. - weighted_barycentre)/opposing_area;
455 const IJK_Field_int& nb_compo_traversante,
462 for (
int compo = 0; compo <= nb_compo_traversante(i, j, k); compo++)
464 res += field_for_compo[compo](i, j, k);
466 if (nb_compo_traversante(i,j,k) > 0)
467 return res / nb_compo_traversante(i, j, k);
474 const IJK_Field_int& nb_compo_traversante,
475 IJK_Field_vector3_double& mean_par_compo_field
478 const int ni = nb_compo_traversante.
ni();
479 const int nj = nb_compo_traversante.
nj();
480 const int nk = nb_compo_traversante.
nk();
481 for (
int dir=0; dir < 3; dir ++)
482 for (
int i=0; i < ni; i++)
483 for (
int j=0; j < nj; j++)
484 for (
int k=0; k < nk; k++)
487 for (
int compo = 0; compo <= nb_compo_traversante(i, j, k); compo++)
489 int idx = 3 * compo + dir;
490 const double last_val = field_for_compo[idx](i, j, k);
493 if (nb_compo_traversante(i,j,k) > 0)
494 res = res / nb_compo_traversante(i, j, k);
497 mean_par_compo_field[dir](i,j,k) = res;
503 const IJK_Field_int& nb_compo_traversante,
511 for (
int compo = 0; compo <= nb_compo_traversante(i, j, k); compo++)
513 int idx = 3 * compo + dir;
514 const double last_val = field_for_compo[idx](i, j, k);
517 if (nb_compo_traversante(i,j,k) > 0)
518 return res / nb_compo_traversante(i, j, k);
548 int phase = (int)indicatrice;
554 inline double I_nonzero(
const int phase,
const int i,
const int j,
const int k)
const
556 double current_indic = (phase == 0) ? 1 -
I(i, j, k) :
I(i, j, k);
557 if (current_indic == 0)
559 double other_indic = (phase == 0) ? 1 -
In(i, j, k) :
In(i, j, k);
560 return (other_indic == 0) ? 1. : other_indic;
564 return current_indic;
567 inline double In_nonzero(
const int phase,
const int i,
const int j,
const int k)
const
569 double current_indic = (phase == 0) ? 1 -
In(i, j, k) :
In(i, j, k);
570 if (current_indic == 0)
572 double other_indic = (phase == 0) ? 1 -
I(i, j, k) :
I(i, j, k);
573 return (other_indic == 0) ? 1. : other_indic;
577 return current_indic;
581 static inline int est_pure(
double indicatrice) {
return ((indicatrice == 0.) || (indicatrice == 1.)); }
582 static inline int devient_pure(
double old_indicatrice,
double next_indicatrice) {
return ((!
est_pure(old_indicatrice)) && (
est_pure(next_indicatrice))); }
603 const double&
SI(
const int compo,
const int i,
const int j,
const int k)
const
607 double SI(
const int i,
const int j,
const int k)
const
628 const double&
nI(
const int compo,
const int i,
const int j,
const int k)
const
639 const double&
nIn(
const int compo,
const int i,
const int j,
const int k)
const
653 const double&
xI(
const int compo,
const int i,
const int j,
const int k)
const
673 const double&
Sf(
const int compo,
const int i,
const int j,
const int k)
const
679 const double&
Sfn(
const int compo,
const int i,
const int j,
const int k)
const
687 double Sfm(
const int compo,
const int i,
const int j,
const int k)
const
695 const DoubleTab& gravite,
696 const double delta_rho,
700 const bool parcourir =
true
703 IJK_Field_double& indicatrice_intermediaire_ft_,
704 IJK_Field_double& indicatrice_intermediaire_ns_,
705 IJK_Field_vector3_double& indicatrice_surfacique_intermediaire_face_ft_,
706 IJK_Field_vector3_double& indicatrice_surfacique_intermediaire_face_ns_,
707 const bool parcourir =
true
771 const int& compute_rising_velocities,
772 const int& fill_rising_velocities,
773 const int& use_bubbles_velocities_from_interface,
774 const int& use_bubbles_velocities_from_barycentres)
779 compute_rising_velocities,
780 fill_rising_velocities,
781 use_bubbles_velocities_from_interface,
782 use_bubbles_velocities_from_barycentres);
816 ArrOfDouble& potentiels_sommets,
817 ArrOfDouble& repulsions_sommets,
818 const DoubleTab& gravite,
819 const double delta_rho,
830 const DoubleTab& gravite,
831 const double delta_rho,
860 const ArrOfDouble& surface_facette,
861 const ArrOfDouble& surface_par_bulle,
862 const ArrOfInt& compo_connexes_facettes,
863 const int nbulles_reelles,
864 const int nbulles_ghost,
865 const DoubleTab& vitesse_sommets,
866 DoubleTab& vitesses_translation_sommets)
const;
868 const ArrOfDouble& surface_facette,
869 const ArrOfDouble& surface_par_bulle,
870 const ArrOfInt& compo_connexes_facettes,
871 const int nbulles_reelles,
872 const int nbulles_ghost,
873 const DoubleTab& centre_gravite,
874 const DoubleTab& vitesse_sommets,
875 const DoubleTab& vitesse_translation_sommets,
876 DoubleTab& mean_bubble_rotation_vector)
const;
880 DoubleTab& coord_sommets,
881 ArrOfInt& compo_sommet,
882 ArrOfDouble& distance,
886 DoubleTab& v_closer);
888 const ArrOfInt& compo_connexe_sommets,
889 const DoubleTab& vinterp_tmp,
891 ArrOfDouble& distance,
893 const double distmax);
896 const ArrOfInt& compo_connexe_sommets,
897 const DoubleTab& vinterp_tmp,
899 ArrOfDouble& distance,
901 const double distmax);
1115 IJK_Field_double indicatrice_ft_test_;
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.
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 Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
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....
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
The class IJK_Field_vector is a fixed array of polymorphic IJK fields.
void reset_flags_and_counters()
Nom lata_interfaces_meshname_
ArrOfInt ghost_compo_converter_
const Remaillage_FT_IJK & remaillage_ft_ijk() const
void calculer_kappa_ft(IJK_Field_double &kappa_ft)
void associate_rising_velocities_parameters(const Domaine_IJK &splitting, const int &compute_rising_velocities, const int &fill_rising_velocities, const int &use_bubbles_velocities_from_interface, const int &use_bubbles_velocities_from_barycentres)
void calculer_surface_interface(IJK_Field_double &surf_interface, IJK_Field_double &indic)
const IJK_Field_vector< double, max_authorized_nb_of_groups_ > & groups_indicatrice_ft() const
const IJK_Field_double & get_surface_interface_next() const
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > phi_par_compo_
DoubleTab positions_reference_
ArrOfDoubleFT distance_autres_interfaces_
FixedVector< IJK_Field_vector3_double, 2 > indicatrice_surfacique_face_ft_
IJK_Field_vector3_double deformation_velocity_
void set_fichier_sauvegarde(const char *lataname)
const DoubleTabFT_cut_cell_vector3 & get_indicatrice_surfacique_efficace_face() const
static double opposing_barycentre(double initial_barycentre, double initial_area)
Vecteur3 nI(const int i, const int j, const int k) const
SurfaceVapeurIJKComputation surface_vapeur_par_face_computation_
int posttraiter_champs_instantanes(const Motcles &liste_post_instantanes, const char *lata_name, const int lata_step) const
double portee_force_repulsion_
Nom fichier_reprise_interface_
const DoubleTabFT_cut_cell_vector3 & get_vitesse_deplacement_interface() const
double phase_mourrante(const int phase, const int i, const int j, const int k) const
const Milieu_base & milieu() const override
void calculer_surfactant(ArrOfDouble &surfactant, ArrOfDouble &surfactant_min, ArrOfDouble &surfactant_max) const
const ArrOfDouble & get_bubbles_velocities_magnitude_from_barycentres() const
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > indicatrice_par_compo_
const DoubleTab & get_bubble_barycentres_old_new(const int &get_new) const
void set_reprise(const int i)
int follow_colors() const
void compute_surface_average_per_bubble(const ArrOfDouble &surfaces, const ArrOfDouble &in, ArrOfDouble &out) const
void ajouter_terme_source_interfaces(IJK_Field_vector3_double &vpoint, IJK_Field_vector3_double &vrepul, IJK_Field_vector3_double &vabsrepul) const
const Intersection_Interface_ijk_face & get_intersection_ijk_face() const
const Operateur & operateur(int) const override
const IJK_Field_vector< double, max_authorized_nb_of_groups_ > & groups_indicatrice_n_ns() const
int is_terme_gravite_rhog() const
Probleme_FTD_IJK_base & probleme_ijk()
int a_desequilibre_final(double old_indicatrice, double next_indicatrice) const
FixedVector< IJK_Field_double, 2 > indicatrice_ns_
void initialize(const Domaine_IJK &splitting_FT, const Domaine_IJK &splitting_NS, const Domaine_dis_base &domaine_dis, const int thermal_probes_ghost_cells=0, const bool compute_vint=true, const bool is_switch=false)
int only_old_below_small_threshold_for_phase(int phase, double old_indicatrice, double next_indicatrice) const
double Sfm(const int compo, const int i, const int j, const int k) const
DoubleTab bubbles_velocities_
Nom fichier_sauvegarde_interface_
void set_param_reprise_pb(Param &)
int get_nb_bulles_ghost(const int print=0) const
bool compute_surf_mouillees_
Vecteur3 xI(const int i, const int j, const int k) const
friend class IJK_Composantes_Connex
void set_compute_surfaces_mouillees()
void deplacer_bulle_perio(const ArrOfInt &masque_deplacement_par_compo)
double factor_length_duplicata_
void calculer_var_volume_remaillage(double timestep, const DoubleTab &vitesses_translation_bulles, const DoubleTab &mean_bubble_rotation_vector, const DoubleTab ¢re_gravite, ArrOfDouble &var_volume)
void calculer_indicatrices(IJK_Field_vector3_double &indic)
void supprimer_certaines_bulles_reelles()
void posttraiter_tous_champs(Motcles &liste) const
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > surface_par_compo_
const ArrOfDoubleFT & get_distance_autres_interfaces() const
void transporter_maillage_deformation(const int correction_semi_locale_volume_bulle, const DoubleTab &vitesses_translation_bulles, const DoubleTab &mean_bubble_rotation_vector, const DoubleTab ¢re_gravite, const double dt_tot, ArrOfDouble &dvol, const int rk_step, const int first_step_interface_smoothing=0)
double seuil_indicatrice_negligeable_
void calculer_indicatrice_optim(IJK_Field_double &indic)
const double & nIn(const int compo, const int i, const int j, const int k) const
int est_reguliere(double old_indicatrice, double next_indicatrice) const
DoubleTab bubbles_bary_old_
const IJK_Field_double & I_ft() const
static int devient_diphasique(double old_indicatrice, double next_indicatrice)
const double & SI(const int compo, const int i, const int j, const int k) const
void completer() override
Complete la construction (initialisation) des objets associes a l'equation.
const FixedVector< FixedVector< IJK_Field_double, 2 >, 3 > & get_barycentre_phase1_face_ft() const
void compute_drapeaux_vapeur_v3(const Maillage_FT_IJK &mesh, const Domaine_IJK &split, const IntVect &vecteur_composantes, ArrOfInt &drapeau_vapeur) const
DoubleTabFT_cut_cell_vector3 vitesse_deplacement_interface_
void calculer_color(ArrOfInt &color) const
void calculer_indicatrice_apres_remaillage(const bool parcourir=true)
void calculer_vitesse_de_deformation(int compo, const DoubleTab &bounding_box_bulles, const Cut_field_vector3_double &cut_field_velocity, const DoubleTab &vitesses_translation_bulles, const DoubleTab &mean_bubble_rotation_vector, const DoubleTab &positions_bulles)
int lire_motcle_non_standard(const Motcle &un_mot, Entree &is) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
int timestep_sauvegarde_interface_
FixedVector< IJK_Field_double, 2 > surface_interface_ns_
const FixedVector< FixedVector< IJK_Field_double, 2 >, 3 > & get_barycentre_phase1_face() const
ArrOfDouble var_volume_correction_globale_
void compute_indicatrice_non_perturbe(IJK_Field_double &indic_np, const IJK_Field_double &indic, const ArrOfDouble &volume_reel, const DoubleTab &position) const
const Domaine_dis_base & get_domaine_dis() const
void associer_pb_base(const Probleme_base &) override
S'associe au Probleme passe en parametre.
Intersection_Interface_ijk_face & get_set_intersection_ijk_face()
FixedVector< IJK_Field_vector3_double, 2 > bary_of_interf_ns_
double delta_p_wall_max_repulsion() const
int compute_list_compo_connex_in_element(const Maillage_FT_IJK &mesh, const int elem, ArrOfInt &liste_composantes_connexes_dans_element) const
int get_ghost_number_from_compo(const int compo) const
const DoubleTab & get_bubble_rising_vectors_from_barycentres() const
const IntVect & get_num_compo() const
void calculer_aire_interfaciale_for_compo(IJK_Field_double &ai, const int compo) const
bool has_readen_barycentres_prev_
void creer_duplicata_bulles()
DoubleTabFT_cut_cell_scalar surface_efficace_interface_
Champ_Inc_base & inconnue() override
void calculer_vmoy_translation_composantes_connexes(const Maillage_FT_IJK &maillage, const ArrOfDouble &surface_facette, const ArrOfDouble &surface_par_bulle, const ArrOfInt &compo_connexes_facettes, const int nbulles_reelles, const int nbulles_ghost, const DoubleTab &vitesse_sommets, DoubleTab &vitesses_translation_sommets) const
const IJK_Field_double & I() const
void transporter_maillage_remaillage(int correction_semi_locale_volume_bulle, const DoubleTab &vitesses_translation_bulles, const DoubleTab &mean_bubble_rotation_vector, const DoubleTab ¢re_gravite, double dt_tot, ArrOfDouble &dvol, const int rk_step, const double temps)
int flag_positions_reference_
int get_flag_positions_reference() const
IJK_Field_double indicatrice_apres_remaillage_ft_
void update_indicatrice_variables_monofluides()
FixedVector< IJK_Field_vector3_double, 2 > indicatrice_surfacique_face_ns_
void compute_drapeaux_vapeur_v2(const IntVect &vecteur_composantes, ArrOfInt &drapeau_liquide) const
DoubleTabFT_cut_cell_vector3 indicatrice_surfacique_efficace_face_initial_
FixedVector< FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ >, 2 > bary_par_compo_
const FixedVector< IJK_Field_vector3_double, 3 > & get_barycentre_vapeur_par_face_ft() const
DoubleTab RK3_G_store_vi_
const ArrOfInt & get_compo_to_group() const
OBS_PTR(Probleme_FTD_IJK_base) ref_ijk_ft_
FixedVector< FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ >, 2 > normale_par_compo_
IJK_Field_vector3_double indicatrice_surfacique_avant_remaillage_face_ft_
IJK_Composantes_Connex ijk_compo_connex_
const DoubleTabFT_cut_cell_vector3 & get_coord_deplacement_interface() const
void convert_to_IntVect(const ArrOfInt &in, IntVect &out) const
DoubleTab bubbles_bary_new_
FixedVector< FixedVector< FixedVector< IJK_Field_double, 2 >, 3 >, 2 > barycentre_phase1_face_ns_
const Champ_Inc_base & inconnue() const override
void dupliquer_bulle_perio(ArrOfInt &masque_duplicata_pour_compo)
const DoubleTab & get_bubble_velocities_from_barycentres() const
const IJK_Field_vector< double, max_authorized_nb_of_groups_ > & groups_indicatrice_ns() const
OBS_PTR(Domaine_dis_base) refdomaine_dis_
ArrOfDouble var_volume_deformation_
double I(const int i, const int j, const int k) const
void calculer_barycentre(IJK_Field_vector3_double &baric, IJK_Field_double &indic)
const IJK_Field_vector3_double & get_barycentre_phase1_next_ft() const
const DoubleTab & get_bubble_velocities_from_interface() const
double In_nonzero(const int phase, const int i, const int j, const int k) const
std::map< Motcle, IJK_Field_double > scalar_post_fields_
const IJK_Field_vector3_double & get_surface_vapeur_par_face_ft() const
ArrOfDouble var_volume_remaillage_
Remaillage_FT_IJK remaillage_ft_ijk_
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > grady_sigma_par_compo_
int get_nb_bulles_reelles() const
static int phase_naissante(int phase, double old_indicatrice, double next_indicatrice)
FixedVector< IJK_Field_int, 2 > nb_compo_traversante_
void set_fichier_reprise(const char *lataname)
void compute_compo_connex_from_bounding_box()
void preparer_duplicata_bulles(const DoubleTab &bounding_box_of_bubbles, const DoubleTab &bounding_box_offsetp, const DoubleTab &bounding_box_offsetm, const DoubleTab &authorized_bounding_box, ArrOfInt &masque_duplicata_pour_compo_reel)
int get_nb_face_mouillees() const
int ghost_compo_converter(const int i) const
int dt_impression_bilan_indicatrice_
bool read_bubbles_barycentres_vel(const Nom &interf_name, FixedVector< ArrOfDouble, 3 > &bubbles_rising_dir, FixedVector< ArrOfDouble, 3 > &bubbles_rising_vel, ArrOfDouble &bubbles_rising_vel_mag)
const double & nI(const int compo, const int i, const int j, const int k) const
const IJK_Field_vector3_double & get_indicatrice_surfacique_face_old() const
bool has_champ(const Motcle &nom) const override
DoubleTab bubbles_velocities_bary_
FixedVector< IJK_Field_vector3_double, 2 > normal_of_interf_
void discretiser() override
Discretise l'equation.
double I_nonzero(const int phase, const int i, const int j, const int k) const
Parcours_interface parcours_
void calculer_phi_repuls_sommet(ArrOfDouble &potentiels_sommets, ArrOfDouble &repulsions_sommets, const DoubleTab &gravite, const double delta_rho, const double sigma, const double time, const int itstep)
double portee_wall_repulsion_
FixedVector< IJK_Field_vector3_double, 2 > barycentre_phase1_ft_
DoubleTabFT_cut_cell_vector3 indicatrice_surfacique_efficace_face_
bool active_repulsion_paroi_
void postraiter_colors(Sortie &os, const double current_time) const
bool read_bubbles_barycentres(const Nom &interf_name, const Nom &suffix, FixedVector< ArrOfDouble, 3 > &bubbles_bary)
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const override
FixedVector< FixedVector< FixedVector< IJK_Field_double, 2 >, 3 >, 2 > barycentre_phase1_face_ft_
void calculer_indicatrice_surfacique_barycentre_face(IJK_Field_vector3_double &indic_surfacique_face, FixedVector< FixedVector< IJK_Field_double, 2 >, 3 > &baric_face, IJK_Field_double &indic, IJK_Field_vector3_double &norme)
int get_recompute_indicator() const
void calculer_aire_interfaciale(IJK_Field_double &ai) const
int only_old_below_small_threhshold(double old_indicatrice, double next_indicatrice) const
int next_below_small_threshold(double old_indicatrice, double next_indicatrice) const
void calculer_normale_et_aire_interfaciale(IJK_Field_double &ai, IJK_Field_double &kappa_ai, IJK_Field_vector3_double &normale_cell) const
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > gradx_sigma_par_compo_
const IJK_Field_vector3_double & get_surface_vapeur_par_face() const
FixedVector< int, 2 > n_faces_mouilles_
void set_seuil_indicatrice_petite(double seuil_indicatrice_petite)
void calculer_indicatrice(IJK_Field_double &indic)
void update_old_intersections()
DoubleTab bounding_box_duplicate_criteria_
void RK3_G_store_vi_echange_esp_vect()
void detecter_et_supprimer_rejeton(bool duplicatas_etaient_presents)
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > repuls_par_compo_
void transporter_maillage_rigide(const double dt_tot, const DoubleTab &vitesses_translation_bulles, const DoubleTab &mean_bubble_rotation_vector, const DoubleTab ¢re_gravite, const int rk_step, const int first_step_interface_smoothing=0)
int verbosite_surface_efficace_face_
void set_fichier_reprise_interface(const Nom &prefix)
IJK_Field_double indicatrice_avant_remaillage_ft_
ComputeValParCompoInCell val_par_compo_in_cell_computation_
int get_forcing_method() const
int compute_cell_phase_with_interface_normal(int num_elem, int direction, int face_plus)
bool compute_distance_autres_interfaces_
FixedVector< IJK_Field_vector3_double, 2 > bary_of_interf_
FixedVector< IJK_Field_double, 2 > surface_interface_ft_
void calculer_distance_autres_compo_connexe_ijk(const DoubleTab &sommets_a_tester, const ArrOfInt &compo_connexe_sommets, const DoubleTab &vinterp_tmp, const Maillage_FT_IJK &mesh, ArrOfDouble &distance, DoubleTab &v_closer, const double distmax)
Maillage_FT_IJK maillage_ft_ijk_
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
const IJK_Field_vector3_double & get_indicatrice_surfacique_face_next() const
FixedVector< FixedVector< IJK_Field_int, max_authorized_nb_of_components_ >, 2 > compos_traversantes_
void set_positions_reference()
const int & nb_groups() const
void RK3_G_store_vi_resize(int n, int n2)
int nb_compo_in_num_compo_
FixedVector< IJK_Field_vector3_double, 2 > barycentre_phase1_ns_
void set_param(Param &titi) const override
IJK_Field_double indicatrice_avant_remaillage_ns_
void store_bubbles_barycentres(const Nom &interf_name)
double devient_pure(const int i, const int j, const int k) const
const IJK_Field_double & get_surface_interface_next_ft() const
void calculer_phi_repuls_par_compo(FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &surf_par_compo, FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 3 > &source_interf_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &phi_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &repuls_par_compo, const DoubleTab &gravite, const double delta_rho, const double sigma, const double time, const int itstep)
void initialise_ijk_compo_connex_bubbles_params()
static void get_maillage_MED_from_IJK_FT(MEDCouplingUMesh *maillage_bulles_mcu, const Maillage_FT_IJK &maillage_bulles_ft_ijk)
static int devient_pure(double old_indicatrice, double next_indicatrice)
Vecteur3 nIn(const int i, const int j, const int k) const
Intersection_Interface_ijk_cell & get_set_intersection_ijk_cell()
DoubleTabFT_cut_cell_scalar surface_efficace_interface_initial_
int verbosite_surface_efficace_interface_
IJK_Field_double field_repulsion_
const IJK_Field_double & In() const
const int & nb_compo_traversantes(const int i, const int j, const int k) const
const IJK_Composantes_Connex & get_ijk_compo_connex() const
void preparer_duplicata_bulles_masque_6bit(const DoubleTab &bounding_box, const DoubleTab &authorized_bounding_box, ArrOfInt &masque_duplicata_pour_compo)
static double mean_over_compo(const FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &field_for_compo, const IJK_Field_int &nb_compo_traversante, const int i, const int j, const int k)
int nombre_d_operateurs() const override
void calcul_surface_efficace_face_initial(TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face)
int a_desequilibre_initial_uniquement(double old_indicatrice, double next_indicatrice) const
void lire_maillage_ft_dans_lata()
void dumplata_ft_mesh(const char *filename, const char *meshname, int step) const
void compute_external_forces_(IJK_Field_vector3_double &rappel_ft, IJK_Field_vector3_double &rappel, const IJK_Field_vector3_double &vitesse, const IJK_Field_double &indic_ns, const IJK_Field_double &indic_ft, const double coef_immo, const int tstep, const double current_time, const double coef_ammortissement, const double coef_rayon_force_rappel, double compteur, double coef_mean_force, double coef_force_time_n)
void associer_switch(const Switch_FT_double &ijk_ft_switch)
const IJK_Field_double & get_surface_interface_old() const
void calculer_vecteurs_de_deplacement_rigide(DoubleTab &vitesses_translation_bulles, DoubleTab &mean_bubble_rotation_vector, DoubleTab ¢re_gravite, const int first_step_interface_smoothing=0)
static void mean_over_compo(const FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &field_for_compo, const IJK_Field_int &nb_compo_traversante, IJK_Field_vector3_double &mean_par_compo_field)
void compute_rising_velocities_from_compo()
const double & I_ft(const int i, const int j, const int k) const
int disable_rigid_translation_
FixedVector< IJK_Field_vector3_double, 2 > surface_vapeur_par_face_ns_
FixedVector< IJK_Field_vector< double, max_authorized_nb_of_groups_ >, 2 > groups_indicatrice_ft_
void calcul_surface_efficace_interface_initial(TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface)
int next_below_small_threshold_for_phase(int phase, double old_indicatrice, double next_indicatrice) const
FixedVector< FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 3 >, 2 > source_interf_par_compo_
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > surf_par_compo_
bool use_tryggvason_interfacial_source_
DoubleTabFT_cut_cell_scalar indicatrice_surfacique_efficace_face_absolute_error_
void calcul_surface_efficace_face(TYPE_SURFACE_EFFICACE_FACE type_surface_efficace_face, double timestep, const Cut_field_vector3_double &total_velocity)
int disable_rigid_rotation_
double SI(const int i, const int j, const int k) const
bool read_barycentres_velocity_
void switch_indicatrice_next_old()
int timestep_reprise_interface_
const IJK_Field_double & get_surface_interface_old_ft() const
double get_barycentre_face(bool next_time, int face_dir, int bary_compo, int phase, int i, int j, int k) const
bool use_barycentres_velocity_
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const override
DoubleTab bounding_box_delete_criteria_
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > courbure_par_compo_
const Maillage_FT_IJK & old_maillage_ft_ijk() const
const IJK_Field_vector3_double & get_indicatrice_surfacique_face_ft() const
void calculer_indicatrices_optim(IJK_Field_vector3_double &indic)
void calculer_indicatrice_surfacique_face(IJK_Field_vector3_double &indic_surfacique_face, IJK_Field_double &indic, IJK_Field_vector3_double &norme)
const Intersection_Interface_ijk_cell & get_intersection_ijk_cell() const
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
const IJK_Field_vector3_double & BoI() const
const IJK_Field_vector< double, max_authorized_nb_of_groups_ > & groups_indicatrice_n_ft() const
ArrOfDouble bubbles_velocities_bary_magnitude_
Connectivite_frontieres connectivite_frontieres_
const double & Sfn(const int compo, const int i, const int j, const int k) const
const FixedVector< IJK_Field_double, max_authorized_nb_of_components_ *3 > & get_norm_par_compo_itfc_in_cell_ft() const
void calculer_vmoy_rotation_composantes_connexes(const Maillage_FT_IJK &maillage, const ArrOfDouble &surface_facette, const ArrOfDouble &surface_par_bulle, const ArrOfInt &compo_connexes_facettes, const int nbulles_reelles, const int nbulles_ghost, const DoubleTab ¢re_gravite, const DoubleTab &vitesse_sommets, const DoubleTab &vitesse_translation_sommets, DoubleTab &mean_bubble_rotation_vector) const
const ArrOfInt & get_colors() const
void calculer_distance_autres_compo_connexe2(ArrOfDouble &distance, DoubleTab &v_closer)
const Maillage_FT_IJK & maillage_ft_ijk() const
bool has_computed_bubble_barycentres_
void compute_compo_connex_from_interface()
double portee_wall_repulsion() const
void transferer_bulle_perio()
Intersection_Interface_ijk_cell intersection_ijk_cell_
bool has_champ_vectoriel(const Motcle &nom) const override
const double & Sf(const int compo, const int i, const int j, const int k) const
void parcourir_maillage()
void calculer_indicatrice_intermediaire(IJK_Field_double &indicatrice_intermediaire_ft_, IJK_Field_double &indicatrice_intermediaire_ns_, IJK_Field_vector3_double &indicatrice_surfacique_intermediaire_face_ft_, IJK_Field_vector3_double &indicatrice_surfacique_intermediaire_face_ns_, const bool parcourir=true)
void calculer_aspect_ratio(ArrOfDouble &aspect_ratio) const
int get_dt_impression_bilan_indicatrice() const
const IJK_Field_vector3_double & get_barycentre_phase1_old_ft() const
const FixedVector< IJK_Field_double, max_authorized_nb_of_components_ *3 > & get_bary_par_compo_itfc_in_cell_ft() const
const FixedVector< IJK_Field_vector3_double, 3 > & get_barycentre_vapeur_par_face() const
bool correction_gradient_potentiel_
static int est_pure(double indicatrice)
double get_barycentre(bool next_time, int bary_compo, int phase, int i, int j, int k) const
double phase_naissante(const int phase, const int i, const int j, const int k) const
const double & xI(const int compo, const int i, const int j, const int k) const
const DoubleTabFT_cut_cell_scalar & get_surface_efficace_interface() const
void calcul_surface_efficace_interface(TYPE_SURFACE_EFFICACE_INTERFACE type_surface_efficace_interface, double timestep, const Cut_field_vector3_double &velocity)
void compute_external_forces_color_function(IJK_Field_vector3_double &rappel, const IJK_Field_double &indic_ns, const IJK_Field_double &indic_ft, DoubleTab &individual_forces, const ArrOfDouble &volume_reel, const DoubleTab &position)
static int phase_mourrante(int phase, double old_indicatrice, double next_indicatrice)
const IJK_Field_vector3_double & get_barycentre_phase1_old() const
Intersection_Interface_ijk_face intersection_ijk_face_
double devient_diphasique(const int i, const int j, const int k) const
FixedVector< IJK_Field_vector3_double, 2 > surface_vapeur_par_face_
void update_surface_normale() const
IJK_Field_double indicatrice_apres_remaillage_ns_
const double & In_ft(const int i, const int j, const int k) const
void calculer_bounding_box_bulles(DoubleTab &bounding_box, int option_shear=0) const
void remailler_interface(const double temps, Maillage_FT_IJK &maillage, ArrOfDouble &var_volume, Remaillage_FT_IJK &algo_remaillage_local)
void calculer_indicatrice_avant_remaillage(const bool parcourir=true)
void calculer_poussee_bulles(const DoubleTab &gravite, DoubleTab &poussee) const
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
double delta_p_max_repulsion_
FixedVector< FixedVector< IJK_Field_vector3_double, 3 >, 2 > barycentre_vapeur_par_face_
void recursive_calcul_distance_chez_voisin(DoubleTab &vinterp_tmp, int dir, const Maillage_FT_IJK &mesh, DoubleTab &coord_sommets, ArrOfInt &compo_sommet, ArrOfDouble &distance, DoubleTab &v_closer, double distmax)
OBS_PTR(Switch_FT_double) ref_ijk_ft_switch_
void supprimer_duplicata_bulles()
OBS_PTR(Domaine_IJK) ref_domaine_
DoubleTab bubbles_rising_vectors_bary_
static double mean_over_compo(const FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &field_for_compo, const IJK_Field_int &nb_compo_traversante, const int dir, const int i, const int j, const int k)
const IJK_Field_vector3_double & BoIn() const
void calculer_volume_bulles(ArrOfDouble &volumes, DoubleTab ¢re_gravite) const
const IJK_Field_double & In_ft() const
FixedVector< IJK_Field_vector3_double, 2 > normal_of_interf_ns_
DoubleTab bounding_box_forbidden_criteria_
void compute_bubbles_volume_and_barycentres(ArrOfDouble &volumes, DoubleTab &barycentres, const int &store_values)
void compute_drapeaux_vapeur_v4(const IntVect &vecteur_composantes, ArrOfInt &drapeau_vapeur) const
IJK_Field_double delta_volume_theorique_bilan_ns_
IJK_Field_vector3_double indicatrice_surfacique_efficace_deformation_face_
int below_small_threshold(double indicatrice) const
IJK_Field_vector3_double indicatrice_surfacique_avant_remaillage_face_ns_
void compute_external_forces_parser(IJK_Field_vector3_double &rappel, const IJK_Field_double &indic_ns, const DoubleTab &individual_forces, const ArrOfDouble &volume_reel, const DoubleTab &position, const double coef_rayon_force_rappel)
Vecteur3 xIn(const int i, const int j, const int k) const
int nb_bulles_ghost_before_
Operateur & operateur(int) override
const IJK_Field_vector3_double & get_barycentre_phase1_next() const
FixedVector< IJK_Field_double, 2 > indicatrice_ft_
IJK_Field_vector3_double indicatrice_surfacique_apres_remaillage_face_ns_
void associer_milieu_base(const Milieu_base &) override
void imprime_bilan_indicatrice()
void calculer_distance_autres_compo_connexe_octree(const DoubleTab &sommets_a_tester, const ArrOfInt &compo_connexe_sommets, const DoubleTab &vinterp_tmp, const Maillage_FT_IJK &mesh, ArrOfDouble &distance, DoubleTab &v_closer, const double distmax)
void read_bubbles_barycentres_old_new(const Nom &interf_name)
FixedVector< IJK_Field_vector< double, max_authorized_nb_of_groups_ >, 2 > groups_indicatrice_ns_
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
int est_desequilibre(double indicatrice) const
double delta_p_wall_max_repulsion_
Maillage_FT_IJK old_maillage_ft_ijk_
int update_indicatrice(IJK_Field_double &indic)
DoubleTabFT_cut_cell_vector3 coord_deplacement_interface_
void set_recompute_indicator(int i)
FixedVector< FixedVector< IJK_Field_vector3_double, 3 >, 2 > barycentre_vapeur_par_face_ns_
void sauvegarder_interfaces(const char *lata_name, const Nom &interf_name="??")
void allocate_ijk_compo_connex_fields(const Domaine_IJK &splitting, const int &allocate_compo_fields)
void calculer_indicatrice_next(const DoubleTab &gravite, const double delta_rho, const double sigma, const double time, const int itstep, const bool parcourir=true)
static int convert_indicatrice_to_phase(double indicatrice)
const DoubleTabFT_cut_cell_vector3 & get_normale_deplacement_interface() const
void calculer_normales_et_aires_interfaciales(IJK_Field_double &ai, IJK_Field_double &kappa_ai, IJK_Field_vector3_double &normale_cell, const int igroup) const
void calculer_surface_bulles(ArrOfDouble &surfaces) const
IJK_Field_vector3_double indicatrice_surfacique_apres_remaillage_face_ft_
FixedVector< FixedVector< IJK_Field_double, max_authorized_nb_of_components_ >, 2 > gradz_sigma_par_compo_
DoubleTabFT_cut_cell_vector3 normale_deplacement_interface_
DoubleTab bounding_box_NS_domain_
double In(const int i, const int j, const int k) const
const DoubleTab & RK3_G_store_vi() const
double seuil_indicatrice_petite_
DoubleTabFT_cut_cell_vector6 indicatrice_surfacique_efficace_face_correction_
Nom get_fichier_reprise()
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
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.
static bool DISABLE_DIPHASIQUE
Helper class to factorize the readOn method of Objet_U classes.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.