16#ifndef Operateur_IJK_base_included
17#define Operateur_IJK_base_included
21#include <IJK_Field_vector.h>
22#include <IJK_Field_simd_tools.h>
23#include <Domaine_IJK.h>
24#include <Operateur_IJK_data_channel.h>
25#include <Corrige_flux_FT_base.h>
26#include <IJK_Navier_Stokes_tools.h>
28inline void putzero(IJK_Field_local_double& flux)
31 const int ni = flux.
ni();
32 const int nj = flux.
nj();
33 double *ptr = &flux(0,0,0);
34 double *end_ptr = &flux(ni-1,nj-1,0);
35 const int n = (int)(end_ptr - ptr + 1);
36 Simd_double zero = 0.;
37 for (
int i = 0; i < n; i += vsize)
54 void compute_set(IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz);
55 void compute_add(IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz);
59 virtual void Operator_IJK_div(
const IJK_Field_local_double& flux_x,
const IJK_Field_local_double& flux_y,
60 const IJK_Field_local_double& flux_zmin,
const IJK_Field_local_double& flux_zmax,
61 IJK_Field_double& resu,
int k_layer,
bool add);
62 virtual void correct_flux(IJK_Field_local_double *
const flux,
const int k_layer,
const int dir,
const int compo);
83 void compute_(IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz,
bool add);
94 void set_runge_kutta(
int rk_step,
double dt_tot, IJK_Field_vector3_double& current_fluxes, IJK_Field_vector3_double& RK3_F_fluxes);
103 virtual void Operator_IJK_div(
const IJK_Field_local_double& flux_x,
const IJK_Field_local_double& flux_y,
104 const IJK_Field_local_double& flux_zmin,
const IJK_Field_local_double& flux_zmax,
105 IJK_Field_double& resu,
int k_layer,
bool add);
106 virtual void correct_flux(IJK_Field_local_double *
const flux,
const int k_layer,
const int dir);
107 virtual void correct_flux_spherical(Simd_double& a, Simd_double& b,
const int& i,
const int& j,
int k_layer,
int dir) { ; };
109 virtual void compute_flux_x(IJK_Field_local_double& resu,
const int k_layer) = 0;
110 virtual void compute_flux_y(IJK_Field_local_double& resu,
const int k_layer) = 0;
111 virtual void compute_flux_z(IJK_Field_local_double& resu,
const int k_layer) = 0;
123 void compute_(IJK_Field_double& dx,
bool add);
124 virtual void fill_grad_field_x_y_(IJK_Field_local_double& flux, IJK_Field_double& resu,
int k,
int dir) { ; };
125 virtual void fill_grad_field_z_(IJK_Field_local_double& flux_min, IJK_Field_local_double& flux_max, IJK_Field_double& resu,
int k) { ; };
126 void fill_grad_field_x_(IJK_Field_local_double& flux, IJK_Field_vector3_double& resu,
int k);
127 void fill_grad_field_y_(IJK_Field_local_double& flux, IJK_Field_vector3_double& resu,
int k);
128 void fill_grad_field_z_(IJK_Field_local_double& flux_min, IJK_Field_local_double& flux_max, IJK_Field_vector3_double& resu,
int k);
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
virtual double compute_flux_local_x(int i, int j, int k)
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)
virtual void compute_add(IJK_Field_double &dx)
virtual double compute_flux_local_y(int i, int j, int k)
virtual void initialize(const Domaine_IJK &splitting)=0
virtual void compute_flux_z(IJK_Field_local_double &resu, const int k_layer)=0
virtual double compute_flux_local_z(int i, int j, int k)
virtual void compute_grad(IJK_Field_vector3_double &dx)
virtual void compute_set(IJK_Field_double &dx)
virtual void correct_flux(IJK_Field_local_double *const flux, const int k_layer, const int dir)
virtual void compute_flux_y(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_flux_x(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_grad_x(IJK_Field_double &dx)
virtual void compute_grad_y(IJK_Field_double &dx)
void set_runge_kutta(int rk_step, double dt_tot, IJK_Field_vector3_double ¤t_fluxes, IJK_Field_vector3_double &RK3_F_fluxes)
IJK_Field_vector3_double * current_fluxes_
bool runge_kutta_flux_correction_
virtual void compute_grad_z(IJK_Field_double &dx)
IJK_Field_vector3_double * RK3_F_fluxes_
virtual void correct_flux_spherical(Simd_double &a, Simd_double &b, const int &i, const int &j, int k_layer, int dir)
virtual void compute_flux_y_vy(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_flux_y_vx(IJK_Field_local_double &resu, const int k_layer)=0
virtual void exec_after_divergence_flux_y(IJK_Field_double &resu, const int k_layer)
virtual void compute_flux_x_vx(IJK_Field_local_double &resu, const int k_layer)=0
virtual void exec_after_divergence_flux_x(IJK_Field_double &resu, const int k_layer)
virtual void compute_flux_z_vz(IJK_Field_local_double &resu, const int k_layer)=0
virtual void correct_flux(IJK_Field_local_double *const flux, const int k_layer, const int dir, const int compo)
void compute_set(IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz)
virtual double compute_dtstab_convection_local(IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz)
virtual void compute_flux_x_vz(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_flux_y_vz(IJK_Field_local_double &resu, const int k_layer)=0
virtual void correct_flux_spherical(Simd_double &a, Simd_double &b, const int k_layer, const int dir)
virtual void compute_flux_x_vy(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_flux_z_vy(IJK_Field_local_double &resu, const int k_layer)=0
virtual void compute_flux_z_vx(IJK_Field_local_double &resu, const int k_layer)=0
void compute_add(IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz)
virtual void exec_after_divergence_flux_z(IJK_Field_double &resu, const int k_layer)
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)