16#ifndef Multigrille_Adrien_included
17#define Multigrille_Adrien_included
19#include <Grid_Level_Data_template.h>
20#include <Coarsen_Operator_base.h>
22#include <Multigrille_base.h>
23#include <Equation_base.h>
24#include <TRUSTArray.h>
34 int nb_grid_levels()
const override {
return coarsen_operators_.size() + 1; }
36 void set_rho(
const DoubleVect& rho);
37 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
40 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
43 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
45 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
47 template <
typename _TYPE_FUNC_,
typename _TYPE_,
typename _TYPE_ARRAY_>
49 template <
typename _TYPE_FUNC_,
typename _TYPE_,
typename _TYPE_ARRAY_>
62 inline void alloc_field(IJK_Field_float& x,
int level,
bool with_additional_k_layers =
false)
const override
64 alloc_field_(x,level, with_additional_k_layers);
66 inline void alloc_field(IJK_Field_double& x,
int level,
bool with_additional_k_layers =
false)
const override
68 alloc_field_(x,level, with_additional_k_layers);
70 inline void dump_lata(
const Nom& field,
const IJK_Field_float& data,
int tstep)
const override
72 dump_lata_(field, data, tstep);
74 inline void dump_lata(
const Nom& field,
const IJK_Field_double& data,
int tstep)
const override
76 dump_lata_(field, data, tstep);
83 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
86 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
88 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
90 const int grid_level)
const;
91 template <
typename _TYPE_FUNC_,
typename _TYPE_,
typename _TYPE_ARRAY_>
93 template <
typename _TYPE_FUNC_,
typename _TYPE_,
typename _TYPE_ARRAY_>
99 const IJK_Field_float *secmem,
100 const int grid_level,
102 IJK_Field_float *residu)
const override
104 jacobi_residu_(x,secmem, grid_level, n_jacobi, residu);
107 const IJK_Field_double *secmem,
108 const int grid_level,
110 IJK_Field_double *residu)
const override
112 jacobi_residu_(x,secmem, grid_level, n_jacobi, residu);
116 inline void coarsen(
const IJK_Field_float& fine, IJK_Field_float& coarse,
int fine_level)
const override
118 coarsen_(fine, coarse, fine_level);
120 inline void coarsen(
const IJK_Field_double& fine, IJK_Field_double& coarse,
int fine_level)
const override
122 coarsen_(fine, coarse, fine_level);
126 interpolate_sub_shiftk_(coarse, fine, fine_level);
128 inline void interpolate_sub_shiftk(
const IJK_Field_double& coarse, IJK_Field_double& fine,
int fine_level)
const override
130 interpolate_sub_shiftk_(coarse, fine, fine_level);
134 return get_storage_template_<float>(si, level);
138 return get_storage_template_<double>(si, level);
145 template<
typename _TYPE_>
146 inline std::enable_if_t<std::is_same<_TYPE_,double>::value,
int>
147 get_grid_data_size()
const {
return grids_data_double_.
size(); }
149 template<
typename _TYPE_>
150 inline std::enable_if_t<std::is_same<_TYPE_,float>::value,
int>
151 get_grid_data_size()
const {
return grids_data_float_.size(); }
153 template<
typename _TYPE_>
154 inline std::enable_if_t<std::is_same<_TYPE_,double>::value,
const Grid_Level_Data_template<double>&>
155 get_grid_data(
int level)
const {
return grids_data_double_[level]; }
157 template<
typename _TYPE_>
158 inline std::enable_if_t<std::is_same<_TYPE_,float>::value,
const Grid_Level_Data_template<float>&>
159 get_grid_data(
int level)
const {
return grids_data_float_[level]; }
161 template<
typename _TYPE_>
162 inline std::enable_if_t<std::is_same<_TYPE_,double>::value, Grid_Level_Data_template<double>&>
163 set_grid_data(
int level) {
return grids_data_double_[level]; }
165 template<
typename _TYPE_>
166 inline std::enable_if_t<std::is_same<_TYPE_,float>::value, Grid_Level_Data_template<float>&>
167 set_grid_data(
int level) {
return grids_data_float_[level]; }
171 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
172 void prepare_secmem_(IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& x)
const;
173 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
174 void dump_lata_(
const Nom& field,
const IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& data,
int tstep)
const;
175 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
176 void alloc_field_(IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& x,
int level,
bool with_additional_k_layers =
false)
const;
177 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
178 void jacobi_residu_(IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& x,
179 const IJK_Field_template<_TYPE_,_TYPE_ARRAY_> *secmem,
180 const int grid_level,
182 IJK_Field_template<_TYPE_,_TYPE_ARRAY_> *residu)
const;
184 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
185 void coarsen_(
const IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& fine, IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& coarse,
int fine_level)
const;
186 template <
typename _TYPE_,
typename _TYPE_ARRAY_>
187 void interpolate_sub_shiftk_(
const IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& coarse, IJK_Field_template<_TYPE_,_TYPE_ARRAY_>& fine,
int fine_level)
const;
188 template <
typename _TYPE_>
189 IJK_Field_template<_TYPE_,TRUSTArray<_TYPE_>>& get_storage_template_(
StorageId,
int level);
192 int nb_isotropic_coarsening_ = -10;
199 VECT(OWN_PTR(Coarsen_Operator_base)) coarsen_operators_;
202 TRUST_Vector<Grid_Level_Data_template<float>> grids_data_float_;
203 TRUST_Vector<Grid_Level_Data_template<double>> grids_data_double_;
206#include<Multigrille_Adrien.tpp>
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
: This class is an IJK_Field_local with parallel informations.
void dump_lata(const Nom &field, const IJK_Field_double &data, int tstep) const override
void coarsen(const IJK_Field_float &fine, IJK_Field_float &coarse, int fine_level) const override
int completer(const Equation_base &eq)
void ajouter_param(Param ¶m) override
void prepare_secmem(IJK_Field_float &x) const override
void set_inv_rho(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &inv_rho)
void set_rho(const DoubleVect &rho)
void completer_double_for_residue(const Domaine_IJK &splitting)
void set_rho_template(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &rho, bool set_coarse_matrix, bool use_coeffs_from_double)
void set_rho_NoSym(const DoubleVect &rho)
IJK_Field_double & get_storage_double(StorageId si, int level) override
void set_inv_rho_template(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &rho, bool set_coarse_matrix_flag, bool use_coeffs_from_double)
void alloc_field(IJK_Field_double &x, int level, bool with_additional_k_layers=false) const override
int nb_grid_levels() const override
int needed_kshift_for_jacobi(int level) const override
void coarsen(const IJK_Field_double &fine, IJK_Field_double &coarse, int fine_level) const override
void set_inv_rho_NoSym_template(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &rho, bool set_coarse_matrix_flag, bool use_coeffs_from_double)
void prepare_secmem(IJK_Field_double &x) const override
void jacobi_residu(IJK_Field_float &x, const IJK_Field_float *secmem, const int grid_level, const int n_jacobi, IJK_Field_float *residu) const override
void alloc_field(IJK_Field_float &x, int level, bool with_additional_k_layers=false) const override
void dump_lata(const Nom &field, const IJK_Field_float &data, int tstep) const override
double multigrille_failure() override
void interpolate_sub_shiftk(const IJK_Field_double &coarse, IJK_Field_double &fine, int fine_level) const override
IJK_Field_float & get_storage_float(StorageId si, int level) override
void set_rho_template_NoSym(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &rho, bool set_coarse_matrix, bool use_coeffs_from_double)
void initialize(const Domaine_IJK &)
void completer_template(const Domaine_IJK &)
void jacobi_residu(IJK_Field_double &x, const IJK_Field_double *secmem, const int grid_level, const int n_jacobi, IJK_Field_double *residu) const override
void set_inv_rho_NoSym(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &inv_rho)
void interpolate_sub_shiftk(const IJK_Field_float &coarse, IJK_Field_float &fine, int fine_level) const override
void compute_coefficients(IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &coeffs_faces, const int grid_level) const
void setup_coarse_grid(const IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &fine, IJK_Field_template< _TYPE_, _TYPE_ARRAY_ > &coarse) const
Matrice_Grossiere & set_coarse_matrix()
class Nom Une chaine de caractere pour nommer les objets de TRUST
Helper class to factorize the readOn method of Objet_U classes.