TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Eval_Conv_VDF_Face_leaves.h
1/****************************************************************************
2* Copyright (c) 2023, 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 Eval_Conv_VDF_Face_leaves_included
17#define Eval_Conv_VDF_Face_leaves_included
18
19#include <Eval_Conv_VDF_Face.h>
20#include <Eval_Conv_VDF.h>
21
22/// \cond DO_NOT_DOCUMENT
23class Eval_Conv_VDF_Face_leaves : public Eval_Conv_VDF_Face<Eval_Conv_VDF_Face_leaves>,
24 public Eval_Conv_VDF {};
25/// \endcond
26
27/*
28 * NOTA BENE : (pour tous les evals)
29 * Les evaluateurs de flux convectifs calculent en fait le terme convectif qui figure au second
30 * membre de l'equation d'evolution c.a.d l'oppose du flux convectif pour l'EXPLICITE.
31 *
32 * Dans le cas de la methode IMPLICITE les evaluateurs calculent la quantite qui figure dans le
33 * premier membre de l'equation, nous ne prenons pas par consequent l'oppose en ce qui concerne
34 * les termes pour la matrice, par contre pour le second membre nous procedons comme en explicite
35 * mais en ne fesant intervenir que les valeurs fournies par les conditions limites.
36 */
37
38/*! @brief class Eval_Amont_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
39 *
40 * Schema de convection Amont
41 *
42 */
43class Eval_Amont_VDF_Face : public Eval_Conv_VDF_Face<Eval_Amont_VDF_Face>, public Eval_Conv_VDF
44{
45public:
46 static constexpr bool IS_AMONT = true, CALC_ARR_COIN_FL = true;
47};
48
49/*! @brief class Eval_Centre_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
50 *
51 * Schema de convection Centre
52 *
53 */
54class Eval_Centre_VDF_Face : public Eval_Conv_VDF_Face<Eval_Centre_VDF_Face>, public Eval_Conv_VDF
55{
56public:
57 static constexpr bool IS_CENTRE = true;
58};
59
60/*! @brief class Eval_Centre4_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
61 *
62 * Schema de convection Centre4 (sur 4 points)
63 *
64 */
65class Eval_Centre4_VDF_Face : public Eval_Conv_VDF_Face<Eval_Centre4_VDF_Face>, public Eval_Conv_VDF
66{
67public:
68 static constexpr bool IS_CENTRE4 = true;
69
70 inline int face_amont_conj(int num_face,int i,int k) const override { return le_dom->face_amont_conj(num_face, i, k); }
71 inline int face_amont_princ(int num_face,int i) const override { return le_dom->face_amont_princ(num_face, i); }
72 inline double dist_face(int n1,int n2,int k) const { return le_dom->dist_face(n1,n2,k); }
73 inline double dist_face_period(int n1,int n2,int k) const { return le_dom->dist_face_period(n1,n2,k); }
74 inline double dist_elem_period(int n1,int n2,int k) const override { return le_dom->dist_elem_period(n1,n2,k); }
75 inline double dim_elem(int n1,int k) const override { return le_dom->dim_elem(n1,k); }
76 inline double conv_centre(const double psc,const double vit_0_0, const double vit_0, const double vit_1,const double vit1_1,double g1, double g2, double g3,double g4) const override
77 { return (g1*vit_0_0 + g2*vit_0 + g3*vit_1 + g4*vit1_1) * psc; }
78
79 inline void calcul_g(const double dxam, const double dx, const double dxav, double& g1, double& g2, double& g3, double& g4) const override
80 {return calcul_g_impl(dxam,dx,dxav,g1,g2,g3,g4); }
81};
82
83/*! @brief class Eval_Quick_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
84 *
85 * Schema de convection Quick
86 *
87 */
88class Eval_Quick_VDF_Face : public Eval_Conv_VDF_Face<Eval_Quick_VDF_Face>, public Eval_Conv_VDF
89{
90public:
91 static constexpr bool IS_QUICK = true;
92
93 inline int face_amont_conj(int num_face,int i,int k) const override { return le_dom->face_amont_conj(num_face, i, k); }
94 inline int face_amont_princ(int num_face,int i) const override { return le_dom->face_amont_princ(num_face, i); }
95 inline double dim_elem(int n1,int k) const override { return le_dom->dim_elem(n1,k); }
96 inline double dim_face(int n1,int k) const override { return le_dom->dim_face(n1,k); }
97 inline double dist_face(int n1,int n2,int k) const { return le_dom->dist_face(n1,n2,k); }
98 inline double dist_elem(int n1,int n2,int k) const override { return le_dom->dist_elem(n1,n2,k); }
99 inline double dist_elem_period(int n1, int n2, int k) const override { return le_dom->dist_elem_period(n1,n2,k); }
100 inline double dist_face_period(int n1,int n2,int k) const { return le_dom->dist_face_period(n1,n2,k); }
101 inline double conv_quick_sharp_plus(const double psc,const double vit_0, const double vit_1, const double vit_0_0,
102 const double dx, const double dm, const double dxam) const override
103 { return conv_quick_sharp_plus_impl(psc,vit_0,vit_1,vit_0_0,dx,dm,dxam); }
104
105 inline double conv_quick_sharp_moins(const double psc,const double vit_0,const double vit_1, const double vit_1_1,
106 const double dx, const double dm,const double dxam) const override
107 { return conv_quick_sharp_moins_impl(psc,vit_0,vit_1,vit_1_1,dx,dm,dxam); }
108};
109
110/*! @brief class Eval_Quick_VDF_Face_Axi Evaluateur VDF pour la convection en coordonnees cylindriques : Le champ convecte est un Champ_Face_VDF
111 *
112 * Schema de convection Quick
113 *
114 */
115class Eval_Quick_VDF_Face_Axi : public Eval_Conv_VDF_Face<Eval_Quick_VDF_Face_Axi>, public Eval_Conv_VDF
116{
117public:
118 static constexpr bool IS_AXI = true, IS_QUICK = true, CALC_ARR_PERIO = false, CALC_ARR_NAVIER_FL = false;
119
120 inline int face_amont_princ(int num_face,int i) const override { return le_dom->face_amont_princ(num_face, i); }
121 inline int face_amont_conj(int ,int ,int ) const override;
122 inline double dist_face(int ,int ,int ) const;
123 inline double dist_elem_period(int n1, int n2, int k) const override { return dist_face(n1,n2,k); }
124 inline double dim_face(int ,int ) const override;
125 inline double dist_elem(int ,int ,int ) const override;
126 inline double dim_elem(int ,int ) const override;
127 inline double conv_quick_sharp_plus(const double psc,const double vit_0, const double vit_1, const double vit_0_0,
128 const double dx, const double dm, const double dxam) const override
129 { return conv_quick_sharp_plus_impl(psc,vit_0,vit_1,vit_0_0,dx,dm,dxam); }
130
131 inline double conv_quick_sharp_moins(const double psc,const double vit_0,const double vit_1, const double vit_1_1,
132 const double dx, const double dm,const double dxam) const override
133 { return conv_quick_sharp_moins_impl(psc,vit_0,vit_1,vit_1_1,dx,dm,dxam); }
134};
135
136inline double Eval_Quick_VDF_Face_Axi::dim_elem(int n1, int k) const
137{
138 const IntTab& elem_faces_ = le_dom->elem_faces();
139 return dist_face(elem_faces_(n1,k), elem_faces_(n1,k+dimension), k) ;
140}
141
142inline double Eval_Quick_VDF_Face_Axi::dist_elem(int n1, int n2, int k) const
143{
144 const DoubleTab& xp_ = le_dom->xp();
145 return dist_elem_axi_impl(n1,n2,k,xp_);
146}
147
148inline double Eval_Quick_VDF_Face_Axi::dist_face(int n1, int n2, int k) const
149{
150 const DoubleTab& xv_ = le_dom->xv();
151 return dist_face_axi_impl(n1,n2,k,xv_);
152}
153
154inline double Eval_Quick_VDF_Face_Axi::dim_face(int n1, int k) const
155{
156 const IntTab& face_voisins_ = le_dom->face_voisins();
157 const int elem0 = face_voisins_(n1,0), elem1 = face_voisins_(n1,1) ;
158 if (elem0 < 0 ) return dim_elem(elem1, k) ;
159 if (elem1 < 0 ) return dim_elem(elem0, k) ;
160 return (dim_elem(elem0, k) + dim_elem(elem1, k)) * 0.5 ;
161}
162
163inline int Eval_Quick_VDF_Face_Axi::face_amont_conj(int num_face, int k, int i) const
164{
165 const IntTab& face_voisins_ = le_dom->face_voisins();
166 const IntTab& elem_faces_ = le_dom->elem_faces();
167 const IntVect& orientation_ = le_dom->orientation();
168 return face_amont_conj_axi_impl(num_face,k,i,dimension,face_voisins_,elem_faces_,orientation_);
169}
170
171#endif /* Eval_Conv_VDF_Face_leaves_included */
class Eval_Amont_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
static constexpr bool CALC_ARR_COIN_FL
static constexpr bool IS_AMONT
class Eval_Centre4_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
double dist_face_period(int n1, int n2, int k) const
double dist_elem_period(int n1, int n2, int k) const override
int face_amont_conj(int num_face, int i, int k) const override
int face_amont_princ(int num_face, int i) const override
double dim_elem(int n1, int k) const override
void calcul_g(const double dxam, const double dx, const double dxav, double &g1, double &g2, double &g3, double &g4) const override
static constexpr bool IS_CENTRE4
double dist_face(int n1, int n2, int k) const
double conv_centre(const double psc, const double vit_0_0, const double vit_0, const double vit_1, const double vit1_1, double g1, double g2, double g3, double g4) const override
class Eval_Centre_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
static constexpr bool IS_CENTRE
int face_amont_conj_axi_impl(int, int, int, int, const IntTab &, const IntTab &, const IntVect &) const
double dist_elem_axi_impl(int, int, int, const DoubleTab &) const
double conv_quick_sharp_moins_impl(const double, const double, const double, const double, const double, const double, const double) const
double conv_quick_sharp_plus_impl(const double, const double, const double, const double, const double, const double, const double) const
double dist_face_axi_impl(int, int, int, const DoubleTab &) const
void calcul_g_impl(const double, const double, const double, double &, double &, double &, double &) const
class Eval_Conv_VDF classe de base des evaluateurs de convection VDF
class Eval_Quick_VDF_Face_Axi Evaluateur VDF pour la convection en coordonnees cylindriques : Le cham...
double dim_elem(int, int) const override
double dim_face(int, int) const override
static constexpr bool CALC_ARR_NAVIER_FL
double dist_elem(int, int, int) const override
static constexpr bool CALC_ARR_PERIO
double dist_face(int, int, int) const
int face_amont_princ(int num_face, int i) const override
double conv_quick_sharp_moins(const double psc, const double vit_0, const double vit_1, const double vit_1_1, const double dx, const double dm, const double dxam) const override
double dist_elem_period(int n1, int n2, int k) const override
double conv_quick_sharp_plus(const double psc, const double vit_0, const double vit_1, const double vit_0_0, const double dx, const double dm, const double dxam) const override
int face_amont_conj(int, int, int) const override
class Eval_Quick_VDF_Face Evaluateur VDF pour la convection Le champ convecte est un Champ_Face_VDF
double dim_elem(int n1, int k) const override
double dim_face(int n1, int k) const override
double dist_elem_period(int n1, int n2, int k) const override
double conv_quick_sharp_plus(const double psc, const double vit_0, const double vit_1, const double vit_0_0, const double dx, const double dm, const double dxam) const override
double conv_quick_sharp_moins(const double psc, const double vit_0, const double vit_1, const double vit_1_1, const double dx, const double dm, const double dxam) const override
int face_amont_princ(int num_face, int i) const override
double dist_face_period(int n1, int n2, int k) const
static constexpr bool IS_QUICK
int face_amont_conj(int num_face, int i, int k) const override
double dist_face(int n1, int n2, int k) const
double dist_elem(int n1, int n2, int k) const override