16#include <Traitement_particulier_NS_Pression_VEF.h>
17#include <Assembleur_base.h>
18#include <Milieu_base.h>
19#include <Domaine_Cl_VEF.h>
39 if (mot ==
"Pression_porosite")
return 1 ;
46 if (mot ==
"Pression_porosite")
56 Motcle accouverte =
"{" , accfermee =
"}" ;
63 les_mots[0] =
"Pression_porosite";
67 if (motbidon == accouverte)
71 while(motlu != accfermee)
74 int rang=les_mots.
search(motlu);
79 Cerr <<
" Reading Pression_porosite " << finl;
83 const int nb_elem = domaine_VEF.
nb_elem() ;
85 ch_p.associer_domaine_dis_base(zdis);
86 ch_p.nommer(
"Pression_porosite");
87 ch_p.fixer_nb_comp(1);
88 ch_p.fixer_nb_valeurs_nodales(nb_elem);
89 ch_p.fixer_unite(
"Pa.m3/kg");
97 if (motlu == accfermee)
103 Cerr <<
"Error in reading Traitement_particulier_Brech_VEF" << finl;
104 Cerr <<
"Possible keywords are: calcul_flux or Richardson " << finl;
105 Cerr <<
"Read keyword: " << motlu << finl;
113 if (motlu != accfermee)
115 Cerr <<
"Error in reading Traitement_particulier_NS_Brech_VEF 1 ";
116 Cerr <<
"Expected } instead of " << motlu << finl;
128 if (c_pression == 1 ) post_traitement_particulier_calcul_pression() ;
132void Traitement_particulier_NS_Pression_VEF::post_traitement_particulier_calcul_pression()
135 const DoubleVect& porosite_face = mon_equation->milieu().porosite_face();
138 Operateur_Div divergence = mon_equation->operateur_divergence();
140 SolveurSys solveur_pression_ = mon_equation->solveur_pression();
142 DoubleTab& pression=mon_equation->pression().valeurs();
143 DoubleTab& vitesse=mon_equation->vitesse().valeurs();
144 DoubleTab gradP(vitesse);
145 DoubleTab inc_pre(pression);
146 DoubleTab secmem(pression);
147 DoubleTab grad_temp(vitesse);
154 gradient.calculer(mon_equation->pression().valeurs(),gradP);
157 mon_equation->solv_masse().appliquer(gradP);
159 for(i=0; i<nb_face; i++)
162 grad_temp(i,comp) = gradP(i,comp)/porosite_face(i);
166 divergence.calculer(grad_temp, secmem);
170 mon_equation->assembleur_pression()->modifier_secmem(secmem);
173 solveur_pression_.
resoudre_systeme(mon_equation->matrice_pression().valeur(),secmem, inc_pre);
174 DoubleVect& la_pression_porosite =
ch_p.valeurs();
175 la_pression_porosite = pression;
178 la_pression_porosite += inc_pre;
class Champ_base This class is the base of the fields hierarchy.
int nb_faces() const
Returns the total number of faces.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
Class defining operators and methods for all reading operation in an input flow (file,...
A character string (Nom) in uppercase.
An array of Motcle objects.
int search(const Motcle &t) const
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.
Operateur_Div Generic class of the hierarchy of operators computing the divergence.
Classe Operateur_Grad Generic class of the hierarchy of operators computing the gradient.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
class SolveurSys A SolveurSys represents any class
int resoudre_systeme(const Matrice_Base &matrice, const DoubleVect &secmem, DoubleVect &solution)
Base class for output streams.
class Traitement_particulier_NS_Pression_VEF This class performs special post-processing
Entree & lire(Entree &) override
Traitement_particulier_NS_Pression_VEF()
void post_traitement_particulier() override
int comprend_champ(const Motcle &mot) const
int a_pour_Champ_Fonc(const Motcle &mot, OBS_PTR(Champ_base)&ch_ref) const
OBS_PTR(Navier_Stokes_std) mon_equation
Champs_compris champs_compris_