16#include <Op_Conv_PolyMAC_CDO_iterateur_base.h>
17#include <Modifier_pour_fluide_dilatable.h>
18#include <Discretisation_base.h>
19#include <Probleme_base.h>
35inline void eval_fluent(
const double psc,
const int num1,
const int num2, DoubleVect& fluent)
47 const IntTab& face_voisins = domaine_PolyMAC_CDO.
face_voisins();
48 const DoubleVect& volumes = domaine_PolyMAC_CDO.
volumes();
49 const DoubleVect& face_surfaces = domaine_PolyMAC_CDO.
face_surfaces();
51 const DoubleVect& vit = (vitesse_pour_pas_de_temps_ ? vitesse_pour_pas_de_temps_->valeurs() : vit_associe);
62 for (
int n_bord = 0; n_bord < domaine_PolyMAC_CDO.
nb_front_Cl(); n_bord++)
73 for (face = num1; face < num2; face++)
75 psc = vit[face] * face_surfaces(face);
76 if ((elem1 = face_voisins(face, 0)) != -1)
83 fluent[face_voisins(face, 1)] += psc;
89 int domaine_PolyMAC_CDO_nb_faces = domaine_PolyMAC_CDO.
nb_faces();
91 for (face = premiere_face; face < domaine_PolyMAC_CDO_nb_faces; face++)
93 psc = vit[face] * face_surfaces(face);
94 eval_fluent(psc, face_voisins(face, 0), face_voisins(face, 1), fluent);
99 diviser_par_rho_si_dilatable(fluent,
equation().milieu());
100 double dt_stab = 1.e30;
101 int domaine_PolyMAC_CDO_nb_elem = domaine_PolyMAC_CDO.
nb_elem();
103 for (
int num_poly = 0; num_poly < domaine_PolyMAC_CDO_nb_elem; num_poly++)
105 double dt_elem = volumes(num_poly) / (fluent[num_poly] + DMINFLOAT);
106 if (dt_elem < dt_stab)
122 DoubleTab& es_valeurs = espace_stockage.
valeurs();
127 const IntTab& face_voisins = domaine_PolyMAC_CDO.
face_voisins();
128 const DoubleVect& volumes = domaine_PolyMAC_CDO.
volumes();
129 const DoubleVect& face_surfaces = domaine_PolyMAC_CDO.
face_surfaces();
137 int num1, num2, face;
142 for (
int n_bord = 0; n_bord < domaine_PolyMAC_CDO.
nb_front_Cl(); n_bord++)
153 for (face = num1; face < num2; face++)
155 psc = vit[face] * face_surfaces(face);
156 if ((elem1 = face_voisins(face, 0)) != -1)
159 fluent[elem1] -= psc;
163 fluent[face_voisins(face, 1)] += psc;
169 int domaine_PolyMAC_CDO_nb_faces = domaine_PolyMAC_CDO.
nb_faces();
170 for (face = domaine_PolyMAC_CDO.
premiere_face_int(); face < domaine_PolyMAC_CDO_nb_faces; face++)
172 psc = vit[face] * face_surfaces(face);
173 eval_fluent(psc, face_voisins(face, 0), face_voisins(face, 1), fluent);
177 diviser_par_rho_si_dilatable(fluent,
equation().milieu());
179 int domaine_PolyMAC_CDO_nb_elem = domaine_PolyMAC_CDO.
nb_elem();
180 for (
int num_poly = 0; num_poly < domaine_PolyMAC_CDO_nb_elem; num_poly++)
182 es_valeurs(num_poly) = volumes(num_poly) / (fluent[num_poly] + 1.e-30);
209 iter_->associer_domaine_cl_dis(zcl);
214 return iter_->impr(os);
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
classe Dirichlet_entree_fluide Cette classe represente une condition aux limite imposant une grandeur
int_t nb_elem_tot() const
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
virtual const DoubleVect & face_surfaces() const
int nb_faces() const
renvoie le nombre global de faces.
double volumes(int i) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
int num_premiere_face() const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
virtual Motcle get_localisation_pour_post(const Nom &option) const
virtual void calculer_pour_post(Champ_base &espace_stockage, const Nom &option, int comp) const
Une chaine de caractere (Nom) en majuscules.
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
class Nom Une chaine de caractere pour nommer les objets de TRUST
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 const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Op_Conv_PolyMAC_CDO_iterateur_base(const Iterateur_PolyMAC_CDO_base &iter_base)
double calculer_dt_stab() const override
Calcul dt_stab.
void associer_domaine_cl_dis(const Domaine_Cl_dis_base &) override
virtual const Champ_base & vitesse() const =0
Motcle get_localisation_pour_post(const Nom &option) const override
void completer() override
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son equation.
int impr(Sortie &os) const override
DOES NOTHING - to override in derived classes.
void calculer_pour_post(Champ_base &espace_stockage, const Nom &option, int comp) const override
classe Operateur_Conv_base Cette classe est la base de la hierarchie des operateurs representant
void fixer_dt_stab_conv(double dt)
virtual void completer()
Associe l'operateur au domaine_dis, le domaine_Cl_dis, et a l'inconnue de son equation.
static double mp_min(double)
Classe de base des flux de sortie.