TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Modele_turbulence_hyd_LES_VDF.cpp
1/****************************************************************************
2* Copyright (c) 2024, 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 <Modele_turbulence_hyd_LES_VDF.h>
18#include <Dirichlet_entree_fluide_leaves.h>
19#include <Paroi_negligeable_VDF.h>
20#include <Neumann_sortie_libre.h>
21#include <Dirichlet_paroi_fixe.h>
22#include <Schema_Temps_base.h>
23#include <Domaine_Cl_VDF.h>
24#include <Equation_base.h>
25#include <Periodique.h>
26#include <TRUSTTrav.h>
27#include <Symetrie.h>
28#include <Debog.h>
29#include <Param.h>
30
31Implemente_instanciable(Modele_turbulence_hyd_LES_VDF, "Modele_turbulence_hyd_sous_maille_VDF", Modele_turbulence_hyd_LES_VDF_base);
32
33Sortie& Modele_turbulence_hyd_LES_VDF::printOn(Sortie& s) const { return s << que_suis_je() << " " << le_nom(); }
34
36
38{
40 param.ajouter_non_std("formulation_a_nb_points", (this));
41}
42
44{
45 if (mot == "formulation_a_nb_points")
46 {
47 is >> nb_points_; // nb_points= 4 ou 6
48 if ((nb_points_ != 4) && (nb_points_ != 6))
49 {
50 Cerr << "Read keyword is :" << mot << finl;
51 Cerr << "Error while reading the subgrid model." << finl;
52 Cerr << "You have indicated " << nb_points_ << " points " << finl;
53 Cerr << "while this model is available only for 4 or 6 points" << finl;
55 }
56 Cerr << "Structure fonction formulation at " << nb_points_ << " points" << finl;
57 if (nb_points_ == 4)
58 {
59 is >> dir1_;
60 is >> dir2_;
61 assert(dir1_ != dir2_);
62 Cerr << "The wall is parallel to the plane (x_" << dir1_ << ",x_" << dir2_ << ")" << finl;
63 if (((dir1_ == 0) && (dir2_ == 1)) || ((dir1_ == 1) && (dir2_ == 0)))
64 dir3_ = 2;
65 if (((dir1_ == 0) && (dir2_ == 2)) || ((dir1_ == 2) && (dir2_ == 0)))
66 dir3_ = 1;
67 if (((dir1_ == 1) && (dir2_ == 2)) || ((dir1_ == 2) && (dir2_ == 1)))
68 dir3_ = 0;
69 }
70 return 1;
71 }
72 else
74}
75
77{
78 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
79 double temps = mon_equation_->inconnue().temps();
80 DoubleTab& visco_turb = la_viscosite_turbulente_->valeurs();
81 int nb_poly = domaine_VDF.domaine().nb_elem();
82 int nb_poly_tot = domaine_VDF.domaine().nb_elem_tot();
83
84 F2_.resize(nb_poly_tot);
85
87
88 if (visco_turb.size() != nb_poly)
89 {
90 Cerr << "Size error for the array containing the values of the turbulent viscosity." << finl;
92 }
93
94 Debog::verifier("Modele_turbulence_hyd_LES_VDF::calculer_viscosite_turbulente visco_turb 0", visco_turb);
95
96 for (int elem = 0; elem < nb_poly; elem++)
97 visco_turb[elem] = Csm1_ * l_(elem) * sqrt(F2_[elem]);
98
99 Debog::verifier("Modele_turbulence_hyd_LES_VDF::calculer_viscosite_turbulente visco_turb 1", visco_turb);
100
101 la_viscosite_turbulente_->changer_temps(temps);
102 return la_viscosite_turbulente_;
103}
104
106{
107 double temps = mon_equation_->inconnue().temps();
108 DoubleVect& k = energie_cinetique_turb_->valeurs();
109 int nb_poly = ref_cast(Domaine_VDF, le_dom_VF_.valeur()).domaine().nb_elem();
110
111 if (k.size() != nb_poly)
112 {
113 Cerr << "Size error for the array containing the values of the turbulent kinetic energy." << finl;
115 }
116
117 for (int elem = 0; elem < nb_poly; elem++)
118 k[elem] = Csm2_ * F2_[elem];
119
120 energie_cinetique_turb_->changer_temps(temps);
121}
122
124{
125
126 const DoubleTab& vitesse = mon_equation_->inconnue().valeurs();
127 const Domaine_VDF& domaine_VDF = ref_cast(Domaine_VDF, le_dom_VF_.valeur());
128 int nb_poly = domaine_VDF.domaine().nb_elem();
129 int nb_poly_tot = domaine_VDF.domaine().nb_elem_tot();
130 const IntTab& face_voisins = domaine_VDF.face_voisins();
131 const IntTab& elem_faces = domaine_VDF.elem_faces();
132 const IntTab& Qdm = domaine_VDF.Qdm();
133 const IntVect& orientation = domaine_VDF.orientation();
134 // int nb_face_entier = domaine_VDF.nb_faces_internes();
135 DoubleTrav F_Elem(nb_poly_tot, dimension);
136 int num0, num1, num2, num3;
137 int k1, k2;
138 double diff1, diff2, aux;
139
140 // Dans le tableau F_Elem on stocke les fonctions de structure dans
141 // chacune des directions d'espace
142 // F_Elem(num_elem,0) Fonction de structure dans la direction X
143 // au noeud num_elem
144 // F_Elem(num_elem,1) Fonction de structure dans la direction Y
145 // F_Elem(num_elem,2) Fonction de structure dans la direction Z
146 //
147 // Principe de calcul des Fonctions de structure directionnelles:
148 //
149 // 2
150 // F_X = (Ug-Ud) + 1/4[ F_X(arete_XY_1) + F_X(arete_XY_2 ) +
151 // F_X(arete_XY_3) + F_X(arete_XY_4)]
152 //
153 // On va calculer 0.25*F_X(arete_XY) et le distribuer aux 4
154 // elements adjacents
155
156 double diff;
157
158 if (dimension == 3) //dimension == 3
159 {
160 int num_elem;
161
162 //NYB :
163 for (num_elem = 0; num_elem < nb_poly; num_elem++)
164 {
165
166 diff = vitesse[elem_faces(num_elem, 0)] - vitesse[elem_faces(num_elem, 3)];
167 F_Elem(num_elem, 0) = diff * diff;
168 diff = vitesse[elem_faces(num_elem, 1)] - vitesse[elem_faces(num_elem, 4)];
169 F_Elem(num_elem, 1) = diff * diff;
170 diff = vitesse[elem_faces(num_elem, 2)] - vitesse[elem_faces(num_elem, 5)];
171 F_Elem(num_elem, 2) = diff * diff;
172 }
173
174 //*******************************
175 // Traitement des aretes internes
176 //*******************************
177 int ndeb = domaine_VDF.premiere_arete_interne();
178 int nfin = ndeb + domaine_VDF.nb_aretes_internes();
179 int num_arete;
180
181 for (num_arete = ndeb; num_arete < nfin; num_arete++)
182 {
183 num0 = Qdm(num_arete, 0);
184 num1 = Qdm(num_arete, 1);
185 num2 = Qdm(num_arete, 2);
186 num3 = Qdm(num_arete, 3);
187
188 aux = vitesse[num1] - vitesse[num0];
189 diff1 = 0.25 * aux * aux;
190 aux = vitesse[num3] - vitesse[num2];
191 diff2 = 0.25 * aux * aux;
192 k1 = orientation(num0);
193 k2 = orientation(num2);
194
195 F_Elem(face_voisins(num0, 0), k2) += diff1;
196 F_Elem(face_voisins(num0, 1), k2) += diff1;
197 F_Elem(face_voisins(num1, 0), k2) += diff1;
198 F_Elem(face_voisins(num1, 1), k2) += diff1;
199 F_Elem(face_voisins(num2, 0), k1) += diff2;
200 F_Elem(face_voisins(num2, 1), k1) += diff2;
201 F_Elem(face_voisins(num3, 0), k1) += diff2;
202 F_Elem(face_voisins(num3, 1), k1) += diff2;
203
204 }
205
206 //*******************************
207 // Traitement des aretes mixtes
208 //*******************************
209 ndeb = domaine_VDF.premiere_arete_mixte();
210 nfin = ndeb + domaine_VDF.nb_aretes_mixtes();
211
212 for (num_arete = ndeb; num_arete < nfin; num_arete++)
213 {
214 num0 = Qdm(num_arete, 0);
215 num1 = Qdm(num_arete, 1);
216 num2 = Qdm(num_arete, 2);
217 num3 = Qdm(num_arete, 3);
218
219 aux = vitesse[num1] - vitesse[num0];
220 diff1 = 0.25 * aux * aux;
221 aux = vitesse[num3] - vitesse[num2];
222 diff2 = 0.25 * aux * aux;
223 k1 = orientation(num0);
224 k2 = orientation(num2);
225
226 //int num_elem;
227 num_elem = face_voisins(num0, 0);
228 if (num_elem != -1)
229 F_Elem(num_elem, k2) += diff1;
230 num_elem = face_voisins(num0, 1);
231 if (num_elem != -1)
232 F_Elem(num_elem, k2) += diff1;
233 num_elem = face_voisins(num1, 0);
234 if (num_elem != -1)
235 F_Elem(num_elem, k2) += diff1;
236 num_elem = face_voisins(num1, 1);
237 if (num_elem != -1)
238 F_Elem(num_elem, k2) += diff1;
239 num_elem = face_voisins(num2, 0);
240 if (num_elem != -1)
241 F_Elem(num_elem, k1) += diff2;
242 num_elem = face_voisins(num2, 1);
243 if (num_elem != -1)
244 F_Elem(num_elem, k1) += diff2;
245 num_elem = face_voisins(num3, 0);
246 if (num_elem != -1)
247 F_Elem(num_elem, k1) += diff2;
248 num_elem = face_voisins(num3, 1);
249 if (num_elem != -1)
250 F_Elem(num_elem, k1) += diff2;
251 }
252
253 //*******************************
254 //Prise en compte des CL
255 //*******************************
256 const Domaine_Cl_VDF& domaine_Cl_VDF = ref_cast(Domaine_Cl_VDF, le_dom_Cl_.valeur());
257 // const int nb_cond_lim = domaine_Cl_VDF.nb_cond_lim();
258 // int indic_perio =0;
259
260 //*******************************
261 //On parcourt les aretes bords
262 //*******************************
263
264 ndeb = domaine_VDF.premiere_arete_bord();
265 nfin = ndeb + domaine_VDF.nb_aretes_bord();
266 int n_type;
267
268 for (num_arete = ndeb; num_arete < nfin; num_arete++)
269 {
270 n_type = domaine_Cl_VDF.type_arete_bord(num_arete - ndeb);
271
272 //**********************************
273 // Traitement des aretes bords periodiques
274 //**********************************
275
276 if (n_type == TypeAreteBordVDF::PERIO_PERIO) // arete bord de type periodicite
277 {
278
279 num0 = Qdm(num_arete, 0);
280 num1 = Qdm(num_arete, 1);
281 num2 = Qdm(num_arete, 2);
282 num3 = Qdm(num_arete, 3);
283
284 aux = vitesse[num1] - vitesse[num0];
285 diff1 = 0.5 * 0.25 * aux * aux;
286 aux = vitesse[num3] - vitesse[num2];
287 diff2 = 0.5 * 0.25 * aux * aux;
288 k1 = orientation(num0);
289 k2 = orientation(num2);
290
291 // On multiplie par 0.5 du fait de la periodicite, sinon on ajoute deux fois ce qu il faut
292 // aux elements ayant des faces de periodicite
293
294 F_Elem(face_voisins(num0, 0), k2) += diff1;
295 F_Elem(face_voisins(num0, 1), k2) += diff1;
296 F_Elem(face_voisins(num1, 0), k2) += diff1;
297 F_Elem(face_voisins(num1, 1), k2) += diff1;
298 F_Elem(face_voisins(num2, 0), k1) += diff2;
299 F_Elem(face_voisins(num2, 1), k1) += diff2;
300 F_Elem(face_voisins(num3, 0), k1) += diff2;
301 F_Elem(face_voisins(num3, 1), k1) += diff2;
302 }
303
304 //**********************************
305 // Traitement des aretes bords de paroi
306 //**********************************
307 // Calcul de nu_t a la paroi
308 // Dans la formulation en nb_points = 4, on ne tient pas compte de cette composante
309 if (n_type == TypeAreteBordVDF::PAROI_PAROI) // arete bord de type paroi
310 {
311 num0 = Qdm(num_arete, 0);
312 num1 = Qdm(num_arete, 1);
313 num2 = Qdm(num_arete, 2);
314
315 aux = vitesse[num1] - vitesse[num0];
316 diff1 = 0.25 * aux * aux;
317 //aux = vitesse[num3]-vitesse[num2];
318 //diff2= 0.25*aux*aux;
319 k1 = orientation(num0);
320 k2 = orientation(num2);
321
322 num_elem = face_voisins(num0, 0);
323 if (num_elem == -1)
324 num_elem = face_voisins(num0, 1);
325 F_Elem(num_elem, k2) += diff1;
326
327 num_elem = face_voisins(num1, 0);
328 if (num_elem == -1)
329 num_elem = face_voisins(num1, 1);
330 F_Elem(num_elem, k2) += diff1;
331 }
332 }
333
334 //*******************************
335 //On parcourt les aretes coins
336 //*******************************
337
338 ndeb = domaine_VDF.premiere_arete_coin();
339 nfin = ndeb + domaine_VDF.nb_aretes_coin();
340
341 for (num_arete = ndeb; num_arete < nfin; num_arete++)
342 {
343 n_type = domaine_Cl_VDF.type_arete_coin(num_arete - ndeb);
344 //***************************************
345 // Traitement des aretes coin perio-perio
346 //***************************************
347
348 if (n_type == TypeAreteCoinVDF::PERIO_PERIO) // arete de type periodicite-periodicite
349 {
350
351 num0 = Qdm(num_arete, 0);
352 num1 = Qdm(num_arete, 1);
353 num2 = Qdm(num_arete, 2);
354 num3 = Qdm(num_arete, 3);
355
356 aux = vitesse[num1] - vitesse[num0];
357 diff1 = 0.25 * 0.25 * aux * aux;
358 aux = vitesse[num3] - vitesse[num2];
359 diff2 = 0.25 * 0.25 * aux * aux;
360 k1 = orientation(num0);
361 k2 = orientation(num2);
362
363 // On multiplie par 0.25 du fait de la double periodicite, sinon on ajoute 4 fois ce qu il faut
364 // aux elements ayant des faces de periodicite
365
366 F_Elem(face_voisins(num0, 0), k2) += diff1;
367 F_Elem(face_voisins(num0, 1), k2) += diff1;
368 F_Elem(face_voisins(num1, 0), k2) += diff1;
369 F_Elem(face_voisins(num1, 1), k2) += diff1;
370 F_Elem(face_voisins(num2, 0), k1) += diff2;
371 F_Elem(face_voisins(num2, 1), k1) += diff2;
372 F_Elem(face_voisins(num3, 0), k1) += diff2;
373 F_Elem(face_voisins(num3, 1), k1) += diff2;
374 }
375
376 //***************************************
377 // Traitement des aretes coin perio-paroi
378 //***************************************
379 if (n_type == TypeAreteCoinVDF::PERIO_PAROI) // arete de type periodicite-paroi
380 {
381 num0 = Qdm(num_arete, 0);
382 num1 = Qdm(num_arete, 1);
383 num2 = Qdm(num_arete, 2);
384
385 // On multiplie par 0.5 du fait de la periodicite, sinon on ajoute deux fois ce qu il faut
386 // aux elements ayant des faces de periodicite
387
388 aux = vitesse[num1] - vitesse[num0];
389 diff1 = 0.5 * 0.25 * aux * aux;
390 //aux = vitesse[num3]-vitesse[num2];
391 //diff2= 0.5*0.25*aux*aux;
392 k1 = orientation(num0);
393 k2 = orientation(num2);
394
395 num_elem = face_voisins(num0, 0);
396 if (num_elem == -1)
397 num_elem = face_voisins(num0, 1);
398 F_Elem(num_elem, k2) += diff1;
399
400 num_elem = face_voisins(num1, 0);
401 if (num_elem == -1)
402 num_elem = face_voisins(num1, 1);
403 F_Elem(num_elem, k2) += diff1;
404 }
405 }
406
407 // Calcul de la Fonction de structure a partir de ses
408 // composantes directionnelles
409
410 double un_tiers = 1. / 3.;
411 double deux_tiers = 2. / 3.;
412 double delta_C;
413 double un_demi = 1. / 2.;
414
415 if (nb_points_ == 6)
416 {
417
418 for (num_elem = 0; num_elem < nb_poly; num_elem++)
419 {
420 delta_C = l_(num_elem);
421 F2_[num_elem] = un_tiers
422 * (F_Elem(num_elem, 0) * pow(delta_C / domaine_VDF.dim_elem(num_elem, 0), deux_tiers) + F_Elem(num_elem, 1) * pow(delta_C / domaine_VDF.dim_elem(num_elem, 1), deux_tiers)
423 + F_Elem(num_elem, 2) * pow(delta_C / domaine_VDF.dim_elem(num_elem, 2), deux_tiers));
424
425 }
426 }
427 else
428 {
429 // alors nb_points == 4
430 // on ne tient pas compte de la composante perpendiculaire au plan (dir1,dir2) de la FST!!!
431 for (num_elem = 0; num_elem < nb_poly; num_elem++)
432 {
433 delta_C = l_(num_elem);
434 F2_[num_elem] = un_demi
435 * (F_Elem(num_elem, dir1_) * pow(delta_C / domaine_VDF.dim_elem(num_elem, dir1_), deux_tiers)
436 + F_Elem(num_elem, dir2_) * pow(delta_C / domaine_VDF.dim_elem(num_elem, dir2_), deux_tiers));
437 }
438 }
439
440 // On traite les bords pour completer la fonction de structure
441 // sur les mailles de bord
442
443 int num_face;
444 int elem, n0, n1;
445
446 for (int n_bord = 0; n_bord < domaine_VDF.nb_front_Cl(); n_bord++)
447 {
448
449 // pour chaque Condition Limite on regarde son type
450
451 const Cond_lim& la_cl = domaine_Cl_VDF.les_conditions_limites(n_bord);
452 if (sub_type(Dirichlet_entree_fluide, la_cl.valeur()))
453 {
454 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
455 ndeb = le_bord.num_premiere_face();
456 nfin = ndeb + le_bord.nb_faces();
457 for (num_face = ndeb; num_face < nfin; num_face++)
458 if ((n0 = face_voisins(num_face, 0)) != -1)
459 {
460 elem = domaine_VDF.elem_voisin(n0, num_face, 0);
461 F2_[n0] = F2_[elem];
462 }
463 else
464 {
465 n1 = face_voisins(num_face, 1);
466 elem = domaine_VDF.elem_voisin(n1, num_face, 1);
467 F2_[n1] = F2_[elem];
468 }
469 }
470 else if (sub_type(Neumann_sortie_libre, la_cl.valeur()))
471 {
472 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
473 ndeb = le_bord.num_premiere_face();
474 nfin = ndeb + le_bord.nb_faces();
475 for (num_face = ndeb; num_face < nfin; num_face++)
476 if ((n0 = face_voisins(num_face, 0)) != -1)
477 {
478 elem = domaine_VDF.elem_voisin(n0, num_face, 0);
479 F2_[n0] = F2_[elem];
480 }
481 else
482 {
483 n1 = face_voisins(num_face, 1);
484 elem = domaine_VDF.elem_voisin(n1, num_face, 1);
485 F2_[n1] = F2_[elem];
486 }
487 }
488 else if ((sub_type(Symetrie, la_cl.valeur())) || (sub_type(Periodique, la_cl.valeur())))
489 {
490 /* Do nothing */
491 }
492 else if ((sub_type(Dirichlet_paroi_fixe, la_cl.valeur())))
493 {
494 /* Do nothing */
495 }
496 else
497 {
498 const Front_VF& le_bord = ref_cast(Front_VF, la_cl->frontiere_dis());
499 ndeb = le_bord.num_premiere_face();
500 nfin = ndeb + le_bord.nb_faces();
501 for (num_face = ndeb; num_face < nfin; num_face++)
502 if ((n0 = face_voisins(num_face, 0)) != -1)
503 F2_[n0] = 0;
504 else
505 {
506 n1 = face_voisins(num_face, 1);
507 F2_[n1] = 0;
508 }
509 }
510 }
511 }
512 else
513 {
514 Cerr << "The structure fonction subgrid model can be used" << finl;
515 Cerr << "only for dimesnion 3." << finl;
517 }
518}
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
classe Dirichlet_entree_fluide Cette classe represente une condition aux limite imposant une grandeur
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
int_t nb_elem_tot() const
Definition Domaine.h:132
int_t nb_elem() const
Definition Domaine.h:131
class Domaine_Cl_VDF
int type_arete_bord(int num_arete) const
const int & type_arete_coin(int num_arete) const
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VDF
Definition Domaine_VDF.h:64
int nb_aretes_coin() const
double dim_elem(int, int) const
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int premiere_arete_bord() const
int premiere_arete_coin() const
int nb_aretes_internes() const
int premiere_arete_interne() const
int nb_aretes_bord() const
int nb_aretes_mixtes() const
int premiere_arete_mixte() const
int Qdm(int num_arete, int) const
int elem_voisin(int, int, int) const
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
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
classe Modele_turbulence_hyd_LES_VDF_base Cette classe correspond a la mise en oeuvre des modeles sou...
classe Modele_turbulence_hyd_LES_VDF Cette classe correspond a la mise en oeuvre du modele sous
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
void set_param(Param &param) const override
Champ_Fonc_base & calculer_viscosite_turbulente() override
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
virtual void set_param(Param &) const
Definition Objet_U.h:135
virtual int lire_motcle_non_standard(const Motcle &motlu, Entree &is)
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
Definition Objet_U.cpp:115
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_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Definition Param.cpp:489
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
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
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
Definition Symetrie.h:37
_SIZE_ size() const
Definition TRUSTVect.tpp:45