TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Paroi_loi_WW_hyd_VEF.cpp
1/****************************************************************************
2* Copyright (c) 2015 - 2016, 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_loi_WW_hyd_VEF.h>
17#include <Fluide_base.h>
18#include <Champ_Uniforme.h>
19#include <Dirichlet_paroi_fixe.h>
20#include <Dirichlet_paroi_defilante.h>
21#include <Domaine.h>
22#include <Modele_turbulence_hyd_base.h>
23#include <Equation_base.h>
24#include <Param.h>
25
26Implemente_instanciable_sans_constructeur(Paroi_loi_WW_hyd_VEF,"loi_WW_hydr_VEF",Paroi_std_hyd_VEF);
27
28// PrintOn
30{
31 return s << que_suis_je() << " " << le_nom();
32}
33
34// ReadOn
36{
37 Cerr<<"Reading of data for a "<<que_suis_je()<<" wall law"<<finl;
38 Param param(que_suis_je());
39 set_param(param);
40 param.lire_avec_accolades_depuis(is);
41 return is ;
42}
43
45{
47 param.ajouter_flag("impr",&impr);
48}
49
50/////////////////////////////////////////////////////////////////////
51//
52// Implementation des fonctions de la classe Paroi_loi_WW_hyd_VEF
53//
54/////////////////////////////////////////////////////////////////////
55
56// Remplissage de la table
58{
59 Cmu_ = mon_modele_turb_hyd->get_Cmu();
60 A= 8.3 ;
61 B= 1./7. ;
62 Y0= 11.81 ;
63 return 1;
64}
65
66// On annule les valeurs des grandeurs turbulentes qui
67// correspondent aux mailles de paroi
69{
70 return 1;
71}
72
73// calculer_hyd pour le k-epsilon
74int Paroi_loi_WW_hyd_VEF::calculer_hyd(DoubleTab& tab_k_eps)
75{
76 Cerr << " Paroi_loi_WW_hyd_VEF::calculer_hyd(DoubleTab& tab_k_eps) " << finl;
77 Cerr << "on ne doit pas entrer dans cette methode" << finl;
78 Cerr << " car elle est definie uniquement pour la LES " << finl ;
79 return 1 ;
80}
81
82
83
84int Paroi_loi_WW_hyd_VEF::calculer_hyd(DoubleTab& tab_nu_t,DoubleTab& tab_k)
85{
86 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
87 const IntTab& face_voisins = domaine_VEF.face_voisins();
88 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
89 const Fluide_base& le_fluide = ref_cast(Fluide_base, eqn_hydr.milieu());
90 const Champ_Don_base& ch_visco_cin = le_fluide.viscosite_cinematique();
91 const DoubleTab& vit = eqn_hydr.inconnue().valeurs();
92 const DoubleTab& tab_visco = ch_visco_cin.valeurs();
93 double visco=-1;
94 int l_unif;
95 if (sub_type(Champ_Uniforme,ch_visco_cin))
96 {
97 visco = std::max(tab_visco(0,0),DMINFLOAT);
98 l_unif = 1;
99 }
100 else
101 l_unif = 0;
102
103 // preparer_calcul_hyd(tab);
104 if ((!l_unif) && (tab_visco.local_min_vect()<DMINFLOAT))
105 // on ne doit pas changer tab_visco ici !
106 {
107 Cerr << "In Paroi_loi_WW_hyd_VEF::calculer_hyd : visco = " << tab_visco.local_min_vect() << " <= 0 ? " << finl;
108 throw;
109 }
110 //tab_visco+=DMINFLOAT;
111
112 int ndeb,nfin;
113 double norm_v,signe;
114 double dist_G,dist_som;
115 double d_visco;
116 double val,val1,val2,val3;
117 IntVect num(dimension);
118
119 // Boucle sur les bords
120
121 for (int n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
122 {
123
124 // pour chaque condition limite on regarde son type
125 // On applique les lois de paroi uniquement
126 // aux voisinages des parois
127
128 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
129
130 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
131 {
132 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
133 const IntTab& elem_faces = domaine_VEF.elem_faces();
134 ndeb = le_bord.num_premiere_face();
135 nfin = ndeb + le_bord.nb_faces();
136
137 if (dimension == 2 )
138 for (int num_face=ndeb; num_face<nfin; num_face++)
139 {
140 int elem = face_voisins(num_face,0);
141 num[0]=elem_faces(elem,0);
142 num[1]=elem_faces(elem,1);
143
144 if (num[0]==num_face) num[0]=elem_faces(elem,2);
145 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
146
147 norm_v=norm_2D_vit(vit,num[0],num[1],num_face,domaine_VEF,val,val1,val2);
148
149 dist_G = distance_2D(num_face,elem,domaine_VEF,signe);
150 dist_som = (dimension+1)*dist_G;
151 // dist_som = distance_2D_som(num_face,elem,domaine_VEF);
152
153 if (l_unif)
154 d_visco = visco;
155 else
156 d_visco = tab_visco[elem];
157
158 calculer_local(d_visco,tab_nu_t,tab_k,norm_v,dist_G,dist_som,elem,num_face);
159
160 Cerr << "ATTENTION!!! MODIFS FAITE POUR 3D ETENDUE A 2D MAIS NON VERIFIEE POUR 2D!!!!" << finl;
161
162 // Calcul de la contrainte tangentielle
163 Cisaillement_paroi_(num_face,0) = tab_u_star(num_face)*tab_u_star(num_face)*val1;
164 Cisaillement_paroi_(num_face,1) = tab_u_star(num_face)*tab_u_star(num_face)*val2;
165
166 // Strategie de calcul de la loi de paroi sur tous
167 // les elements ayant un sommet pres d'une paroi
168 // for (int i=0;i<2;i++) {
169 // int elem_voisin;
170 // int num0=num[i];
171 // if (face_voisins(num0,0)!=elem) elem_voisin=face_voisins(num0,0);
172 // else elem_voisin=face_voisins(num0,1);
173 // if (elem_voisin!=-1) {
174 // int num1=elem_faces(elem_voisin,0);
175 // int num2=elem_faces(elem_voisin,1);
176 // if (num1==num0) num1=elem_faces(elem_voisin,2);
177 // else if (num2==num0) num2=elem_faces(elem_voisin,2);
178 // if (rang_elem_non_std(elem_voisin)==-1) {
179 // // elem_voisin n'est pas un element de bord
180
181 // norm_v=norm_2D_vit3(vit,num0,num1,num2,num_face,domaine_VEF,val,val1,val2);
182
183 // dist_G = distance_2D(num_face,elem,domaine_VEF,signe);
184 // dist_som = (dimension+1)*dist_G/dimension; // cf 3D
185 // // dist_som = distance_2D_som(num_face,elem,domaine_VEF);
186
187 // if (l_unif)
188 // d_visco = visco;
189 // else
190 // d_visco = tab_visco[elem];
191
192 // calculer_local(d_visco,tab_nu_t,tab_k,norm_v,dist_G,dist_som,elem,num_face);
193
194 // }
195 // }
196 // }
197 // // Fin de la strategie du calcul generalise de la loi de paroi
198
199 } // fin du for faces (2D)
200
201 else if (dimension == 3)
202 for (int num_face=ndeb; num_face<nfin; num_face++)
203 {
204 int elem = face_voisins(num_face,0);
205 num[0] = elem_faces(elem,0);
206 num[1] = elem_faces(elem,1);
207 num[2] = elem_faces(elem,2);
208 if (num[0]==num_face) num[0]=elem_faces(elem,3);
209 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
210 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
211
212 norm_v=norm_3D_vit(vit, num_face, num[0], num[1], num[2], domaine_VEF, val1, val2, val3);
213
214 dist_G = distance_3D(num_face,elem,domaine_VEF,signe);
215 dist_som = (dimension+1)*dist_G;
216 // dist_som = distance_3D_som(num_face,elem,domaine_VEF);
217
218 if (l_unif)
219 d_visco = visco;
220 else
221 d_visco = tab_visco[elem];
222
223 // Calcul de u* et des grandeurs turbulentes:
224 // a partir de de norm_v
225 calculer_local(d_visco,tab_nu_t,tab_k,norm_v,dist_G,dist_som,elem,num_face);
226
227 // Calcul des deux composantes de la contrainte tangentielle:
228 double vit_frot = tab_u_star(num_face)*tab_u_star(num_face);
229
230 // Signe du cisaillement : on le donne dans l OpDift
231
232
233 Cisaillement_paroi_(num_face,0) = vit_frot*val1;
234 Cisaillement_paroi_(num_face,1) = vit_frot*val2;
235 Cisaillement_paroi_(num_face,2) = vit_frot*val3;
236
237 // // Strategie de calcul de la loi de paroi sur tous
238 // // les elements ayant un sommet pres d'une paroi
239 // for (int i=0;i<3;i++) {
240 // int elem_voisin;
241 // int num0=num[i];
242 // if (face_voisins(num0,0)!=elem) elem_voisin=face_voisins(num0,0);
243 // else elem_voisin=face_voisins(num0,1);
244 // if (elem_voisin!=-1) {
245 // int num1=elem_faces(elem_voisin,0);
246 // int num2=elem_faces(elem_voisin,1);
247 // int num3=elem_faces(elem_voisin,2);
248 // if (num1==num0) num1=elem_faces(elem_voisin,3);
249 // else if (num2==num0) num2=elem_faces(elem_voisin,3);
250 // else if (num3==num0) num3=elem_faces(elem_voisin,3);
251 // if (rang_elem_non_std(elem_voisin)==-1) {
252 // // elem_voisin n'est pas un element de bord
253 // norm_v=norm_3D_vit4(vit, num_face, num0, num1, num2, num3, domaine_VEF, val1, val2, val3);
254 // dist_G = distance_3D(num_face,elem_voisin,domaine_VEF,signe);
255 // dist_som = (dimension+1)*dist_G/dimension;
256 // // Il faudrait chercher la distance entre la paroi et le centre de gravite de la face ne touchant pas la pario
257 // // Premiere approx : dist_som_3.*dist_G
258 // // dist_som = distance_3D_som(num_face,elem_voisin,domaine_VEF);
259
260 // if (l_unif)
261 // d_visco = visco;
262 // else
263 // d_visco = tab_visco[elem_voisin];
264
265 // calculer_local(d_visco,tab_nu_t,tab_k,norm_v,dist_G,dist_som,elem,num_face);
266
267 // }
268 // }
269 // }
270 // Fin de la strategie du calcul generalise de la loi de paroi
271 } // fin du for faces (3D)
272 } // fin de Dirichlet_paroi_fixe
273
274
275 // ATTENTION : CODER PAROI DEFILANTE
276 else if (sub_type(Dirichlet_paroi_defilante,la_cl.valeur()) )
277 {
278 Cerr << "pour l instant Werner et Wengle n'est pas code pour la condition de paroi defilante!!" << finl;
279 } // fin de Dirichlet_paroi_defilante
280 } // fin du for bord CL
281
282 Cisaillement_paroi_.echange_espace_virtuel();
283 tab_nu_t.echange_espace_virtuel();
285 return 1;
286} // fin du calcul_hyd (nu-t)
287
288
290 DoubleTab& tab_nu_t,DoubleTab& tab_k,double norm_vit,
291 double dist_G,double dist_som,int elem,int num_face)
292{
293 // C est la hauteur de la premiere maille en int qui doit etre testee ->> 2.*dist
294 double up_lim = d_visco*Y0*Y0/(2.*dist_som);
295
296 if (norm_vit <= up_lim)
297 {
298 calculer_u_star_sous_couche_visq(norm_vit,d_visco,dist_G,num_face);
299 //calculer_sous_couche_visq(tab_nu_t,tab_k,elem);
300 tab_nu_t(elem) = 0.;
301 tab_k(elem) = 0.;
302
303 if (impr==1) Cerr << "Domaine lineaire" << finl;
304 }
305 else
306 {
307 calculer_u_star_couche_puissance(norm_vit,d_visco,dist_som,num_face);
308 calculer_couche_puissance(tab_nu_t,tab_k,dist_som,elem,num_face);
309 if (impr==1) Cerr << "Domaine en puissance" << finl;
310 }
311 return 1;
312}
313
314
316 double d_visco,double dist,
317 int face)
318{
319 // Dans la sous couche visqueuse: u* = sqrt(u*nu/d)
320
321 tab_u_star_(face) = sqrt(norm_vit*d_visco/dist);
322
323 return 1;
324}
325
326
328 double dist, int face)
329{
330 double part1, part2 ;
331 static double Apuiss = pow(A,(1+B)/(1-B));
332
333 part1= ( (B+1) * pow(d_visco,B) * norm_vit ) / (A *pow(2.*dist,B) );
334 part2= ( (1-B) * pow(d_visco,B+1) * Apuiss ) / (2 * pow(2.*dist,B+1) ) ;
335
336 tab_u_star_(face)= pow(part1+part2, 1/(B+1) );
337
338 return 1;
339}
340
341
342int Paroi_loi_WW_hyd_VEF::calculer_couche_puissance(DoubleTab& nu_t,DoubleTab& tab_k,
343 double dist,int elem,int face)
344{
345 // nu_t = Cmu*k*k/eps
346 //
347 // 2 3
348 // En utilisant k = u*/sqrt(Cmu_) et eps = u* / Kd
349 //
350 // on calcule nu_t en fonction de u*
351
352 double u_star = tab_u_star(face);
353
354 tab_k(elem) = u_star*u_star/sqrt(Cmu_);
355 nu_t(elem) = u_star*Kappa_*dist ;
356
357 return 1;
358}
359
360
361
362////////////////////////////////////////////////////
363//
364// Fonctions utiles au calcul des lois de paroi:
365//
366////////////////////////////////////////////////////
367
368double norm_2D_vit(const DoubleTab& vit,int num1,int num2,int fac,const Domaine_VEF& domaine,double& u,double& val1, double& val2)
369{
370 const DoubleTab& face_normale = domaine.face_normales();
371 // fac numero de la face a paroi fixe
372 DoubleVect r(2);
373 r[0]=face_normale(fac,0);
374 r[1]=face_normale(fac,1);
375 r/=norme_array(r);
376 double v1=(vit(num1,0)+vit(num2,0))/3.;
377 double v2=(vit(num1,1)+vit(num2,1))/3.;
378 double v = sqrt( carre(v1) + carre(v2)
379 - carre(v1*r[0]+v2*r[1]) );
380
381 val1 = v1/(v+DMINFLOAT);
382 val2 = v2/(v+DMINFLOAT);
383
384 if (v==0)
385 u = 0;
386 else
387 u = 1;
388 return v;
389}
390
391double norm_2D_vit3(const DoubleTab& vit,int num1,int num2,int num3,int fac,const Domaine_VEF& domaine,double& u,double& val1, double& val2)
392{
393 const DoubleTab& face_normale = domaine.face_normales();
394 // fac numero de la face a paroi fixe
395 DoubleVect r(2);
396 r[0]=face_normale(fac,0);
397 r[1]=face_normale(fac,1);
398 r/=norme_array(r);
399 double v1=(vit(num1,0)+vit(num2,0)+vit(num3,0))/3.;
400 double v2=(vit(num1,1)+vit(num2,1)+vit(num3,1))/3.;
401 double v = sqrt( carre(v1) + carre(v2)
402 - carre(v1*r[0]+v2*r[1]) );
403
404 val1 = v1/(v+DMINFLOAT);
405 val2 = v2/(v+DMINFLOAT);
406
407 if (v==0)
408 u = 0;
409 else
410 u = 1;
411 return v;
412}
413
414double norm_3D_vit(const DoubleTab& vit,int fac,int num1,int num2,int num3,
415 const Domaine_VEF& domaine,
416 double& val1,double& val2,double& val3)
417{
418 const DoubleTab& face_normale = domaine.face_normales();
419 // fac numero de la face a paroi fixe
420 DoubleVect r(3);
421 r[0]=face_normale(fac,0);
422 r[1]=face_normale(fac,1);
423 r[2]=face_normale(fac,2);
424 r/=norme_array(r);
425 double v1=(vit(num1,0)+vit(num2,0)+vit(num3,0))/4.;
426 double v2=(vit(num1,1)+vit(num2,1)+vit(num3,1))/4.;
427 double v3=(vit(num1,2)+vit(num2,2)+vit(num3,2))/4.;
428 double norm_vit = sqrt( carre(v1) + carre(v2) + carre(v3)
429 - carre(v1*r[0]+v2*r[1]+v3*r[2]) );
430 val1 = v1/(norm_vit+DMINFLOAT);
431 val2 = v2/(norm_vit+DMINFLOAT);
432 val3 = v3/(norm_vit+DMINFLOAT);
433
434 return norm_vit;
435}
436
437double norm_3D_vit4(const DoubleTab& vit,int fac,int num1,int num2,int num3,int num4,
438 const Domaine_VEF& domaine,
439 double& val1,double& val2,double& val3)
440{
441 const DoubleTab& face_normale = domaine.face_normales();
442 // fac numero de la face a paroi fixe
443 DoubleVect r(3);
444 r[0]=face_normale(fac,0);
445 r[1]=face_normale(fac,1);
446 r[2]=face_normale(fac,2);
447 r/=norme_array(r);
448 double v1=(vit(num1,0)+vit(num2,0)+vit(num3,0)+vit(num4,0))/4.;
449 double v2=(vit(num1,1)+vit(num2,1)+vit(num3,1)+vit(num4,1))/4.;
450 double v3=(vit(num1,2)+vit(num2,2)+vit(num3,2)+vit(num4,2))/4.;
451 double norm_vit = sqrt( carre(v1) + carre(v2) + carre(v3)
452 - carre(v1*r[0]+v2*r[1]+v3*r[2]) );
453 val1 = v1/(norm_vit+DMINFLOAT);
454 val2 = v2/(norm_vit+DMINFLOAT);
455 val3 = v3/(norm_vit+DMINFLOAT);
456
457 return norm_vit;
458}
459
460double distance_2D(int fac,int elem,const Domaine_VEF& domaine, double& signe) //distance centre de gravite -> face 2D
461{
462 const DoubleTab& xp = domaine.xp(); // centre de gravite des elements
463 const DoubleTab& xv = domaine.xv(); // centre de gravite des faces
464 const DoubleTab& face_normale = domaine.face_normales();
465
466 DoubleVect r(2);
467 r[0]=face_normale(fac,0);
468 r[1]=face_normale(fac,1);
469 double x0=xv(fac,0);
470 double y0=xv(fac,1);
471 double x1=xp(elem,0);
472 double y1=xp(elem,1);
473 double x2=x0-x1;
474 double y2=y0-y1;
475
476 signe = x2*r[0]+y2*r[1];
477 signe /= std::fabs(signe);
478
479 return std::fabs(r[0]*(x1-x0)+r[1]*(y1-y0))/norme_array(r);
480}
481
482double distance_3D(int fac,int elem,const Domaine_VEF& domaine, double& signe) //distance centre de gravite -> face 2D
483{
484 const DoubleTab& xp = domaine.xp(); // centre de gravite des elements
485 const DoubleTab& xv = domaine.xv(); // centre de gravite des faces
486 const DoubleTab& face_normale = domaine.face_normales();
487
488 DoubleVect r(3);
489 r[0]=face_normale(fac,0);
490 r[1]=face_normale(fac,1);
491 r[2]=face_normale(fac,2);
492 double x0=xv(fac,0);
493 double y0=xv(fac,1);
494 double z0=xv(fac,2);
495 double x1=xp(elem,0);
496 double y1=xp(elem,1);
497 double z1=xp(elem,2);
498
499 return std::fabs(r[0]*(x1-x0)+r[1]*(y1-y0)+r[2]*(z1-z0))/norme_array(r);
500}
501
502double distance_2D_som(int fac,int elem,const Domaine_VEF& domaine ) //distance sommet -> face 2D
503{
504 const Domaine& domaine_geom = domaine.domaine();
505 // const IntTab& face_sommets = domaine.face_sommets();
506 const IntTab& elem_faces = domaine.elem_faces();
507 const DoubleTab& coord = domaine_geom.coord_sommets();
508 const Domaine& domaineg = domaine.domaine();
509 int nfac = domaineg.nb_faces_elem();
510 const IntTab& som_elem=domaine_geom.les_elems();
511
512
513 const DoubleTab& xv = domaine.xv(); // centre de gravite des faces
514 const DoubleTab& face_normale = domaine.face_normales();
515
516 int i,num0,sommet;
517 //IntVect num(2),som(2);
518 // On cherche les faces autres que fac
519 for (i=0; i<nfac; i++)
520 {
521 num0 = elem_faces(elem,i);
522 if (num0 == fac)
523 break;
524 }
525 sommet = som_elem(elem,i); // On recupere le numero local de la face qui est egalement celui du sommet
526
527 DoubleVect r(2);
528 r[0]=face_normale(fac,0);
529 r[1]=face_normale(fac,1);
530 double x0=xv(fac,0);
531 double y0=xv(fac,1);
532 double x1=coord(sommet,0);
533 double y1=coord(sommet,1);
534
535 return std::fabs(r[0]*(x1-x0)+r[1]*(y1-y0))/norme_array(r);
536}
537
538double distance_3D_som(int fac,int elem,const Domaine_VEF& domaine) //distance sommet -> face en 3D
539{
540 const Domaine& domaine_geom = domaine.domaine();
541 const IntTab& face_sommets = domaine.face_sommets();
542 const IntTab& elem_faces = domaine.elem_faces();
543 const DoubleTab& coord = domaine_geom.coord_sommets();
544 const Domaine& domaineg = domaine.domaine();
545 int nfac = domaineg.nb_faces_elem();
546
547 const DoubleTab& xv = domaine.xv(); // centre de gravite des faces
548 const DoubleTab& face_normale = domaine.face_normales();
549
550 int i,j=0,num0,sommet=-1,k;
551 IntVect num(3),som0(3),som1(3);
552 // On cherche les faces autres que fac
553 for (i=0; i<nfac; i++)
554 {
555 num0 = elem_faces(elem,i);
556 if (num0 != fac)
557 {
558 num[j] = num0;
559 j++;
560 }
561 }
562
563 // On cherche le sommet commun aux faces autres que fac
564 som0[0] = face_sommets(num[0],0);
565 som0[1] = face_sommets(num[0],1);
566 som0[2] = face_sommets(num[0],2);
567
568 som1[0] = face_sommets(num[1],0);
569 som1[1] = face_sommets(num[1],1);
570 som1[2] = face_sommets(num[1],2);
571
572 while(i<3)
573 {
574 for (j=0; j<3; j++)
575 {
576 if (face_sommets(num[1],i) == som0[j])
577 {
578 for (k=0; k<3; k++)
579 {
580 if (face_sommets(num[2],k) == som0[j])
581 {
582 sommet = som0[j];
583 i=4;
584 k=3;
585 j=3;
586 }
587 else
588 k=3;
589 }
590 }
591 }
592 }
593
594 DoubleVect r(3);
595 r[0]=face_normale(fac,0);
596 r[1]=face_normale(fac,1);
597 r[2]=face_normale(fac,2);
598 double x0=xv(fac,0);
599 double y0=xv(fac,1);
600 double z0=xv(fac,2);
601 double x1=coord(sommet,0);
602 double y1=coord(sommet,1);
603 double z1=coord(sommet,2);
604
605 return std::fabs(r[0]*(x1-x0)+r[1]*(y1-y0)+r[2]*(z1-z0))/norme_array(r);
606}
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
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.
IntTab_t & les_elems()
Definition Domaine.h:129
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
Definition Domaine.h:484
const DoubleTab_t & coord_sommets() const
Definition Domaine.h:112
class Domaine_VEF
Definition Domaine_VEF.h:54
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
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
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
static int dimension
Definition Objet_U.h:99
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
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
Definition Param.cpp:474
int calculer_u_star_sous_couche_visq(double, double, double, int)
int init_lois_paroi_hydraulique() override
int calculer_couche_puissance(DoubleTab &, DoubleTab &, double, int, int)
int calculer_hyd(DoubleTab &) override
int calculer_local(double, DoubleTab &, DoubleTab &, double, double, double, int, int)
void set_param(Param &param) const override
int preparer_calcul_hyd(DoubleTab &)
int calculer_u_star_couche_puissance(double, double, double, int)
void set_param(Param &param) const override
Classe de base des flux de sortie.
Definition Sortie.h:52
_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_u_star() const