TRUST 1.9.8
HPC thermohydraulic platform
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 Discretisation d'un champ pour le PolyMAC_CDO en fonction d'une directive de discretisation.
40 *
41 * La directive est un Motcle comme "vitesse", "pression",
42 * "temperature", "champ_elem" (cree un champ de type P0), ...
43 * Cette methode determine le type du champ a creer en fonction du type d'element
44 * et de la directive de discretisation. Elle determine ensuite le nombre de ddl
45 * et fixe l'ensemble des parametres du champ (type, nb_compo, nb_ddl, nb_pas_dt,
46 * nom(s), unite(s) et nature du champ) et associe la Domaine_dis au champ.
47 * Voir le code pour avoir la correspondance entre les directives et
48 * le type de champ cree.
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"; // Choix standard pour la vitesse
58 motcles[1] = "pression"; // Choix standard pour la pression
59 motcles[2] = "temperature"; // Choix standard pour la temperature
60 motcles[3] = "divergence_vitesse"; // Le type de champ obtenu en calculant div v
61 motcles[4] = "gradient_pression"; // Le type de champ obtenu en calculant grad P
62 motcles[5] = "champ_elem"; // Creer un champ aux elements (de type P0)
63 motcles[6] = "champ_sommets"; // Creer un champ aux sommets (type P1)
64
65 // Le type de champ de vitesse depend du type d'element :
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; // Valeur par defaut du nombre de composantes
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 // Si on n'a pas compris la directive (ou si c'est une demande_description)
97 // alors on appelle l'ancetre :
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 // Calcul du nombre de ddl
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 Idem que PolyMAC_CDO_discretisation::discretiser_champ(.
128 *
129 * .. , 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 Idem que PolyMAC_CDO_discretisation::discretiser_champ(.
139 *
140 * .. , 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 Idem que PolyMAC_CDO_discretisation::discretiser_champ(.
150 *
151 * .. , Champ_Inc) Traitement commun aux champ_fonc et champ_don.
152 * Cette methode est privee (passage d'un Objet_U pas propre vu
153 * de l'exterieur ...)
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 // Deux pointeurs pour acceder facilement au champ_don ou au champ_fonc, suivant le type de l'objet champ.
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"; // Choix standard pour la pression
167 motcles[1] = "temperature"; // Choix standard pour la temperature
168 motcles[2] = "divergence_vitesse"; // Le type de champ obtenu en calculant div v
169 motcles[3] = "champ_elem"; // Creer un champ aux elements (de type P0)
170 motcles[6] = "champ_sommets"; // Creer un champ aux elements (de type P1)
171 motcles[4] = "vitesse"; // Choix standard pour la vitesse
172 motcles[7] = "champ_face"; // Choix standard pour la vitesse
173 motcles[5] = "gradient_pression"; // Le type de champ obtenu en calculant grad P
174
175 // Le type de champ de vitesse depend du type d'element :
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; // Valeur par defaut du nombre de composantes
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 // Si on n'a pas compris la directive (ou si c'est une demande_description)
210 // alors on appelle l'ancetre :
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 // Calcul du nombre de ddl
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 // Si c'est un champ multiscalaire, uh !
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 << "Discretisation de la distance paroi" << 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 discretise en PolyMAC_CDO le fluide incompressible, donc K e N
267 *
268 * Postcondition: la methode ne modifie pas l'objet
269 *
270 * @param (Domaine_dis_base&) domaine a discretiser
271 * @param (Fluide_Ostwald&) fluide a discretiser
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 << "Discretisation de distance paroi globale" << 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}
classe Champ_Don_base classe de base des Champs donnes (non calcules)
int fixer_nb_valeurs_nodales(int n) override
Fixe le nombre de degres de liberte par composante.
void associer_param(const VECT(OBS_PTR(Champ_base))&, const Table &)
Classe Champ_Fonc_Tabule Classe derivee de Champ_Fonc_base qui represente les.
const Table & table() const
void typer_champ_tabule_discretise(const Nom &typ)
const Champ_Fonc_base & le_champ_tabule_discretise() const
Renvoie le champ tabule calcule.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
void associer_domaine_dis_base(const Domaine_dis_base &) override
Classe Champ_Inc_base.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
virtual double changer_temps(const double t)
Fixe le temps auquel se situe le champ.
double temps() const
Renvoie le temps du champ.
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
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)
Methode statique qui cree un OWN_PTR(Champ_Inc_base) du type specifie.
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
remplit le Nom type en focntion de la classe de operateur, du type de l'operateur et de l'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
Renvoie le nombre d'aretes reelles.
Definition Domaine.h:143
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Champ_Inc_base & inconnue() const =0
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
void nommer(const Nom &) override
Donne un nom au champ.
virtual const Nom & fixer_unite(const Nom &)
Specifie l'unite d'un champ scalaire ou dont toutes les composantes ont la meme unite.
virtual Nature_du_champ fixer_nature_du_champ(Nature_du_champ nat)
Fixer la nature d'un champ: scalaire, multiscalaire, vectoriel.
virtual int nb_comp() const
Definition Field_base.h:56
virtual const Nom & fixer_nom_compo(int, const Nom &)
Fixe le nom de la i-eme composante du champ.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Un tableau d'objets de la classe Motcle.
Definition Motcle.h:63
int search(const Motcle &t) const
Definition Motcle.cpp:321
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
virtual int debute_par(const char *const n) const
Definition Nom.cpp:319
Nom & suffix(const char *const)
Extraction de suffixe : Nom x("azerty");.
Definition Nom.cpp:271
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
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 Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
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
discretise en PolyMAC_CDO le fluide incompressible, donc K e 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
Discretisation d'un champ pour le PolyMAC_CDO en fonction d'une directive de discretisation.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
class Schema_Temps_base
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
Definition Sortie.h:52
void associer_champ(const Champ_Face_PolyMAC_CDO &)
void associer_domaine_Cl_dis_base(const Domaine_Cl_dis_base &)