TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_front_base.h
1/****************************************************************************
2* Copyright (c) 2025, 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#ifndef Champ_front_base_included
17#define Champ_front_base_included
18
19#include <Field_base.h>
20#include <Champ_Proto.h>
21#include <TRUST_Ref.h>
22#include <Roue.h>
23
25class Champ_Inc_base;
27class Cond_lim_base;
28
29/*! @brief classe Champ_front_base Classe de base pour la hierarchie des champs aux frontieres.
30 *
31 * Un
32 * objet Champ_front_base definit un champ sur la frontiere d'un
33 * domaine. Un objet de type Champ_front_base sera associe a
34 * chaque condition aux limites.
35 * Champ_front_base derive de Champ_Proto, afin d'avoir une interface
36 * conforme a tous les champs, et d'heriter des operations courantes sur
37 * les Champs.
38 * Les deux methodes principales sont initialiser et
39 * mettre_a_jour. Ce sont les deux seules qui peuvent modifier les
40 * valeurs du champ.
41 * La methode initialiser est appelee une fois au debut du
42 * calcul. Elle ne doit pas dependre de donnees exterieures a
43 * l'equation qui porte la CL (en effet, rien ne garantit que ces
44 * donnees sont initialisees). En revanche, les valeurs de
45 * l'inconnue sur laquelle porte la CL peuvent etre utiles pour
46 * l'initialisation => l'inconnue est passee en parametre en
47 * lecture seule.
48 * La methode mettre_a_jour est appelee au debut de chaque pas de
49 * temps ou sous-pas-de-temps, elle peut utiliser des donnees
50 * exterieures a l'equation. A charge a l'algorithme de s'assurer
51 * que ces donnees sont pertinentes...
52 * Dans le cas de champs stationnaires, la methode mettre_a_jour
53 * n'a rien a faire et les valeurs sont remplies une fois pour
54 * toutes par la methode initialiser.
55 * Dans le cas de champs instationnaires, il y a plusieurs valeurs en temps
56 * et chacune peut etre mise a jour.
57 * Les Champ_front_base sont divises en :
58 * * Champ_front_uniforme, constant dans le temps et l'espace
59 * * Champ_front_instationnaire_base, uniformes en espace mais variables en temps
60 * * Champ_front_var, variables en espace.
61 * Les Champ_front_var sont ensuite classes selon qu'ils sont
62 * stationnaires ou instationnaires.
63 *
64 * Les valeurs sont stockees dans une roue de DoubleTab.
65 * Si le champ est uniforme en espace, les DoubleTab sont
66 * dimensionnes a 1.
67 * S'il est stationnaire, la roue n'a qu'une valeur temporelle
68 * et le temps qui lui est assigne n'a pas de sens.
69 * S'il est instationnaire, les valeurs temporelles sont celles
70 * de l'inconnue de l'equation a laquelle se rapporte le champ.
71 *
72 *
73 * @sa Champ_Proto Frontiere_dis_base, Classe abstraite, Methode abstraite:, Champ_front_base& affecter_(const Champ_front_base& ch)
74 */
76{
77 Declare_base_sans_constructeur(Champ_front_base);
78public:
80 inline virtual void completer() { }
81 virtual int initialiser(double temps, const Champ_Inc_base& inco);
82 virtual void associer_fr_dis_base(const Frontiere_dis_base&);
84 inline virtual DoubleTab& valeurs() override;
85 inline virtual const DoubleTab& valeurs() const override;
86 virtual bool has_valeurs_au_temps(double temps) const { return true; }
87 virtual DoubleTab& valeurs_au_temps(double temps)=0;
88 virtual const DoubleTab& valeurs_au_temps(double temps) const = 0;
89 virtual const Frontiere_dis_base& frontiere_dis() const;
91 virtual const Domaine_dis_base& domaine_dis() const;
93 virtual void fixer_nb_valeurs_temporelles(int nb_cases);
94 virtual void mettre_a_jour(double temps);
95 virtual void calculer_coeffs_echange(double temps);
96 virtual void valeurs_face(int, DoubleVect&) const;
97 virtual inline void verifier(const Cond_lim_base& la_cl) const;
98 virtual double get_temps_defaut() const { return temps_defaut; }
99 virtual void set_temps_defaut(double temps) { temps_defaut = temps; }
100 virtual void changer_temps_futur(double temps, int i);
101 virtual int avancer(double temps);
102 virtual int reculer(double temps);
103 virtual bool instationnaire() const { return instationnaire_; }
104 virtual void set_instationnaire(bool flag) { instationnaire_ = flag; Gpoint_ = valeurs(); Gpoint_=0; } // Dimensionne Gpoint_
105 virtual inline void set_derivee_en_temps(DoubleTab& Gpoint) { Gpoint_ = Gpoint; }
106 virtual inline const DoubleTab& derivee_en_temps() const { return Gpoint_; }
107 virtual void calculer_derivee_en_temps(double t1, double t2);
108
109protected:
110 double temps_defaut ; // Le temps pris par defaut quand le parametre
111 // n'est pas specifie. Ce sera en particulier
112 // celui utilise par les operateurs et les
113 // solveurs.
114 OBS_PTR(Frontiere_dis_base) la_frontiere_dis;
115 Roue_ptr les_valeurs; // Les valeurs du champ
116 DoubleTab Gpoint_; // Derivee en temps des valeurs conditions limites
117private:
118 bool instationnaire_ = false; // Par defaut champ stationnaire
119};
120
121
122/*! @brief Renvoie la frontiere discretisee associee au champ.
123 *
124 * (version const)
125 *
126 * @return (Frontiere_dis_base&) la frontiere discretisee associee au champ
127 */
129{
130 return la_frontiere_dis.valeur();
131}
132
133
134/*! @brief Renvoie la frontiere discretisee associee au champ.
135 *
136 * @return (Frontiere_dis_base&) la frontiere discretisee associee au champ
137 */
139{
140 return la_frontiere_dis.valeur();
141}
142
143
144/*! @brief Renvoie le tableau des valeurs du champ.
145 *
146 * @return (DoubleTab&) le tableau des valeurs du champ au temps par defaut.
147 */
148inline DoubleTab& Champ_front_base::valeurs()
149{
151}
152
153
154/*! @brief Renvoie le tableau des valeurs du champ au temps par defaut.
155 *
156 * (version const)
157 *
158 * @return (DoubleTab&) le tableau des valeurs du champ
159 */
160inline const DoubleTab& Champ_front_base::valeurs() const
161{
163}
164
165// devra etre surchargee par les champ_front voulant verifier les arguments
166inline void Champ_front_base::verifier(const Cond_lim_base& la_cl) const
167{
168 return;
169}
170
171#endif
Classe Champ_Inc_base.
classe Champ_Proto Classe representant un prototype de Champ.
Definition Champ_Proto.h:37
virtual DoubleTab & valeurs()=0
virtual int initialiser(double temps, const Champ_Inc_base &inco)
Initialisation en debut de calcul.
virtual void associer_fr_dis_base(const Frontiere_dis_base &)
Associe une frontiere discretisee au champ.
virtual const DoubleTab & derivee_en_temps() const
virtual void changer_temps_futur(double temps, int i)
Change la valeur du temps pour la ieme valeur temporelle apres le present.
virtual const Frontiere_dis_base & frontiere_dis() const
Renvoie la frontiere discretisee associee au champ.
virtual Champ_front_base & affecter_(const Champ_front_base &ch)=0
virtual void set_temps_defaut(double temps)
virtual bool instationnaire() const
virtual double get_temps_defaut() const
virtual const Domaine_dis_base & domaine_dis() const
virtual void calculer_coeffs_echange(double temps)
NE FAIT RIEN, a surcharger Cette methode peut calculer et stocker des donnees utiles a la.
virtual DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ.
virtual void verifier(const Cond_lim_base &la_cl) const
virtual DoubleTab & valeurs_au_temps(double temps)=0
virtual bool has_valeurs_au_temps(double temps) const
virtual void fixer_nb_valeurs_temporelles(int nb_cases)
Appele par Conds_lim::completer Par defaut ne fait rien.
virtual const DoubleTab & valeurs_au_temps(double temps) const =0
virtual int reculer(double temps)
A implementer dans les classes derivees.
virtual void set_derivee_en_temps(DoubleTab &Gpoint)
virtual int avancer(double temps)
A implementer dans les classes derivees.
virtual void mettre_a_jour(double temps)
NE FAIT RIEN, a surcharger.
OBS_PTR(Frontiere_dis_base) la_frontiere_dis
virtual void completer()
virtual void valeurs_face(int, DoubleVect &) const
Renvoie le vecteur des valeurs du champ pour la face donnee.
virtual void set_instationnaire(bool flag)
virtual void calculer_derivee_en_temps(double t1, double t2)
Calcule le taux d'accroissement du champ entre t1 et t2 et le stocke dans Gpoint_.
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
classe Frontiere_dis_base Classe representant une frontiere discretisee.
Pointeur sur une roue.
Definition Roue.h:33