16#include <IJK_Ghost_Fluid_Fields.h>
17#include <Probleme_FTD_IJK_base.h>
18#include <IJK_Navier_Stokes_tools.h>
19#include <IJK_Ghost_Fluid_tools.h>
20#include <IJK_Bubble_tools.h>
25IJK_Ghost_Fluid_Fields::IJK_Ghost_Fluid_Fields()
56 const int nb_ghost_parallel_calls = 2;
130 std::vector<FieldInfo_t> c =
133 {
"TEMPERATURE", Entity::ELEMENT, Nature_du_champ::scalaire,
false },
134 {
"TEMPERATURE_ADIMENSIONNELLE_THETA", Entity::ELEMENT, Nature_du_champ::scalaire,
false },
135 {
"DIV_LAMBDA_GRAD_T_VOLUME", Entity::ELEMENT, Nature_du_champ::scalaire,
false },
138 chps.insert(chps.end(), c.begin(), c.end());
155 else if (
champs_compris_.liste_noms_compris_vectoriel().contient_(nom))
167 Cerr <<
"ERROR in IJK_Ghost_Fluid_Fields::get_IJK_field : " << finl;
168 Cerr <<
"Requested field '" << nom <<
"' is not recognized by IJK_Ghost_Fluid_Fields::get_IJK_field()." << finl;
179 Cerr <<
"ERROR in IJK_Ghost_Fluid_Fields::get_IJK_field_vector : " << finl;
180 Cerr <<
"Requested field '" << nom <<
"' is not recognized by IJK_Ghost_Fluid_Fields::get_IJK_field_vector()." << finl;
184static void enforce_zero_value_eulerian_field(IJK_Field_double& eulerian_field)
186 const int nx = eulerian_field.
ni();
187 const int ny = eulerian_field.
nj();
188 const int nz = eulerian_field.
nk();
189 static const double invalid_distance_value = -1.e30;
190 for (
int k=0; k < nz ; k++)
191 for (
int j=0; j< ny; j++)
192 for (
int i=0; i < nx; i++)
193 if (eulerian_field(i,j,k) < invalid_distance_value)
194 eulerian_field(i,j,k) = 0.;
197static void enforce_max_value_eulerian_field(IJK_Field_double& eulerian_field)
199 double eulerian_field_max = -1.e20;
200 const int nx = eulerian_field.
ni();
201 const int ny = eulerian_field.
nj();
202 const int nz = eulerian_field.
nk();
203 static const double invalid_distance_value = -1.e30;
204 for (
int k=0; k < nz ; k++)
205 for (
int j=0; j< ny; j++)
206 for (
int i=0; i < nx; i++)
207 eulerian_field_max = std::max(eulerian_field_max, eulerian_field(i,j,k));
208 for (
int k=0; k < nz ; k++)
209 for (
int j=0; j< ny; j++)
210 for (
int i=0; i < nx; i++)
211 if (eulerian_field(i,j,k) < invalid_distance_value)
212 eulerian_field(i,j,k) = eulerian_field_max;
242 compute_eulerian_normal_distance_facet_barycentre_field(ref_ijk_ft_->get_interface(),
262 for(
int dir=0; dir<3; dir++)
273 for (
int k=0; k < nz ; k++)
274 for (
int j=0; j< ny; j++)
275 for (
int i=0; i < nx; i++)
283 const double norm = norm_x + norm_y + norm_z;
295 Cerr <<
"Don't compute the eulerian distance field" << finl;
317 Cerr <<
"Eulerian distance has not been computed" << finl;
336 Cerr <<
"Don't compute the eulerian curvature field" << finl;
347 int nb_groups = ref_ijk_ft_->get_interface().nb_groups();
352 for (
int igroup = -1; igroup < nb_groups; igroup++)
355 ref_ijk_ft_->get_interface(),
370 Cerr <<
"Don't compute the eulerian curvature field" << finl;
379 Cerr <<
"Eulerian curvature has not been computed" << finl;
390 Cerr <<
"Eulerian curvature has not been computed" << finl;
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Class defining operators and methods for all reading operation in an input flow (file,...
void enforce_zero_value_eulerian_curvature()
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
IJK_Field_local_double boundary_flux_kmin_
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const
IJK_Field_double tmp_new_curv_val_
IJK_Field_int tmp_propagated_cells_
IJK_Field_vector3_double tmp_old_vector_val_
IJK_Field_double eulerian_distance_ns_
IJK_Field_double eulerian_distance_ft_
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
IJK_Field_vector3_double eulerian_normal_vectors_ns_
IJK_Field_double eulerian_curvature_ft_
IJK_Field_vector3_double tmp_new_vector_val_
IJK_Field_vector3_double eulerian_facets_barycentre_ft_
void enforce_zero_value_eulerian_distance()
IJK_Field_local_double boundary_flux_kmax_
IJK_Field_vector3_double eulerian_facets_barycentre_ns_
bool has_computed_distance_
IJK_Field_int tmp_interf_cells_
IJK_Field_double tmp_old_curv_val_
IJK_Field_double eulerian_interfacial_area_ft_
IJK_Field_double tmp_new_dist_val_
int nb_cells_gfm_parallel_calls_
int avoid_gfm_parallel_calls_
void associer(const Probleme_FTD_IJK_base &ijk_ft)
void initialize(const Domaine_IJK &splitting)
FixedVector< ArrOfInt, 3 > propagated_cells_indices_
void enforce_max_value_eulerian_curvature()
void compute_eulerian_curvature()
IJK_Field_vector3_double eulerian_normal_vectors_ns_normed_
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
IJK_Field_double eulerian_curvature_ns_
void compute_eulerian_distance()
void compute_eulerian_curvature_from_interface()
IJK_Field_vector3_double eulerian_normal_vectors_ft_
bool has_champ(const Motcle &nom) const override
IJK_Field_double tmp_old_dist_val_
FixedVector< ArrOfInt, 3 > gfm_first_cells_indices_
bool has_computed_curvature_
Champs_compris_IJK champs_compris_
void enforce_distance_curvature_values_for_post_processings()
FixedVector< ArrOfInt, 3 > interf_cells_indices_
IJK_Field_double eulerian_interfacial_area_ns_
Une chaine de caractere (Nom) en majuscules.
void redistribute_from_splitting_ft_elem(const IJK_Field_double &input_field, IJK_Field_double &output_field)
Un tableau de chaine de caracteres (VECT(Nom)).
classe Objet_U Cette classe est la classe de base des Objets de TRUST
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.
Classe de base des flux de sortie.