TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Remailleur_Collision_FT_Thomas.h
1/****************************************************************************
2* Copyright (c) 2015 - 2016, 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 Remailleur_Collision_FT_Thomas_included
17#define Remailleur_Collision_FT_Thomas_included
18
19#include <Remailleur_Collision_FT_Juric.h>
20#include <Transport_Interfaces_FT_Disc.h>
21
22#include <TRUSTTabs_forward.h>
24
25/*! @brief : class Remailleur_Collision_FT_Thomas Cette classe implemente les procedures de remaillage des interfaces pour le Front-Tracking :
26 *
27 *
28 *
29 * @sa Transport_Interfaces_FT_Disc Maillage_FT_Disc
30 */
32{
33 Declare_instanciable_sans_constructeur(Remailleur_Collision_FT_Thomas);
34
35public:
38
39 //Fonctions d'acces aux attributs
40 inline const IntTab& voisinage_sommet() const;
41 inline IntTab& voisinage_sommet();
42 inline const IntTab& next_elem() const;
43 inline IntTab& next_elem();
44 inline const IntTab& distance_interface_element_eulerien() const;
46 inline const IntTab& nombre_de_voisins_plus_proches() const;
47 inline IntTab& nombre_de_voisins_plus_proches();
48 inline const DoubleTab& volume_perdu() const;
49 inline DoubleTab& volume_perdu();
50 inline const DoubleTab& surface_interface_elements_voisins() const;
51 inline DoubleTab& surface_interface_elements_voisins();
52
54 inline int distance_utilisateur() const;
55 inline int est_dimensionne() const;
56
57protected:
58
59 // Fonction qui dimensionne les attributs de type IntTab et DoubleTab
61
62 // Fonction qui construit le voisinage de tous les sommets "s" du maillage eulerien
63 // Voisinage d'un sommet "s" := ensemble des elements du maillage eulerien possedant ce sommet "s"
65
66 // Fonction qui calcule la distance separant les elements euleriens de la
67 // facette de l'interface qui leur est la plus proche, le nombre des voisins
68 // d'un element et la surface d'interface coupant certains elements
70
71 // Fonction qui distribue la perte de volume due au remaillage de l'interface,
72 // a un element "elem" donne qui est traverse par la nouvelle interface remaillee.
74
75 // Fonction qui distribue la perte de volume due au remaillage de l'interface,
77
78 //Fonction qui a chaque sommet du maillage de l'interface associe une partie du
79 //volume perdu dans l'element "elem" lors du remaillage
80 int transport_volume_perdu_sur_sommet(const int, ArrOfDouble&, const Maillage_FT_Disc&) const;
81
82 //Fonction qui a chaque sommet du maillage de l'interface associe une partie du
83 //volume perdu lors du remaillage
84 double transport_volume_perdu_sur_sommet(ArrOfDouble&, const Maillage_FT_Disc&) const;
85
86 //Fonction qui donne la liste des elements voisins a un element "elem" (numero global) donne
87 int elements_voisins(const int, ArrOfInt&, const Domaine_dis_base&) const;
88
89 //Fonction qui donne la liste des elements voisins a un element "elem" (numero global) donne et
90 //situes a une distance de l'interface strictement plus petite que la distance separant "elem"
91 //de l'interface. (normalement la difference des deux distances doit etre de 1)
92 int elements_voisins_a_distance_plus_petite2(const int, ArrOfInt&) const;
93
94 // Fonction qui donne le nombre d'elements voisins a un element "elem" donne
95 int nb_elements_voisins(const int, const Domaine_dis_base&) const;
96
97 //Soit "elem" (numero global) un element du maillage eulerien a distance "n" de l'interface
98 //La fonction renvoie le nombre d'elements voisins de "elem" a distance "n-1"
101
102
103private :
104
105 //Attributs de classe
106 IntTab voisinage_sommet_;
107 IntTab next_elem_;
108 IntTab distance_interface_element_eulerien_;
109 IntTab nombre_de_voisins_plus_proches_;//pour le parallele
110
111 DoubleTab volume_perdu_;
112 DoubleTab surface_interface_elements_voisins_;//pour le parallele
113
114 int plus_grande_distance_interface_element_eulerien_;
115 int distance_utilisateur_ = 1;
116 //int conservation_volume_autorisee_;
117 bool tester_ = false;
118 int est_dimensionne_ = 0;
119
120 ArrOfBit tmp_flag_elements_; // tableau temporaire utilise dans elements_voisins()
121 //Fonction qui renvoie la surface occupee par l'interface
122 //dans un element donne
123 double surface_intersection(const int, const Maillage_FT_Disc&) const;
124
125 //Fonction qui renvoie le domaine discret dans lequel evolue l'interface
126 inline const Domaine_dis_base& domaine_dis(const Maillage_FT_Disc&) const;
127
128 //Fonction qui renvoie le Remaillage conservatif en volume
129 inline const Remaillage_FT& remaillage_FT(const Maillage_FT_Disc&) const;
130 inline Remaillage_FT& remaillage_FT(Maillage_FT_Disc&);
131
132 //Fonctions destinees a tester les autres fonctions membre de la classe
133 void tester(const Maillage_FT_Disc&) const;
134 void tester_interface(const Maillage_FT_Disc&) const;
135 void tester_voisinage(const Maillage_FT_Disc&) const;
136 void tester_distance(const Maillage_FT_Disc&) const;
137 void tester_liste(const Maillage_FT_Disc&) const;
138 void tester_transport(const Maillage_FT_Disc&) const;
139 void tester_transport_complet(const Maillage_FT_Disc&, DoubleTab&) const;
140 void tester_volume_par_sommet(const Maillage_FT_Disc&, const DoubleTab&) const;
141};
142
143
145{
146 return voisinage_sommet_;
147}
148
150{
151 return voisinage_sommet_;
152}
153
155{
156 return next_elem_;
157}
158
160{
161 return next_elem_;
162}
163
165{
166 return distance_interface_element_eulerien_;
167}
168
170{
171 return distance_interface_element_eulerien_;
172}
173
174inline const DoubleTab& Remailleur_Collision_FT_Thomas::volume_perdu() const
175{
176 return volume_perdu_;
177}
178
180{
181 return volume_perdu_;
182}
183
185{
186 return plus_grande_distance_interface_element_eulerien_;
187}
188
189inline const Domaine_dis_base& Remailleur_Collision_FT_Thomas::domaine_dis(const Maillage_FT_Disc& maillage) const
190{
191 return maillage.equation_transport().domaine_dis();
192}
193
194inline const Remaillage_FT& Remailleur_Collision_FT_Thomas::remaillage_FT(const Maillage_FT_Disc& maillage) const
195{
196 return maillage.equation_transport().remaillage_interface();
197}
198
199inline Remaillage_FT& Remailleur_Collision_FT_Thomas::remaillage_FT(Maillage_FT_Disc& maillage)
200{
201 return maillage.equation_transport().remaillage_interface();
202}
203
205{
206 return surface_interface_elements_voisins_;
207}
208
210{
211 return surface_interface_elements_voisins_;
212}
213
215{
216 return nombre_de_voisins_plus_proches_;
217}
218
220{
221 return nombre_de_voisins_plus_proches_;
222}
223
225{
226 return distance_utilisateur_;
227}
228
230{
231 return est_dimensionne_;
232}
233
234#endif
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
: class Maillage_FT_Disc Cette classe decrit un maillage:
Transport_Interfaces_FT_Disc & equation_transport()
: class Remaillage_FT Cette classe implemente les procedures de remaillage des interfaces pour le Fro...
classe Remailleur_Collision_FT_Juric Classe implementant un remailleur d'interfaces entrees en collis...
int mettre_a_jour_data(const Maillage_FT_Disc &)
int transport_volume_perdu_sur_element(const int, const Maillage_FT_Disc &)
int nb_elements_voisins(const int, const Domaine_dis_base &) const
const DoubleTab & surface_interface_elements_voisins() const
int traite_RuptureCoalescenceInterfaces_Conservatif(Maillage_FT_Disc &, Champ_base &) override
algorithme de remaillage qui tente de conserver le volume.
int transport_volume_perdu_sur_sommet(const int, ArrOfDouble &, const Maillage_FT_Disc &) const
int elements_voisins(const int, ArrOfInt &, const Domaine_dis_base &) const
int elements_voisins_a_distance_plus_petite2(const int, ArrOfInt &) const
const IntTab & distance_interface_element_eulerien() const
int construire_voisinage_sommet(const Maillage_FT_Disc &)
int nb_elements_voisins_a_distance_plus_petite(const int, const Domaine_dis_base &) const