TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Loi_Fermeture_base.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
17#include <Loi_Fermeture_base.h>
18#include <Probleme_base.h>
19#include <Param.h>
20#include <Champs_compris.h>
21#include <Schema_Temps_base.h>
22
23Implemente_base_sans_constructeur(Loi_Fermeture_base, "Loi_Fermeture_base", Objet_U);
24// XD loi_fermeture_base objet_u loi_fermeture_base BRACE Class for appends fermeture to problem
25
26Loi_Fermeture_base::Loi_Fermeture_base()
27{
29}
30
31/*! @brief Cette methode est la premiere appelee par le probleme pour construire l'objet au moment ou on l'associe au probleme.
32 *
33 * On verifie qu'on est pas encore associe.
34 *
35 */
37{
38 if (status_ == PB_ASSOCIE)
39 {
40 Cerr << "Error associating " << que_suis_je() << " " << le_nom();
41 Cerr << " to problem " << pb.que_suis_je();
42 Cerr << ".\n This object is already associated to problem " << mon_probleme().le_nom() << finl;
43 barrier();
44 exit();
45 }
46 assert(status_ == INITIAL);
47 mon_probleme_ = pb;
49}
50
51/*! @brief Cette methode est appelee par le probleme apres la discretisation des equations et du milieu et avant
52 *
53 * l'appel a readOn() pour lecture des parametres.
54 * Dans les classes derivees elle doit discretiser au minimum les champs
55 * qui seront requis dans le readOn() des equations ou des autres
56 * lois de fermeture.
57 *
58 */
64
65/*! @brief Cette methode appelle la methode set_param() pour initialiser les parametres, puis lit les parametres.
66 *
67 * Dans l'implementation des classes derivees on peut se contenter
68 * d'appeler la methode de la classe de base et verifier les parametres.
69 *
70 */
72{
73 assert(status_ == DISCRETISE);
74 Param param(que_suis_je());
75 set_param(param);
76 param.lire_avec_accolades_depuis(is);
78 return is;
79}
80
81/*! @brief Pour l'instant, exit()
82 *
83 */
85{
86 Cerr << "Loi_Fermeture_base::printOn non code" << finl;
87 exit();
88 return os;
89}
90
91/*! @brief Cette methode est appelee par le readOn de la classe.
92 *
93 * Elle doit etre reimplementee dans les classes derivees pour
94 * ajouter dans "param" les differents parametres a lire
95 * dans le jeu de donnees et appeler la methode de l'ancetre.
96 * Dans la classe de base: aucun parametre.
97 *
98 */
100{
101}
102
103/*! @brief Cette methode est appelee apres avoir lu toutes les equations et les lois de fermeture (tous les champs et les conditions aux limites
104 *
105 * du probleme sont disponibles)
106 *
107 */
109{
110 assert(status_ == READON_FAIT);
112}
113
114/*! @brief Renvoie le probleme (j'ai cree cette methode pour ne pas donner acces au probleme en ecriture par la REF)
115 *
116 */
118{
119 return mon_probleme_.valeur();
120}
121
122/*! @brief Cette methode est appelee par le probleme apres preparer_calcul() des equations et du milieu.
123 *
124 * Elle doit mettre
125 * a jour tous les champs qu'elle gere en fonction des autres
126 * champs du probleme.
127 *
128 */
130{
131 assert(status_ == COMPLET);
132 const double temps = mon_probleme().schema_temps().temps_courant();
133 mettre_a_jour(temps);
134}
135
136/*! @brief Cette methode est appelee par le probleme apres mettre_a_jour() des equations et du milieu.
137 *
138 * Elle doit mettre
139 * a jour tous les champs qu'elle gere en fonction des autres
140 * champs du probleme.
141 *
142 */
144{
145 assert(status_ == COMPLET);
146}
147
148/*! @brief Cette methode renvoie le champ de nom "nom" s'il est compris par la classe, sinon appelle la methode get_champ de l'ancetre.
149 *
150 * Dans la classe de base, on leve l'exception Champ_compris_erreur.
151 *
152 */
154{
155 return champs_compris_.get_champ(nom);
156}
157bool Loi_Fermeture_base::has_champ(const Motcle& nom, OBS_PTR(Champ_base) &ref_champ) const
158{
159 return champs_compris_.has_champ(nom, ref_champ);
160}
161
163{
164 return champs_compris_.has_champ(nom);
165}
166
168{
169 if (opt == DESCRIPTION)
170 Cerr << que_suis_je() << ": " << champs_compris_.liste_noms_compris() << finl;
171 else
172 noms.add(champs_compris_.liste_noms_compris());
173}
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
bool has_champ(const Motcle &nom, OBS_PTR(FIELD_TYPE)&ref_champ) const
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
: Classe de base des lois de fermetures.
const Champ_base & get_champ(const Motcle &nom) const override
Cette methode renvoie le champ de nom "nom" s'il est compris par la classe, sinon appelle la methode ...
virtual void discretiser(const Discretisation_base &)
Cette methode est appelee par le probleme apres la discretisation des equations et du milieu et avant...
const Probleme_base & mon_probleme() const
Renvoie le probleme (j'ai cree cette methode pour ne pas donner acces au probleme en ecriture par la ...
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual void associer_pb_base(const Probleme_base &)
Cette methode est la premiere appelee par le probleme pour construire l'objet au moment ou on l'assoc...
virtual void preparer_calcul()
Cette methode est appelee par le probleme apres preparer_calcul() des equations et du milieu.
virtual void set_param(Param &param) const override
Cette methode est appelee par le readOn de la classe.
Champs_compris champs_compris_
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const override
virtual void completer()
Cette methode est appelee apres avoir lu toutes les equations et les lois de fermeture (tous les cham...
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual void mettre_a_jour(double temps)
Cette methode est appelee par le probleme apres mettre_a_jour() des equations et du milieu.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
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
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
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Probleme_U.h:109
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
static void barrier()
Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a ...
Definition Process.cpp:136
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
Definition Sortie.h:52