TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
PolyMAC_CDO_discretisation.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 <PolyMAC_CDO_discretisation.h>
17#include <Domaine_PolyMAC_CDO.h>
18#include <Champ_Fonc_Tabule.h>
19#include <Champ_Fonc_Elem_PolyMAC_CDO.h>
20#include <Champ_Fonc_Tabule_Elem_PolyMAC_CDO.h>
21#include <Milieu_base.h>
22#include <Equation_base.h>
23#include <Champ_Uniforme.h>
24#include <DescStructure.h>
25#include <Schema_Temps_base.h>
26#include <Motcle.h>
27#include <Domaine_Cl_PolyMAC_family.h>
28#include <grad_U_Champ_Face_PolyMAC_CDO.h>
29
30Implemente_instanciable(PolyMAC_CDO_discretisation, "PolyMAC_CDO|PolyMAC", Discret_Thyd);
31// XD PolyMAC_CDO discretisation_base PolyMAC INHERITS_BRACE PolyMAC_CDO discretization (PolyMAC_CDO discretization that
32// XD_CONT is not compatible with pb_multi).
33
34
36
38
39/*! @brief Discretizes a field for PolyMAC_CDO based on a discretization directive.
40 *
41 * @brief The directive is a Motcle such as "vitesse", "pression",
42 * "temperature", "champ_elem" (creates a P0-type field), ...
43 * This method determines the type of field to create based on the element type
44 * and the discretization directive. It then determines the number of degrees of freedom
45 * and sets all field parameters (type, nb_compo, nb_ddl, nb_pas_dt,
46 * name(s), unit(s), and field nature) and associates the Domaine_dis with the field.
47 * See the code for the correspondence between directives and
48 * the type of field created.
49 *
50 */
51void PolyMAC_CDO_discretisation::discretiser_champ(const Motcle& directive, const Domaine_dis_base& z, Nature_du_champ nature, const Noms& noms, const Noms& unites, int nb_comp, int nb_pas_dt,
52 double temps, OWN_PTR(Champ_Inc_base)& champ, const Nom& sous_type) const
53{
54 const Domaine_PolyMAC_CDO& domaine_PolyMAC_CDO = ref_cast(Domaine_PolyMAC_CDO, z);
55
56 Motcles motcles(7);
57 motcles[0] = "vitesse"; // Standard choice for velocity
58 motcles[1] = "pression"; // Standard choice for pressure
59 motcles[2] = "temperature"; // Standard choice for temperature
60 motcles[3] = "divergence_vitesse"; // Type of field obtained by computing div v
61 motcles[4] = "gradient_pression"; // Type of field obtained by computing grad P
62 motcles[5] = "champ_elem"; // Create a field at elements (of type P0)
63 motcles[6] = "champ_sommets"; // Create a field at vertices (type P1)
64
65 // The velocity field type depends on the element type:
66 Nom type_champ_vitesse("Champ_Face_PolyMAC_CDO");
67 Nom type_elem("Champ_Elem_PolyMAC_CDO");
68 Nom type;
69 int default_nb_comp = 0; // Default value of the number of components
70 int rang = motcles.search(directive);
71 switch(rang)
72 {
73 case 0:
74 case 4:
75 type = type_champ_vitesse;
76 default_nb_comp = 3;
77 break;
78 case 1:
79 case 2:
80 case 3:
81 case 5:
82 type = type_elem;
83 default_nb_comp = 1;
84 break;
85 default:
86 assert(rang < 0);
87 break;
88 }
89
90 if (directive == DEMANDE_DESCRIPTION)
91 Cerr << "PolyMAC_CDO_discretisation : " << motcles;
92
93 if (sous_type != NOM_VIDE)
94 rang = verifie_sous_type(type, sous_type, directive);
95
96 // If the directive was not understood (or if it is a demande_description)
97 // call the parent class:
98 if (rang < 0)
99 {
100 Discret_Thyd::discretiser_champ(directive, z, nature, noms, unites, nb_comp, nb_pas_dt, temps, champ);
101 return;
102 }
103
104 // Compute the number of degrees of freedom
105 int nb_ddl = 0;
106 if (type.debute_par(type_elem))
107 nb_ddl = z.nb_elem() + domaine_PolyMAC_CDO.nb_faces();
108 else if (type.debute_par(type_champ_vitesse))
109 nb_ddl = domaine_PolyMAC_CDO.nb_faces() + (dimension < 3 ? domaine_PolyMAC_CDO.nb_som() : domaine_PolyMAC_CDO.domaine().nb_aretes());
110 else if (type.debute_par("Champ_Som_PolyMAC_CDO"))
111 nb_ddl = domaine_PolyMAC_CDO.nb_som();
112 else
113 assert(0);
114
115 if (nb_comp < 0)
116 nb_comp = default_nb_comp;
117 assert(nb_comp > 0);
118 creer_champ(champ, z, type, noms[0], unites[0], nb_comp, nb_ddl, nb_pas_dt, temps, directive, que_suis_je());
119 if (nature == multi_scalaire)
120 {
121 champ->fixer_nature_du_champ(nature);
122 champ->fixer_unites(unites);
123 champ->fixer_noms_compo(noms);
124 }
125}
126
127/*! @brief Same as PolyMAC_CDO_discretisation::discretiser_champ(.
128 *
129 * @brief .. , Champ_Inc)
130 *
131 */
132void PolyMAC_CDO_discretisation::discretiser_champ(const Motcle& directive, const Domaine_dis_base& z, Nature_du_champ nature, const Noms& noms, const Noms& unites, int nb_comp, double temps,
133 OWN_PTR(Champ_Fonc_base)& champ) const
134{
135 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
136}
137
138/*! @brief Same as PolyMAC_CDO_discretisation::discretiser_champ(.
139 *
140 * @brief .. , Champ_Inc)
141 *
142 */
143void PolyMAC_CDO_discretisation::discretiser_champ(const Motcle& directive, const Domaine_dis_base& z, Nature_du_champ nature, const Noms& noms, const Noms& unites, int nb_comp, double temps,
144 OWN_PTR(Champ_Don_base)& champ) const
145{
146 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
147}
148
149/*! @brief Same as PolyMAC_CDO_discretisation::discretiser_champ(.
150 *
151 * @brief .. , Champ_Inc) Common processing for champ_fonc and champ_don.
152 * This method is private (passing an Objet_U is not clean from
153 * the outside ...)
154 *
155 */
156void PolyMAC_CDO_discretisation::discretiser_champ_fonc_don(const Motcle& directive, const Domaine_dis_base& z, Nature_du_champ nature, const Noms& noms, const Noms& unites, int nb_comp, double temps,
157 Objet_U& champ) const
158{
159 // Two pointers for easy access to champ_don or champ_fonc, depending on the type of the champ object.
160 OWN_PTR(Champ_Fonc_base) * champ_fonc = dynamic_cast<OWN_PTR(Champ_Fonc_base)*>(&champ);
161 OWN_PTR(Champ_Don_base) * champ_don = dynamic_cast<OWN_PTR(Champ_Don_base)*>(&champ);
162
163 const Domaine_PolyMAC_CDO& domaine_PolyMAC_CDO = ref_cast(Domaine_PolyMAC_CDO, z);
164
165 Motcles motcles(8);
166 motcles[0] = "pression"; // Standard choice for pressure
167 motcles[1] = "temperature"; // Standard choice for temperature
168 motcles[2] = "divergence_vitesse"; // Type of field obtained by computing div v
169 motcles[3] = "champ_elem"; // Create a field at elements (of type P0)
170 motcles[6] = "champ_sommets"; // Create a field at elements (of type P1)
171 motcles[4] = "vitesse"; // Standard choice for velocity
172 motcles[7] = "champ_face"; // Standard choice for velocity
173 motcles[5] = "gradient_pression"; // Type of field obtained by computing grad P
174
175 // The velocity field type depends on the element type:
176 Nom type_champ_vitesse("Champ_Fonc_Face_PolyMAC_CDO");
177 Nom type_elem("Champ_Fonc_Elem_PolyMAC_CDO");
178
179 Nom type;
180 int default_nb_comp = 0; // Default value of the number of components
181 int rang = motcles.search(directive);
182 switch(rang)
183 {
184 case 0:
185 case 1:
186 case 2:
187 case 3:
188 type = type_elem;
189 default_nb_comp = 1;
190 break;
191 case 4:
192 case 5:
193 case 7:
194 type = type_champ_vitesse;
195 default_nb_comp = 3;
196 break;
197 case 6:
198 type = "Champ_Fonc_Som_PolyMAC_CDO";
199 default_nb_comp = 1;
200 break;
201 default:
202 assert(rang < 0);
203 break;
204 }
205
206 if (directive == DEMANDE_DESCRIPTION)
207 Cerr << "PolyMAC_CDO_discretisation : " << motcles;
208
209 // If the directive was not understood (or if it is a demande_description)
210 // call the parent class:
211 if (rang < 0)
212 {
213 if (champ_fonc)
214 Discret_Thyd::discretiser_champ(directive, z, nature, noms, unites, nb_comp, temps, *champ_fonc);
215 else
216 Discret_Thyd::discretiser_champ(directive, z, nature, noms, unites, nb_comp, temps, *champ_don);
217 return;
218 }
219
220 // Compute the number of degrees of freedom
221 int nb_ddl = 0;
222 if (type == "Champ_Fonc_Elem_PolyMAC_CDO")
223 nb_ddl = z.nb_elem();
224 else if (type == type_champ_vitesse)
225 nb_ddl = domaine_PolyMAC_CDO.nb_faces();
226 else if (type == "Champ_Fonc_Som_PolyMAC_CDO")
227 nb_ddl = domaine_PolyMAC_CDO.nb_som();
228 else
229 assert(0);
230
231 // If it is a multi-scalar field, handle accordingly!
232 if (nb_comp < 0)
233 nb_comp = default_nb_comp;
234 if (champ_fonc)
235 creer_champ(*champ_fonc, z, type, noms[0], unites[0], nb_comp, nb_ddl, temps, directive, que_suis_je());
236 else
237 creer_champ(*champ_don, z, type, noms[0], unites[0], nb_comp, nb_ddl, temps, directive, que_suis_je());
238 if ((nature == multi_scalaire) && (champ_fonc))
239 {
240 champ_fonc->valeur().fixer_nature_du_champ(nature);
241 champ_fonc->valeur().fixer_unites(unites);
242 champ_fonc->valeur().fixer_noms_compo(noms);
243 }
244 else if ((nature == multi_scalaire) && (champ_don))
245 {
246 Cerr << "There is no field of type OWN_PTR(Champ_Don_base) with a multi_scalaire nature." << finl;
247 exit();
248 }
249}
250
252{
253 Cerr << "Discretization of the wall distance" << finl;
254 Domaine_PolyMAC_CDO& domaine_PolyMAC_CDO = ref_cast(Domaine_PolyMAC_CDO, z);
255 ch.typer("Champ_Fonc_Elem_PolyMAC_CDO");
256 Champ_Fonc_Elem_PolyMAC_CDO& ch_dist_paroi = ref_cast(Champ_Fonc_Elem_PolyMAC_CDO, ch.valeur());
257 ch_dist_paroi.associer_domaine_dis_base(domaine_PolyMAC_CDO);
258 ch_dist_paroi.nommer("distance_paroi");
259 ch_dist_paroi.fixer_nb_comp(1);
260 ch_dist_paroi.fixer_nb_valeurs_nodales(domaine_PolyMAC_CDO.nb_elem());
261 ch_dist_paroi.fixer_unite("m");
262 ch_dist_paroi.changer_temps(sch.temps_courant());
263}
264
265
266/*! @brief Discretizes the incompressible fluid in PolyMAC_CDO, i.e., K and N.
267 *
268 * @brief Postcondition: the method does not modify the object.
269 *
270 * @param (Domaine_dis_base&) domain to discretize
271 * @param (Fluide_Ostwald&) fluid to discretize
272 * @param (Champ_Inc_base&) ch_vitesse
273 * @param (Champ_Inc_base&) temperature
274 */
275
276void PolyMAC_CDO_discretisation::grad_u(const Domaine_dis_base& z, const Domaine_Cl_dis_base& zcl, const Champ_Inc_base& ch_vitesse, OWN_PTR(Champ_Fonc_base)& ch) const
277{
278 const Champ_Face_PolyMAC_CDO& vit = ref_cast(Champ_Face_PolyMAC_CDO, ch_vitesse);
279 const Domaine_PolyMAC_CDO& domaine_poly = ref_cast(Domaine_PolyMAC_CDO, z);
280 const Domaine_Cl_PolyMAC_family& domaine_cl_poly = ref_cast(Domaine_Cl_PolyMAC_family, zcl);
281 ch.typer("grad_U_Champ_Face_PolyMAC_CDO");
282 grad_U_Champ_Face_PolyMAC_CDO& ch_grad_u = ref_cast(grad_U_Champ_Face_PolyMAC_CDO, ch.valeur());
283 ch_grad_u.associer_domaine_dis_base(domaine_poly);
284 ch_grad_u.associer_domaine_Cl_dis_base(domaine_cl_poly);
285 ch_grad_u.associer_champ(vit);
286 ch_grad_u.nommer("gradient_vitesse");
287 ch_grad_u.fixer_nb_comp(dimension * dimension);
288
289 if (dimension == 2)
290 {
291 ch_grad_u.fixer_nom_compo(0, "dUdX"); // du/dx
292 ch_grad_u.fixer_nom_compo(1, "dUdY"); // du/dy
293 ch_grad_u.fixer_nom_compo(2, "dVdX"); // dv/dx
294 ch_grad_u.fixer_nom_compo(3, "dVdY"); // dv/dy
295 }
296 else
297 {
298 ch_grad_u.fixer_nom_compo(0, "dUdX"); // du/dx
299 ch_grad_u.fixer_nom_compo(1, "dUdY"); // du/dy
300 ch_grad_u.fixer_nom_compo(2, "dUdZ"); // du/dz
301 ch_grad_u.fixer_nom_compo(3, "dVdX"); // dv/dx
302 ch_grad_u.fixer_nom_compo(4, "dVdY"); // dv/dy
303 ch_grad_u.fixer_nom_compo(5, "dVdZ"); // dv/dz
304 ch_grad_u.fixer_nom_compo(6, "dWdX"); // dw/dx
305 ch_grad_u.fixer_nom_compo(7, "dWdY"); // dw/dy
306 ch_grad_u.fixer_nom_compo(8, "dWdZ"); // dw/dz
307 }
308 ch_grad_u.fixer_nature_du_champ(vectoriel);
309 ch_grad_u.fixer_nb_valeurs_nodales(domaine_poly.nb_elem());
310 ch_grad_u.fixer_unite("s-1");
311 ch_grad_u.changer_temps(ch_vitesse.temps());
312}
313
314void PolyMAC_CDO_discretisation::modifier_champ_tabule(const Domaine_dis_base& domaine_poly, Champ_Fonc_Tabule& lambda_tab, const VECT(OBS_PTR(Champ_base)) &champs_param) const
315{
316 lambda_tab.typer_champ_tabule_discretise("Champ_Fonc_Tabule_Elem_PolyMAC_CDO");
317 Champ_Fonc_base& lambda_tab_dis = lambda_tab.le_champ_tabule_discretise();
318 Champ_Fonc_Tabule_Elem_PolyMAC_CDO& ch_tab_lambda_dis = ref_cast(Champ_Fonc_Tabule_Elem_PolyMAC_CDO, lambda_tab_dis);
319 //ch_tab_lambda_dis.nommer(nom_champ);
320 ch_tab_lambda_dis.associer_domaine_dis_base(domaine_poly);
321 ch_tab_lambda_dis.associer_param(champs_param, lambda_tab.table());
322 ch_tab_lambda_dis.fixer_nb_comp(lambda_tab.nb_comp());
323 ch_tab_lambda_dis.fixer_nb_valeurs_nodales(domaine_poly.nb_elem());
324 // ch_tab_lambda_dis.fixer_unite(unite);
325 ch_tab_lambda_dis.changer_temps(champs_param[0]->temps());
326}
327
328Nom PolyMAC_CDO_discretisation::get_name_of_type_for(const Nom& class_operateur, const Nom& type_operateur, const Equation_base& eqn, const OBS_PTR(Champ_base) &champ_sup) const
329{
330 Nom type;
331 if (class_operateur == "Source")
332 {
333 type = type_operateur;
334 Nom champ = (eqn.inconnue().que_suis_je());
335 champ.suffix("Champ");
336 type += champ;
337 //type+="_PolyMAC_CDO";
338 return type;
339
340 }
341 else if (class_operateur == "Solveur_Masse")
342 {
343 Nom type_ch = eqn.inconnue().que_suis_je();
344 if (type_ch.debute_par("Champ_Elem"))
345 type_ch = "_Elem";
346
347 if (type_ch.debute_par("Champ_Face"))
348 type_ch = "_Face";
349
350 type = "Masse_PolyMAC_CDO";
351 type += type_ch;
352 }
353 else if (class_operateur == "Operateur_Grad")
354 {
355 type = "Op_Grad_PolyMAC_CDO_Face";
356 }
357 else if (class_operateur == "Operateur_Div")
358 {
359 type = "Op_Div_PolyMAC_CDO";
360 }
361
362 else if (class_operateur == "Operateur_Diff")
363 {
364 Nom type_ch = eqn.inconnue().que_suis_je();
365 if (type_ch.debute_par("Champ_Elem"))
366 type_ch = "_Elem";
367
368 if (type_ch.debute_par("Champ_Face"))
369 type_ch = "_Face";
370
371 type = "Op_Diff";
372 if (type_operateur != "")
373 {
374 type += "_";
375 type += type_operateur;
376 }
377 type += "_PolyMAC_CDO";
378 type += type_ch;
379 }
380 else if (class_operateur == "Operateur_Conv")
381 {
382 type = "Op_Conv_";
383 type += type_operateur;
384 Nom tiret = "_";
385 type += tiret;
386 type += que_suis_je();
387 Nom type_ch = eqn.inconnue().que_suis_je();
388 if (type_ch.debute_par("Champ_Elem"))
389 type += "_Elem";
390 if (type_ch.debute_par("Champ_Face"))
391 type += "_Face";
392 }
393
394 else
395 return Discret_Thyd::get_name_of_type_for(class_operateur, type_operateur, eqn);
396
397 return type;
398}
399
401{
402 Cerr << "Discretization of global wall distance" << finl;
403 Noms noms(1), unites(1);
404 noms[0] = Nom("distance_paroi_globale");
405 unites[0] = Nom("m");
406 discretiser_champ(Motcle("champ_elem"), z, scalaire, noms, unites, 1, 0, ch);
407}
class Champ_Don_base base class of Given Fields (not calculated)
int fixer_nb_valeurs_nodales(int n) override
Sets the number of degrees of freedom per component.
void associer_param(const VECT(OBS_PTR(Champ_base))&, const Table &)
Class Champ_Fonc_Tabule Derived class of Champ_Fonc_base representing.
const Table & table() const
void typer_champ_tabule_discretise(const Nom &typ)
const Champ_Fonc_base & le_champ_tabule_discretise() const
Returns the computed tabulated field.
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
void associer_domaine_dis_base(const Domaine_dis_base &) override
Class Champ_Inc_base.
class Champ_base This class is the base of the fields hierarchy.
Definition Champ_base.h:43
virtual double changer_temps(const double t)
Sets the time at which the field is defined.
double temps() const
Returns the time of the field.
class Discret_Thyd This class is the base class representing a discretization
OBS_PTR(Domaine) le_domaine_
static void creer_champ(OWN_PTR(Champ_Inc_base)&ch, const Domaine_dis_base &z, const Nom &type, const Nom &nom, const Nom &unite, int nb_comp, int nb_ddl, int nb_pas_dt, double temps, const Nom &directive=NOM_VIDE, const Nom &nom_discretisation=NOM_VIDE)
Static method that creates an OWN_PTR(Champ_Inc_base) of the specified type.
virtual Nom get_name_of_type_for(const Nom &class_operateur, const Nom &type_operteur, const Equation_base &eqn, const OBS_PTR(Champ_base)&champ_supp=OBS_PTR(Champ_base)()) const
Fills the Nom type depending on the class of operator, the type of operator and the equation.
static const Nom NOM_VIDE
static const Motcle DEMANDE_DESCRIPTION
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
int verifie_sous_type(Nom &type, const Nom &sous_type, const Motcle &directive) const
int_t nb_aretes() const
Returns the number of real edges.
Definition Domaine.h:143
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
int nb_faces() const
Returns the total number of faces.
Definition Domaine_VF.h:471
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class Equation_base The role of an equation is the calculation of one or more fields....
virtual const Champ_Inc_base & inconnue() const =0
virtual void fixer_nb_comp(int i)
Sets the number of components of the field.
void nommer(const Nom &) override
Gives a name to the field.
virtual const Nom & fixer_unite(const Nom &)
Specifies the unit of a scalar field or whose all components have the same unit.
virtual Nature_du_champ fixer_nature_du_champ(Nature_du_champ nat)
Sets the nature of a field: scalar, multiscalar, vectorial.
virtual int nb_comp() const
Definition Field_base.h:56
virtual const Nom & fixer_nom_compo(int, const Nom &)
Sets the name of the i-th component of the field.
A character string (Nom) in uppercase.
Definition Motcle.h:26
An array of Motcle objects.
Definition Motcle.h:63
int search(const Motcle &t) const
Definition Motcle.cpp:319
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
virtual int debute_par(const char *const n) const
Definition Nom.cpp:314
Nom & suffix(const char *const)
Suffix extraction: Nom x("azerty");.
Definition Nom.cpp:266
An array of character strings (VECT(Nom)).
Definition Noms.h:26
Base class for TRUST objects (Objet_U).
Definition Objet_U.h:68
static int dimension
Definition Objet_U.h:94
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
void distance_paroi_globale(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Fonc_base)&) const override
void distance_paroi(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Fonc_base)&) const
void grad_u(const Domaine_dis_base &z, const Domaine_Cl_dis_base &zcl, const Champ_Inc_base &ch_vitesse, OWN_PTR(Champ_Fonc_base)&ch) const override
Discretizes the incompressible fluid in PolyMAC_CDO, i.e., K and N.
Nom get_name_of_type_for(const Nom &class_operateur, const Nom &type_operateur, const Equation_base &eqn, const OBS_PTR(Champ_base) &champ_sup) const override
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, Nature_du_champ nature, const Noms &nom, const Noms &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const override
Discretizes a field for PolyMAC_CDO based on a discretization directive.
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.
Base class for output streams.
Definition Sortie.h:52
void associer_champ(const Champ_Face_PolyMAC_CDO &)
void associer_domaine_Cl_dis_base(const Domaine_Cl_dis_base &)