16#include <Perte_Charge_Circulaire_VEF_P1NC.h>
18#include <Equation_base.h>
20#include <Fluide_Incompressible.h>
21#include <Probleme_base.h>
23#include <Sous_domaine_VF.h>
24#include <Domaine_VEF.h>
25#include <Matrice_Morse.h>
26#include <Schema_Temps_base.h>
47 Cerr <<
"The direction field must be defined with " <<
dimension <<
" components" << finl;
73 else if (mot==
"lambda_ortho")
77 Cerr <<
"Reading and interpreting the function " << tmp <<
" ... ";
79 lambda_ortho.setString(tmp);
80 lambda_ortho.addVar(
"Re_tot");
81 lambda_ortho.addVar(
"Re_ortho");
82 lambda_ortho.addVar(
"t");
83 lambda_ortho.addVar(
"x");
85 lambda_ortho.addVar(
"y");
87 lambda_ortho.addVar(
"z");
88 lambda_ortho.parseString();
89 Cerr <<
" Ok" << finl;
106 double t,
double norme_u,
double dh,
double nu,
double reynolds,
double& coeff_ortho,
double& coeff_long,
double& u_l,DoubleVect& av_valeur)
const
110 double dh_ortho=diam_hydr_ortho->valeur_a_compo(pos,0);
116 v->valeur_a(pos,av_valeur);
121 vcarre+=av_valeur[dim]*av_valeur[dim];
122 av_valeur/=sqrt(vcarre);
128 u_l+=u[dim]*av_valeur[dim];
130 double u_ortho=sqrt(std::max(norme_u*norme_u-u_l*u_l,0.0));
137 double Re_l=dh*std::fabs(u_l)/nu;
138 if(Re_l<1e-10) Re_l=1e-10;
142 double Re_ortho=dh_ortho*u_ortho/nu;
143 if (Re_ortho<1e-10) Re_ortho=1e-10;
145 lambda.setVar(0,reynolds);
155 lambda_ortho.setVar(0,reynolds);
156 lambda_ortho.setVar(1,Re_ortho);
157 lambda_ortho.setVar(2,t);
158 lambda_ortho.setVar(3,pos[0]);
160 lambda_ortho.setVar(4,pos[1]);
162 lambda_ortho.setVar(5,pos[2]);
163 double l_ortho=lambda_ortho.eval();
164 double l_long=
lambda.eval();
165 coeff_ortho=l_ortho*u_ortho/2./dh_ortho;
166 coeff_long=l_long *std::fabs(u_l) /2./dh ;
231 bool dh_constant=sub_type(Champ_Uniforme,diam_hydr.valeur())?true:false;
236 double t=equation().schema_temps().temps_courant();
238 // Number of faces to process.
239 int max_faces=sous_domaine?
240 ssz.les_faces().size() :
243 for (int face=0;face<max_faces;face++) {
245 // index of the face in domaine_VEF
246 int la_face=sous_domaine?
247 ssz.les_faces()[face] :
250 // Retrieve velocity at the face and compute its magnitude
252 for (int dim=0;dim<dimension;dim++) {
253 u[dim]=vit(la_face,dim);
254 norme_u+=u[dim]*u[dim];
256 norme_u=sqrt(norme_u) ;
259 for (int i=0;i<dimension;i++)
260 pos[i]=xv(la_face,i);
264 nu_valeur=nu.valeur_a_compo(pos,0);
265 } else nu_valeur=nu(0,0);
267 // Compute hydraulic diameter
269 dh_valeur=diam_hydr->valeur_a_compo(pos,0);
271 else dh_valeur=diam_hydr(0,0);
273 // Compute Reynolds number
274 reynolds=norme_u*dh_valeur/nu_valeur;
275 // Lambda is often undefined for Re->0
276 if (reynolds < 1.e-10)
279 // Compute the integration volume
280 double volume=sous_domaine?
281 ssz.volumes_entrelaces(face) :
282 zvef.volumes_entrelaces(la_face);
283 volume*=zvef.porosite_face(la_face);
288 coef_implicite_perte_charge (u,pos,t,norme_u,dh_valeur,reynolds,p_charge);
289 for (int dim=0;dim<dimension;dim++) {
290 int n0=la_face*dimension+dim;
291 matrice.coef(n0,n0) += p_charge[dim]*volume;
298 DoubleTrav resu(inco);
300 //Cerr<<" test0 " <<max_abs(resu)<<finl<<resu<<finl;
301 matrice.ajouter_multvect(inco,resu);
302 equation().solv_masse().appliquer(resu);
303 Cerr<<" test " <<mp_max_abs_vect(resu)<<finl;
Class defining operators and methods for all reading operation in an input flow (file,...
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
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.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Anisotropic pressure drop (along a unit vector v and in the plane orthogonal to this vector).
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
void set_param(Param &titi) const override
void coeffs_perte_charge(const DoubleVect &u, const DoubleVect &pos, double t, double norme_u, double dh, double nu, double reynolds, double &coeff_ortho, double &coeff_long, double &u_l, DoubleVect &v_valeur) const override
Implements the effective computation of the pressure drop at a given location.
Factorizes the common functionality of several pressure drop operators in VEF, velocity at faces.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
virtual void set_param(Param ¶m) const override
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)