TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Paroi_std_hyd_EF.cpp
1/****************************************************************************
2* Copyright (c) 2017, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#include <Paroi_std_hyd_EF.h>
17#include <Champ_Q1_EF.h>
18#include <Fluide_base.h>
19#include <Champ_Uniforme.h>
20#include <Dirichlet_paroi_fixe.h>
21#include <Dirichlet_paroi_defilante.h>
22#include <Periodique.h>
23#include <Static_Int_Lists.h>
24#include <Debog.h>
25#include <TRUSTList.h>
26#include <EcrFicPartage.h>
27#include <Modele_turbulence_hyd_Longueur_Melange_base.h>
28#include <Neumann_sortie_libre.h>
29#include <Modele_turbulence_hyd_combinaison.h>
30#include <Param.h>
31#include <Paroi_rugueuse.h>
32#include <SFichier.h>
33#include <Paroi_decalee_Robin.h>
34#include <Schema_Temps_base.h>
35#include <communications.h>
36#include <Equation_base.h>
37
38
39Implemente_instanciable_sans_constructeur(Paroi_std_hyd_EF,"loi_standard_hydr_EF",Paroi_hyd_base_EF);
40Implemente_instanciable(Loi_expert_hydr_EF,"Loi_expert_hydr_EF",Paroi_std_hyd_EF);
41// XD Loi_expert_hydr_EF turbulence_paroi_base Loi_expert_hydr_EF BRACE Expert wall function for the EF discretisation.
42// XD_USE_PARAM_FRAGMENT paroi_log_qdm
43
45
47{
48 return s << que_suis_je() << " " << le_nom();
49}
50
52{
53 return s << que_suis_je() << " " << le_nom();
54}
55//// readOn
56//
57
59{
61}
62
64{
65
66 Param param(que_suis_je());
68
69 param.ajouter("u_star_impose",&u_star_impose_); // XD_ADD_P double
70 // XD_CONT Imposed U* value
71 param.lire_avec_accolades_depuis(s);
72
73 Nom mot_test;
74 mot_test = "u_star_impose";
75
76 if (param.get_list_mots_lus().rang(Motcle(mot_test))!=-1)
78
79 return s ;
80}
81
87
88/////////////////////////////////////////////////////////////////////
89//
90// Implementation des fonctions de la classe Paroi_std_hyd_EF
91//
92/////////////////////////////////////////////////////////////////////
93
95{
96 tab_u_star_.resize(le_dom_dis_->nb_faces_tot());
97 tab_d_plus_.resize(le_dom_dis_->nb_faces_tot());
98 uplus_.resize(le_dom_dis_->nb_faces_tot());
99 if (!Cisaillement_paroi_.get_md_vector())
100 {
102 le_dom_dis_->creer_tableau_faces(Cisaillement_paroi_);
103 }
104 seuil_LP.resize(le_dom_dis_->nb_faces_tot());
105 iterations_LP.resize(le_dom_dis_->nb_faces_tot());
106
108
109}
110
111// Remplissage de la table
112
114{
115 Cmu_ = mon_modele_turb_hyd->get_Cmu();
117 return 1;
118}
119
120int Paroi_std_hyd_EF::calculer_hyd_BiK(DoubleTab& tab_k,DoubleTab& tab_eps)
121{
122 Cerr << " Paroi_std_hyd_EF::calculer_hyd_BiK(DoubleTab& tab_k_eps,DoubleTab& tab_eps) " << finl;
123 Cerr << "Methode non definie en discretisation EF " << finl ;
124 return 1 ;
125}
126
127// calculer_hyd pour le k-epsilon
128int Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_k_eps)
129{
130 Cerr << " Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_k_eps) " << finl;
131 Cerr << "on ne doit pas entrer dans cette methode" << finl;
132 Cerr << " car elle est definie uniquement pour la LES " << finl ;
133 return 1 ;
134}
135
136int Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_nu_t,DoubleTab& tab_k)
137{
138 const Domaine_EF& domaine_EF = ref_cast(Domaine_EF, le_dom_dis_.valeur());
139 const IntTab& face_voisins = domaine_EF.face_voisins();
140 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
141 const Fluide_base& le_fluide = ref_cast(Fluide_base, eqn_hydr.milieu());
142 const Champ_Don_base& ch_visco_cin = le_fluide.viscosite_cinematique();
143 const DoubleTab& vitesse = eqn_hydr.inconnue().valeurs();
144 const DoubleTab& tab_visco = ch_visco_cin.valeurs();
145 int nsom = domaine_EF.nb_som_face();
146 int nsom_elem = domaine_EF.domaine().nb_som_elem();
147 const IntTab& elems=domaine_EF.domaine().les_elems() ;
148
149 ArrOfInt nodes_face(nsom);
150 int nb_nodes_free = nsom_elem - nsom;
151
152 double visco=-1;
153 int l_unif;
154 if (sub_type(Champ_Uniforme,ch_visco_cin))
155 {
156 visco = std::max(tab_visco(0,0),DMINFLOAT);
157 l_unif = 1;
158 }
159 else
160 l_unif = 0;
161 if ((!l_unif) && (tab_visco.local_min_vect()<DMINFLOAT))
162 // on ne doit pas changer tab_visco ici !
163 {
164 Cerr << "In Paroi_std_hyd_EF::calculer_hyd : visco = " << tab_visco.local_min_vect() << " <= 0 ? " << finl;
165 throw;
166 }
167 //tab_visco+=DMINFLOAT;
168
169 double dist=-1,d_visco=-1;
170 double u_plus_d_plus,u_plus,d_plus,u_star;
171 double k,eps;
172 ArrOfDouble val(dimension);
173 ArrOfDouble vit(dimension);
175
176 double dist_corr=2.;
177
178 bool LM =(sub_type(Modele_turbulence_hyd_Longueur_Melange_base,mon_modele_turb_hyd.valeur()) ? 1 : 0); // Longueur de Melange
179 bool COMB =(sub_type(Modele_turbulence_hyd_combinaison,mon_modele_turb_hyd.valeur()) ? 1 : 0); //Modele Combinaison (fonction analytique et (ou) dependance a des champs sources)
180
181 ArrOfDouble vit_face(dimension);
182
183 // Loop on boundaries
184 int nb_bords=domaine_EF.nb_front_Cl();
185 for (int n_bord=0; n_bord<nb_bords; n_bord++)
186 {
187 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
188
189 // Only Dirichlet conditions:
190 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || (sub_type(Dirichlet_paroi_defilante,la_cl.valeur())))
191 {
192 // Recuperation de la valeur Erugu
193 double erugu=Erugu;
194 if (sub_type(Paroi_rugueuse,la_cl.valeur()))
195 erugu=ref_cast(Paroi_rugueuse,la_cl.valeur()).get_erugu();
196
197 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
198
199 // Loop on real faces
200 //ArrOfDouble vit_face_loc(dimension);
201 int ndeb = 0;
202 int nfin = le_bord.nb_faces_tot();
203 for (int ind_face=ndeb; ind_face<nfin; ind_face++)
204 {
205 int num_face=le_bord.num_face(ind_face);
206 int elem = face_voisins(num_face,0);
207
208 // vitesse face CL
209 vit_face=0.;
210 nodes_face=0;
211 for(int jsom=0; jsom<nsom; jsom++)
212 {
213 int num_som = domaine_EF.face_sommets(num_face, jsom);
214 nodes_face[jsom] = num_som;
215 for(int comp=0; comp<dimension; comp++) vit_face[comp]+=vitesse(num_som,comp)/nsom;
216 }
217
218 vit=0.;
219 // Loop on nodes : vitesse moyenne des noeuds n'appartenant pas a la face CL
220 for (int i=0; i<nsom_elem; i++)
221 {
222 int node=elems(elem,i);
223 int IOK = 1;
224 for(int jsom=0; jsom<nsom; jsom++)
225 if (nodes_face[jsom] == node) IOK=0;
226 // Le noeud contribue
227 if (IOK)
228 for (int j=0; j<dimension; j++)
229 vit[j]+=(vitesse(node,j)-vit_face[j])/nb_nodes_free; // permet de soustraire la vitesse de glissement eventuelle
230 }
231 double norm_v = norm_vit_lp(vit,num_face,domaine_EF,val);
232
233 dist = distance_face_elem(num_face,elem,domaine_EF);
234 dist *= dist_corr;
235
236 if (l_unif)
237 d_visco = visco;
238 else
239 d_visco = (tab_visco.nb_dim()==1 ? tab_visco(elem) : tab_visco(elem,0));
240
241 u_plus_d_plus = norm_v*dist/d_visco;
242
243 u_plus = calculer_u_plus(ind_face,u_plus_d_plus,erugu);
244
246 {
247 if(u_plus)
248 {
249 u_star = norm_v/u_plus ;
250 d_plus = u_plus_d_plus/u_plus ;
251 }
252 else
253 {
254 u_star = 0.;
255 d_plus = 0.;
256 }
257 }
258 else
259 {
260 u_star = u_star_impose_;
261 d_plus = 0.;
262 }
263
264 calculer_k_eps(k,eps,d_plus,u_star,d_visco,dist);
265
266 // Calcul de la contrainte tangentielle
267 for (int j=0; j<dimension; j++)
268 Cisaillement_paroi_(num_face,j) = u_star*u_star*val[j];
269
270 // Remplissage des tableaux (dans le cas de Longueur de melange on laisse la viscosite telle quelle)
271 tab_k(elem) = k;
272
273 if((!LM) && (!COMB)) tab_nu_t(elem) = Cmu_*k*k/(eps+DMINFLOAT);
274
275 uplus_(num_face) = u_plus;
276 tab_d_plus_(num_face) = d_plus;
277 tab_u_star_(num_face) = u_star;
278
279 // Modification de nu_t (et par consequent lambda_t) pour exploiter la valeur de nu_t (lambda_t) en y=deq_lam.
280 // La valeur de dist_corr n est valable que dans le cas particuler ou nu_t est fonction lineaire de y
281 if (COMB)
282 {
283 Modele_turbulence_hyd_combinaison& modele_turb = ref_cast(Modele_turbulence_hyd_combinaison,mon_modele_turb_hyd.valeur());
284 if (modele_turb.nombre_sources()==0)
285 tab_nu_t(elem) *= dist_corr;
286 }
287
288 } // End loop on real faces
289
290 } // End Dirichlet conditions
291
292 } // End loop on boundaries
293
294 Cisaillement_paroi_.echange_espace_virtuel();
295 tab_nu_t.echange_espace_virtuel();
297 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd k",tab_k);
298 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd tab_nu_t",tab_nu_t);
299 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd Cisaillement_paroi_",Cisaillement_paroi_);
300 return 1;
301} // fin du calcul_hyd (nu-t)
302
303int Paroi_std_hyd_EF::calculer_k_eps(double& k, double& eps , double yp, double u_star,
304 double d_visco, double dist)
305{
306 // PQ : 05/04/07 : formulation continue de k et epsilon
307 // assurant le bon comportement asymptotique
308 double u_star_carre = u_star * u_star;
309 k = 0.07*yp*yp*(exp(-yp/9.))+(1./(sqrt(Cmu_)))*pow((1.-exp(-yp/20.)),2); // k_plus
310 k *= u_star_carre;
311 // PL: 50625=15^4 on evite d'utiliser pow car lent
312 eps = (1./(Kappa_*pow(yp*yp*yp*yp+50625,0.25))); // eps_plus
313 eps *= u_star_carre*u_star_carre/d_visco;
314
315 return 1;
316}
317
318double Paroi_std_hyd_EF::calculer_u_plus(const int ind_face,const double u_plus_d_plus,const double erugu)
319{
320 // PQ : 05/04/07 : formulation continue de la loi de paroi
321 // construite d'apres la loi de Reichardt
322
323 if(u_plus_d_plus<1.) return sqrt(u_plus_d_plus); // pour eviter de faire tourner la procedure iterative
324
325
326 double u_plus = u_plus_d_plus/100.;
327 double r = 1.;
328 double seuil = 0.001;
329 int iter = 0;
330 int itmax = 25;
331
332 double A = (1/Kappa_)*log(erugu/Kappa_) ; // (=7.44, contre 7.8 dans la loi d'origine)
333 // permettant d'avoir en l'infini la loi de
334 // Reichardt se calant sur : u+ = (1/Kappa_).ln(Erugu.y+)
335 double d_plus,u_plus2;
336
337 while((iter++<itmax) && (r>seuil))
338 {
339 d_plus = u_plus_d_plus/ u_plus ;
340 u_plus2 = ((1./Kappa_)*log(1.+Kappa_*d_plus))+A*(1.-exp(-d_plus/11.)-exp(-d_plus/3.)*d_plus/11.); // Equation de Reichardt
341 u_plus = 0.5*(u_plus+u_plus2);
342 r = std::fabs(u_plus-u_plus2)/u_plus;
343 }
344
345 seuil_LP(ind_face) = r;
346 iterations_LP(ind_face) = iter;
347
348 if (iter >= itmax) erreur_non_convergence();
349
350 return u_plus;
351}
352
354{
355 const Domaine_EF& domaine_EF = ref_cast(Domaine_EF, le_dom_dis_.valeur());
356 int ndeb,nfin;
357 double upmoy,dpmoy,utaumoy;
358 double seuil_moy,iter_moy;
359 double norme_L2=0.;
360
361 upmoy=0.;
362 dpmoy=0.;
363 utaumoy=0.;
364 seuil_moy=0.;
365 iter_moy=0.;
366
367 int compt=0;
368
369 EcrFicPartage Ustar;
370 ouvrir_fichier_partage(Ustar,"Ustar");
371
372 for (int n_bord=0; n_bord<domaine_EF.nb_front_Cl(); n_bord++)
373 {
374 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
375 if ( (sub_type(Dirichlet_paroi_fixe,la_cl.valeur())) ||
376 (sub_type(Dirichlet_paroi_defilante,la_cl.valeur())) ||
377 (sub_type(Paroi_decalee_Robin,la_cl.valeur()) ) ||
378 (la_cl->que_suis_je() == "Frontiere_ouverte_vitesse_imposee_ALE"))
379 {
380 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
381 if(je_suis_maitre())
382 {
383 Ustar << finl;
384 Ustar << "Bord " << le_bord.le_nom() << finl;
385 if (dimension == 2)
386 {
387 Ustar << "-------------------------------------------------------------------------------------------";
388 Ustar << "--------------------------------------------------------------------------------------------" << finl;
389 Ustar << "\tFace a\t\t\t\t|\t\t\t\t\t\t\t\t\t| TAU=Nu.Grad(Ut) [m2/s2]" << finl;
390 Ustar << "----------------------------------------|--------------------------------------------------";
391 Ustar << "---------------------|----------------------------------------------------------------------" << finl;
392 Ustar << "X\t\t| Y\t\t\t| u+\t\t\t| d+\t\t\t| u*\t\t\t| ||TAU||_2\t\t| |TAUx|\t\t| |TAUy|" << finl;
393 Ustar << "----------------|-----------------------|-----------------------|-----------------------|--";
394 Ustar << "---------------------|-----------------------|-----------------------|----------------------" << finl;
395 }
396 if (dimension == 3)
397 {
398 Ustar << "-----------------------------------------------------------------------------------------------------------------";
399 Ustar << "-----------------------------------------------------------------------------------------------------------------" << finl;
400 Ustar << "\tFace a\t\t\t\t\t\t\t|\t\t\t\t\t\t\t\t\t| TAU=Nu.Grad(Ut) [m2/s2]" << finl;
401 Ustar << "----------------------------------------------------------------|------------------------------------------------";
402 Ustar << "-----------------------|-----------------------------------------------------------------------------------------" << finl;
403 Ustar << "X\t\t| Y\t\t\t| Z\t\t\t| u+\t\t\t| d+\t\t\t| u*\t\t\t| ||TAU||_2\t\t| |TAUx|\t\t| |TAUy|\t\t| |TAUz|" << finl;
404 Ustar << "----------------|-----------------------|-----------------------|-----------------------|-----------------------|";
405 Ustar << "-----------------------|-----------------------|-----------------------|-----------------------|-----------------" << finl;
406 }
407 }
408 ndeb = le_bord.num_premiere_face();
409 nfin = ndeb + le_bord.nb_faces();
410 for (int num_face=ndeb; num_face<nfin; num_face++)
411 {
412 double x=domaine_EF.xv(num_face,0);
413 double y=domaine_EF.xv(num_face,1);
414 norme_L2= Cisaillement_paroi_(num_face,0)*Cisaillement_paroi_(num_face,0) + Cisaillement_paroi_(num_face,1)*Cisaillement_paroi_(num_face,1);
415 if (dimension == 2)
416 Ustar << x << "\t| " << y;
417 if (dimension == 3)
418 {
419 double z=domaine_EF.xv(num_face,2);
420 Ustar << x << "\t| " << y << "\t| " << z;
421 norme_L2+= Cisaillement_paroi_(num_face,2)*Cisaillement_paroi_(num_face,2);
422 }
423 norme_L2=sqrt(norme_L2);
424 Ustar << "\t| " << uplus_(num_face) << "\t| " << tab_d_plus(num_face) << "\t| " << tab_u_star(num_face);
425 Ustar << "\t| " << norme_L2 << "\t| " << Cisaillement_paroi_(num_face,0) << "\t| " << Cisaillement_paroi_(num_face,1) ;
426 if (dimension == 3)
427 Ustar << "\t| " << Cisaillement_paroi_(num_face,2) << finl;
428 else
429 Ustar << finl;
430
431 // PQ : 03/03 : Calcul des valeurs moyennes (en supposant maillage regulier)
432
433 upmoy +=uplus_(num_face);
434 dpmoy +=tab_d_plus(num_face);
435 utaumoy +=tab_u_star(num_face);
436 seuil_moy += seuil_LP(num_face);
437 iter_moy += iterations_LP(num_face);
438 compt +=1;
439 }
440 Ustar.syncfile();
441 }
442 }
443 /* Reduce 6 mp_sum to 1 by using mp_sum_for_each_item:
444 upmoy = mp_sum(upmoy);
445 dpmoy = mp_sum(dpmoy);
446 utaumoy = mp_sum(utaumoy);
447 seuil_moy = mp_sum(seuil_moy);
448 iter_moy = mp_sum(iter_moy);
449 compt = mp_sum(compt);
450 */
451
452 ArrOfDouble array(6);
453 array[0]=upmoy;
454 array[1]=dpmoy;
455 array[2]=utaumoy;
456 array[3]=seuil_moy;
457 array[4]=iter_moy;
458 array[5]=compt;
460 upmoy=array[0];
461 dpmoy=array[1];
462 utaumoy=array[2];
463 seuil_moy=array[3];
464 iter_moy=array[4];
465 compt=(int)array[5];
466 if (je_suis_maitre())
467 {
468 if (compt)
469 {
470 Ustar << finl;
471 Ustar << "-------------------------------------------------------------" << finl;
472 Ustar << "Calcul des valeurs moyennes (en supposant maillage regulier):" << finl;
473 Ustar << "<u+>= " << upmoy/compt << " <d+>= " << dpmoy/compt << " <u*>= " << utaumoy/compt << " seuil_LP= " << seuil_moy/compt << " iterations_LP= " << iter_moy/compt << finl;
474 }
475 Ustar << finl << finl;
476 }
477 Ustar.syncfile();
478}
479
480
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_Uniforme Represente un champ constant dans l'espace et dans le temps.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
classe Dirichlet_paroi_defilante Impose la vitesse de paroi dnas une equation de type Navier_Stokes.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
IntTab_t & les_elems()
Definition Domaine.h:129
class Domaine_EF
Definition Domaine_EF.h:59
double xv(int num_face, int k) const
Definition Domaine_VF.h:76
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
int nb_som_face() const
renvoie le nombre de sommets par face.
Definition Domaine_VF.h:494
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
int nb_front_Cl() const
const Domaine & domaine() const
Sortie & syncfile() override
Provoque l'ecriture sur disque des donnees accumulees sur les differents processeurs depuis le dernie...
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Definition Fluide_base.h:38
const Champ_Don_base & viscosite_cinematique() const
Definition Fluide_base.h:58
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
int nb_faces_tot() const
Definition Front_VF.h:58
int num_face(const int) const
Definition Front_VF.h:68
const Nom & le_nom() const override
Renvoie le nom de la frontiere geometrique.
cette classe permet de specifier des options a la loi de paroi standard.
Classe Modele_turbulence_hyd_Longueur_Melange_base Classe representant le modele de turbulence Longue...
Classe Modele_turbulence_hyd_combinaison Classe representant un modele de turbulence exprime a partir...
virtual void set_param(Param &) const
Definition Objet_U.h:135
static int dimension
Definition Objet_U.h:99
friend class Sortie
Definition Objet_U.h:75
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Objet_U.cpp:319
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
CLASS: Paroi_hyd_base_EF Classe de base des lois de paroi hydraulique en EF.
void init_lois_paroi_hydraulique_()
void set_param(Param &param) const
CLASS: Paroi_std_hyd_EF.
int calculer_hyd_BiK(DoubleTab &, DoubleTab &) override
void imprimer_ustar(Sortie &) const override
int calculer_hyd(DoubleTab &) override
double calculer_u_plus(const int, const double, const double erugu)
virtual int init_lois_paroi_hydraulique()
virtual int calculer_k_eps(double &, double &, double, double, double, double)
void set_param(Param &param) const override
int init_lois_paroi() override
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
Definition Process.cpp:193
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Definition Process.cpp:86
Classe de base des flux de sortie.
Definition Sortie.h:52
int nb_dim() const
Definition TRUSTTab.h:199
_TYPE_ local_min_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
Definition TRUSTVect.h:155
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
const DoubleVect & tab_d_plus() const
const DoubleVect & tab_u_star() const
void ouvrir_fichier_partage(EcrFicPartage &, const Nom &) const
Ouverture/creation d'un fichier d'impression de Face, uplus_, dplus_, tab_u_star, Cisaillement_paroi_...