TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
Momentum_Euler.cpp
1/****************************************************************************
2* Copyright (c) 2026, 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 <Milieu_composite_Euler.h>
17#include <Schema_Temps_base.h>
18#include <Champ_Composite.h>
19#include <TRUSTTab_parts.h>
20#include <Momentum_Euler.h>
21#include <Discret_Thyd.h>
22#include <Fluide_base.h>
23#include <Pb_Euler.h>
24#include <EChaine.h>
25#include <Param.h>
26
27Implemente_instanciable(Momentum_Euler,"Momentum_Euler|QDM_Euler",Navier_Stokes_std);
28// XD momentum_euler eqn_base qdm_euler INHERITS_BRACE Momentum conservation equation for a multi-phase Euler problem
29// XD_CONT where the unknown is the velocity
30// XD attr termes_non_conservatifs bloc_op_non_conservativtifs non_conservative_terms OPT Keyword to alter the
31// XD_CONT non-conservative scheme.
32
34
36{
37 assert(l_inco_ch_ && le_fluide);
39
40 if (!sub_type(Pb_Euler, probleme()))
41 {
42 Cerr << "Equation " << que_suis_je() << " can only used with a pb of type Pb_Euler not " << probleme().que_suis_je() << " !!" << finl;
44 }
45
46 // if single-phase and termes_non_conservatifs not read ... type without error!
47 const bool is_single_phase = (ref_cast(Pb_Euler, probleme()).nb_phases() == 1);
48 if (is_single_phase && !terme_nconserv_)
49 {
50 EChaine str(" { negligeable } ");
51 str >> terme_nconserv_;
52 terme_nconserv_.associer_eqn(*this);
53 }
54 else if (!is_single_phase && !terme_nconserv_)
55 {
56 Cerr << "Error while reading " << que_suis_je() << " !!! non_conservative_terms operator is not read although it is required !!! Fix your data file ..." << finl;
58 }
59
60 terme_convectif.set_fichier("Convection_qdm");
61 terme_convectif.set_description("Momentum flow rate=Integral(rho*u*u*ndS) [N] if SI units used");
62
63 terme_nconserv_.set_fichier("Non_conservative_qdm");
64 terme_nconserv_.set_description("Conribution of non_conservative operator in QDM equation");
65
66 return is;
67}
68
70{
72 param.ajouter_non_std("convection", (this), Param::REQUIRED);
73 param.ajouter_non_std("termes_non_conservatifs|non_conservative_terms", (this));
74}
75
77{
78 if (mot == "termes_non_conservatifs|non_conservative_terms")
79 {
80 Cerr << "Reading and typing of the termes_non_conservatifs operator : " << finl;
81 is >> terme_nconserv_;
82 terme_nconserv_.associer_eqn(*this);
83 return 1;
84 }
85 else
87}
88
90{
91 switch(i)
92 {
93 case 0:
94 return terme_convectif;
95 case 1:
96 return terme_nconserv_;
97 default :
98 Cerr << "Error for Momentum_Euler::operateur(int i)" << finl;
99 Cerr << "Momentum_Euler has " << nombre_d_operateurs() <<" operators "<<finl;
100 Cerr << "and you are trying to access the " << i <<" th one."<< finl;
101 exit();
102 }
103 // For the compilers!!
104 return terme_convectif;
105}
106
108{
109 switch(i)
110 {
111 case 0:
112 return terme_convectif;
113 case 1:
114 return terme_nconserv_;
115 default :
116 Cerr << "Error for Momentum_Euler::operateur(int i)" << finl;
117 Cerr << "Momentum_Euler has " << nombre_d_operateurs() <<" operators "<<finl;
118 Cerr << "and you are trying to access the " << i <<" th one."<< finl;
119 exit();
120 }
121 // For the compilers!!
122 return terme_convectif;
123}
124
126{
128 // Update the time in the pressure field
129 for (int i = 1; i <= sch.nb_valeurs_futures(); i++)
130 {
131 la_pression->changer_temps_futur(sch.temps_futur(i), i);
132 la_pression->futur(i) = la_pression->valeurs();
133 }
135}
136
141
143{
144 Process::exit("Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
145 return le_fluide->viscosite_dynamique();
146}
147
149{
150 Process::exit("Momentum_Euler::diffusivite_pour_transport() should not be called !!! \n");
151 return le_fluide->viscosite_cinematique();
152}
153
155{
156 Cerr << " Momentum_Euler::completer" << finl;
158 la_pression->associer_domaine_cl_dis(le_dom_Cl_dis);
159 Cerr << "unknow field type " << inconnue().que_suis_je() << finl;
160 Cerr << "unknow field name " << inconnue().le_nom() << finl;
161 Cerr << "equation type " << inconnue().equation().que_suis_je() << finl;
162
163 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
164 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
165
166 vitesse_normale_.resize(dom.nb_faces(), 2 * pb.nb_phases()); // array dimension to be updated for 3 phases
168 assert(vitesse_normale_.dimension(0) == dom.nb_faces());
169 assert(vitesse_normale_.dimension_tot(0) == dom.nb_faces_tot());
170 assert(vitesse_normale_.line_size() == 2 * pb.nb_phases());
171}
172
174{
176
177 Noms noms_compris = champs_compris_.liste_noms_compris();
178
179 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
180 for (int i = 0; i < pb.nb_phases(); i++)
181 noms_compris.add(noms_vit_phases_[i]);
182
183 if (opt == DESCRIPTION)
184 Cerr << " Momentum_Euler : " << noms_compris << finl;
185 else
186 noms.add(noms_compris);
187}
188
190{
192 int i = noms_vit_phases_.rang(motlu);
193 if (i >= 0 && !vit_phases_[i])
194 {
196 champs_compris_.ajoute_champ(vit_phases_[i]);
197 }
198}
199
200void Momentum_Euler::verifie_ch_init_nb_comp(const Champ_Inc_base& ch_ref, const int nb_comp) const
201{
202 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
203 const Nature_du_champ nature = ch_ref.nature_du_champ();
204 const Nom& nom = ch_ref.le_nom();
205
206 if (nature == vectoriel)
207 {
208 if (nb_comp != pb.nb_phases() * Objet_U::dimension)
209 {
210 Cerr << "The nature of the field " << nom << " unknown to the equation name " << le_nom() << " is vector." << finl;
211 Cerr << "The number of components readed for this field " << nb_comp << " is not compatible with its nature." << finl;
212 Cerr << "It should read " << pb.nb_phases() * Objet_U::dimension << " components for this field." << finl;
214 }
215 }
216 else
218}
219
221{
222 Cerr << "Reading of initial conditions\n";
223 Nom nom;
224 is >> nom;
225 if (nom != "{")
226 {
227 Cerr << que_suis_je() << ": expected { instead of " << nom << finl;
229 }
230 int vit_lu = 0, press_lu = 0;
231 for (is >> nom; nom != "}"; is >> nom)
232 if (nom == "vitesse" || nom == "velocity")
233 {
235 is >> src;
236 if (src->que_suis_je() == "Champ_Composite")
237 {
238 const int nb_phases = ref_cast(Pb_Euler, probleme()).nb_phases(), nb_dim = ref_cast(Champ_Composite,src.valeur()).get_champ_composite_dim();
239 if (nb_dim != nb_phases)
240 {
241 Cerr << que_suis_je() << ": velocity initial condition Champ_Composite should have " << nb_phases << " fields and not " << nb_dim << " !" << finl;
243 }
244 }
245
246 verifie_ch_init_nb_comp(la_vitesse, src->nb_comp());
247 la_vitesse->affecter(src), vit_lu = 1;
248 la_vitesse->passe() = la_vitesse->valeurs();
249 }
250 else if (nom == "pression" || nom == "pressure")
251 {
253 is >> src, verifie_ch_init_nb_comp(la_pression, src->nb_comp());
254 la_pression->affecter(src);
255 la_pression->passe() = la_pression->valeurs();
256 press_lu = 1;
257 }
258 else
259 {
260 Cerr << que_suis_je() << ": expected vitesse|velocity|pression|pressure instead of " << nom << finl;
262 }
263
264 if (!vit_lu)
265 {
266 Cerr << que_suis_je() << ": velocity initial condition not found." << finl;
268 }
269 if (!press_lu)
270 {
271 Cerr << que_suis_je() << ": pressure initial condition not found." << finl;
273 }
274
275 return is;
276}
277
279{
280 Equation_base::preparer_calcul(); //to avoid calling Navier_Stokes_std::preparer_calcul() !
281
282 // XXX Elie Saikali : utile pour cas reprise !
283 const double temps = schema_temps().temps_courant();
284 la_pression->changer_temps(temps);
285
286 return 1;
287}
288
290{
291 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
292 if (pb.nb_phases() == 1)
293 return 0.;
294 return -1.;
295}
296
298{
299 Cerr << "Momentum_Euler discretization" << finl;
300 const Discret_Thyd& dis = ref_cast(Discret_Thyd, discretisation());
301 const Pb_Euler& pb = ref_cast(Pb_Euler, probleme());
302
303 const double temps = schema_temps().temps_courant();
304 const int nb_valeurs_temp = schema_temps().nb_valeurs_temporelles();
305 const int N = pb.nb_phases();
306
307 dis.vitesse(schema_temps(), domaine_dis(), la_vitesse, N);
308 la_vitesse->fixer_nature_du_champ(vectoriel);
309 la_vitesse->add_synonymous(Nom("velocity"));
310 champs_compris_.ajoute_champ(la_vitesse);
311
312 /* velocity per phase */
313 noms_vit_phases_.dimensionner(N);
314 vit_phases_.resize(N);
315
316 for (int i = 0; i < N; i++)
317 {
318 noms_vit_phases_[i] = Nom("vitesse_") + pb.nom_phase(i);
319 if (!vit_phases_[i])
320 {
322 champs_compris_.ajoute_champ(vit_phases_[i]);
323 }
324 }
325
326 Cerr << "Pressure discretization" << finl;
327 dis.discretiser_champ("pression", domaine_dis(), "pression", "Pa.m3/kg", N, nb_valeurs_temp, temps, la_pression);
328 la_pression->fixer_nature_du_champ(N == 1 ? scalaire : multi_scalaire);
329 la_pression->associer_eqn(*this);
330
331 /* pressure field name per phase */
332 for (int i = 0; i < pb.nb_phases(); i++)
333 la_pression->fixer_nom_compo(i, Nom("pression_") + pb.nom_phase(i));
334
335 champs_compris_.ajoute_champ(la_pression);
336
337 // copy the structure //
338 vitesse_son_ = la_pression->valeurs(); // nb_elem_tot * nb_phase
339
340 Cerr << "Unknown alpha_rho_u discretization" << finl;
341 dis.discretiser_champ("vitesse", domaine_dis(), "alpha_rho_u", "kg/sm3", dimension * N, nb_valeurs_temp, temps, l_inco_ch_);
342 champs_compris_.ajoute_champ(l_inco_ch_);
343
345 Cerr << "Momentum_Euler discretization ==> ok" << finl;
346}
347
349{
350 int bytes = 0;
351 bytes += Equation_base::sauvegarder(os);
352 sauver();
353
354 return bytes;
355}
356
364
366{
367 ref_cast(Milieu_composite_Euler,milieu()).calculer_pression(la_pression->valeurs());
368 ref_cast(Milieu_composite_Euler,milieu()).calculer_vitesse_son(vitesse_son_);
369}
370
372{
373 const Schema_Temps_base& sh = schema_temps();
374 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
375 const IntTab& elem_faces = dom.elem_faces();
376 const DoubleVect& surf = dom.face_surfaces();
377 const DoubleVect& vol = dom.volumes();
378 const int nb_phases = ref_cast(Pb_Euler,probleme()).nb_phases();
379 const DoubleTab& u_n = vitesse_normale();
380 double dt = sh.pas_temps_max();
381
382 DoubleTrav dt_e(dom.nb_elem());
383 for (int n = 0; n < nb_phases; n++)
384 {
385 for (int e = 0; e < dom.nb_elem(); e++)
386 {
387 double som = 0;
388 for (int i = 0; i < elem_faces.line_size(); i++)
389 {
390 int f = elem_faces(e, i);
391 som += (f >= 0) ? (fabs(u_n(f, n)) + vitesse_son_(e, n)) * surf(f) : 0;
392 }
393 dt_e(e) = vol(e) / som;
394 }
395 dt = std::min(dt, mp_min_vect(dt_e)); // @suppress("Invalid arguments") // @suppress("Function cannot be resolved")
396 }
397 return ((sh.facteur_securite_pas() * dt) < sh.temps_max() - sh.temps_courant()) ? dt : (sh.temps_max() - sh.temps_courant()) / sh.facteur_securite_pas();
398}
399
401{
402 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
403 const DoubleTab& alpha_rho = ref_cast(Pb_Euler,probleme()).equation_masse().inconnue().valeurs();
404 const DoubleTab& vit = vitesse().valeurs();
405 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases(), D = Objet_U::dimension;
406 assert(vit.line_size() == Nb_phase * D);
407 assert(vit.dimension(0) == dom.nb_elem());
408
409 DoubleTab& alpha_rhoU = inconnue().valeurs();
410 for (int n = 0; n < Nb_phase; n++)
411 {
412 assert(vit_phases_[n]);
413 DoubleTab& vit_phase = vit_phases_[n]->valeurs();
414
415 for (int j = 0; j < dom.nb_elem(); j++)
416 for (int d = 0; d < D; d++)
417 {
418 vit_phase(j, d) = vit(j, Nb_phase * d + n);
419 alpha_rhoU(j, Nb_phase * d + n) = vit(j, Nb_phase * d + n) * alpha_rho(j, n);
420 }
421 vit_phase.echange_espace_virtuel();
422 }
423 alpha_rhoU.echange_espace_virtuel();
424}
425
427{
428 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
429 const DoubleTab& alpha_rho_U = inconnue().valeurs();
430 const DoubleTab& alpha_rho = ref_cast(Pb_Euler,probleme()).equation_masse().inconnue().valeurs();
431 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases(), D = Objet_U::dimension;
432 assert(alpha_rho_U.line_size() == Nb_phase * D);
433 assert(alpha_rho_U.dimension(0) == dom.nb_elem());
434
435 DoubleTab& vit = vitesse().valeurs();
436 for (int n = 0; n < Nb_phase; n++)
437 {
438 assert(vit_phases_[n]);
439 DoubleTab& vit_phase = vit_phases_[n]->valeurs();
440
441 for (int j = 0; j < dom.nb_elem(); j++)
442 for (int d = 0; d < D; d++)
443 {
444 vit_phase(j, d) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
445 vit(j, Nb_phase * d + n) = alpha_rho_U(j, Nb_phase * d + n) / alpha_rho(j, n);
446 }
447 vit_phase.echange_espace_virtuel();
448 }
450}
451
453{
454 assert(i >= 0 && i < (int )vit_phases_.size());
455 return vit_phases_[i].valeur();
456}
457
459{
460 assert(i >= 0 && i < (int )vit_phases_.size());
461 return vit_phases_[i].valeur();
462}
463
465{
466 assert(Objet_U::dimension == 2);
467 const int Nb_phase = ref_cast(Pb_Euler, probleme()).nb_phases();
468 const Domaine_VF& dom = ref_cast(Domaine_VF, domaine_dis());
469 const DoubleTab& vit = vitesse().valeurs();
470 const IntTab& f_e = dom.face_voisins();
471 for (int n = 0; n < Nb_phase; n++)
472 for (int f = 0; f < dom.nb_faces(); f++)
473 {
474 // note: u_n( faces , 0 ) is the left normal velocity (in the sense of the outward normal) and u_n( faces , 0 ) is the right normal velocity
475 // THIS IS NOT the space dimension
476 int el = f_e(f, 0), er = f_e(f, 1);
477 double nx = dom.face_normales(f, 0) / dom.face_surfaces(f);
478 double ny = dom.face_normales(f, 1) / dom.face_surfaces(f);
479 vitesse_normale_(f, n) = (el >= 0) ? vit(el, n) * nx + vit(el, n + Nb_phase) * ny : -123.123;
480 vitesse_normale_(f, n + Nb_phase) = (er >= 0) ? vit(er, n) * nx + vit(er, n + Nb_phase) * ny : -123.123;
481 }
482
483 vitesse_normale_.echange_espace_virtuel();
484}
class Champ_Don_base base class of Given Fields (not calculated)
Class Champ_Inc_base.
DoubleTab & valeurs() override
Returns the array of field values at the current time.
class Champ_base This class is the base of the fields hierarchy.
Definition Champ_base.h:43
class Discret_Thyd This class is the base class representing a discretization
void vitesse(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Inc_base)&, int nb_comp=1) const
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
class Domaine_VF
Definition Domaine_VF.h:44
virtual const DoubleVect & face_surfaces() const
Definition Domaine_VF.h:51
int nb_faces() const
Returns the total number of faces.
Definition Domaine_VF.h:471
int nb_faces_tot() const
Returns the total number of faces.
Definition Domaine_VF.h:481
void creer_tableau_faces(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
virtual double face_normales(int face, int comp) const
Definition Domaine_VF.h:47
double volumes(int i) const
Definition Domaine_VF.h:113
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
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual void set_param(Param &titi) const override
const Nom & le_nom() const override
Returns the name of the equation.
const Discretisation_base & discretisation() const
Returns the discretization associated with the equation.
virtual void mettre_a_jour_champs_conserves(double temps, int reset=0)
virtual void abortTimeStep()
Reinitialize what must be.
virtual void completer()
Completes the construction (initialization) of objects associated with the equation.
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual int preparer_calcul()
Everything that does not depend on other possible problems.
int sauvegarder(Sortie &) const override
We save the unknown, then the source terms to an output stream.
Probleme_base & probleme()
Returns the problem associated with the equation.
virtual void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const
Verification of the number of components read for the specification of a field.
void creer_champ(const Motcle &motlu) override
Schema_Temps_base & schema_temps()
Returns the time scheme associated with the equation.
virtual bool initTimeStep(double dt)
Allocation and initialization of the unknown and boundary conditions until present+dt.
virtual void discretiser()
Discretizes the equation.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Returns the discretized domain associated with the equation.
const Nom & le_nom() const override
Returns the name of the field.
virtual Nature_du_champ nature_du_champ() const
Definition Field_base.h:77
DoubleTab vitesse_normale_
const DoubleTab & vitesse_normale() const
DoubleTab vitesse_son_
void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const override
Verification of the number of components read for the specification of a field.
const Champ_Inc_base & vitesse() const override
const Champ_base & diffusivite_pour_pas_de_temps() const override
void discretiser() override
Discretizes the equation.
void set_param(Param &param) const override
int preparer_calcul() override
Everything that does not depend on other possible problems.
Operateur_NConserv terme_nconserv_
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_Inc_base & vitesse_phase(const int i) const
void completer() override
Completes the construction (initialization) of objects associated with the equation.
OWN_PTR(Champ_Inc_base) l_inco_ch_
double alpha_res() const
Motcles noms_vit_phases_
void mettre_a_jour_champs_conserves(double temps, int reset) override
void calculer_vitesse_normale()
void creer_champ(const Motcle &motlu) override
int sauvegarder(Sortie &os) const override
We save the unknown, then the source terms to an output stream.
const Champ_Don_base & diffusivite_pour_transport() const override
void abortTimeStep() override
Reinitialize what must be.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
const Champ_Inc_base & inconnue() const override
bool initTimeStep(double dt) override
Allocation and initialization of the unknown and boundary conditions until present+dt.
double calculer_pas_de_temps() const override
Calculation of the next time step.
Entree & lire_cond_init(Entree &) override
Reading of initial conditions in an input stream.
int nombre_d_operateurs() const override
std::vector< OWN_PTR(Champ_Inc_base)> vit_phases_
const Operateur & operateur(int) const override
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
Definition MorEqn.h:62
A character string (Nom) in uppercase.
Definition Motcle.h:26
Navier_Stokes_std This class carries the terms of the momentum equation.
const Milieu_base & milieu() const override
Returns the physical medium of the equation (Fluide_base upcast to Milieu_base).
Operateur_Conv terme_convectif
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
virtual void sauver() const
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
An array of character strings (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:71
static int dimension
Definition Objet_U.h:94
friend class Sortie
Definition Objet_U.h:70
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 Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
class Operateur Generic class of the operator hierarchy.
Definition Operateur.h:39
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
@ REQUIRED
Definition Param.h:115
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
const Nom & nom_phase(int i) const
Definition Pb_Euler.h:52
int nb_phases() const
Definition Pb_Euler.h:51
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466
class Schema_Temps_base
double temps_courant() const
Returns the current time.
virtual double temps_futur(int i) const =0
double pas_temps_max() const
Returns the maximum time step.
double temps_max() const
Returns a reference to the maximum time.
virtual int nb_valeurs_futures() const =0
virtual int nb_valeurs_temporelles() const =0
double facteur_securite_pas() const
Returns the safety factor or multiplier of delta_t.
Base class for output streams.
Definition Sortie.h:52
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
int line_size() const
Definition TRUSTVect.tpp:67
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")