16#include <Op_Dift_VDF_Face_base.h>
39 double dt_stab, coef = -1.e10;
47 for (
int elem = 0; elem < nb_elem; elem++)
50 for (
int i = 0; i < dim; i++)
52 const double h = domaine_VDF.
dim_elem(elem, i);
53 diflo += 1. / (h * h);
55 double mu_physique = diffu(elem, 0), mu_turbulent = diffu_turb(elem, 0);
57 for (
int ncomp = 1; ncomp < diffu.
line_size(); ncomp++) mu_physique = std::max(mu_physique, diffu(elem, ncomp));
58 for (
int ncomp = 1; ncomp < diffu_turb.line_size(); ncomp++) mu_turbulent = std::max(mu_turbulent, diffu_turb(elem, ncomp));
60 const double inv_rho = 1./valeurs_rho(elem) ;
61 diflo *= (mu_physique + mu_turbulent) * inv_rho;
62 coef = std::max(coef, diflo);
68 const DoubleTab& diffu_dt = champ_diffu.
valeurs();
69 const int diffu_dt_variable = (diffu_dt.
dimension(0) == 1) ? 0 : 1, diffu_variable = (diffu.
dimension(0) == 1) ? 0 : 1;
70 for (
int elem = 0; elem < nb_elem; elem++)
73 for (
int i = 0; i < dim; i++)
75 const double h = domaine_VDF.
dim_elem(elem, i);
76 diflo += 1. / (h * h);
79 int item = (diffu_variable ? elem : 0);
80 double mu_physique = diffu(item, 0), mu_turbulent = diffu_turb(elem, 0);
82 for (
int ncomp = 1; ncomp < diffu.
line_size(); ncomp++) mu_physique = std::max(mu_physique, diffu(item, ncomp));
83 for (
int ncomp = 1; ncomp < diffu_turb.line_size(); ncomp++) mu_turbulent = std::max(mu_turbulent, diffu_turb(elem, ncomp));
85 item = (diffu_dt_variable ? elem : 0);
86 double diffu_dt_l = diffu_dt(item, 0);
88 for (
int ncomp = 1; ncomp < diffu_dt.
line_size(); ncomp++) diffu_dt_l = std::max(diffu_dt_l, diffu_dt(item, ncomp));
92 diflo *= (mu_physique + mu_turbulent)*(diffu_dt_l)/mu_physique ;
93 coef = std::max(coef, diflo);
97 dt_stab = 0.5 / (coef+DMINFLOAT);
106 const DoubleVect& diffu = champ_diffu.
valeurs();
107 const int diffu_variable = (diffu.
size() == 1) ? 0 : 1, nb_elem = domaine_VDF.
nb_elem();
108 const double diffu_constante = (diffu_variable ? 0. : diffu(0));
109 for (
int elem=0; elem<nb_elem; elem++)
112 for (
int dir = 0; dir <
dimension; dir++)
114 double h = domaine_VDF.
dim_elem(elem,dir);
117 double diffu_l = diffu_variable ? diffu(elem) : diffu_constante;
118 double coef = 1/(2*(dt+DMINFLOAT)*h_inv*dt_diff_sur_dt_conv) - diffu_l;
120 if (coef>0 && coef<borne_visco_turb(elem)) borne_visco_turb(elem) = coef;
127 if (!matrices.count(nom_inco) || semi_impl.count(nom_inco))
return;
129 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.
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
double dim_elem(int, int) const
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.
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
void calculer_borne_locale(DoubleVect &, double, double) const override
double calculer_dt_stab() const override
Calcul dt_stab.
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl) const override
const Champ_base & diffusivite() const override=0
void dimensionner(const Domaine_VDF &, const Domaine_Cl_VDF &, Matrice_Morse &) const
virtual const Champ_base & diffusivite_pour_pas_de_temps() const
Renvoie le champ_don correspondant a la vraie diffusivite du milieu qui sert pour le calcul du pas de...
static double mp_max(double)
Classe de base des flux de sortie.
virtual const Champ_base & get_champ_masse_volumique() const
Renvoie le champ de masse volumique.
virtual int has_champ_masse_volumique() const
Renvoie 1 si la masse volumique a ete associee, 0 sinon.
_SIZE_ dimension(int d) const