16#include <Op_Dift_VDF_Elem_base.h>
33 double dt_stab, coef = -1.e10;
35 const IntTab& elem_faces = domaine_VDF.
elem_faces();
40 for (
int elem = 0; elem < domaine_VDF.
nb_elem(); elem++)
44 if (!is_concentration)
46 const int Ccp = sub_type(
Champ_Uniforme, mon_equation->milieu().capacite_calorifique());
47 const int Cr = sub_type(
Champ_Uniforme, mon_equation->milieu().masse_volumique());
48 const DoubleTab& tab_Cp = mon_equation->milieu().capacite_calorifique().valeurs(), tab_r = mon_equation->milieu().masse_volumique().valeurs();
49 rcp = tab_r(Cr ? 0 : elem, 0) * tab_Cp(Ccp ? 0 : elem, 0);
53 for (
int i = 0; i < 2 *
dimension; i++) numfa[i] = elem_faces(elem, i);
60 moy += 1. / (hd * hd);
62 const double alpha_local = (
alpha_(elem) + alpha_t(elem)) / rcp * moy;
63 coef = std::max(coef, alpha_local);
67 dt_stab = 1. / (2. * (coef + DMINFLOAT));
82 double dt_stab, coef = -1.e10;
84 const IntTab& elem_faces = domaine_VDF.
elem_faces();
86 double alpha_local,h_x,h_y,h_z;
91 for (
int elem=0; elem<domaine_VDF.
nb_elem(); elem++)
93 for (
int i=0; i<4; i++) numfa[i] = elem_faces(elem,i);
96 alpha_local = (
alpha_(elem)+alpha_t(elem)) *(1/(h_x*h_x) + 1/(h_y*h_y));
97 coef = std::max(coef,alpha_local);
103 for (
int elem=0; elem<domaine_VDF.
nb_elem(); elem++)
105 for (
int i=0; i<6; i++) numfa[i] = elem_faces(elem,i);
109 alpha_local = (
alpha_(elem)+alpha_t(elem)) *(1/(h_x*h_x) + 1/(h_y*h_y) + 1/(h_z*h_z));
110 coef = std::max(coef,alpha_local);
114 dt_stab = 1/(2*(coef+DMINFLOAT));
120 double dt_stab, coef = -1.e10;
122 const IntTab& elem_faces = domaine_VDF.
elem_faces();
126 IntVect numfa(2 * D);
129 for (
int e = 0; e < domaine_VDF.
nb_elem(); e++)
131 for (
int i = 0; i < 2 * D; i++)
132 numfa(i) = elem_faces(e, i);
133 for (
int d = 0; d < D; d++)
136 for (
int d = 0; d < D; d++)
137 invh += 1. / (h(d) * h(d));
138 const double alpha_local = (
alpha_(e) + alpha_t(e)) * invh;
139 coef = std::max(coef, alpha_local);
142 dt_stab = 1. / (2. * (coef + DMINFLOAT));
150 if (!matrices.count(nom_inco) || semi_impl.count(nom_inco))
return;
152 Matrice_Morse *mat = matrices.count(nom_inco) ? matrices.at(nom_inco) :
nullptr, mat2;
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
double dist_face(int, int, int k) const
double dist_face_axi(int, int, int k) const
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Champ_Inc_base & inconnue() const =0
const Nom & le_nom() const override
Renvoie le nom du champ.
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).
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
virtual int debute_par(const char *const n) const
const std::string & getString() const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
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.
const Champ_Fonc_base & diffusivite_turbulente() const
double calculer_dt_stab_elem_axi() const
double calculer_dt_stab_elem_var_axi() const
double calculer_dt_stab_elem() const
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl) const override
virtual double alpha_(const int) const =0
void dimensionner(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &, const bool) const
static double mp_max(double)
Classe de base des flux de sortie.