TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Champ_P1NC.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_P1NC_included
17#define Champ_P1NC_included
18
19#include <Champ_P1NC_implementation.h>
20#include <Domaine_Cl_VEF.h>
21#include <Domaine_VEF.h>
22
23#include <Ok_Perio.h>
24
25/*! @brief class Champ_P1NC
26 *
27 * Rq : cette classe est specifique au module VEF
28 *
29 * @sa Champ_Inc_base
30 */
31
32extern void calculer_gradientP1NC(const DoubleTab&, const Domaine_VEF&, const Domaine_Cl_VEF&, DoubleTab&);
33
35{
36 Declare_instanciable(Champ_P1NC);
37public:
38 int fixer_nb_valeurs_nodales(int nb_noeuds) override;
39 void mettre_a_jour(double temps) override;
40 void abortTimeStep() override;
41 void calcul_y_plus(const Domaine_Cl_VEF&, DoubleVect&) const;
42 void calcul_y_plus_diphasique(const Domaine_Cl_VEF& , DoubleVect&) const;
43 void calcul_grad_T(const Domaine_Cl_VEF&, DoubleTab&) const;
44 void calcul_grad_U(const Domaine_Cl_VEF&, DoubleTab&) const;
45 void calcul_h_conv(const Domaine_Cl_VEF&, DoubleTab&, int temp_ref) const;
46 int compo_normale_sortante(int) const;
47 DoubleTab& trace(const Frontiere_dis_base&, DoubleTab&, double, int distant) const override;
48 void cal_rot_ordre1(DoubleTab&) const;
49 void gradient(DoubleTab&) const;
50 int imprime(Sortie&, int) const override;
51 void calcul_critere_Q(DoubleVect&) const;
52
53 virtual double norme_L2(const Domaine&) const;
54 Champ_base& affecter_(const Champ_base&) override;
55 void verifie_valeurs_cl() override;
56
57 static DoubleVect& calcul_S_barre(const DoubleTab&, DoubleVect&, const Domaine_Cl_VEF&);
58 static DoubleTab& calcul_gradient(const DoubleTab&, DoubleTab&, const Domaine_Cl_VEF&);
59 static DoubleTab& calcul_duidxj_paroi(DoubleTab&, const DoubleTab&, const DoubleTab&, const DoubleTab&, const Domaine_Cl_VEF&);
60
61 virtual double norme_H1(const Domaine&) const;
62 virtual double norme_L2_H1(const Domaine& dom) const;
63 static double calculer_integrale_volumique(const Domaine_VEF&, const DoubleVect&, Ok_Perio ok);
64
65 // Methodes inlines
66 inline const Domaine_VEF& domaine_vef() const override { return ref_cast(Domaine_VEF, le_dom_VF.valeur()); }
67 inline DoubleVect& valeur_a_elem(const DoubleVect& position, DoubleVect& val, int le_poly) const override
68 {
69 return Champ_P1NC_implementation::valeur_a_elem(position, val, le_poly);
70 }
71
72 inline double valeur_a_elem_compo(const DoubleVect& position, int le_poly, int ncomp) const override
73 {
74 return Champ_P1NC_implementation::valeur_a_elem_compo(position, le_poly, ncomp);
75 }
76
77 inline double valeur_a_sommet_compo(int num_som, int le_poly, int ncomp) const override
78 {
79 return Champ_P1NC_implementation::valeur_a_sommet_compo(num_som, le_poly, ncomp);
80 }
81
82 inline DoubleTab& valeur_aux_centres_de_gravite(const Domaine& dom, DoubleTab& tab_valeurs) const override
83 {
85 }
86
87 inline DoubleTab& valeur_aux_elems(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& tab_valeurs) const override
88 {
89 return Champ_P1NC_implementation::valeur_aux_elems(positions, les_polys, tab_valeurs);
90 }
91
92 inline DoubleVect& valeur_aux_elems_compo(const DoubleTab& positions, const IntVect& les_polys, DoubleVect& tab_valeurs, int ncomp) const override
93 {
94 return Champ_P1NC_implementation::valeur_aux_elems_compo(positions, les_polys, tab_valeurs, ncomp);
95 }
96
97 inline DoubleTab& valeur_aux_elems_smooth(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& tab_valeurs) override
98 {
99 return Champ_P1NC_implementation::valeur_aux_elems_smooth(positions, les_polys, tab_valeurs);
100 }
101
102 inline DoubleVect& valeur_aux_elems_compo_smooth(const DoubleTab& positions, const IntVect& les_polys, DoubleVect& tab_valeurs, int ncomp) override
103 {
104 return Champ_P1NC_implementation::valeur_aux_elems_compo_smooth(positions, les_polys, tab_valeurs, ncomp);
105 }
106
107 inline DoubleTab& valeur_aux_sommets(const Domaine& dom, DoubleTab& val) const override
108 {
110 }
111
112 inline DoubleVect& valeur_aux_sommets_compo(const Domaine& dom, DoubleVect& val, int comp) const override
113 {
115 }
116
117 inline DoubleTab& remplir_coord_noeuds(DoubleTab& positions) const override
118 {
120 }
121
122 inline int remplir_coord_noeuds_et_polys(DoubleTab& positions, IntVect& polys) const override
123 {
125 }
126
127 inline void filtrer_L2(DoubleTab& x) const
128 {
130 }
131
132 inline void filtrer_H1(DoubleTab& x) const
133 {
135 }
136
137 inline void filtrer_resu(DoubleTab& x) const
138 {
140 }
141
142private:
143 inline const Champ_base& le_champ() const override { return *this; }
144 inline Champ_base& le_champ() override { return *this; }
145};
146
147#endif /* Champ_P1NC_included */
double valeur_a_sommet_compo(int num_som, int le_poly, int ncomp) const
DoubleTab & valeur_aux_sommets(const Domaine &dom, DoubleTab &ch_som) const override
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const override
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
DoubleVect & valeur_aux_elems_compo_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp)
DoubleVect & valeur_aux_sommets_compo(const Domaine &dom, DoubleVect &ch_som, int ncomp) const override
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
DoubleTab & valeur_aux_elems_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs)
DoubleTab & valeur_aux_centres_de_gravite(const Domaine &, DoubleTab &valeurs) const
Computes values at the centers of gravity for a P1NC field.
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const override
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &val, int le_poly) const override
void calcul_h_conv(const Domaine_Cl_VEF &, DoubleTab &, int temp_ref) const
double valeur_a_sommet_compo(int num_som, int le_poly, int ncomp) const override
renvoi la compo eme corrdonne des valeurs a l'element le_poly au sommet sommet
Definition Champ_P1NC.h:77
DoubleTab & valeur_aux_centres_de_gravite(const Domaine &dom, DoubleTab &tab_valeurs) const override
Cette methode, generique mais lente (calcul des centres de gravite, remplissage les_poly,...
Definition Champ_P1NC.h:82
void abortTimeStep() override
void cal_rot_ordre1(DoubleTab &) const
DoubleVect & valeur_aux_sommets_compo(const Domaine &dom, DoubleVect &val, int comp) const override
renvoie la compo eme valeur aux sommets de dom.
Definition Champ_P1NC.h:112
virtual double norme_H1(const Domaine &) const
DoubleTab & valeur_aux_sommets(const Domaine &dom, DoubleTab &val) const override
renvoie les valeurs aux sommets du Domaine dom
Definition Champ_P1NC.h:107
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps du champ inconnue.
virtual double norme_L2_H1(const Domaine &dom) const
DoubleTab & valeur_aux_elems_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &tab_valeurs) override
Definition Champ_P1NC.h:97
void calcul_grad_T(const Domaine_Cl_VEF &, DoubleTab &) const
static DoubleVect & calcul_S_barre(const DoubleTab &, DoubleVect &, const Domaine_Cl_VEF &)
void calcul_y_plus(const Domaine_Cl_VEF &, DoubleVect &) const
void filtrer_H1(DoubleTab &x) const
Definition Champ_P1NC.h:132
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
Definition Champ_P1NC.h:117
void verifie_valeurs_cl() override
void gradient(DoubleTab &) const
int compo_normale_sortante(int) const
static DoubleTab & calcul_gradient(const DoubleTab &, DoubleTab &, const Domaine_Cl_VEF &)
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &tab_valeurs) const override
provoque une erreur ! doit etre surchargee par les classes derivees
Definition Champ_P1NC.h:87
void calcul_critere_Q(DoubleVect &) const
void filtrer_L2(DoubleTab &x) const
Definition Champ_P1NC.h:127
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &val, int le_poly) const override
provoque une erreur ! doit etre surchargee par les classes derivees
Definition Champ_P1NC.h:67
Champ_base & affecter_(const Champ_base &) override
Affectation d'un OWN_PTR(Champ_base) generique (Champ_base) dans un champ inconnue.
void calcul_grad_U(const Domaine_Cl_VEF &, DoubleTab &) const
DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const override
voir Champ_base Cas particulier (malheureusement) du Champ_P0_VDF :
static DoubleTab & calcul_duidxj_paroi(DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const Domaine_Cl_VEF &)
int fixer_nb_valeurs_nodales(int nb_noeuds) override
int imprime(Sortie &, int) const override
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &tab_valeurs, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
Definition Champ_P1NC.h:92
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
NE FAIT RIEN Methode a surcharger.
Definition Champ_P1NC.h:122
void calcul_y_plus_diphasique(const Domaine_Cl_VEF &, DoubleVect &) const
void filtrer_resu(DoubleTab &x) const
Definition Champ_P1NC.h:137
const Domaine_VEF & domaine_vef() const override
Definition Champ_P1NC.h:66
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
provoque une erreur ! doit etre surchargee par les classes derivees
Definition Champ_P1NC.h:72
virtual double norme_L2(const Domaine &) const
DoubleVect & valeur_aux_elems_compo_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &tab_valeurs, int ncomp) override
Definition Champ_P1NC.h:102
static double calculer_integrale_volumique(const Domaine_VEF &, const DoubleVect &, Ok_Perio ok)
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
Champ_base()
Constructeur par defaut d'un Champ_base.
double temps() const
Renvoie le temps du champ.
virtual Champ_base & le_champ()=0
class Domaine_VEF
Definition Domaine_VEF.h:54
classe Frontiere_dis_base Classe representant une frontiere discretisee.
Classe de base des flux de sortie.
Definition Sortie.h:52