TrioCFD 1.9.9_beta
TrioCFD documentation
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 * @brief Note: this class is specific to the VEF module.
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 // Inline methods
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
Returns the compo-th coordinate of the values at the element le_poly at the vertex sommet.
Definition Champ_P1NC.h:77
DoubleTab & valeur_aux_centres_de_gravite(const Domaine &dom, DoubleTab &tab_valeurs) const override
This method, generic but slow (calculation of gravity centers, filling les_poly, use of shape functio...
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
Returns the compo-th value at the vertices of dom.
Definition Champ_P1NC.h:112
virtual double norme_H1(const Domaine &) const
DoubleTab & valeur_aux_sommets(const Domaine &dom, DoubleTab &val) const override
Returns the values at the vertices of the Domain dom.
Definition Champ_P1NC.h:107
void mettre_a_jour(double temps) override
Performs a time update of the unknown field.
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
Causes an error! Must be overridden by derived classes.
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
Causes an error! Must be overridden by derived classes.
Definition Champ_P1NC.h:67
Champ_base & affecter_(const Champ_base &) override
Assignment of a generic OWN_PTR(Champ_base) (Champ_base) to an unknown field.
void calcul_grad_U(const Domaine_Cl_VEF &, DoubleTab &) const
DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const override
See Champ_base. Special case (unfortunately) of 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
Causes an error! Must be overridden by derived classes.
Definition Champ_P1NC.h:92
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
DOES NOTHING. Method to override.
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
Causes an error! Must be overridden by derived classes.
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)
class Champ_base This class is the base of the fields hierarchy.
Definition Champ_base.h:43
Champ_base()
Default constructor of a Champ_base.
double temps() const
Returns the time of the field.
virtual Champ_base & le_champ()=0
class Domaine_VEF
Definition Domaine_VEF.h:53
class Frontiere_dis_base Class representing a discretized boundary.
Base class for output streams.
Definition Sortie.h:52