16#ifndef Operateur_IJK_elem_diff_base_included
17#define Operateur_IJK_elem_diff_base_included
19#include <Operateur_IJK_base.h>
20#include <Cut_cell_FT_Disc.h>
22enum class BOUNDARY_FLUX { NOT_DETERMINED_BY_BOUNDARY=0, KMIN_WALL=1, KMAX_WALL=2 };
32 virtual void calculer(
const IJK_Field_double& field,
33 IJK_Field_double& result,
34 const IJK_Field_local_double& boundary_flux_kmin,
35 const IJK_Field_local_double& boundary_flux_kmax);
36 virtual void ajouter(
const IJK_Field_double& field,
37 IJK_Field_double& result,
38 const IJK_Field_local_double& boundary_flux_kmin,
39 const IJK_Field_local_double& boundary_flux_kmax);
48 const IJK_Field_local_double& coeff_field_y,
49 const IJK_Field_local_double& coeff_field_z)
64 inline void compute_flux_x(IJK_Field_local_double& resu,
const int k_layer)
override
68 inline void compute_flux_y(IJK_Field_local_double& resu,
const int k_layer)
override
72 inline void compute_flux_z(IJK_Field_local_double& resu,
const int k_layer)
override
90 template <DIRECTION _DIR_>
91 inline void compute_flux_(IJK_Field_local_double& resu,
const int k_layer);
93 template <DIRECTION _DIR_>
96 template <DIRECTION _DIR_>
97 inline double compute_flux_local_(
double d0,
double d1,
double surface,
double input_left,
double input_centre,
double lambda_left,
double lambda_centre,
double structural_model);
99 template <DIRECTION _DIR_>
102 template <DIRECTION _DIR_>
105 template <DIRECTION _DIR_>
108 const IJK_Field_local_double&
get_model(DIRECTION _DIR_);
154 void correct_flux(IJK_Field_local_double *
const flux,
int k_layer,
const int dir)
override;
155 void correct_flux_spherical(Simd_double& a, Simd_double& b,
const int& i,
const int& j,
int k_layer,
int dir)
override;
165 IJK_Field_int& treatment_count,
168 ignore_small_cells_ = ignore_small_cells;
169 cut_cell_flux_ = &cut_cell_flux;
170 treatment_count_ = &treatment_count;
171 new_treatment_ = &new_treatment;
174 void set_runge_kutta(
int rk_step,
double dt_tot, IJK_Field_vector3_double& current_fluxes, IJK_Field_vector3_double& RK3_F_fluxes, Cut_field_int& cellule_rk_restreint_diff_main)
183 cellule_rk_restreint_diff_main_ =
nullptr;
192 cellule_rk_restreint_diff_main_ = &cellule_rk_restreint_diff_main;
200 return &(*cut_cell_flux_)[0].get_cut_cell_disc();
205 return cut_cell_flux_;
209 const IJK_Field_local_double& flux_x,
210 const IJK_Field_local_double& flux_y,
211 const IJK_Field_local_double& flux_zmin,
212 const IJK_Field_local_double& flux_zmax,
213 IJK_Field_double& resu,
int k_layer,
bool add);
215 void Operator_IJK_div(
const IJK_Field_local_double& flux_x,
const IJK_Field_local_double& flux_y,
216 const IJK_Field_local_double& flux_zmin,
const IJK_Field_local_double& flux_zmax,
217 IJK_Field_double& resu,
int k_layer,
bool add)
override
226 void correct_flux(IJK_Field_local_double *
const flux,
int k_layer,
const int dir)
override;
228 template <DIRECTION _DIR_>
229 inline void correct_flux_(IJK_Field_local_double *
const flux,
int k_layer);
232 bool ignore_small_cells_;
235 Cut_field_int *cellule_rk_restreint_diff_main_;
237 IJK_Field_int *treatment_count_;
277#include <Operateur_IJK_elem_diff_base.tpp>
: class Corrige_flux_FT API pour modifier un champ de flux à partir de donnees à l'interface....
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
OpDiffAnisotropicIJKScalar_double()
OpDiffIJKScalar_cut_cell_double()
void compute_cut_cell_divergence(const FixedVector< Cut_cell_double, 3 > &cut_cell_flux, const IJK_Field_local_double &flux_x, const IJK_Field_local_double &flux_y, const IJK_Field_local_double &flux_zmin, const IJK_Field_local_double &flux_zmax, IJK_Field_double &resu, int k_layer, bool add)
FixedVector< Cut_cell_double, 3 > * get_cut_cell_flux()
void set_runge_kutta(int rk_step, double dt_tot, IJK_Field_vector3_double ¤t_fluxes, IJK_Field_vector3_double &RK3_F_fluxes, Cut_field_int &cellule_rk_restreint_diff_main)
void initialise_cut_cell(bool ignore_small_cells, FixedVector< Cut_cell_double, 3 > &cut_cell_flux, IJK_Field_int &treatment_count, int &new_treatment)
const Cut_cell_FT_Disc * get_cut_cell_disc()
void Operator_IJK_div(const IJK_Field_local_double &flux_x, const IJK_Field_local_double &flux_y, const IJK_Field_local_double &flux_zmin, const IJK_Field_local_double &flux_zmax, IJK_Field_double &resu, int k_layer, bool add) override
OpDiffStructuralOnlyIJKScalar_double()
OpDiffVectorialAnisotropicIJKScalar_double()
OpDiffVectorialIJKScalar_double()
virtual void Operator_IJK_div(const IJK_Field_local_double &flux_x, const IJK_Field_local_double &flux_y, const IJK_Field_local_double &flux_zmin, const IJK_Field_local_double &flux_zmax, IJK_Field_double &resu, int k_layer, bool add)
IJK_Field_vector3_double * current_fluxes_
bool runge_kutta_flux_correction_
IJK_Field_vector3_double * RK3_F_fluxes_
const IJK_Field_local_double * coeff_field_z_
void compute_flux_y(IJK_Field_local_double &resu, const int k_layer) override
virtual void ajouter(const IJK_Field_double &field, IJK_Field_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
virtual void set_indicatrice(const IJK_Field_double &indicatrice)
double compute_flux_local_y(int i, int j, int k) override
BOUNDARY_FLUX flux_determined_by_boundary_condition_(int k)
double compute_flux_local_(int i, int j, int k)
void set_uniform_lambda(const double &uniform_lambda)
const IJK_Field_local_double * coeff_field_y_
void set_uniform_lambda_liquid(const double &uniform_lambda_liquid)
void compute_flux_x(IJK_Field_local_double &resu, const int k_layer) override
const double * uniform_lambda_liquid_
void set_lambda(const IJK_Field_local_double &lambda)
const double * uniform_lambda_vapour_
virtual void set_corrige_flux(OWN_PTR(Corrige_flux_FT_base)&corrige_flux)
const IJK_Field_local_double * coeff_field_x_
const IJK_Field_local_double * lambda_
double compute_flux_local_x(int i, int j, int k) override
void compute_flux_z(IJK_Field_local_double &resu, const int k_layer) override
const IJK_Field_local_double * indicatrice_
const IJK_Field_local_double * boundary_flux_kmin_
double get_uniform_lambda()
void set_coeff_x_y_z(const IJK_Field_local_double &coeff_field_x, const IJK_Field_local_double &coeff_field_y, const IJK_Field_local_double &coeff_field_z)
virtual void calculer(const IJK_Field_double &field, IJK_Field_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
double compute_flux_local_boundary_condition_(BOUNDARY_FLUX type_boundary_flux, int i, int j)
const double * uniform_lambda_
Vecteur3 compute_surface_d0_d1_(int k)
double compute_flux_local_z(int i, int j, int k) override
OWN_PTR(Corrige_flux_FT_base) *corrige_flux_
virtual void initialize(const Domaine_IJK &splitting) override
const IJK_Field_local_double & get_model(DIRECTION _DIR_)
const IJK_Field_double * input_field_
const IJK_Field_local_double * boundary_flux_kmax_
Operateur_IJK_data_channel channel_data_
void compute_flux_(IJK_Field_local_double &resu, const int k_layer)
void set_uniform_lambda_vapour(const double &uniform_lambda_vapour)
Operateur_IJK_elem_diff_base_double()