TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Op_Diff_VEF_Face_Penalise.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
17#ifndef Op_Diff_VEF_Face_Penalise_included
18#define Op_Diff_VEF_Face_Penalise_included
19#include <Op_Diff_VEF_Face.h>
20#include <Domaine_Cl_VEF.h>
21#include <TRUSTList.h>
22#include <Domaine.h>
23
25{
26
27 Declare_instanciable(Op_Diff_VEF_Face_Penalise);
28
29public :
30 /* Fonction membre calculant la diffusion penalisee.
31 * Elle est surchargee par rapport a sa classe mere.
32 */
33 DoubleTab& ajouter(const DoubleTab& inconnue, DoubleTab& resu) const override;
34 DoubleTab& calculer(const DoubleTab& inconnue, DoubleTab& resu) const override;
35
36protected:
37
38 /* Fonction membre qui renvoie dans la liste Voisinage, l'ensemble
39 * des numeros des faces voisines de la face Numero_face.
40 * On entend par faces voisines, des faces appartenant aux triangles
41 * contenant la face Numero_face.
42 * Rem: Voisinage contient egalement la face Numero_face.
43 */
44 void voisinage(const int Numero_face, IntList& Voisinage) const;
45
46 /* Fonction membre qui renvoie dans la liste Voisinage,
47 * l'ensemble des faces qui constitue le voisinage de la liste
48 * Ensemble_faces.
49 * Rem: Voisinage contient egalement les elements de Ensemble_faces.
50 */
51 void voisinage(const IntList& Ensemble_faces, IntList& Voisinage) const;
52
53 /* Fonction membre qui renvoie le signe adequat pour
54 * le calcul des interactions des fonctions de base des faces
55 * Face1 et Face2 le long d'une autre face.
56 */
57 double signe(const int Face1, const int Face2 ) const;
58
59 /* Fonction membre qui renvoie le coefficient de penalisation
60 * a passer sur chaque arete du maillage primaire.
61 */
62 double coefficient_penalisation(const int Numero_face) const;
63
64 /* Fonction membre qui renvoie la liste Faces_communes des faces
65 * qui appartiennent au voisinage de Face1 ET de Face2
66 */
67 void faces_communes(const int Face1,const int Face2,
68 IntList& Face_commune) const;
69
70 /* Fonction membre qui renvoie la liste Liste_reduite qui est
71 * la soustraction des listes Liste1, Liste2.
72 * Rem: cette fonction regarde dynamiquement les longueurs de
73 * chacune des listes Liste1 et Liste2 avant de s'executer
74 */
75 void reduction(const IntList& Liste1,const IntList& Liste2,
76 IntList& Liste_reduite) const;
77
78 /* Fonction membre qui renvoie le numero de l'element commun
79 * a Face1 et a Face2 s'il existe et renvoie -1 sinon
80 */
81 int element_commun(const int Face1,const int Face2) const;
82
83 /* Fonction membre qui retourne le numero de la 3eme face
84 * d'un element, si Face1 et Face2 appartiennent au meme element.
85 * Sinon retourne -1.
86 */
87 int autre_face(const int Face1, const int Face2) const;
88
89 /* Fonction membre qui retourne le diametre de l'element Element
90 * Rem: on considere que l'on opere en 2D.
91 */
92 inline double diametre(const int Element) const;
93
94 /* Fonction membre qui renvoie la longueur de la face Face
95 * Rem: on considere que l'on opere en 2D.
96 */
97 inline double longueur(const int Face) const;
98
99
100private:
101 /* Fonction membre qui retourne le Domaine_VEF du domaine. */
102 inline const Domaine_VEF& domaine_vef() const;
103
104 /* Fonction membre qui retourne le Domaine du probleme. */
105 inline const Domaine& domaine() const;
106
107 /* Fonction membre qui renvoie le domaine de conditions aux limitex. */
108 inline const Domaine_Cl_VEF& domaine_cl() const;
109
110};
111
112
113
114
115inline double Op_Diff_VEF_Face_Penalise::longueur(const int Face) const
116{
117 double x_sommet1,x_sommet2;
118 double y_sommet1,y_sommet2;
119
120 int sommet1 = domaine_vef().face_sommets(Face,0);
121 int sommet2 = domaine_vef().face_sommets(Face,1);
122
123 x_sommet1 = domaine().coord(sommet1,0);
124 y_sommet1 = domaine().coord(sommet1,1);
125
126 x_sommet2 = domaine().coord(sommet2,0);
127 y_sommet2 = domaine().coord(sommet2,1);
128
129 return sqrt( pow(x_sommet1 - x_sommet2,2) + pow(y_sommet1 - y_sommet2,2) );
130}
131
132inline double Op_Diff_VEF_Face_Penalise::diametre(const int Element) const
133{
134 int face1,face2,face3;
135 double longueur_face1,longueur_face2,longueur_face3;
136 double longueur_max,diametre_element;
137
138 face1 = domaine_vef().elem_faces(Element,0);
139 face2 = domaine_vef().elem_faces(Element,1);
140 face3 = domaine_vef().elem_faces(Element,2);
141
142 longueur_face1 = longueur(face1);
143 longueur_face2 = longueur(face2);
144 longueur_face3 = longueur(face3);
145
146 longueur_max = longueur_face1 >= longueur_face2 ? longueur_face1 :
147 longueur_face2;
148 diametre_element = longueur_face3 >= longueur_max ? longueur_face3 :
149 longueur_max;
150
151 return diametre_element;
152}
153
155{
156 return le_dom_vef.valeur();
157}
158
159inline const Domaine_Cl_VEF& Op_Diff_VEF_Face_Penalise::domaine_cl() const
160{
161 return la_zcl_vef.valeur();
162}
163
164inline const Domaine& Op_Diff_VEF_Face_Penalise::domaine() const
165{
166 return domaine_vef().domaine();
167}
168
169
170#endif
class Domaine_VEF
Definition Domaine_VEF.h:54
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
const Domaine & domaine() const
void reduction(const IntList &Liste1, const IntList &Liste2, IntList &Liste_reduite) const
void faces_communes(const int Face1, const int Face2, IntList &Face_commune) const
fonction membre qui renvoie la liste des faces appartenant au voisinage de Face1 ET de Face2.
double signe(const int Face1, const int Face2) const
double diametre(const int Element) const
DoubleTab & ajouter(const DoubleTab &inconnue, DoubleTab &resu) const override
methode qui calcule la vitesse au temps n+1 lorsque le schema explicite est utilise.
void voisinage(const int Numero_face, IntList &Voisinage) const
methode qui calcule le voisinage d'une face.
DoubleTab & calculer(const DoubleTab &inconnue, DoubleTab &resu) const override
methode qui calcule la contribution de l'operateur.
double coefficient_penalisation(const int Numero_face) const
fonction membre qui retourne le coefficient de penalisation associee a chaque face du maillage primai...
double longueur(const int Face) const
int autre_face(const int Face1, const int Face2) const
fonction membre qui retourne la 3eme face de l'element Element si Face1 et Face2 appartiennent au mem...
int element_commun(const int Face1, const int Face2) const
fonction membre qui renvoie le numero de l'element contenant Face1 et Face2 s'il existe et renvoie -1...
const Domaine_VEF & domaine_vef() const