TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Cond_lim_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#include <Discretisation_base.h>
17#include <Domaine_Cl_dis_base.h>
18#include <Cond_lim_base.h>
19#include <Equation_base.h>
20
21Implemente_base(Cond_lim_base, "Cond_lim_base", Objet_U);
22// XD condlim_base objet_u condlim_base NO_BRACE Basic class of boundary conditions.
23
24Sortie& Cond_lim_base::printOn(Sortie& s) const { return s << le_champ_front; }
25
26Entree& Cond_lim_base::readOn(Entree& s) { return s >> le_champ_front; }
27
28/*! @brief NE FAIT RIEN A surcharger dans les classes derivees
29 *
30 */
35
37{
38 if (app_domains.size() == 0)
39 {
40 Cerr << "You call Cond_lim_base::compatible_avec_eqn but the std::vector app_domains is not filled ! Check your readOn !!" << finl;
42 }
43
44 Motcle dom_app = eqn.domaine_application();
45 for (const auto &itr : app_domains)
46 if (itr == dom_app) return 1;
47
49 return 0;
50}
51
52/*! @brief Change le i-eme temps futur de la CL.
53 *
54 */
55void Cond_lim_base::changer_temps_futur(double temps, int i)
56{
58}
59
60/*! @brief Tourne la roue de la CL
61 *
62 */
63int Cond_lim_base::avancer(double temps)
64{
65 return champ_front().avancer(temps);
66}
67
68/*! @brief Tourne la roue de la CL
69 *
70 */
71int Cond_lim_base::reculer(double temps)
72{
73 return champ_front().reculer(temps);
74}
75
76/*! @brief Initialisation en debut de calcul.
77 *
78 * A appeler avant tout calculer_coeffs_echange ou mettre_a_jour
79 * Contrairementaux methodes mettre_a_jour, les methodes
80 * initialiser des CLs ne peuvent pas dependre de l'exterieur
81 * (lui-meme peut ne pas etre initialise)
82 *
83 * @return (0 en cas d'erreur, 1 sinon.)
84 */
86{
87 return le_champ_front->initialiser(temps, domaine_Cl_dis().inconnue());
88}
89
90/*! @brief Effectue une mise a jour en temps de la condition aux limites.
91 *
92 * @param (double temps) le pas de temps de mise a jour
93 */
95{
96 le_champ_front->mettre_a_jour(temps);
97}
98
99/* @brief Reset current time for the boundary condition.
100 *
101 * A BC is regarded as an input, so here this is equivalent to a 'mettre_a_jour'
102 */
104{
105 mettre_a_jour(time);
106}
107
108/*! @brief Cette methode indique si cette condition aux limites doit etre mise a jour dans des sous pas de temps d'un schema en temps tel que RK
109 *
110 * Par defaut elle renvoie 0 pour indiquer qu'aucune mise a jour
111 * n'est necessaire ; il faut la surcharger pour renvoyer 1 au besoin
112 * (exemple Echange_impose_base)
113 *
114 * @param (double temps) le pas de temps de mise a jour
115 */
117{
118 return 0;
119}
120
121/*! @brief Calcul des coefficient d'echange pour un couplage par Champ_front_contact_VEF.
122 *
123 * Ces calculs sont locaux au probleme et dependant uniquement de
124 * l'inconnue. Ils doivent donc etre faits chaque fois que
125 * l'inconnue est modifiee. Ils sont disponibles pour l'exterieur et
126 * stockes dans les CLs.
127 * WEC : Les Champ_front_contact_VEF devraient disparaitre et cette
128 * methode avec !!!
129 *
130 * @param (double temps) le pas de temps de mise a jour
131 */
133{
134 le_champ_front->calculer_coeffs_echange(temps);
135}
136
137/*! @brief Appel la verification du champ lu par l intermediaire de l equation pour laquelle on considere la condition limite
138 *
139 * La methode est surchargee dans les cas ou l utilisateur doit
140 * specifier le champ frontiere
141 *
142 */
144{
145
146}
147
148/*! @brief Associe la frontiere a l'objet.
149 *
150 * L'objet Frontiere_dis_base est en fait associe au membre
151 * OWN_PTR(Champ_front_base) de l'objet Cond_lim_base qui represente le champ des conditions
152 * aux limites imposees a la frontiere.
153 *
154 * @param (Frontiere_dis_base& fr) la frontiere sur laquelle on impose les conditions aux limites
155 */
157{
158 assert(le_champ_front);
159 le_champ_front->associer_fr_dis_base(fr);
161}
162
163/*! @brief Associe le Domaine_Cl_dis_base (Domaine des conditions aux limites discretisees) a l'objet.
164 *
165 * Ce Domaine_Cl_dis_base stocke (reference) toutes les conditions
166 * aux limites relative a un Domaine geometrique.
167 *
168 * @param (Domaine_Cl_dis_base& zcl) un Domaine des conditions aux limites discretisees a laquelle l'objet Cond_lim_base se rapporte
169 */
171{
172 mon_dom_cl_dis = zcl;
173 le_champ_front->verifier(*this);
174}
175
176/*! @brief Renvoie 1 si la condition aux limites est compatible avec la discretisation passee en parametre.
177 *
178 * @param (Discretisation_base&) la discretisation avec laquelle on veut verifier la compatibilite
179 */
181{
182 if (supp_discs.size() == 0) return 1;
183 else
184 {
185 Nom type_discr = discr.que_suis_je();
186 for (const auto &itr : supp_discs)
187 if (itr == type_discr) return 1;
188
189 err_pas_compatible(discr);
190 return 0;
191 }
192}
193
194/*! @brief Cette methode est appelee quand la condition aux limites n'est pas compatible avec l'equation sur laquelle on essaye
195 *
196 * de l'appliquer.
197 *
198 * @param (Equation_base& eqn) l'equation avec laquelle la condition aux limites est incompatible
199 */
201{
202 Cerr << "The boundary condition " << que_suis_je() << " can't apply to " << finl << "the equation of kind " << eqn.que_suis_je() << finl;
203 exit();
204}
205
206/*! @brief Cette methode est appelee quand la condition aux limites n'est pas compatible avec la discretisation sur laquelle on essaye
207 *
208 * de l'appliquer.
209 *
210 * @param (Discretisation_base& discr) la discretisation avec laquelle la condition aux limites est incompatible
211 */
213{
214 Cerr << "The boundary condition " << que_suis_je() << " can't be used with " << finl << "the discretization of kind " << discr.que_suis_je() << finl;
215 exit();
216}
217
218void Cond_lim_base::champ_front(int face, DoubleVect& var) const
219{
220 le_champ_front->valeurs_face(face, var);
221}
222
224{
225 Cerr << "Cond_lim_base::injecter_dans_champ_inc()" << finl;
226 Cerr << "this method does nothing and must be overloaded " << finl;
227 Cerr << "Contact TRUST support." << finl;
228 exit();
229}
230/*! @brief Change le i-eme temps futur de la cl.
231 *
232 */
234{
236}
237/*! @brief Appele par Conds_lim::completer Appel cha_front_base::fixer_nb_valeurs_temporelles
238 *
239 */
Classe Champ_Inc_base.
virtual void changer_temps_futur(double temps, int i)
Change la valeur du temps pour la ieme valeur temporelle apres le present.
virtual void set_temps_defaut(double temps)
virtual void fixer_nb_valeurs_temporelles(int nb_cases)
Appele par Conds_lim::completer Par defaut ne fait rien.
virtual int reculer(double temps)
A implementer dans les classes derivees.
virtual int avancer(double temps)
A implementer dans les classes derivees.
virtual void completer()
virtual void valeurs_face(int, DoubleVect &) const
Renvoie le vecteur des valeurs du champ pour la face donnee.
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
std::vector< Nom > supp_discs
virtual void changer_temps_futur(double temps, int i)
Change le i-eme temps futur de la CL.
virtual int compatible_avec_eqn(const Equation_base &) const
virtual void mettre_a_jour(double temps)
Effectue une mise a jour en temps de la condition aux limites.
virtual void fixer_nb_valeurs_temporelles(int nb_cases)
Appele par Conds_lim::completer Appel cha_front_base::fixer_nb_valeurs_temporelles.
virtual void calculer_coeffs_echange(double temps)
Calcul des coefficient d'echange pour un couplage par Champ_front_contact_VEF.
virtual void associer_fr_dis_base(const Frontiere_dis_base &)
Associe la frontiere a l'objet.
virtual int a_mettre_a_jour_ss_pas_dt()
Cette methode indique si cette condition aux limites doit etre mise a jour dans des sous pas de temps...
virtual int avancer(double temps)
Tourne la roue de la CL.
void err_pas_compatible(const Equation_base &) const
Cette methode est appelee quand la condition aux limites n'est pas compatible avec l'equation sur laq...
Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limites discretisee dont l'objet fait partie.
virtual int compatible_avec_discr(const Discretisation_base &) const
Renvoie 1 si la condition aux limites est compatible avec la discretisation passee en parametre.
virtual void verifie_ch_init_nb_comp() const
Appel la verification du champ lu par l intermediaire de l equation pour laquelle on considere la con...
virtual int reculer(double temps)
Tourne la roue de la CL.
virtual void injecter_dans_champ_inc(const Champ_Inc_base &) const
virtual void completer()
NE FAIT RIEN A surcharger dans les classes derivees.
std::vector< Motcle > app_domains
virtual int initialiser(double temps)
Initialisation en debut de calcul.
Champ_front_base & champ_front()
virtual void resetTime(double time)
virtual void set_temps_defaut(double temps)
Change le i-eme temps futur de la cl.
virtual void associer_domaine_cl_dis_base(const Domaine_Cl_dis_base &)
Associe le Domaine_Cl_dis_base (Domaine des conditions aux limites discretisees) a l'objet.
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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 Motcle & domaine_application() const
Renvoie "indetermine" Navier_Stokes_standard par exemple surcharge cette methode.
classe Frontiere_dis_base Classe representant une frontiere discretisee.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
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
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