16#ifndef Op_Diff_Dift_VDF_included
17#define Op_Diff_Dift_VDF_included
19#include <Modele_turbulence_scal_base.h>
20#include <Modele_turbulence_hyd_base.h>
21#include <Iterateur_VDF_base.h>
22#include <Correlation_base.h>
23#include <Champ_P0_VDF.h>
24#include <TRUST_Deriv.h>
29template <
typename OP_TYPE>
34 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
35 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFF_ELEM || _TYPE_ == Type_Operateur::Op_DIFT_ELEM || _TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void>
39 associer_<EVAL_TYPE>(domaine_dis,domaine_cl_dis).associer_inconnue(inco);
42 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
43 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFF_FACE || _TYPE_ == Type_Operateur::Op_DIFT_FACE || _TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_FACE, void>
47 associer_<EVAL_TYPE>(domaine_dis,domaine_cl_dis).associer_inconnue(inco);
50 template <
typename EVAL_TYPE>
53 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
54 eval_diff_turb.associer(ch_diff);
57 template <
typename EVAL_TYPE>
60 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
61 eval_diff_turb.associer_pb(pb);
64 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
65 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_FACE || _TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void>
68 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
69 eval_diff_turb.associer_corr(corr);
72 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
73 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_FACE || _TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, const DoubleTab&>
76 const EVAL_TYPE& eval_diff_turb =
static_cast<const EVAL_TYPE&
>(iter_vdf()->evaluateur());
77 return eval_diff_turb.get_diffusivite_turbulente_multiphase();
80 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
81 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_FACE, void>
84 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
85 eval_diff_turb.set_nut(nut,
true );
88 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
89 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void>
92 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
93 eval_diff_turb.set_nut(nut,
false );
96 template <
typename EVAL_TYPE>
99 const EVAL_TYPE& eval_diff_turb =
static_cast<const EVAL_TYPE&
>(iter_vdf()->evaluateur());
100 return eval_diff_turb.get_diffusivite();
103 template <
typename EVAL_TYPE>
106 const EVAL_TYPE& eval_diff_turb =
static_cast<const EVAL_TYPE&
>(iter_vdf()->evaluateur());
107 const Champ_base& diffu = eval_diff_turb.get_diffusivite();
108 const int is_var = eval_diff_turb.is_var();
109 return diffu.
valeurs()(is_var * i);
112 template <
typename EVAL_TYPE>
115 const EVAL_TYPE& eval_diff_turb =
static_cast<const EVAL_TYPE&
>(iter_vdf()->evaluateur());
116 const Champ_base& diffu = eval_diff_turb.get_diffusivite();
121 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
122 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFF_FACE, void>
125 EVAL_TYPE& eval_diff =
static_cast<EVAL_TYPE&
> (iter_vdf()->evaluateur());
126 eval_diff.mettre_a_jour();
129 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
130 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_ELEM || _TYPE_ == Type_Operateur::Op_DIFT_FACE, void>
133 static_cast<OP_TYPE *
>(
this)->associer_diffusivite_turbulente_base(visc_ou_diff_turb);
134 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
135 eval_diff_turb.associer_diff_turb(visc_ou_diff_turb);
138 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
139 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_ELEM, void>
142 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
>(iter_vdf()->evaluateur());
143 eval_diff_turb.associer_loipar(loi_paroi);
146 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
147 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_ELEM, void>
completer_impl()
149 static_cast<OP_TYPE *
>(
this)->completer_Op_Dift_VDF_base();
150 const RefObjU& modele_turbulence =
static_cast<OP_TYPE *
>(
this)->equation().get_modele(TURBULENCE);
160 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
> (iter_vdf()->evaluateur());
161 eval_diff_turb.init_ind_fluctu_term();
171 template <Type_Operateur _TYPE_ ,
typename EVAL_TYPE>
172 inline std::enable_if_t<_TYPE_ == Type_Operateur::Op_DIFT_FACE, void>
completer_impl()
174 static_cast<OP_TYPE *
>(
this)->completer_Op_Dift_VDF_base();
175 const RefObjU& modele_turbulence =
static_cast<OP_TYPE *
>(
this)->equation().get_modele(TURBULENCE);
179 EVAL_TYPE& eval_diff_turb =
static_cast<EVAL_TYPE&
> (iter_vdf()->evaluateur());
180 eval_diff_turb.associer_modele_turbulence(mod_turb);
185 inline const OWN_PTR(
Iterateur_VDF_base)& iter_vdf()
const {
return static_cast<const OP_TYPE *
>(
this)->get_iter(); }
186 inline OWN_PTR(Iterateur_VDF_base)& iter_vdf() {
return static_cast<OP_TYPE *
>(
this)->get_iter(); }
188 template <
typename EVAL_TYPE>
189 inline EVAL_TYPE& associer_(
const Domaine_dis_base& domaine_dis,
const Domaine_Cl_dis_base& domaine_cl_dis)
191 const Domaine_VDF& zvdf = ref_cast(Domaine_VDF,domaine_dis);
192 const Domaine_Cl_VDF& zclvdf = ref_cast(Domaine_Cl_VDF,domaine_cl_dis);
193 iter_vdf()->associer(zvdf,zclvdf,
static_cast<OP_TYPE&
>(*
this));
194 EVAL_TYPE& eval_diff =
static_cast<EVAL_TYPE&
> (iter_vdf()->evaluateur());
195 eval_diff.associer_domaines(zvdf,zclvdf);
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
classe Champ_P0_VDF Classe qui represente un champ discret P0 par element associe a un domaine discre...
virtual DoubleTab & valeurs()=0
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.
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Champ_Fonc_base & viscosite_turbulente() const
Classe Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
const Champ_Fonc_base & conductivite_turbulente() const
const Turbulence_paroi_scal_base & loi_paroi() const
Renvoie la loi de turbulence sur la paroi (version const).
int loi_paroi_non_nulle() const
Renvoie si oui ou non loi de paroi (version const).
void associer_diffusivite_impl(const Champ_base &ch_diff)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void > set_nut_impl(const DoubleTab &nut)
const double & alpha_impl(const int i) const
const DoubleTab & tab_alpha_impl() const
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_FACE, void > set_nut_impl(const DoubleTab &nut)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFF_FACE, void > mettre_a_jour_impl()
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFF_ELEM||_TYPE_==Type_Operateur::Op_DIFT_ELEM||_TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void > associer_impl(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_cl_dis, const Champ_Inc_base &ch_diffuse)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFF_FACE||_TYPE_==Type_Operateur::Op_DIFT_FACE||_TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_FACE, void > associer_impl(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_cl_dis, const Champ_Inc_base &ch_diffuse)
const Champ_base & diffusivite_impl() const
void associer_pb(const Probleme_base &pb)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_FACE||_TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, void > associer_corr_impl(const Correlation_base &corr)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_FACE, void > completer_impl()
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_ELEM||_TYPE_==Type_Operateur::Op_DIFT_FACE, void > associer_diffusivite_turbulente_impl(const Champ_Fonc_base &visc_ou_diff_turb)
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_ELEM, void > completer_impl()
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_FACE||_TYPE_==Type_Operateur::Op_DIFT_MULTIPHASE_ELEM, const DoubleTab & > get_diffusivite_turbulente_multiphase_impl() const
std::enable_if_t< _TYPE_==Type_Operateur::Op_DIFT_ELEM, void > associer_loipar_impl(const Turbulence_paroi_scal_base &loi_paroi)
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Objet_U & valeur() const
Classe Turbulence_paroi_scal_base Classe de base pour la hierarchie des classes representant les mode...