TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_Generique_refChamp.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 <Champ_Generique_refChamp.h>
17#include <Champ_Inc_P0_base.h>
18#include <Champ_Inc_P1_base.h>
19#include <Champ_Fonc_P0_base.h>
20#include <Champ_Fonc_P1_base.h>
21#include <Domaine_VF.h>
22#include <Champ_Uniforme.h>
23#include <Champ_Inc_Q1_base.h>
24#include <Champ_Fonc_Q1_base.h>
25#include <Equation_base.h>
26#include <Synonyme_info.h>
27#include <Param.h>
28#include <Postraitement.h>
29
30Implemente_instanciable(Champ_Generique_refChamp,"refChamp",Champ_Generique_base);
31// XD refchamp champ_generique_base refchamp INHERITS_BRACE Field of prolem
32
33Add_synonym(Champ_Generique_refChamp,"Champ_Post_refChamp");
34
36{
37 return os;
38}
39
41{
43}
44
45/*! @brief pb_champ : declenche la lecture du nom du probleme (nom_pb_) auquel appartient le champ discret et le nom de ce champ discret (nom_champ_)
46 *
47 * nom_source : option pour nommer le champ en tant que source (sinon nommer par defaut)
48 *
49 */
51{
52 param.ajouter_non_std("nom_source",(this)); // XD attr nom_source chaine nom_source OPT The alias name for the field
53 param.ajouter_non_std("Pb_champ",(this),Param::REQUIRED); // XD attr pb_champ deuxmots pb_champ REQ { Pb_champ nom_pb
54 // XD_CONT nom_champ } : nom_pb is the problem name and nom_champ is the selected field name.
55}
56
58{
59 if (mot=="Pb_champ")
60 {
61 // Lecture du nom du probleme et du nom du champ
62 is >> nom_pb_ >> nom_champ_;
63 // Recherche du probleme parmi les objets connus de l'interprete
64 const Objet_U& ob = interprete().objet(nom_pb_);
65 if (!sub_type(Probleme_base, ob))
66 {
67 Cerr << "Error in Champ_Generique_refChamp ::lire(keyword=\"pb_champ\"\n"
68 << " The object " << nom_pb_ << " is not a Probleme_base" << finl;
69 exit();
70 }
71 Probleme_base& pb = ref_cast_non_const(Probleme_base, ob);
72 ref_pb_ = pb;
73 // Recherche du champ "nom_champ" dans le probleme:
74 OBS_PTR(Champ_base) ref_champ;
75 Noms liste_noms;
76 pb.get_noms_champs_postraitables(liste_noms);
78 ref_champ = pb.get_champ(nom_champ_);
79 ref_champ->corriger_unite_nom_compo();
80 set_ref_champ(ref_champ.valeur());
81 return 1;
82 }
83 else if (mot=="nom_source")
84 {
85 Nom id_source;
86 is >> id_source;
87 nommer(id_source);
88 return 1;
89 }
90 else
92}
93
94/*! @brief On initialise la classe avec le champ en parametre.
95 *
96 * On prend une ref a ce champ (il doit rester valable ensuite).
97 *
98 */
100{
101 ref_champ_ = champ;
102}
103
104/*! @brief Renvoie le nombre de coordonnees de chaque sommet du domaine.
105 *
106 * Voir GenericField_base::get_dimension()
107 *
108 */
110{
111 // Je n'utilise pas Objet_U::dimension expres car j'espere supprimer
112 // cette variable statique bientot.
113 const DoubleTab coords = get_ref_coordinates();
114 const int dim = coords.dimension(1);
115 return dim;
116}
117
119{
120 list.add("nom");
121 list.add("nom_cible");
122 list.add("unites");
123 list.add("composantes");
124 list.add("synonyms");
125}
126
128{
129
130 Motcles motcles(5);
131 motcles[0] = "nom";
132 motcles[1] = "nom_cible";
133 motcles[2] = "unites";
134 motcles[3] = "composantes";
135 motcles[4] = "synonyms";
136
137 int rang = motcles.search(query);
138 switch(rang)
139 {
140 case 0:
141 {
142 Noms mots(1);
143 mots[0] = nom_post_;
144 return mots;
145 }
146 case 1:
147 {
148 Noms mots(1);
149 mots[0] = nom_champ_;
150 return mots;
151 }
152 case 2 :
153 {
154 const Noms mots0= get_ref_champ_base().unites();
155 ref_cast_non_const(Champ_base,get_ref_champ_base()).corriger_unite_nom_compo();
156 const Noms mots = get_ref_champ_base().unites();
157 if (mots.size()!=mots0.size())
158 {
159 Cerr<<"iuuuuuu"<<mots<<" "<<mots0<<finl;
160 exit();
161 }
162 for (int i=0; i<mots.size(); i++)
163 {
164 if (mots0[i]!=mots[i])
165 {
166 Cerr <<" iiiiiiiiii"<<mots0[i]<< " "<<mots[i]<<finl;
167 exit();
168 }
169 }
170 return mots;
171 }
172 case 4 :
173 {
174 if (syno_.size()>0)
175 return syno_;
176
177 const Noms mots = get_ref_champ_base().get_synonyms();
178
179 return mots;
180 }
181 case 3 :
182 {
183 if (compo_.size()>1)
184 return compo_;
185
186 const Noms mots = get_ref_champ_base().noms_compo();
187 int nb_comp = mots.size();
188
189 Noms compo(nb_comp);
190 for (int i=0; i<nb_comp; i++)
191 {
192 Nom nume(i);
193 compo[i] = nom_post_+nume;
194 }
195 return compo;
196 }
197 default :
198 {
199 Cerr<<"The identifiable properties are : "<<motcles<<finl;
200 exit();
201 }
202 }
203 //Pour compilation
204 // On n'arrive jamais ici
205 return get_property(query);
206
207}
208
209/*! @brief Si le champ n'est pas un champ discret : exception Champ_Generique_erreur("INVALID") Sinon, renvoie la localisation du champ pour le support "index".
210 *
211 * Si index == -1 (valeur par defaut), leve une exception si le champ est multisupport.
212 * Sinon, leve une exception si l'index est superieur au nombre de localisations du champ.
213 *
214 */
216{
217 Entity loc;
218 //Pour initialisation
219 loc =Entity::NODE;
220
221 const Champ_base& ch = get_ref_champ_base();
222 const Domaine_dis_base& z_dis_base = get_ref_domaine_dis_base();
223
224 // Champs discrets a une seule localisation :
225 if ((sub_type(Champ_Inc_P0_base, ch) || sub_type(Champ_Fonc_P0_base, ch)) && index <= 0)
226 {
227 loc = Entity::ELEMENT;
228 }
229 else if ((sub_type(Champ_Inc_P1_base, ch)|| sub_type(Champ_Fonc_P1_base, ch)) && index <= 0)
230 {
231 loc = Entity::NODE;
232 }
233 else if ((ch.que_suis_je().debute_par("Champ_Face_PolyMAC")
234 || ch.que_suis_je().debute_par("Champ_Fonc_Face_PolyMAC")
235 || ch.valeurs().dimension(0) == ref_cast(Domaine_VF,z_dis_base).nb_faces()) && index <= 0)
236 {
237 loc = Entity::FACE;
238 }
239 else
240 {
241 // Champs discrets a plusieurs localisations
242 Nom message="Invalid localization used for postprocessing the field ";
243 message+=ch.le_nom()+". Change your data file.";
244 throw Champ_Generique_erreur(message);
245 }
246 return loc;
247}
248
249/*! @brief Verifie que le champ est bien un champ discret et renvoie le tableau de valeurs.
250 *
251 * Sinon, leve l'exception Champ_Generique_erreur("NO_REF")
252 *
253 */
255{
256 // Appel a get_localisation pour verifier que le champ est bien un champ discret
257 // (multi-support ou non)
259 // Renvoie les valeurs du champ
260 const DoubleTab& val = get_ref_champ_base().valeurs();
261 return val;
262}
263
264/*! @brief Cree une copie du tableau de valeurs Voir GenericField_base::get_copy_values()
265 *
266 */
267void Champ_Generique_refChamp::get_copy_values(DoubleTab& values) const
268{
269 const DoubleTab& val = get_ref_values();
270 // Cree une copie du tableau
271 values = val;
272}
273
274/*! @brief appel a Champ_base::valeur_aux()
275 *
276 */
277void Champ_Generique_refChamp::get_xyz_values(const DoubleTab& coords, DoubleTab& values, ArrOfBit& validity_flag) const
278{
279 throw Champ_Generique_erreur("NOT_IMPLEMENTED");
280}
281
283{
284 const Champ_base& ch = get_ref_champ_base();
285 if (sub_type(Champ_Inc_base,ch))
286 return ref_cast(Champ_Inc_base,ch).equation().domaine_Cl_dis();
287 else
288 {
289 Cerr<<"No zcl_dis is available for the field "<<ch.que_suis_je()<<finl;
290 exit();
291 }
292
293 //Pour compilation
294 return get_ref_zcl_dis_base();
295}
296
298{
299 const DoubleTab& coord = get_ref_domain().coord_sommets();
300 return coord;
301}
302
303void Champ_Generique_refChamp::get_copy_coordinates(DoubleTab& coordinates) const
304{
305 const DoubleTab& coord = get_ref_coordinates();
306 coordinates = coord;
307}
308
309const IntTab& Champ_Generique_refChamp::get_ref_connectivity(Entity index1, Entity index2) const
310{
311 const Champ_base& ch = get_ref_champ_base();
312 const Domaine_dis_base& domaine_dis_base = ch.domaine_dis_base();
313 const Domaine& domaine = domaine_dis_base.domaine();
314 const Domaine_VF& domaine_vf = ref_cast(Domaine_VF, domaine_dis_base);
315
316 switch(index1)
317 {
318 case Entity::ELEMENT:
319 {
320 switch(index2)
321 {
322 case Entity::NODE:
323 return domaine.les_elems();
324 case Entity::FACE:
325 return domaine_vf.elem_faces();
326 default :
327 {
328 exit();
329 }
330 }
331 break;
332 }
333 case Entity::FACE:
334 {
335 switch(index2)
336 {
337 case Entity::NODE:
338 return domaine_vf.face_sommets();
339 case Entity::ELEMENT:
340 return domaine_vf.face_voisins();
341 default :
342 {
343 exit();
344 }
345 }
346 break;
347 }
348 default :
349 {
350 exit();
351 }
352 }
353 Nom message="Invalid localization used for postprocessing the field ";
354 message+=ch.le_nom()+". Change your data file.";
355 throw Champ_Generique_erreur(message);
356}
357
358void Champ_Generique_refChamp::get_copy_connectivity(Entity index1, Entity index2, IntTab& tab) const
359{
360 const IntTab& connectivity = get_ref_connectivity(index1, index2);
361 tab = connectivity;
362}
363
364// Renvoie le probleme qui porte le champ cible
366{
367 return ref_pb_.valeur();
368}
369
370/*! @brief Renvoie le champ_base sous-jacent.
371 *
372 * Teste si le champ a bien ete associe. A terme, cette methode disparaitra de la classe GenericField_base mais reste
373 * dans celle-ci (on y teste si le champ a ete associe).
374 * Exceptions:
375 * Champ_Generique_erreur("NOT_INITIALIZED")
376 *
377 */
379{
380 if (!ref_champ_)
381 throw Champ_Generique_erreur("NOT_INITIALIZED");
382 return ref_champ_.valeur();
383}
384
386{
387 ref_champ_.reset();
389}
390
395
396/*! @brief Voir Champ_Generique_base::mettre_a_jour Si le champ est champ_inc dans l'equation, il doit deja avoir
397 *
398 * ete mis a jour par l'equation.
399 * Si c est un clacule, l actualisation est faite dans get_champ
400 *
401 */
403{
404
405}
406
407/*! @brief Voir Champ_Generique_base::get_champ.
408 *
409 * Ici, l'espace_stockage n'est pas utilise, le champ existe deja
410 *
411 */
413{
414 const Nom& nom_cible = get_ref_champ_base().le_nom();
415 ref_pb_->get_champ(nom_cible);
416 return get_ref_champ_base();
417}
418
420{
421 return get_champ(espace_stockage);
422}
423
424/*! @brief Associe le champ et determine sa localisation.
425 *
426 */
428{
429 assert(!ref_champ_);
430 ref_champ_ = champ;
431
432 // Determination de la localisation du champ
433 // On code quelques champs de types connus...
434 // Pour les autres, il faut les interpoler quelque part.
435 // L'ideal serait la localisation soit une propriete du champ discret lui-meme.
436
437 Nom type = champ.que_suis_je();
438 type.majuscule();
439
440 if (type.debute_par("CHAMP_P0"))
441 {
442 localisation_ = "ELEMENTS";
443 }
444 else if (type == "CHAMP_P1")
445 {
446 localisation_ = "SOMMETS";
447 }
448 else if (type.debute_par("CHAMP_FACE"))
449 {
450 localisation_ = "FACES";
451 }
452 else if (type == "CHAMP_P1NC")
453 {
454 localisation_ = "FACES";
455 }
456 else
457 {
458 localisation_ = "LOCALISATION_INCONNUE";
459 }
460}
461
462//Renvoie le temps du champ cible
464{
465 double temps;
466 temps = get_ref_champ_base().temps();
467 return temps;
468}
469
470//Renvoie la directive (champ_elem, champ_sommets, champ_face ou pression)
471//pour lancer la discretisation de l espace de stockage rendu par
472//la methode get_champ() du Champ_Generique_base qui a lance l appel de cette methode
474{
475 Motcle directive;
476 const Champ_base& ch = get_ref_champ_base();
477
478 // Champs discrets a une seule localisation :
479 if (sub_type(Champ_Inc_P0_base,ch) || sub_type(Champ_Fonc_P0_base,ch))
480 directive = ch.is_basis_function() ? "champ_elem_DG" : (ch.is_quadrature() ? "champ_fonc_quad_DG" : "champ_elem");
481 else if (sub_type(Champ_Inc_P1_base,ch) || sub_type(Champ_Fonc_P1_base,ch)
482 || sub_type(Champ_Inc_P1_base,ch) || sub_type(Champ_Inc_Q1_base,ch)
483 || sub_type(Champ_Fonc_Q1_base,ch))
484 {
485 directive = "champ_sommets";
486 // assert(localisation_=="SOMMETS");
487 }
488 else
489 {
490 const Nom& type = ch.que_suis_je();
491 if ((type.debute_par("Champ_Face")) || (type=="Champ_P1NC") || (type=="Champ_Q1NC") ||
492 (type=="Champ_Fonc_Face") || (type=="Champ_Fonc_P1NC") || (type=="Champ_Fonc_Q1NC"))
493 {
494 directive = "champ_face";
495 // assert(localisation_=="FACES");
496 }
497 else if ((type=="Champ_P1_isoP1Bulle") || (type=="Champ_Fonc_P1_isoP1Bulle"))
498 {
499 directive = "pression";
500 }
501 else if (sub_type(Champ_Uniforme,ch))
502 {
503 directive = "champ_uniforme";
504 }
505
506 else if (sub_type(Champ_Don_base,ch))
507 {
508 directive = "champ_don";
509 }
510
511 else
512 {
513 Cerr<<"No directive is available to create a storing field for the source field of type "<<ch.que_suis_je()<<finl;
514 exit();
515 }
516 }
517
518 return directive;
519
520}
521
526
527//Nomme le champ en tant que source par defaut
528//nom_champ_base + "_natif_" + nom_dom_natif
530{
531 if (nom_post_=="??")
532 {
533 Nom nom_post_source, nom_champ_base, nom_dom_natif;
534 nom_champ_base = get_ref_champ_base().le_nom();
535 if (ref_cast_non_const(Postraitement, post).domaine())
536 {
537 nom_post_source = nom_champ_base + "_natif_" + ref_cast_non_const(Postraitement, post).domaine()->le_nom();
538 }
539 else
540 {
541 nom_dom_natif = get_ref_domain().le_nom();
542 nom_post_source = nom_champ_base + "_natif_" + nom_dom_natif;
543 }
544 nommer(nom_post_source);
545 }
546}
547
549{
550 return 0;
551}
552
554{
555 return syno_ = noms;
556}
558{
559 return compo_ = noms;
560}
classe Champ_Don_base classe de base des Champs donnes (non calcules)
: class Champ_Fonc_P1_base
: class Champ_Fonc_Q1_base
class Champ_Generique_base
virtual const Domaine_dis_base & get_ref_domaine_dis_base() const
Renvoie une ref au domaine_discretisee du domaine sur lequel sera evalue l espace de stockage.
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 nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
virtual const Domaine & get_ref_domain() const
Renvoie une ref au domaine sur lequel sera evalue l espace de stockage.
Classe de champ particuliere qui encapsule une reference a un champ volumique de TRUST de type Champ_...
void initialize(const Champ_base &champ)
On initialise la classe avec le champ en parametre.
void get_xyz_values(const DoubleTab &coords, DoubleTab &values, ArrOfBit &validity_flag) const override
appel a Champ_base::valeur_aux()
int get_dimension() const override
Renvoie le nombre de coordonnees de chaque sommet du domaine.
void mettre_a_jour(double temps) override
Voir Champ_Generique_base::mettre_a_jour Si le champ est champ_inc dans l'equation,...
virtual void set_ref_champ(const Champ_base &)
Associe le champ et determine sa localisation.
void get_copy_values(DoubleTab &) const override
Cree une copie du tableau de valeurs Voir GenericField_base::get_copy_values().
void nommer_source(const Postraitement_base &post)
void get_property_names(Motcles &list) const override
Renvoie la liste des "query" possibles pour le champ.
virtual const Champ_base & get_ref_champ_base() const
Renvoie le champ_base sous-jacent.
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.
double get_time() const override
Renvoie le temps du Champ_Generique_base.
const DoubleTab & get_ref_values() const override
Verifie que le champ est bien un champ discret et renvoie le tableau de valeurs.
OWN_PTR(Champ_base) ptr_champ_
const Champ_base & get_champ(OWN_PTR(Champ_base)&espace_stockage) const override
Voir Champ_Generique_base::get_champ.
const DoubleTab & get_ref_coordinates() const override
Renvoie une reference au tableau des coordonnees des sommets du maillage support du champ,...
const Domaine_Cl_dis_base & get_ref_zcl_dis_base() const override
Renvoie une ref au domaine_cl_discretisee de l equation portant le champ cible.
void get_copy_coordinates(DoubleTab &) const override
const Motcle get_directive_pour_discr() const override
Renvoie la directive (champ_elem, champ_sommets, champ_face ou pression) pour lancer la discretisatio...
void set_param(Param &param) const override
pb_champ : declenche la lecture du nom du probleme (nom_pb_) auquel appartient le champ discret et le...
const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const override
OBS_PTR(Champ_base) ref_champ_
const Probleme_base & get_ref_pb_base() const override
Renvoie le probleme qui porte le champ cible.
Entity get_localisation(const int index=-1) const override
Si le champ n'est pas un champ discret : exception Champ_Generique_erreur("INVALID") Sinon,...
const Noms & fixer_noms_synonyms(const Noms &noms) override
void get_copy_connectivity(Entity index1, Entity index2, IntTab &) const override
const Noms & fixer_noms_compo(const Noms &noms) override
const IntTab & get_ref_connectivity(Entity index1, Entity index2) const override
Renvoie le tableau de connectivite entre l'entite geometrique index1 et l'entite index2.
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
void completer(const Postraitement_base &post) override
: class Champ_Inc_P0_base
Classe Champ_Inc_base.
virtual DoubleTab & valeurs()=0
classe Champ_Uniforme Represente un champ constant dans l'espace et dans le temps.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
virtual const Domaine_dis_base & domaine_dis_base() const
double temps() const
Renvoie le temps du champ.
void corriger_unite_nom_compo()
cette methode va fixer les unites et le nom des compos elle n'est pas const en realite !...
const DoubleTab_t & coord_sommets() const
Definition Domaine.h:112
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
class Domaine_VF
Definition Domaine_VF.h:44
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
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
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
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
const Nom & le_nom() const override
Renvoie le nom du champ.
const Noms & get_synonyms() const
Definition Field_base.h:52
bool is_quadrature() const
Definition Field_base.h:81
const Noms & unites() const
Renvoie les unites des composantes du champ.
bool is_basis_function() const
Definition Field_base.h:80
const Noms & noms_compo() const
Renvoie le tableau des noms des composantes du champ.
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
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 & majuscule()
Transforme le nom en majuscules Seules les lettres 'a'-'z' sont modifiees.
Definition Nom.cpp:180
const Nom & le_nom() const override
Renvoie *this;.
Definition Nom.cpp:563
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:76
const Interprete & interprete() const
Definition Objet_U.cpp:212
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
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
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
@ 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
Classe de base pour l'ensemble des postraitements.
classe Postraitement La classe est dotee -d une liste de champs generiques champs_post_complet_ qui c...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
void creer_champ(const Motcle &motlu) override
const Champ_base & get_champ(const Motcle &nom) const override
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
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133