16#include <OpConvQuickIJKScalar_cut_cell.h>
17#include <IJK_Navier_Stokes_tools_cut_cell.h>
31void OpConvQuickIJKScalar_cut_cell_double::correct_flux(IJK_Field_local_double *
const flux,
int k_layer,
const int dir)
35 correct_flux_<DIRECTION::X>(flux, k_layer);
39 correct_flux_<DIRECTION::Y>(flux, k_layer);
43 correct_flux_<DIRECTION::Z>(flux, k_layer);
47 Cerr <<
"Unexpected value of dir in OpConvQuickIJKScalar_cut_cell_double::correct_flux" << finl;
54 assert((*cut_cell_flux_)[dir].verify_consistency_within_layer(dir, k_layer, *flux));
60 Cut_field_vector3_double& cut_field_current_fluxes =
static_cast<Cut_field_vector3_double&
>(*current_fluxes_);
61 Cut_field_vector3_double& cut_field_RK3_F_fluxes =
static_cast<Cut_field_vector3_double&
>(*RK3_F_fluxes_);
65 const Cut_cell_FT_Disc& cut_cell_disc = (*cut_cell_flux_)[0].get_cut_cell_disc();
68 int ni = (dir == 0) ? flux->
ni() : flux->
ni() - 1;
69 int nj = (dir == 1) ? flux->
nj() : flux->
nj() - 1;
70 for (
int j = 0; j < nj; j++)
72 for (
int i = 0; i < ni; i++)
74 cut_field_current_fluxes[dir].pure_(i,j,k_layer) = (*flux)(i,j,0);
75 int n = cut_cell_disc.
get_n(i, j, k_layer);
78 cut_field_current_fluxes[dir].diph_l_(n) = (*cut_cell_flux_)[dir].diph_l_(n);
79 cut_field_current_fluxes[dir].diph_v_(n) = (*cut_cell_flux_)[dir].diph_v_(n);
86 int ni = (dir == 0) ? flux->
ni() : flux->
ni() - 1;
87 int nj = (dir == 1) ? flux->
nj() : flux->
nj() - 1;
88 for (
int j = 0; j < nj; j++)
90 for (
int i = 0; i < ni; i++)
92 int n = cut_cell_disc.
get_n(i, j, k_layer);
96 double indicatrice_surface = indicatrice_surfacique(n,dir);
98 cut_field_RK3_F_fluxes[dir].diph_l_(n) = cut_field_RK3_F_fluxes[dir].diph_l_(n)*indicatrice_surface;
99 cut_field_RK3_F_fluxes[dir].diph_v_(n) = cut_field_RK3_F_fluxes[dir].diph_v_(n)*(1 -indicatrice_surface);
105 runge_kutta3_update_surfacic_fluxes(cut_field_current_fluxes[dir], cut_field_RK3_F_fluxes[dir],
rk_step_, k_layer, dir,
dt_tot_, *cellule_rk_restreint_conv_main_);
108 int ni = (dir == 0) ? flux->
ni() : flux->
ni() - 1;
109 int nj = (dir == 1) ? flux->
nj() : flux->
nj() - 1;
110 for (
int j = 0; j < nj; j++)
112 for (
int i = 0; i < ni; i++)
114 (*flux)(i,j,0) = cut_field_current_fluxes[dir].pure_(i,j,k_layer);
115 int n = cut_cell_disc.
get_n(i, j, k_layer);
118 (*cut_cell_flux_)[dir].diph_l_(n) = cut_field_current_fluxes[dir].diph_l_(n);
119 (*cut_cell_flux_)[dir].diph_v_(n) = cut_field_current_fluxes[dir].diph_v_(n);
126 int ni = (dir == 0) ? flux->
ni() : flux->
ni() - 1;
127 int nj = (dir == 1) ? flux->
nj() : flux->
nj() - 1;
128 for (
int j = 0; j < nj; j++)
130 for (
int i = 0; i < ni; i++)
132 int n = cut_cell_disc.
get_n(i, j, k_layer);
136 double indicatrice_surface = indicatrice_surfacique(n,dir);
138 cut_field_RK3_F_fluxes[dir].diph_l_(n) = (indicatrice_surface == 0.) ? 0. : cut_field_RK3_F_fluxes[dir].diph_l_(n)/indicatrice_surface;
139 cut_field_RK3_F_fluxes[dir].diph_v_(n) = ((1 - indicatrice_surface) == 0.) ? 0. : cut_field_RK3_F_fluxes[dir].diph_v_(n)/(1 -indicatrice_surface);
146 assert((*cut_cell_flux_)[dir].verify_consistency_within_layer(dir, k_layer, *flux));
150 const IJK_Field_local_double& flux_x,
151 const IJK_Field_local_double& flux_y,
152 const IJK_Field_local_double& flux_zmin,
153 const IJK_Field_local_double& flux_zmax,
154 IJK_Field_double& resu,
int k_layer,
bool add)
158 const Cut_cell_FT_Disc& cut_cell_disc = cut_cell_flux[0].get_cut_cell_disc();
160 Cut_field_double& cut_field_resu =
static_cast<Cut_field_double&
>(resu);
165 Int3 ijk = cut_cell_disc.
get_ijk(n);
174 if (flux_determined_by_wall_<DIRECTION::Z>(k))
176 Cerr <<
"Le cas d'une cellule diphasique avec flux de paroi n'est pas traite" << finl;
181 for (
int phase = 0; phase < 2; phase++)
183 const DoubleTabFT_cut_cell& diph_flux_x = (phase == 0) ? cut_cell_flux[0].diph_v_ : cut_cell_flux[0].diph_l_;
184 const DoubleTabFT_cut_cell& diph_flux_y = (phase == 0) ? cut_cell_flux[1].diph_v_ : cut_cell_flux[1].diph_l_;
185 const DoubleTabFT_cut_cell& diph_flux_z = (phase == 0) ? cut_cell_flux[2].diph_v_ : cut_cell_flux[2].diph_l_;
186 DoubleTabFT_cut_cell& diph_resu = (phase == 0) ? cut_field_resu.
diph_v_ : cut_field_resu.
diph_l_;
188 int n_ip1 = cut_cell_disc.
get_n(i+1,j,k);
189 int n_jp1 = cut_cell_disc.
get_n(i,j+1,k);
190 int n_kp1 = cut_cell_disc.
get_n(i,j,k+1);
192 double fx_centre = diph_flux_x(n);
193 double fy_centre = diph_flux_y(n);
194 double fz_centre = diph_flux_z(n);
196 double fx_right = (n_ip1 < 0) ? (cut_cell_disc.
indic_pure(i+1,j,k) == phase)*flux_x(i+1,j,0) : diph_flux_x(n_ip1);
197 double fy_right = (n_jp1 < 0) ? (cut_cell_disc.
indic_pure(i,j+1,k) == phase)*flux_y(i,j+1,0) : diph_flux_y(n_jp1);
198 double fz_right = (n_kp1 < 0) ? (cut_cell_disc.
indic_pure(i,j,k+1) == phase)*flux_zmax(i,j,0) : diph_flux_z(n_kp1);
201 r += fx_centre - fx_right;
202 r += fy_centre - fy_right;
203 r += fz_centre - fz_right;
const Domaine_IJK & get_domaine() const
const IJK_Interfaces & get_interfaces() const
int get_n_from_k_index(int index) const
Int3 get_ijk(int n) const
int get_k_value_index(int k) const
double indic_pure(const int i, const int j, const int k) const
int get_n(int i, int j, int k) const
TRUSTTabFT_cut_cell< _TYPE_ > diph_l_
TRUSTTabFT_cut_cell< _TYPE_ > diph_v_
bool within_ghost(int i, int j, int k, int negative_ghost_size, int positive_ghost_size) const
Class defining operators and methods for all reading operation in an input flow (file,...
const DoubleTabFT_cut_cell_vector3 & get_indicatrice_surfacique_efficace_face() const
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.
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)
const Cut_cell_FT_Disc * get_cut_cell_disc()
bool runge_kutta_flux_correction_
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.