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
Overrides Champ_base::valeurs() Returns the array of values.
virtual DoubleTab & valeurs()=0
class Champ_base This class is the base of the fields hierarchy.
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
Returns the name of the field.
Matrice_Morse class - Represents a (sparse) matrix M, not necessarily square,.
int nb_colonnes() const override
Return local number of columns (=size on the current proc).
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
const std::string & getString() const
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
const Champ_Fonc_base & diffusivite_turbulente() const
void calculer_borne_locale(DoubleVect &, double, double) const override
double calculer_dt_stab() const override
Computes 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
Returns the field corresponding to the true diffusivity of the medium used for the time step computat...
static double mp_max(double)
Base class for output streams.
virtual const Champ_base & get_champ_masse_volumique() const
Returns the density field.
virtual int has_champ_masse_volumique() const
Returns 1 if the density field has been associated, 0 otherwise.
_SIZE_ dimension(int d) const