TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Paroi_TBLE_QDM.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#include <Paroi_TBLE_QDM.h>
16#include <Domaine_dis_base.h>
17
18#include <Front_VF.h>
19#include <Domaine_VF.h>
20#include <EFichier.h>
21#include <Dirichlet_paroi_fixe.h>
22#include <Diffu_totale_hyd_base.h>
23#include <Probleme_base.h>
24#include <MuLambda_TBLE_Fcts_T.h>
25#include <SFichier.h>
26#include <EcrFicPartage.h>
27#include <Champ_Fonc_Fonction.h>
28#include <Fluide_base.h>
29#include <Domaine_Cl_dis_base.h>
30#include <Param.h>
31#include <Cond_lim.h>
32
33// XD_DECLARE_PARAM_FRAGMENT paroi_tble_qdm Parameters of the thin boundary layer (TBLE) wall function for momentum.
34
36{
37 nb_pts=-1; // nb de pts dans le maillage fin
38 modele_visco = "Diffu_lm"; //modele de viscosite turbulente
39 nb_comp = Objet_U::dimension-1; //nb de composantes dans le maillage fin
40 fac=1.; // facteur de raffinement du maillage fin
41 oui_stats=0; // stats (1=oui/0=non)
42 tps_deb_stats=-1; // debut calcul des moyennes stats dans le maillage fin
43 tps_fin_stats=-1; // fin des stats
44 epsilon = 1.e-5; // seuil de resolution dans le maillage fin
45 max_it = 1000; // max d'iterations dans le maillage fin
46 nu_t_dyn=0;
47 tps_start_stat_nu_t_dyn = -1;//tps de declenchement de la moyenne de nu_t en premiere maille
48 tps_nu_t_dyn = -1;//Temps de debut d'utilisation du nu_t en premiere maille dans TBLE
49 nb_post_pts = 0;
50 reprise_ok = 0;
51
52 mu_fonction = 0;
54
55 statio = 0;
56 max_it_statio = -1;
57 eps_statio = -1.;
58
60}
61
63{
64 param.ajouter("N",&nb_pts,Param::REQUIRED); // XD_ADD_P int
65 // XD_CONT Number of points for the fine mesh
66 param.ajouter("modele_visco",&modele_visco); // XD_ADD_P chaine
67 // XD_CONT Name of the turbulent viscosity model
68 param.ajouter("facteur",&fac); // XD_ADD_P double
69 // XD_CONT Fine mesh refinement factor
70 //param.ajouter_non_std("stats",(this));
71 param.ajouter("epsilon",&epsilon); // XD_ADD_P double
72 // XD_CONT Resolution threshold for the fine mesh
73 param.ajouter("max_it",&max_it); // XD_ADD_P int
74 // XD_CONT Maximum number of iteration in the fine mesh
75 /*
76 param.ajouter_non_std("nu_t_dyn",(this));
77 param.ajouter_non_std("tps_start_stat_nu_t_dyn",(this));
78 param.ajouter_non_std("tps_nu_t_dyn",(this));
79 param.ajouter_non_std("sonde_tble",(this));
80 */
81 param.ajouter_flag("restart",&restart); // XD_ADD_P rien
82 // XD_CONT Activate restart of the TBLE fine-mesh computation.
83 /*
84 param.ajouter_non_std("stationnaire",(this));
85 param.ajouter_non_std("mu",(this));
86 param.ajouter_non_std("lambda",(this));
87 param.ajouter_non_std("sans_source_boussinesq",(this));
88 */
89}
90
91// The parameters below are read positionally by lire_motcle_non_standard;
92// they are documented as fragment attributes because the schema scanner
93// cannot extract them from the ajouter_non_std calls automatically.
94// XD attr nu_t_dyn entier nu_t_dyn OPT If non-zero, enable dynamic computation of nu_t for TBLE.
95// XD attr tps_start_stat_nu_t_dyn floattant tps_start_stat_nu_t_dyn OPT Start time for the nu_t averaging
96// XD_CONT (used with nu_t_dyn).
97// XD attr tps_nu_t_dyn floattant tps_nu_t_dyn OPT Averaging time period for nu_t before it is used (with nu_t_dyn).
98// XD attr mu chaine mu OPT Analytical expression for the dynamic viscosity mu in the fine TBLE mesh.
99// XD attr lambda chaine lambda OPT Analytical expression for the thermal conductivity lambda in the fine TBLE mesh.
100// XD attr stationnaire entierfloat stationnaire OPT Drive the TBLE equations to steady state: max iterations then stop
101// XD_CONT criterion (syntax: stationnaire max_it_statio eps_statio).
102// XD attr sans_source_boussinesq rien sans_source_boussinesq OPT Deactivate the Boussinesq source term in TBLE.
103// Note: sonde_tble is intentionally left undocumented here: it reads an int
104// count followed by a dimension-dependent list of (name + coordinates), which
105// no XD attribute type can represent.
107{
108 //Motcle motlu;
109 if (mot=="stats")
110 {
111 oui_stats=1;
112 is >> tps_deb_stats;
113 is >> tps_fin_stats;
114 if((tps_deb_stats!=-1) && tps_fin_stats!=-1)
115 Cerr << "Statistics time TBLE : OK" << finl;
116 else
117 {
118 Cerr << "WARNING !!!!! Statistics time for TBLE not coherent." << finl;
120 }
121 return 1;
122 }
123
124 else if (mot=="nu_t_dyn")
125 {
126 is >> nu_t_dyn;
127 Cerr << "nu_t_dyn = " << nu_t_dyn << finl;
128 if(nu_t_dyn!=0)
129 Cerr << "Dynamic calculation of nu_t for TBLE" << finl;
130 return 1;
131 }
132 else if (mot=="tps_start_stat_nu_t_dyn")
133 {
135 Cerr << "tps_start_stat_nu_t_dyn = " << tps_start_stat_nu_t_dyn << finl;
136 if((nu_t_dyn!=0)&&(tps_start_stat_nu_t_dyn >= 0))
137 Cerr << "nu_t average starts at t = " << tps_start_stat_nu_t_dyn << finl;
138 else
139 {
140 Cerr << "Problem with the tps_start_stat_nu_t_dyn parameter for TBLE." << finl;
142 }
143 return 1;
144 }
145 else if (mot=="tps_nu_t_dyn")
146 {
147 is >> tps_nu_t_dyn;
148 Cerr << "tps_nu_t_dyn = " << tps_nu_t_dyn << finl;
149 if((nu_t_dyn!=0)&&(tps_nu_t_dyn >= 0))
150 Cerr << "Time period of nu_t average before use = " << tps_nu_t_dyn << finl;
151 else
152 {
153 Cerr << "Problem with the tps_nu_t_dyn parameter for TBLE." << finl;
155 }
156 return 1;
157 }
158 else if (mot=="sonde_tble")
159 {
160 is >> nb_post_pts;
162 for(int i=0; i<nb_post_pts; i++)
163 {
164 nom_pts.dimensionner(nb_post_pts);
165 is >> nom_pts[i];
166 Cerr << "Nom"<<i<<"=" << nom_pts[i] <<finl;
167 for(int j=0; j<Objet_U::dimension ; j++)
168 {
169 is >> sonde_tble(i,j);
170 Cerr << "sonde_tble( "<< i << "," << j <<" ) =" << sonde_tble(i,j) << finl;
171 }
172 }
173 return 1;
174 }
175 else if (mot=="stationnaire")
176 {
177 statio = 1;
178 is >> max_it_statio >> eps_statio;
179 if (max_it_statio<0 || eps_statio<0)
180 {
181 Cerr << "You must select the maximum iterations number to reach the time convergence for TBLE" << finl;
182 Cerr << "as well as the stop crterion value." << finl;
183 Cerr << "Syntax : statio max_it_statio eps_statio" << finl;
185 }
186 return 1;
187 }
188 else if (mot=="mu")
189 {
190 mu_fonction = 1 ;
191 is >> mu_chaine;
192 return 1;
193 }
194 else if (mot=="lambda")
195 {
196 lambda_fonction = 1 ;
197 is >> lambda_chaine;
198 return 1;
199 }
200 else if (mot=="sans_source_boussinesq")
201 {
203 return 1;
204 }
205 return -1;
206}
207
208int Paroi_TBLE_QDM::init_lois_paroi(const Domaine_VF& domaine_dis, const Domaine_Cl_dis_base& le_dom_Cl)
209{
210 const int nb_elem = domaine_dis.nb_elem();
211
214
215
216 int compteur_faces_paroi = 0; //Reinitialisation de compteur_faces_paroi
217
218 for (int n_bord=0; n_bord<domaine_dis.nb_front_Cl(); n_bord++)
219 {
220 const Cond_lim& la_cl = le_dom_Cl.les_conditions_limites(n_bord);
221
222 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
223 {
224 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
225 compteur_faces_paroi += le_bord.nb_faces();
226 }
227 }
228 eq_vit.dimensionner(compteur_faces_paroi); //Dimensionnement du vecteur eq_couch_lim
229
230
231 Fxmean_sum.resize(nb_post_pts,nb_pts+1);
232 Fymean_sum.resize(nb_post_pts,nb_pts+1);
233 Fzmean_sum.resize(nb_post_pts,nb_pts+1);
234 Umean_sum.resize(nb_post_pts,nb_pts+1);
235 Vmean_sum.resize(nb_post_pts,nb_pts+1);
236 Wmean_sum.resize(nb_post_pts,nb_pts+1);
240 UVmean_sum.resize(nb_post_pts,nb_pts+1);
241 WVmean_sum.resize(nb_post_pts,nb_pts+1);
242 WUmean_sum.resize(nb_post_pts,nb_pts+1);
243
244
245
246 visco_turb_moy.resize(nb_elem);
247
248 for(int j=0; j<nb_post_pts; j++)
249 {
250 double d0=1.e9;
251 int face=-1;
252 int face2=-1;
253 compteur_faces_paroi=0;
254 for (int n_bord=0; n_bord<domaine_dis.nb_front_Cl(); n_bord++)
255 {
256 const Cond_lim& la_cl = le_dom_Cl.les_conditions_limites(n_bord);
257
258 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
259 {
260 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
261 int ndeb = le_bord.num_premiere_face();
262 int nfin = ndeb + le_bord.nb_faces();
263
264 for (int num_face=ndeb; num_face<nfin; num_face++)
265 {
266 double d1=0.;
267 for (int d=0; d<Objet_U::dimension; d++)
268 {
269 double x=domaine_dis.xv(num_face,d)-sonde_tble(j,d);
270 d1+=x*x;
271 }
272
273 if (d1<d0)
274 {
275 d0=d1;
276 face=compteur_faces_paroi;
277 face2=num_face;
278 }
279 compteur_faces_paroi++;
280 }
281 }
282 }
283 num_faces_post(j)=face;
284 num_global_faces_post(j)=face2;
285 }
286
287 Cerr << "Dimension de eq_vit = " << compteur_faces_paroi << finl;
288 Cerr << "nb_faces_bord = " << domaine_dis.nb_faces_bord() << finl;
289
290 if (getPbBase().milieu().has_conductivite() && sub_type(Champ_Fonc_Fonction,getPbBase().milieu().conductivite()))
291 {
293 lambda_chaine=ref_cast(Champ_Fonc_Fonction,getPbBase().milieu().conductivite()).table().parser(0).getString().c_str();
294 }
295 const Champ_base& mu=ref_cast(Fluide_base,getPbBase().milieu()).viscosite_dynamique();
296 if (sub_type(Champ_Fonc_Fonction,mu))
297 {
298 mu_fonction =1;
299 mu_chaine=ref_cast(Champ_Fonc_Fonction,mu).table().parser(0).getString().c_str();
300 }
301 // Choix entre MuLambda cte ou MuLambda fonctions de T
302 if ((mu_fonction == 0) && (lambda_fonction == 0))
303 {
304 // typage MuLambda_TBLE_Cte
305 mu_lambda.typer("MuLambda_TBLE_Cte");
306 }
307 else if ((mu_fonction == 1) && (lambda_fonction == 1))
308 {
309 // typage MuLambda_TBLE_Fonctions_T
310 mu_lambda.typer("MuLambda_TBLE_Fcts_T");
311 MuLambda_TBLE_Fcts_T& ml_fct = ref_cast(MuLambda_TBLE_Fcts_T, mu_lambda.valeur());
313 }
314 else
315 {
316 Cerr << "Vous devez preciser a la fois mu et lambda dans les options de TBLE" << finl;
318 }
319 mu_lambda->initialiser(getPbBase().milieu());
320
321
322 // associer les "Eq_couch_lim" a "MuLambda_TBLE"
323 for (int i=0; i<compteur_faces_paroi; i++)
324 {
325 eq_vit[i].associer_milieu(getPbBase().milieu());
326 eq_vit[i].set_diffu(modele_visco); //modele de viscosite turbulente
327 Diffu_totale_hyd_base& diffu_hyd = ref_cast_non_const(Diffu_totale_hyd_base, eq_vit[i].get_diffu()); //modele de viscosite turbulente
328 diffu_hyd.associer_mulambda(mu_lambda.valeur());
329 }
330
331
332
333 //Pour l'instant, tout ce qui concerne le terme de Boussinesq dans les equations de TBLE se trouve dans les classe filles : PAroiVDF_TBLE et ParoiVEF_TBLE
334 // On verra ce qu'on peut factoriser ici.
335 // On verifie la presence ou non d'un terme source de Boussinesq dans le pb hydraulique :
336 /* const Sources& les_sources=eqnNS.sources();
337 int nb_sources=les_sources.size();
338
339 for (int j=0; j<nb_sources; j++)
340 {
341 const Source_base& ts = les_sources(j).valeur();
342 if (sub_type(Terme_Boussinesq_temper_VDF_Face,ts))
343 {
344 Terme_Boussinesq_temper_VDF_Face& terme_boussi = ref_cast(Terme_Boussinesq_temper_VDF_Face,ts);
345 T0 = terme_boussi.T0();
346 boussi_ok=1;
347 }
348 }
349
350 */
351
352 return 1;
353}
354
355
356int Paroi_TBLE_QDM::reprendre(Entree&, const Domaine_dis_base& domaine_dis, const Domaine_Cl_dis_base& le_dom_Cl, double tps_reprise)
357{
358 if (restart == 0) // Si on souhaite bien reprendre TBLE
359 {
360 Cerr << "Reprise du champ TBLE au temps " << tps_reprise << finl;
361 int compteur_faces_paroi = 0; //Reinitialisation de compteur_faces_paroi
362 const int ME=Process::me();
363 Nom nom_fic="sauvegarde_tble_";
364 nom_fic+=Nom(ME);
365 nom_fic+=Nom("_");
366 nom_fic+=Nom(tps_reprise,getPbBase().reprise_format_temps());
367 EFichier fic_sauve(nom_fic);
368
369 if (fic_sauve.fail())
370 {
371 Cerr << "Erreur a l'ouverture du fichier " << nom_fic << finl;
372 Cerr << "Si vous ne souhaitez pas reprendre les quantites TBLE, utilisez le mot-cle 'restart' dans les options TBLE" << finl;
374 }
375
376
377 // On compte avant pour dimensionner
378 for (int n_bord=0; n_bord<domaine_dis.nb_front_Cl(); n_bord++)
379 {
380 const Cond_lim& la_cl = le_dom_Cl.les_conditions_limites(n_bord);
381
382 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
383
384 {
385 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
386 compteur_faces_paroi+=le_bord.nb_faces();
387 }
388 }
389
390 valeurs_reprises.resize(compteur_faces_paroi, nb_comp, nb_pts+1);
391 compteur_faces_paroi=0;
392
393 for (int n_bord=0; n_bord<domaine_dis.nb_front_Cl(); n_bord++)
394 {
395 const Cond_lim& la_cl = le_dom_Cl.les_conditions_limites(n_bord);
396 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
397 {
398 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
399 int ndeb = le_bord.num_premiere_face();
400 int nfin = ndeb + le_bord.nb_faces();
401 for (int num_face=ndeb; num_face<nfin; num_face++)
402 {
403 for (int comp=0; comp<nb_comp; comp++)
404 {
405 for (int itble=0; itble<nb_pts+1; itble++)
406 {
407 fic_sauve >> valeurs_reprises(compteur_faces_paroi,comp,itble);
408 }
409 }
410 compteur_faces_paroi++;
411 }
412 }
413 }
414 fic_sauve.close();
415 Cerr << "Reprise du champ TBLE OK" << finl;
416 reprise_ok=1;
417 }
418 return 1;
419}
420
421
422
423
424int Paroi_TBLE_QDM::sauvegarder(Sortie&, const Domaine_dis_base& domaine_dis, const Domaine_Cl_dis_base& le_dom_Cl,double tps) const
425{
426 Cerr << "Sauvegarde du champ TBLE au temps = " << tps<< finl;
427 const int ME=Process::me();
428 Nom nom_fic="sauvegarde_tble_";
429 nom_fic+=Nom(ME);
430 nom_fic+=Nom("_");
431 nom_fic+=Nom(tps,"%e");
432
433 EcrFicPartage fic_sauve(nom_fic);
434 int compteur_faces_paroi=0;
435 for (int n_bord=0; n_bord<domaine_dis.nb_front_Cl(); n_bord++)
436 {
437 const Cond_lim& la_cl = le_dom_Cl.les_conditions_limites(n_bord);
438 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) )
439 {
440 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
441 int ndeb = le_bord.num_premiere_face();
442 int nfin = ndeb + le_bord.nb_faces();
443 for (int num_face=ndeb; num_face<nfin; num_face++)
444 {
445 for (int comp=0; comp<nb_comp; comp++)
446 {
447 for (int itble=0; itble<nb_pts+1; itble++)
448 fic_sauve << eq_vit[compteur_faces_paroi].get_Unp1(comp,itble) << " " ;
449 }
450 fic_sauve << finl;
451 compteur_faces_paroi++;
452 }
453 }
454 }
455 fic_sauve.syncfile();
456 fic_sauve.close();
457 return 1;
458}
459
460
461void Paroi_TBLE_QDM::imprimer_stat(Sortie&, double tps) const
462{
463 if (oui_stats==1)
464 {
465 for(int j=0; j<nb_post_pts; j++)
466 {
467 int num_face=num_faces_post(j);
468 double coeff = 1./(tps-tps_deb_stats);
469 Nom tmp;
470 tmp="tble_stats_";
471 tmp+=nom_pts[j];
472 tmp+=".dat";
473
474 EcrFicPartage fic_post(tmp, ios::app);
475 if (Objet_U::dimension==2)
476 {
477 fic_post << "# "<< tps << " U V U^2 V^2 UV Fx Fy"<< finl;
478
479 for(int i=0; i<nb_pts+1; i++)
480 {
481 fic_post << eq_vit[num_face].get_y(i) << " " ;
482 fic_post << coeff*Umean_sum(j,i) << " " ;
483 fic_post << coeff*Vmean_sum(j,i) << " " ;
484 fic_post << coeff*Umean_2_sum(j,i) << " " ;
485 fic_post << coeff*Vmean_2_sum(j,i) << " " ;
486 fic_post << coeff*UVmean_sum(j,i) << " " ;
487 fic_post << coeff*Fxmean_sum(j,i) << " " ;
488 fic_post << coeff*Fymean_sum(j,i) << " " << finl;
489 }
490 }
491 else if (Objet_U::dimension==3)
492 {
493 fic_post << "# "<< tps << " U V W U^2 V^2 W^2 UV WV WU Fx Fy Fz "<< finl;
494
495 for(int i=0; i<nb_pts+1; i++)
496 {
497 fic_post << eq_vit[num_face].get_y(i) << " " ;
498 fic_post << coeff*Umean_sum(j,i) << " " ;
499 fic_post << coeff*Vmean_sum(j,i) << " " ;
500 fic_post << coeff*Wmean_sum(j,i) << " " ;
501 fic_post << coeff*Umean_2_sum(j,i) << " " ;
502 fic_post << coeff*Vmean_2_sum(j,i) << " " ;
503 fic_post << coeff*Wmean_2_sum(j,i) << " " ;
504 fic_post << coeff*UVmean_sum(j,i) << " " ;
505 fic_post << coeff*WVmean_sum(j,i) << " " ;
506 fic_post << coeff*WUmean_sum(j,i) << " " ;
507 fic_post << coeff*Fxmean_sum(j,i) << " " ;
508 fic_post << coeff*Fymean_sum(j,i) << " " ;
509 fic_post << coeff*Fzmean_sum(j,i) << " " ;
510 fic_post << finl;
511 }
512 }
513 fic_post.syncfile();
514 fic_post.close();
515 }
516
517 }
518}
519
520
521void Paroi_TBLE_QDM::calculer_stat(int j, int i, double Fx, double Fy, double Fz, double u, double v, double w, double dt)
522{
523 Fxmean_sum(j,i) += Fx*dt;
524 Fymean_sum(j,i) += Fy*dt;
525 Fzmean_sum(j,i) += Fz*dt;
526 Umean_sum(j,i) += u*dt;
527 Umean_2_sum(j,i) += u*u*dt;
528 Vmean_sum(j,i) += v*dt;
529 Vmean_2_sum(j,i) += v*v*dt;
530 Wmean_sum(j,i) += w*dt;
531 Wmean_2_sum(j,i) += w*w*dt;
532 UVmean_sum(j,i) += u*v*dt;
533 WVmean_sum(j,i) += w*v*dt;
534 WUmean_sum(j,i) += w*u*dt;
535}
Classe Champ_Fonc_Fonction Classe derivee de Champ_Fonc_Tabule qui represente les.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
void associer_mulambda(const MuLambda_TBLE_base &m)
Classe Diffu_totale_hyd_base Classe abstraite calculant la diffusivite totale (somme diffusivite.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VF
Definition Domaine_VF.h:44
double xv(int num_face, int k) const
Definition Domaine_VF.h:76
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
Definition Domaine_VF.h:513
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
int nb_front_Cl() const
Fichier en lecture Cette classe est a la classe C++ ifstream ce que la classe Entree est a la.
Definition EFichier.h:29
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 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 num_premiere_face() const
Definition Front_VF.h:63
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Classe MuLambda_TBLE_Fcts_T Classe abstraite calculant Mu et Lambda suivant une fonction de T.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
static int dimension
Definition Objet_U.h:99
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
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ REQUIRED
Definition Param.h:115
DoubleTab Vmean_sum
double tps_start_stat_nu_t_dyn
DoubleTab visco_turb_moy
void calculer_stat(int indice_post, int indice_maillage, double Fx, double Fy, double Fz, double u, double v, double w, double dt)
DoubleTab WVmean_sum
DoubleTab UVmean_sum
void imprimer_stat(Sortie &, double) const
DoubleTab sonde_tble
DoubleTab Umean_sum
void set_param(Param &param) const
DoubleTab Fymean_sum
DoubleTab Wmean_2_sum
DoubleTab Vmean_2_sum
int reprendre(Entree &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps)
DoubleTab Fxmean_sum
IntTab num_global_faces_post
DoubleTab Umean_2_sum
int sauvegarder(Sortie &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps) const
DoubleTab Fzmean_sum
virtual const Probleme_base & getPbBase() const =0
DoubleTab Wmean_sum
DoubleTab valeurs_reprises
DoubleTab WUmean_sum
int lire_motcle_non_standard(const Motcle &, Entree &)
int init_lois_paroi(const Domaine_VF &, const Domaine_Cl_dis_base &)
static int me()
renvoie mon rang dans le groupe de communication courant.
Definition Process.cpp:125
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52