16#ifndef Op_Conv_VDF_included
17#define Op_Conv_VDF_included
19#include <Iterateur_VDF_base.h>
20#include <TRUST_Deriv.h>
21#include <Op_VDF_Elem.h>
22#include <Op_VDF_Face.h>
25template <
typename OP_TYPE>
38 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
39 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_CONV_ELEM, void>
42 constexpr bool is_QUICK = std::is_same<EVAL_TYPE,Eval_Quick_VDF_Elem>::value, is_CENTRE4 = std::is_same<EVAL_TYPE,Eval_Centre4_VDF_Elem>::value;
44 associer_<EVAL_TYPE,is_QUICK,is_CENTRE4>(domaine_dis,domaine_cl_dis).associer_inconnue(inco);
47 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
48 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_CONV_FACE, void>
51 constexpr bool is_QUICK = std::is_same<EVAL_TYPE,Eval_Quick_VDF_Face>::value, is_CENTRE4 = std::is_same<EVAL_TYPE,Eval_Centre4_VDF_Face>::value;
53 associer_<EVAL_TYPE,is_QUICK,is_CENTRE4>(domaine_dis,domaine_cl_dis).associer_inconnue(vit);
56 template <Type_Operateur _TYPE_>
59 constexpr bool is_FACE_OP = (_TYPE_ == Type_Operateur::Op_CONV_FACE);
60 const std::string& nom_inco =
static_cast<const OP_TYPE *
>(
this)->equation().inconnue().le_nom().getString();
61 Matrice_Morse *mat = mats.count(nom_inco) ? mats.at(nom_inco) :
nullptr, mat2;
66 template <
typename EVAL_TYPE>
70 EVAL_TYPE& eval_conv =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
71 eval_conv.associer(vit);
74 template <
typename EVAL_TYPE>
77 const EVAL_TYPE& eval_conv =
static_cast<const EVAL_TYPE&
>(iter_vdf()->evaluateur());
78 return eval_conv.vitesse();
81 template <
typename EVAL_TYPE>
84 EVAL_TYPE& eval_conv =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
85 return eval_conv.vitesse();
90 inline const OWN_PTR(
Iterateur_VDF_base)& iter_vdf()
const {
return static_cast<const OP_TYPE *
>(
this)->get_iter(); }
91 inline OWN_PTR(Iterateur_VDF_base)& iter_vdf() {
return static_cast<OP_TYPE *
>(
this)->get_iter(); }
94 template <
typename EVAL_TYPE,
bool is_QUICK,
bool is_CENTRE4>
95 EVAL_TYPE& associer_(
const Domaine_dis_base& domaine_dis,
const Domaine_Cl_dis_base& domaine_cl_dis)
97 const Domaine_VDF& zvdf = ref_cast(Domaine_VDF,domaine_dis);
98 const Domaine_Cl_VDF& zclvdf = ref_cast(Domaine_Cl_VDF,domaine_cl_dis);
99 iter_vdf()->associer(zvdf,zclvdf,
static_cast<OP_TYPE&
>(*
this));
100 EVAL_TYPE& eval_conv =
static_cast<EVAL_TYPE&
> (iter_vdf()->evaluateur());
101 eval_conv.associer_domaines(zvdf, zclvdf );
103 if (is_QUICK || is_CENTRE4)
106 Cerr <<
"Overlapping width (given by larg_joint option) of " << zvdf.
domaine().
joint(0).
epaisseur() << finl;
107 Cerr <<
"is not enough for Quick scheme in VDF parallel calculation." << finl;
108 Cerr <<
"Please, partition your mesh with an overlapping width of 2 with larg_joint option." << finl;
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
classe Champ_P0_VDF Classe qui represente un champ discret P0 par element associe a un domaine discre...
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
int nb_colonnes() const override
Return local number of columns (=size on the current proc).
void modifier_pour_Cl_face(Matrice_Morse &matrice, DoubleTab &secmem) const
const Champ_base & vitesse_impl() const
void modifier_pour_Cl_elem(Matrice_Morse &matrice, DoubleTab &secmem) const
void dimensionner_face(Matrice_Morse &matrice) const
std::enable_if_t< _TYPE_==Type_Operateur::Op_CONV_ELEM, void > associer_impl(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_cl_dis, const Champ_Inc_base &ch_transporte)
void dimensionner_blocs_impl(matrices_t mats) const
void associer_vitesse_impl(const Champ_base &ch_vit)
void dimensionner_elem(Matrice_Morse &matrice) const
std::enable_if_t< _TYPE_==Type_Operateur::Op_CONV_FACE, void > associer_impl(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_cl_dis, const Champ_Inc_base &ch_vit)
Champ_base & vitesse_impl()
void modifier_pour_Cl(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, DoubleTab &) const
void dimensionner(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, const bool) const
void modifier_pour_Cl(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, DoubleTab &) const
void dimensionner(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &) const
static bool is_parallel()
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.