TrioCFD 1.9.9_beta
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}
class Champ_Don_base base class of Given Fields (not calculated)
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
DoubleTab & valeurs() override
Returns the array of field values at the current time.
Champ_Uniforme Represents a field that is constant in space and time.
class Cond_lim Generic class used to represent any class
Definition Cond_lim.h:31
Dirichlet_paroi_defilante Imposes the wall velocity in an equation of type Navier_Stokes.
Dirichlet_paroi_fixe Represents a fixed wall in a Navier-Stokes type equation.
IntTab_t & les_elems()
Definition Domaine.h:129
int nb_faces_elem(int=0) const
Returns the number of faces of type i of the geometric elements that make up the domain.
Definition Domaine.h:484
const DoubleTab_t & coord_sommets() const
Definition Domaine.h:112
class Domaine_VEF
Definition Domaine_VEF.h:53
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.
Definition Domaine_VF.h:542
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in 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
class Equation_base The role of an equation is the calculation of one or more fields....
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
Base class for an incompressible fluid and its properties:
Definition Fluide_base.h:36
const Champ_Don_base & viscosite_cinematique() const
Definition Fluide_base.h:56
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:94
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
virtual const Nom & le_nom() const
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
Definition Objet_U.cpp:317
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
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
Base class for output streams.
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