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
43
45{
46 return s << que_suis_je() << " " << le_nom();
47}
48
50{
51 return s << que_suis_je() << " " << le_nom();
52}
53//// readOn
54//
55
57{
59}
60
62{
63
64 Param param(que_suis_je());
66
67 param.ajouter("u_star_impose",&u_star_impose_);
68 param.lire_avec_accolades_depuis(s);
69
70 Nom mot_test;
71 mot_test = "u_star_impose";
72
73 if (param.get_list_mots_lus().rang(Motcle(mot_test))!=-1)
75
76 return s ;
77}
78
84
85/////////////////////////////////////////////////////////////////////
86//
87// Implementation des fonctions de la classe Paroi_std_hyd_EF
88//
89/////////////////////////////////////////////////////////////////////
90
92{
93 tab_u_star_.resize(le_dom_dis_->nb_faces_tot());
94 tab_d_plus_.resize(le_dom_dis_->nb_faces_tot());
95 uplus_.resize(le_dom_dis_->nb_faces_tot());
96 if (!Cisaillement_paroi_.get_md_vector())
97 {
99 le_dom_dis_->creer_tableau_faces(Cisaillement_paroi_);
100 }
101 seuil_LP.resize(le_dom_dis_->nb_faces_tot());
102 iterations_LP.resize(le_dom_dis_->nb_faces_tot());
103
105
106}
107
108// Remplissage de la table
109
111{
112 Cmu_ = mon_modele_turb_hyd->get_Cmu();
114 return 1;
115}
116
117int Paroi_std_hyd_EF::calculer_hyd_BiK(DoubleTab& tab_k,DoubleTab& tab_eps)
118{
119 Cerr << " Paroi_std_hyd_EF::calculer_hyd_BiK(DoubleTab& tab_k_eps,DoubleTab& tab_eps) " << finl;
120 Cerr << "Methode non definie en discretisation EF " << finl ;
121 return 1 ;
122}
123
124// calculer_hyd pour le k-epsilon
125int Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_k_eps)
126{
127 Cerr << " Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_k_eps) " << finl;
128 Cerr << "on ne doit pas entrer dans cette methode" << finl;
129 Cerr << " car elle est definie uniquement pour la LES " << finl ;
130 return 1 ;
131}
132
133int Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_nu_t,DoubleTab& tab_k)
134{
135 const Domaine_EF& domaine_EF = ref_cast(Domaine_EF, le_dom_dis_.valeur());
136 const IntTab& face_voisins = domaine_EF.face_voisins();
137 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
138 const Fluide_base& le_fluide = ref_cast(Fluide_base, eqn_hydr.milieu());
139 const Champ_Don_base& ch_visco_cin = le_fluide.viscosite_cinematique();
140 const DoubleTab& vitesse = eqn_hydr.inconnue().valeurs();
141 const DoubleTab& tab_visco = ch_visco_cin.valeurs();
142 int nsom = domaine_EF.nb_som_face();
143 int nsom_elem = domaine_EF.domaine().nb_som_elem();
144 const IntTab& elems=domaine_EF.domaine().les_elems() ;
145
146 ArrOfInt nodes_face(nsom);
147 int nb_nodes_free = nsom_elem - nsom;
148
149 double visco=-1;
150 int l_unif;
151 if (sub_type(Champ_Uniforme,ch_visco_cin))
152 {
153 visco = std::max(tab_visco(0,0),DMINFLOAT);
154 l_unif = 1;
155 }
156 else
157 l_unif = 0;
158 if ((!l_unif) && (tab_visco.local_min_vect()<DMINFLOAT))
159 // on ne doit pas changer tab_visco ici !
160 {
161 Cerr << "In Paroi_std_hyd_EF::calculer_hyd : visco = " << tab_visco.local_min_vect() << " <= 0 ? " << finl;
162 throw;
163 }
164 //tab_visco+=DMINFLOAT;
165
166 double dist=-1,d_visco=-1;
167 double u_plus_d_plus,u_plus,d_plus,u_star;
168 double k,eps;
169 ArrOfDouble val(dimension);
170 ArrOfDouble vit(dimension);
172
173 double dist_corr=2.;
174
175 bool LM =(sub_type(Modele_turbulence_hyd_Longueur_Melange_base,mon_modele_turb_hyd.valeur()) ? 1 : 0); // Longueur de Melange
176 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)
177
178 ArrOfDouble vit_face(dimension);
179
180 // Loop on boundaries
181 int nb_bords=domaine_EF.nb_front_Cl();
182 for (int n_bord=0; n_bord<nb_bords; n_bord++)
183 {
184 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
185
186 // Only Dirichlet conditions:
187 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || (sub_type(Dirichlet_paroi_defilante,la_cl.valeur())))
188 {
189 // Recuperation de la valeur Erugu
190 double erugu=Erugu;
191 if (sub_type(Paroi_rugueuse,la_cl.valeur()))
192 erugu=ref_cast(Paroi_rugueuse,la_cl.valeur()).get_erugu();
193
194 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
195
196 // Loop on real faces
197 //ArrOfDouble vit_face_loc(dimension);
198 int ndeb = 0;
199 int nfin = le_bord.nb_faces_tot();
200 for (int ind_face=ndeb; ind_face<nfin; ind_face++)
201 {
202 int num_face=le_bord.num_face(ind_face);
203 int elem = face_voisins(num_face,0);
204
205 // vitesse face CL
206 vit_face=0.;
207 nodes_face=0;
208 for(int jsom=0; jsom<nsom; jsom++)
209 {
210 int num_som = domaine_EF.face_sommets(num_face, jsom);
211 nodes_face[jsom] = num_som;
212 for(int comp=0; comp<dimension; comp++) vit_face[comp]+=vitesse(num_som,comp)/nsom;
213 }
214
215 vit=0.;
216 // Loop on nodes : vitesse moyenne des noeuds n'appartenant pas a la face CL
217 for (int i=0; i<nsom_elem; i++)
218 {
219 int node=elems(elem,i);
220 int IOK = 1;
221 for(int jsom=0; jsom<nsom; jsom++)
222 if (nodes_face[jsom] == node) IOK=0;
223 // Le noeud contribue
224 if (IOK)
225 for (int j=0; j<dimension; j++)
226 vit[j]+=(vitesse(node,j)-vit_face[j])/nb_nodes_free; // permet de soustraire la vitesse de glissement eventuelle
227 }
228 double norm_v = norm_vit_lp(vit,num_face,domaine_EF,val);
229
230 dist = distance_face_elem(num_face,elem,domaine_EF);
231 dist *= dist_corr;
232
233 if (l_unif)
234 d_visco = visco;
235 else
236 d_visco = (tab_visco.nb_dim()==1 ? tab_visco(elem) : tab_visco(elem,0));
237
238 u_plus_d_plus = norm_v*dist/d_visco;
239
240 u_plus = calculer_u_plus(ind_face,u_plus_d_plus,erugu);
241
243 {
244 if(u_plus)
245 {
246 u_star = norm_v/u_plus ;
247 d_plus = u_plus_d_plus/u_plus ;
248 }
249 else
250 {
251 u_star = 0.;
252 d_plus = 0.;
253 }
254 }
255 else
256 {
257 u_star = u_star_impose_;
258 d_plus = 0.;
259 }
260
261 calculer_k_eps(k,eps,d_plus,u_star,d_visco,dist);
262
263 // Calcul de la contrainte tangentielle
264 for (int j=0; j<dimension; j++)
265 Cisaillement_paroi_(num_face,j) = u_star*u_star*val[j];
266
267 // Remplissage des tableaux (dans le cas de Longueur de melange on laisse la viscosite telle quelle)
268 tab_k(elem) = k;
269
270 if((!LM) && (!COMB)) tab_nu_t(elem) = Cmu_*k*k/(eps+DMINFLOAT);
271
272 uplus_(num_face) = u_plus;
273 tab_d_plus_(num_face) = d_plus;
274 tab_u_star_(num_face) = u_star;
275
276 // Modification de nu_t (et par consequent lambda_t) pour exploiter la valeur de nu_t (lambda_t) en y=deq_lam.
277 // La valeur de dist_corr n est valable que dans le cas particuler ou nu_t est fonction lineaire de y
278 if (COMB)
279 {
280 Modele_turbulence_hyd_combinaison& modele_turb = ref_cast(Modele_turbulence_hyd_combinaison,mon_modele_turb_hyd.valeur());
281 if (modele_turb.nombre_sources()==0)
282 tab_nu_t(elem) *= dist_corr;
283 }
284
285 } // End loop on real faces
286
287 } // End Dirichlet conditions
288
289 } // End loop on boundaries
290
291 Cisaillement_paroi_.echange_espace_virtuel();
292 tab_nu_t.echange_espace_virtuel();
294 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd k",tab_k);
295 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd tab_nu_t",tab_nu_t);
296 Debog::verifier("Paroi_std_hyd_EF::calculer_hyd Cisaillement_paroi_",Cisaillement_paroi_);
297 return 1;
298} // fin du calcul_hyd (nu-t)
299
300int Paroi_std_hyd_EF::calculer_k_eps(double& k, double& eps , double yp, double u_star,
301 double d_visco, double dist)
302{
303 // PQ : 05/04/07 : formulation continue de k et epsilon
304 // assurant le bon comportement asymptotique
305 double u_star_carre = u_star * u_star;
306 k = 0.07*yp*yp*(exp(-yp/9.))+(1./(sqrt(Cmu_)))*pow((1.-exp(-yp/20.)),2); // k_plus
307 k *= u_star_carre;
308 // PL: 50625=15^4 on evite d'utiliser pow car lent
309 eps = (1./(Kappa_*pow(yp*yp*yp*yp+50625,0.25))); // eps_plus
310 eps *= u_star_carre*u_star_carre/d_visco;
311
312 return 1;
313}
314
315double Paroi_std_hyd_EF::calculer_u_plus(const int ind_face,const double u_plus_d_plus,const double erugu)
316{
317 // PQ : 05/04/07 : formulation continue de la loi de paroi
318 // construite d'apres la loi de Reichardt
319
320 if(u_plus_d_plus<1.) return sqrt(u_plus_d_plus); // pour eviter de faire tourner la procedure iterative
321
322
323 double u_plus = u_plus_d_plus/100.;
324 double r = 1.;
325 double seuil = 0.001;
326 int iter = 0;
327 int itmax = 25;
328
329 double A = (1/Kappa_)*log(erugu/Kappa_) ; // (=7.44, contre 7.8 dans la loi d'origine)
330 // permettant d'avoir en l'infini la loi de
331 // Reichardt se calant sur : u+ = (1/Kappa_).ln(Erugu.y+)
332 double d_plus,u_plus2;
333
334 while((iter++<itmax) && (r>seuil))
335 {
336 d_plus = u_plus_d_plus/ u_plus ;
337 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
338 u_plus = 0.5*(u_plus+u_plus2);
339 r = std::fabs(u_plus-u_plus2)/u_plus;
340 }
341
342 seuil_LP(ind_face) = r;
343 iterations_LP(ind_face) = iter;
344
345 if (iter >= itmax) erreur_non_convergence();
346
347 return u_plus;
348}
349
351{
352 const Domaine_EF& domaine_EF = ref_cast(Domaine_EF, le_dom_dis_.valeur());
353 int ndeb,nfin;
354 double upmoy,dpmoy,utaumoy;
355 double seuil_moy,iter_moy;
356 double norme_L2=0.;
357
358 upmoy=0.;
359 dpmoy=0.;
360 utaumoy=0.;
361 seuil_moy=0.;
362 iter_moy=0.;
363
364 int compt=0;
365
366 EcrFicPartage Ustar;
367 ouvrir_fichier_partage(Ustar,"Ustar");
368
369 for (int n_bord=0; n_bord<domaine_EF.nb_front_Cl(); n_bord++)
370 {
371 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
372 if ( (sub_type(Dirichlet_paroi_fixe,la_cl.valeur())) ||
373 (sub_type(Dirichlet_paroi_defilante,la_cl.valeur())) ||
374 (sub_type(Paroi_decalee_Robin,la_cl.valeur()) ) ||
375 (la_cl->que_suis_je() == "Frontiere_ouverte_vitesse_imposee_ALE"))
376 {
377 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
378 if(je_suis_maitre())
379 {
380 Ustar << finl;
381 Ustar << "Bord " << le_bord.le_nom() << finl;
382 if (dimension == 2)
383 {
384 Ustar << "-------------------------------------------------------------------------------------------";
385 Ustar << "--------------------------------------------------------------------------------------------" << finl;
386 Ustar << "\tFace a\t\t\t\t|\t\t\t\t\t\t\t\t\t| TAU=Nu.Grad(Ut) [m2/s2]" << finl;
387 Ustar << "----------------------------------------|--------------------------------------------------";
388 Ustar << "---------------------|----------------------------------------------------------------------" << finl;
389 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;
390 Ustar << "----------------|-----------------------|-----------------------|-----------------------|--";
391 Ustar << "---------------------|-----------------------|-----------------------|----------------------" << finl;
392 }
393 if (dimension == 3)
394 {
395 Ustar << "-----------------------------------------------------------------------------------------------------------------";
396 Ustar << "-----------------------------------------------------------------------------------------------------------------" << finl;
397 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;
398 Ustar << "----------------------------------------------------------------|------------------------------------------------";
399 Ustar << "-----------------------|-----------------------------------------------------------------------------------------" << finl;
400 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;
401 Ustar << "----------------|-----------------------|-----------------------|-----------------------|-----------------------|";
402 Ustar << "-----------------------|-----------------------|-----------------------|-----------------------|-----------------" << finl;
403 }
404 }
405 ndeb = le_bord.num_premiere_face();
406 nfin = ndeb + le_bord.nb_faces();
407 for (int num_face=ndeb; num_face<nfin; num_face++)
408 {
409 double x=domaine_EF.xv(num_face,0);
410 double y=domaine_EF.xv(num_face,1);
411 norme_L2= Cisaillement_paroi_(num_face,0)*Cisaillement_paroi_(num_face,0) + Cisaillement_paroi_(num_face,1)*Cisaillement_paroi_(num_face,1);
412 if (dimension == 2)
413 Ustar << x << "\t| " << y;
414 if (dimension == 3)
415 {
416 double z=domaine_EF.xv(num_face,2);
417 Ustar << x << "\t| " << y << "\t| " << z;
418 norme_L2+= Cisaillement_paroi_(num_face,2)*Cisaillement_paroi_(num_face,2);
419 }
420 norme_L2=sqrt(norme_L2);
421 Ustar << "\t| " << uplus_(num_face) << "\t| " << tab_d_plus(num_face) << "\t| " << tab_u_star(num_face);
422 Ustar << "\t| " << norme_L2 << "\t| " << Cisaillement_paroi_(num_face,0) << "\t| " << Cisaillement_paroi_(num_face,1) ;
423 if (dimension == 3)
424 Ustar << "\t| " << Cisaillement_paroi_(num_face,2) << finl;
425 else
426 Ustar << finl;
427
428 // PQ : 03/03 : Calcul des valeurs moyennes (en supposant maillage regulier)
429
430 upmoy +=uplus_(num_face);
431 dpmoy +=tab_d_plus(num_face);
432 utaumoy +=tab_u_star(num_face);
433 seuil_moy += seuil_LP(num_face);
434 iter_moy += iterations_LP(num_face);
435 compt +=1;
436 }
437 Ustar.syncfile();
438 }
439 }
440 /* Reduce 6 mp_sum to 1 by using mp_sum_for_each_item:
441 upmoy = mp_sum(upmoy);
442 dpmoy = mp_sum(dpmoy);
443 utaumoy = mp_sum(utaumoy);
444 seuil_moy = mp_sum(seuil_moy);
445 iter_moy = mp_sum(iter_moy);
446 compt = mp_sum(compt);
447 */
448
449 ArrOfDouble array(6);
450 array[0]=upmoy;
451 array[1]=dpmoy;
452 array[2]=utaumoy;
453 array[3]=seuil_moy;
454 array[4]=iter_moy;
455 array[5]=compt;
457 upmoy=array[0];
458 dpmoy=array[1];
459 utaumoy=array[2];
460 seuil_moy=array[3];
461 iter_moy=array[4];
462 compt=(int)array[5];
463 if (je_suis_maitre())
464 {
465 if (compt)
466 {
467 Ustar << finl;
468 Ustar << "-------------------------------------------------------------" << finl;
469 Ustar << "Calcul des valeurs moyennes (en supposant maillage regulier):" << finl;
470 Ustar << "<u+>= " << upmoy/compt << " <d+>= " << dpmoy/compt << " <u*>= " << utaumoy/compt << " seuil_LP= " << seuil_moy/compt << " iterations_LP= " << iter_moy/compt << finl;
471 }
472 Ustar << finl << finl;
473 }
474 Ustar.syncfile();
475}
476
477
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_...