TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
ParoiVEF_TBLE_scal.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
17#include <ParoiVEF_TBLE_scal.h>
18#include <ParoiVEF_TBLE.h>
19#include <Paroi_std_hyd_VEF.h>
20#include <Dirichlet_paroi_fixe.h>
21#include <Champ_Uniforme.h>
22#include <Champ_front_calc.h>
23#include <Convection_Diffusion_Temperature.h>
24#include <Modele_turbulence_scal_base.h>
25#include <Constituant.h>
26#include <Fluide_base.h>
27#include <EFichier.h>
28#include <Modele_turbulence_hyd_base.h>
29#include <Probleme_base.h>
30#include <Diffu_totale_scal_base.h>
31#include <time.h>
32#include <verif_cast.h>
33#include <SFichier.h>
34#include <TRUST_Ref.h>
35
36
37Implemente_instanciable_sans_constructeur(ParoiVEF_TBLE_scal,"Paroi_TBLE_scal_VEF",Paroi_std_scal_hyd_VEF);
38
39// printOn()
40/////
41
43{
44 return os << que_suis_je() << " " << le_nom();
45}
46
47//// readOn
48//
49
51{
52
53 Motcle acc_ouverte("{");
54 Motcle acc_fermee("}");
55 Motcle mot_lu;
56
57 // Valeurs par defaut
59
60 is >> mot_lu;
61 if(mot_lu == acc_ouverte)
62 {
63 // on passe l'accolade ouvrante
64 is >> mot_lu;
65 }
66
67 while(mot_lu != acc_fermee)
68 {
70 is >> mot_lu;
71 }
72
73
74 return is;
75
76}
77
78/////////////////////////////////////////////////////////////////////
79//
80// Implementation des fonctions de la classe ParoiVEF_TBLE_scal
81//
82/////////////////////////////////////////////////////////////////////
83
84
85// /////////////////////////////////////////////////
86// // Initialisation des tableaux
87// ////////////////////////////////////////////////
88
90{
91 if(je_suis_maitre())
92 {
93 Cerr << "ParoiVEF_TBLE_scal::init_lois_paroi()" << finl;
94 }
95
96 // Pour passer a l'echange contact pour imposer la temperature a l'interface.
97
98 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
99
100 const IntTab& face_voisins = domaine_VEF.face_voisins();
101 const IntTab& elem_faces = domaine_VEF.elem_faces();
102 const Domaine& domaine = domaine_VEF.domaine();
103 const DoubleTab& face_normale = domaine_VEF.face_normales();
104 const int nfac = domaine.nb_faces_elem();
105
106 const Equation_base& eqn_temp = mon_modele_turb_scal->equation();
107 const DoubleTab& Temp = eqn_temp.inconnue().valeurs();
108 const Equation_base& eq_hydr = mon_modele_turb_scal->equation().probleme().equation(0);
109 const RefObjU& modele_turbulence_hydr = eq_hydr.get_modele(TURBULENCE);
110 const Modele_turbulence_hyd_base& le_modele = ref_cast(Modele_turbulence_hyd_base,modele_turbulence_hydr.valeur());
111 const Turbulence_paroi_base& loi = le_modele.loi_paroi();
112
113 if (!sub_type(ParoiVEF_TBLE,loi))
114 {
115 Cerr << "Une loi de paroi TBLE en thermique doit etre utilisee obligatoirement avec une loi de paroi TBLE sur la QDM " << finl;
117 }
118
120 Paroi_TBLE_QDM_Scal::init_lois_paroi(domaine_VEF, le_dom_Cl_dis_.valeur());
121
122 int compteur_faces_paroi = 0;
123 int elem;
124
125 // DoubleTab termes_sources(Temp);
126 // eqn_temp.sources().calculer(termes_sources); //les termes sources
127
128 double surf2;
129 double dist; //distance du centre de la maille a la paroi
130
131 IntVect num(nfac);
132 DoubleVect n(dimension),t1(dimension),t2(dimension); // vecteurs orthonomes du repere local associe a la face paroi
133 double T0;// temperature de paroi
134 double T1;// temperature CL haute
135 // double F;// terme de forcage
136
137
138 for (int n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
139 {
140 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
141 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
142 {
143 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
144 int size=le_bord.nb_faces();
145 //Boucle sur les faces des bords parietaux
146 for (int ind_face=0; ind_face<size; ind_face++)
147 {
148 Eq_couch_lim& equation_temp = eq_temp[compteur_faces_paroi];
149 int num_face = le_bord.num_face(ind_face);
150 elem = face_voisins(num_face,0);
151
152 surf2=0.;
153
154 for(int i=0; i<dimension; i++)
155 {
156 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
157 }
158
159 if (dimension == 2)
160 {
161 num[0]=elem_faces(elem,0);
162 num[1]=elem_faces(elem,1);
163
164 if (num[0]==num_face) num[0]=elem_faces(elem,2);
165 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
166
167 n[0] = face_normale(num_face,0)/sqrt(surf2);
168 n[1] = face_normale(num_face,1)/sqrt(surf2);
169
170 t1[0] = -n[1];
171 t1[1] = n[0];
172
173 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
174
175 T0 = Temp(num_face);
176 T1 = (Temp(num[0])+Temp(num[1]))/2.;
177
178 // F = (termes_sources(num[0])/volumes_entrelaces(num[0])
179 // +termes_sources(num[1])/volumes_entrelaces(num[1]))/2.;
180 }
181 else
182 {
183 num[0]=elem_faces(elem,0);
184 num[1]=elem_faces(elem,1);
185 num[2]=elem_faces(elem,2);
186
187 if (num[0]==num_face) num[0]=elem_faces(elem,3);
188 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
189 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
190
191 n[0] = face_normale(num_face,0)/sqrt(surf2);
192 n[1] = face_normale(num_face,1)/sqrt(surf2);
193 n[2] = face_normale(num_face,2)/sqrt(surf2);
194
195 if( (est_egal(n[0],0.) && est_egal(n[1],0.)) )
196 {
197 t1[0] = 0.;
198 t1[1] = 1.;
199 t1[2] = 0.;
200 }
201 else
202 {
203 t1[0] = -n[1];
204 t1[1] = n[0];
205 t1[2] = 0.;
206 }
207
208 t2[0] = n[1]*t1[2] - n[2]*t1[1];
209 t2[1] = n[2]*t1[0] - n[0]*t1[2];
210 t2[2] = n[0]*t1[1] - n[1]*t1[0];
211
212 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
213
214 T0 = Temp(num_face);
215 T1 = (Temp(num[0])+Temp(num[1])+Temp(num[2]))/3.;
216
217 // F = (termes_sources(num[0])/volumes_entrelaces(num[0])
218 // +termes_sources(num[1])/volumes_entrelaces(num[1])
219 // +termes_sources(num[2])/volumes_entrelaces(num[2]))/3.;
220 }
221
222 equation_temp.set_y0(0.); //ordonnee de la paroi
223 equation_temp.set_yn(dist); //ordonnee du 1er centre de maille
224
225 equation_temp.initialiser(nb_comp, nb_pts, fac, epsilon, max_it, nu_t_dyn); //nbre de pts maillage fin
226
227
228 // F = termes_sources(elem)/volumes_entrelaces(elem);
229 // equation_temp.set_F(0, F);
230
231 equation_temp.set_u_y0(0,T0); // Temperature a la paroi
232 equation_temp.set_u_yn(0,T1); // Temperature en yn
233
234
235 //vitesse sur le maillage fin a l'instant initial
236
237
238 if (reprise_ok==0)
239 equation_temp.set_Uinit_lin(0, T0, T1);
240 else
241 {
242 for (int itble=0; itble<nb_pts+1; itble++)
243 equation_temp.set_Uinit(0,itble,valeurs_reprises(compteur_faces_paroi, itble)) ;
244 }
245 compteur_faces_paroi++;
246 }//Fin boucle sur num_face
247 }//Fin if Paroi_fixe
248 }//Fin boucle sur les bords parietaux
249
250
251
252 // We initialize the values of the equivalent distance at the first time step
253 // with the geometrical distance.
254 // Boucle sur les bords:
255 for (int n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
256 {
257 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
258 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
259 int size=le_bord.nb_faces_tot();
260 for (int ind_face=0; ind_face<size; ind_face++)
261 {
262 int num_face = le_bord.num_face(ind_face);
263 elem = face_voisins(num_face,0);
264 if (dimension == 2) equivalent_distance_[n_bord](ind_face) = distance_2D(num_face,elem,domaine_VEF);
265 else equivalent_distance_[n_bord](ind_face) = distance_3D(num_face,elem,domaine_VEF);
266 }
267 }
268
269 const double tps = eqn_temp.schema_temps().temps_courant();
270 if(oui_stats==1 && tps>tps_deb_stats)
271 {
272 Cerr << " Reprise des stats non code dans TBLE_scal : .... a faire a l'occasion !!! " << finl;
274 }
275
276 if(je_suis_maitre())
277 {
278 Cerr << "fin init_lois_paroi()" << finl;
279 }
280 return 1;
281}
282
283
285{
286 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
287
288 const IntTab& face_voisins = domaine_VEF.face_voisins();
289 const IntTab& elem_faces = domaine_VEF.elem_faces();
290 const Domaine& domaine = domaine_VEF.domaine();
291 const DoubleTab& face_normale = domaine_VEF.face_normales();
292 const int nfac = domaine.nb_faces_elem();
293 const int nb_faces = domaine_VEF.nb_faces_tot();
294 const DoubleVect& volumes_entrelaces = domaine_VEF.volumes_entrelaces();
295
296 const Convection_Diffusion_std& eqn_temp = mon_modele_turb_scal->equation();
297 const DoubleVect& Temp = eqn_temp.inconnue().valeurs();
298 int elem;
299
300 const Fluide_base& le_fluide = ref_cast(Fluide_base, eqn_temp.probleme().equation(0).milieu());
301 const double rhoCp = le_fluide.capacite_calorifique().valeurs()(0, 0) * le_fluide.masse_volumique().valeurs()(0, 0);
302 const Champ_Don_base& alpha = le_fluide.diffusivite();
303 DoubleTab alpha_t = diffusivite_turb.valeurs();
304
305 int itmax=0,itmax_loc;
306
307 DoubleTab termes_sources;
308 termes_sources.resize(nb_faces,1);
309 eqn_temp.sources().calculer(termes_sources); //les termes sources
310 termes_sources /= rhoCp;
311
312 double surf2;
313 // double dist; //distance du centre de la maille a la paroi
314
315 IntVect num(nfac);
316 DoubleVect n(dimension),t1(dimension),t2(dimension); // vecteurs orthonomes du repere local associe a la face paroi
317
318 double T0;// temperature de paroi
319 double T1;// temperature CL haute
320 double F;// terme de forcage
321
322
323 const double tps = eqn_temp.schema_temps().temps_courant();
324 const double dt = eqn_temp.schema_temps().pas_de_temps();
325 const double dt_min = eqn_temp.schema_temps().pas_temps_min();
326
327 int compteur_faces_paroi = 0;
328
329 for (int n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
330 {
331 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
332
333 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
334
335 {
336 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
337 int size=le_bord.nb_faces();
338
339 //Boucle sur les faces des bords parietaux
340 for (int ind_face=0; ind_face<size; ind_face++)
341 {
342 Eq_couch_lim& equation_temp = eq_temp[compteur_faces_paroi];
343 int num_face = le_bord.num_face(ind_face);
344 elem = face_voisins(num_face,0);
345 if (elem == -1)
346 elem = face_voisins(num_face,1);
347
348 double d_alpha=0.;
349 if (sub_type(Champ_Uniforme,alpha))
350 d_alpha = alpha.valeurs()(0,0);
351 else
352 {
353 if (alpha.nb_comp()==1)
354 d_alpha = alpha.valeurs()(elem);
355 else
356 d_alpha = alpha.valeurs()(elem,0);
357 }
358
359 surf2=0.;
360
361 for(int i=0; i<dimension; i++)
362 {
363 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
364 }
365
366 if (dimension == 2)
367 {
368 num[0]=elem_faces(elem,0);
369 num[1]=elem_faces(elem,1);
370
371 if (num[0]==num_face) num[0]=elem_faces(elem,2);
372 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
373
374 n[0] = face_normale(num_face,0)/sqrt(surf2);
375 n[1] = face_normale(num_face,1)/sqrt(surf2);
376
377 t1[0] = -n[1];
378 t1[1] = n[0];
379
380 // dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
381
382 T0 = Temp(num_face);
383 T1 = (Temp(num[0])+Temp(num[1]))/2.;
384
385 F = (termes_sources(num[0])/volumes_entrelaces(num[0])
386 +termes_sources(num[1])/volumes_entrelaces(num[1]))/2.;
387 }
388 else
389 {
390 num[0]=elem_faces(elem,0);
391 num[1]=elem_faces(elem,1);
392 num[2]=elem_faces(elem,2);
393
394 if (num[0]==num_face) num[0]=elem_faces(elem,3);
395 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
396 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
397
398 n[0] = face_normale(num_face,0)/sqrt(surf2);
399 n[1] = face_normale(num_face,1)/sqrt(surf2);
400 n[2] = face_normale(num_face,2)/sqrt(surf2);
401
402 if( (est_egal(n[0],0.) && est_egal(n[1],0.)) )
403 {
404 t1[0] = 0.;
405 t1[1] = 1.;
406 t1[2] = 0.;
407 }
408 else
409 {
410 t1[0] = -n[1];
411 t1[1] = n[0];
412 t1[2] = 0.;
413 }
414
415 t2[0] = n[1]*t1[2] - n[2]*t1[1];
416 t2[1] = n[2]*t1[0] - n[0]*t1[2];
417 t2[2] = n[0]*t1[1] - n[1]*t1[0];
418
419 //dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
420
421 T0 = Temp(num_face);
422 T1 = (Temp(num[0])+Temp(num[1])+Temp(num[2]))/3.;
423
424 F = (termes_sources(num[0])/volumes_entrelaces(num[0])
425 +termes_sources(num[1])/volumes_entrelaces(num[1])
426 +termes_sources(num[2])/volumes_entrelaces(num[2]))/3.;
427 }
428
429 if(dt<dt_min) equation_temp.set_dt(1.e12);
430 else equation_temp.set_dt(dt);
431
432
433 equation_temp.set_F(0, F);
434
435 equation_temp.set_u_y0(0,T0); // Temperature a la paroi
436 equation_temp.set_u_yn(0,T1); // Temperature en yn
437
438
439 /////////////////////////////////////////////////////
440 // On resout les equations aux limites simplifiees //
441 // pendant un pas de temps du maillage grossier //
442 /////////////////////////////////////////////////////
443
444 if (statio==0)
445 equation_temp.aller_au_temps(tps);
446 else
448
449 itmax_loc = equation_temp.get_it();
450
451 if(itmax_loc>max_it) Cerr << "WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH" << finl;
452
453 if(itmax_loc>itmax) itmax=itmax_loc;
454
455
456 ///////////////////////////////////////////////
457 ///// Determination du tableau //////
458 ///// distance equivalente a la paroi //////
459 ///////////////////////////////////////////////
460
461 if(std::fabs(equation_temp.get_Unp1(0,1) - T0)<1e-10)
462 equivalent_distance_[n_bord](ind_face) = 1e10;
463 else
464 equivalent_distance_[n_bord](ind_face) = (d_alpha+alpha_t(elem))/d_alpha*(T1-T0)*(equation_temp.get_y(1)-equation_temp.get_y(0))
465 /(equation_temp.get_Unp1(0,1) - T0);
466
467 if(equivalent_distance_[n_bord](ind_face)<1e-10)
468 equivalent_distance_[n_bord](ind_face)= equation_temp.get_y(nb_pts)-equation_temp.get_y(0);
469
470 compteur_faces_paroi++;
471
472
473 }//Fin boucle sur num_face
474 }//Fin if Paroi_fixe
475 }//Fin boucle sur les bords parietaux
476
478 {
479 SFichier fic("iter_scal.dat",ios::app); // ouverture du fichier iter_scal.dat
480 fic << tps << " " << itmax << finl;
481 }
482
483 if(oui_stats==1)
484 calculer_stats();
485
486 return 1;
487}
488
489
490int ParoiVEF_TBLE_scal::calculer_stats()
491{
492 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
493
494 const DoubleTab& face_normale = domaine_VEF.face_normales();
495
496 const Convection_Diffusion_std& eqn_temp = mon_modele_turb_scal->equation();
497 const double tps = eqn_temp.inconnue().temps();
498 const double dt = eqn_temp.schema_temps().pas_de_temps();
499 const Equation_base& eq_hydr = mon_modele_turb_scal->equation().probleme().equation(0);
500 const RefObjU& modele_turbulence_hydr = eq_hydr.get_modele(TURBULENCE);
501 const Modele_turbulence_hyd_base& le_modele = ref_cast(Modele_turbulence_hyd_base,modele_turbulence_hydr.valeur());
502 const Turbulence_paroi_base& loi = le_modele.loi_paroi();
503 ParoiVEF_TBLE& loi_tble_hyd = ref_cast_non_const(ParoiVEF_TBLE,loi);
504
505 int num_face;
506 double surf;
507 double nx,ny,nz=0.; // vecteur normal a la paroi
508 double t1x,t1y,t1z=0.; // vecteur tangentiel_1 a la paroi
509 double t2x,t2y,t2z=0.; // vecteur tangentiel_2 a la paroi (n^t1)
510 double T;
511 double Unp1_t1,Unp1_t2=0.;
512 double u,v,w=0.;
513
514
515 //////////////////////////////////////
516 //Moyennes Temporelles
517 //////////////////////////////////////
518 if(((tps>tps_deb_stats) && (tps<tps_fin_stats)) && (oui_stats!=0))
519 {
520 if (dimension==2)
521 {
522 for(int j=0; j<nb_post_pts; j++)
523 {
524 num_face=num_faces_post(j);
525
526 surf=sqrt(face_normale(num_face,0)*face_normale(num_face,0)+
527 face_normale(num_face,1)*face_normale(num_face,1));
528
529 nx = face_normale(num_face,0)/surf;
530 ny = face_normale(num_face,1)/surf;
531
532 t1x = -ny;
533 t1y = nx;
534
535 for(int i=0 ; i<nb_pts+1 ; i++)
536 {
537 T = eq_temp[num_face].get_Unp1(0,i);
538 Unp1_t1 = loi_tble_hyd.get_eq_couch_lim(num_faces_post(j)).get_Unp1(0,i);;
539
540 u = t1x*Unp1_t1;
541 v = t1y*Unp1_t1;
542
543 calculer_stat(j,i,u,v,0,T,dt);
544 }
545 }
546 }
547 else if (dimension==3)
548 {
549 for(int j=0; j<nb_post_pts; j++)
550 {
551 num_face=num_faces_post(j);
552
553 surf=sqrt(face_normale(num_face,0)*face_normale(num_face,0)+
554 face_normale(num_face,1)*face_normale(num_face,1)+
555 face_normale(num_face,2)*face_normale(num_face,2));
556
557 nx = face_normale(num_face,0)/surf;
558 ny = face_normale(num_face,1)/surf;
559 nz = face_normale(num_face,2)/surf;
560
561 if( (est_egal(nx,0.) && est_egal(ny,0.)) )
562 {
563 t1x = 0.;
564 t1y = 1.;
565 t1z = 0.;
566 }
567 else
568 {
569 t1x = -ny/sqrt(nx*nx+ny*ny);
570 t1y = nx/sqrt(nx*nx+ny*ny);
571 t1z = 0.;
572 }
573
574 t2x = ny*t1z - nz*t1y;
575 t2y = nz*t1x - nx*t1z;
576 t2z = nx*t1y - ny*t1x;
577
578 for(int i=0 ; i<nb_pts+1 ; i++)
579 {
580
581 T = eq_temp[num_face].get_Unp1(0,i);
582 Unp1_t1 = loi_tble_hyd.get_eq_couch_lim(num_faces_post(j)).get_Unp1(0,i);;
583 Unp1_t2 = loi_tble_hyd.get_eq_couch_lim(num_faces_post(j)).get_Unp1(1,i);;
584
585 u = t1x*Unp1_t1 + t2x*Unp1_t2 ;
586 v = t1y*Unp1_t1 + t2y*Unp1_t2 ;
587 w = t1z*Unp1_t1 + t2z*Unp1_t2 ;
588
589 calculer_stat(j,i,u,v,w,T,dt);
590 }
591 }
592 }
593 }
594
595 return 1;
596}
597
599{
600 const Convection_Diffusion_std& eqn_temp = mon_modele_turb_scal->equation();
601 const double tps = eqn_temp.inconnue().temps();
605}
606
608{
609 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
610
611 double tps = mon_modele_turb_scal->equation().inconnue().temps();
612 return Paroi_TBLE_QDM_Scal::sauvegarder(os, domaine_VEF, le_dom_Cl_dis_.valeur(), tps);
613}
614
615
617{
618 if (le_dom_dis_) // test pour ne pas planter dans "avancer_fichier(...)"
619 {
620 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
621 double tps_reprise = mon_modele_turb_scal->equation().schema_temps().temps_courant();
622 return Paroi_TBLE_QDM_Scal::reprendre(is, domaine_VEF, le_dom_Cl_dis_.valeur(), tps_reprise);
623 }
624 return 1;
625}
626
628{
629 const Probleme_base& pb_base = mon_modele_turb_scal->equation().probleme();
630 return pb_base;
631}
632
634{
635 const Probleme_base& pb_base = mon_modele_turb_scal->equation().probleme();
636 const Equation_base& eqn_hydr = pb_base.equation(0);
637 const RefObjU& modele_turbulence_hydr = eqn_hydr.get_modele(TURBULENCE);
638 const Modele_turbulence_hyd_base& le_modele = ref_cast(Modele_turbulence_hyd_base,modele_turbulence_hydr.valeur());
639 const Turbulence_paroi_base& loi = le_modele.loi_paroi();
640
641 if (sub_type(ParoiVEF_TBLE,loi))
642 {
643 return ref_cast_non_const(ParoiVEF_TBLE,loi);
644 }
645 else
646 {
647 Cerr << "Pour utiliser des expressions de Nu et Lambda dependant de T dans TBLE, il faut avoir un probleme de thermohydraulique turbulent avec une loi de paroi de type TBLE et TBLE scalaire" << finl;
649 }
650 return getLoiParoiHydraulique();//n'arrive jamais ici
651}
652
657
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
classe Champ_Uniforme Represente un champ constant dans l'espace et dans le temps.
double temps() const
Renvoie le temps du champ.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
classe Convection_Diffusion_std Cette classe est la base des equations modelisant le transport
const Champ_Inc_base & inconnue() const override=0
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
class Domaine_VEF
Definition Domaine_VEF.h:54
DoubleVect & volumes_entrelaces()
Definition Domaine_VF.h:99
int nb_faces_tot() const
renvoie le nombre total de faces.
Definition Domaine_VF.h:481
virtual double face_normales(int face, int comp) const
Definition Domaine_VF.h:47
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
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
void initialiser(int, int, double, double, int, int)
void set_u_y0(int j, double u)
void set_u_yn(int j, double u)
double get_y(int i)
void aller_au_temps(double)
void set_Uinit_lin(int comp, double f1, double f2)
void set_F(int j, double f)
double get_Unp1(int j, int i)
void set_yn(double y)
void aller_jusqu_a_convergence(int, double)
void set_y0(double y)
void set_dt(double delta_t)
void set_Uinit(int comp, int i, double val)
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 RefObjU & get_modele(Type_modele type) const
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual int nb_comp() const
Definition Field_base.h:56
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Definition Fluide_base.h:38
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int nb_faces_tot() const
Definition Front_VF.h:58
int num_face(const int) const
Definition Front_VF.h:68
virtual const Champ_Don_base & capacite_calorifique() const
Renvoie la capacite calorifique du milieu.
virtual const Champ_Don_base & diffusivite() const
Renvoie la diffusivite du milieu.
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Turbulence_paroi_base & loi_paroi() const
Classe MuLambda_TBLE_base Classe abstraite calculant Mu et Lambda sur le maillage TBLE.
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
CLASS: ParoiVEF_TBLE_scal.
MuLambda_TBLE_base & getMuLambda() override
const Probleme_base & getPbBase() const override
Eq_couch_lim & get_eq_couch_lim(int) override
void imprimer_nusselt(Sortie &) const override
int reprendre(Entree &) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
int init_lois_paroi() override
Paroi_TBLE_QDM & getLoiParoiHydraulique() override
int sauvegarder(Sortie &) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
int calculer_scal(Champ_Fonc_base &) override
CLASS: ParoiVEF_TBLE.
int reprendre(Entree &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps)
void imprimer_sondes(Sortie &, double, const VECT(DoubleVect)&) const
Entree & lire_donnees(const Motcle &motlu, Entree &s)
int sauvegarder(Sortie &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps) const
int init_lois_paroi(const Domaine_VF &, const Domaine_Cl_dis_base &)
void calculer_stat(int j, int i, double u, double v, double w, double T, double dt)
void imprimer_stat(Sortie &, double) const
CLASS: Paroi_TBLE_Impl.
MuLambda_TBLE_base & getMuLambda()
Eq_couch_lim & get_eq_couch_lim(int i)
void imprimer_nusselt(Sortie &) const override
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
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
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27
double temps_courant() const
Renvoie le temps courant.
double pas_temps_min() const
Renvoie le pas de temps minimum.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
Classe de base des flux de sortie.
Definition Sortie.h:52
DoubleTab & calculer(DoubleTab &) const
Calcule la contribution de toutes les sources de la liste stocke le resultat dans le tableau passe en...
Definition Sources.cpp:98
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
const Objet_U & valeur() const
Definition TRUST_Ref.h:134
Classe Turbulence_paroi_base Classe de base pour la hierarchie des classes representant les modeles.