TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Remaillage_FT.h
1/****************************************************************************
2* Copyright (c) 2022, 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 Remaillage_FT_included
17#define Remaillage_FT_included
18
19#include <TRUSTTabFT_forward.h>
20#include <Objet_U.h>
21#include <FTd_tools.h>
22#include <TRUST_Ref.h>
23
26class Domaine_VF;
27class Param;
28
29// POUR DEBUGGER LA CONSERVATION DU VOLUME
30#define DEBUG_CONSERV_VOLUME 0
31
32/*! @brief : class Remaillage_FT Cette classe implemente les procedures de remaillage des interfaces pour le Front-Tracking :
33 *
34 *
35 *
36 * @sa Transport_Interfaces_FT_Disc Maillage_FT_Disc
37 */
38class Remaillage_FT : public Objet_U
39{
40 Declare_instanciable_sans_constructeur(Remaillage_FT);
41public:
43 void set_param(Param& p) const override;
44 void associer_domaine(const Domaine_dis_base& domaine_dis);
45
47 int traite_adherence(Maillage_FT_Disc& maillage) const;
48 int traite_decollement(Maillage_FT_Disc& maillage, const DoubleTab& deplacement) const;
49
50 int a_remailler(double temps, const Maillage_FT_Disc& maillage) const;
51 int a_lisser(double temps) const;
52
53 // Remaillage local avec changement des connectivites:
54 void remaillage_local_interface(double temps, Maillage_FT_Disc& maillage);
55
56 // Regularisations du maillage (deplacement des sommets sans changer la connectivite)
57 void corriger_volume(Maillage_FT_Disc& maillage, ArrOfDouble& var_volume);
58 void corriger_volume_(Maillage_FT_Disc& maillage, ArrOfDouble& var_volume, const int nb_iter_corrections_vol);
59 void barycentrer_lisser_systematique(double temps, Maillage_FT_Disc& maillage);
60 void barycentrer_lisser_apres_remaillage(Maillage_FT_Disc& maillage, ArrOfDouble& var_volume);
61
62 int sauvegarder(Sortie& ) const override;
63 int reprendre(Entree&) override;
64
65 double calculer_variation_volume(const Maillage_FT_Disc& maillage,
66 const DoubleTab& position_initiale,
67 ArrOfDouble& varVolume) const;
68
69 void lisser_dvolume(const Maillage_FT_Disc& maillage,
70 ArrOfDouble& var_volume,
71 const int nb_iterations) const;
72
73 virtual void regulariser_courbure(Maillage_FT_Disc& maillage,
74 const double coeff,
75 ArrOfDouble& dvolume) const;
76
81
82 void set_is_solid_particle(const bool is_solid_particle) {is_solid_particle_=is_solid_particle;}
83 const bool& get_is_solid_particle() const {return is_solid_particle_;}
84
85#if DEBUG_CONSERV_VOLUME
86 double calculer_volume_mesh(const Maillage_FT_Disc& mesh) const;
87 double calculer_somme_dvolume(const Maillage_FT_Disc&, const ArrOfDouble&) const;
88#endif
89
90
91protected:
92
93 int tester_a_remailler(const Maillage_FT_Disc& maillage) const;
94
96 ArrOfDouble& var_volume,
97 const double facteur_barycentrage_tangent,
98 const double coeff_lissage,
99 const int nb_iter_barycentrage,
100 const int nb_iter_lissage,
101 const int max_nb_iter_correction_volume,
102 const double seuil_dvolume) const;
103
104 double redistribuer_sommets(Maillage_FT_Disc& maillage,
105 const double relaxation_direction_tangente,
106 const double relaxation_direction_normale,
107 ArrOfDouble& var_volume_impose,
108 ArrOfDouble& var_volume_obtenu) const;
109
111 DoubleTab& barycentres) const;
112
113 int calculer_connectivites_sommetFacettes(const Maillage_FT_Disc& maillage,ArrOfInt& fa7VoisinesSom_index, IntTab& fa7VoisinesSom_data) const;
114 // Used by IJK only:
115 int calculer_correction_deplacement(DoubleTab& deplacement,const ArrOfDouble& varVolume,const DoubleTab& deplacement_varVolume, const ArrOfDouble& norme2_deplacement_varVolume) const;
117 DoubleTab& differentielle_volume) const;
118
119 double calculer_variation_volume_facette_2D(int fa7, const Maillage_FT_Disc& maillage,const DoubleTab& position_initiale) const;
120 double calculer_variation_volume_facette_3D(int fa7, const Maillage_FT_Disc& maillage,const DoubleTab& position_initiale) const;
121
122 virtual double calculer_longueurIdeale2_arete(const Maillage_FT_Disc& maillage, int som0, double x, double y, double z) const;
123 // double calculer_longueurIdeale2_arete(const Maillage_FT_Disc& maillage, int som0, int som1) const;
124 int supprimer_petites_aretes(Maillage_FT_Disc& maillage, ArrOfDouble& varVolume) const;
125 int diviser_grandes_aretes(Maillage_FT_Disc& maillage) const;
126 //int marquer_sommets_petites_aretes(Maillage_FT_Disc& maillage, ArrOfInt & tab_somSupp) const;
127 int marquer_aretes(Maillage_FT_Disc& maillage, IntTab& tab_aretesMarquees, ArrOfInt& tab_somD, DoubleTab& tab_deplacement_somD, int drap) const;
128 int inserer_tab_aretes(int& nb_tab_aretes,IntTab& tab_aretes,DoubleTab& tab_criteres,int pe0, int numOwner0, int pe1, int numOwner1, int face_bord1,int peRequete, int fa7_peR, int iarete_fa7_peR) const;
129 int chercher_arete_tab(int tmp, const ArrOfInt& tab_index, const IntTab& tab_aretes,int pe0, int numOwner0, int pe1, int numOwner1) const;
130 double calculer_volume_sommets_supprimes(const Maillage_FT_Disc& maillage, const ArrOfInt& tab_somSupp,ArrOfDouble& varVolume) const;
131
132 int supprimer_facettes_bord(Maillage_FT_Disc& maillage) const;
134 int permuter_aretes(Maillage_FT_Disc& maillage) const;
135 double qualiteTriangle(const FTd_vecteur3& som0, const FTd_vecteur3& som1, const FTd_vecteur3& som2, double& aire) const;
136
137 int nettoyer_maillage(Maillage_FT_Disc& maillage) const;
138
139 OBS_PTR(Domaine_VF) refdomaine_VF_;
140
141 // Values initialized:
142 double temps_ = 0;
144 double temps_dernier_lissage_ = -1.e40;
145
146 // Values initialized but which can be set in the data file:
147 double dt_remaillage_ = -1.;
148 double dt_lissage_ = -1.;
154
155 // Criteres de longueur ideale des aretes
156 double critere_arete_ = 0.35;
157 int impr_ = -1;
158 // L'un de ces deux vaut -1, l'autre doit etre positif:
162 // L'orientation de la facette pour ajuster sa taille a l'element eulerien.
163 // alors que equilateral=1 utilise la diagonal de l'element comme longueur de reference.
164 // Avec equilateral_ = 0, les facettes sont etirees comme le maillage et facteur_longueur vaut
165 // 1. si l'arete traverse tout l'element dans la direction donnee par l'arrete.
166
167 double variation_volume_ = 0.;
169
170
171 // Coefficient de "diffusion" (en quelque sorte la CFL du schema
172 // de lissage).
173 double lissage_courbure_coeff_ = -0.05; // valeur typique pour stabilite
174 // Nombre d'iterations de lissage a faire lors des operations de lissage (dt_lissage_)
176 // Nombre d'iterations de lissage a faire en cas de remaillage local ou global
177 // (declanche uniquement si le maillage est effectivement modifie)
179 // Ancien parametre de lissage (voir readOn)
181 // Critere local de declenchement du lissage:
182 double lissage_critere_ = 0.; // Default value to 0, when lissage is applied, it is for the whole mesh
183
184 bool is_solid_particle_=false; // for fpi module, pointer to NS_FT_Disc::is_solid_particle_
185};
186
187
188#endif
class Domaine_VF
Definition Domaine_VF.h:44
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
: class Maillage_FT_Disc Cette classe decrit un maillage:
friend class Entree
Definition Objet_U.h:76
friend class Sortie
Definition Objet_U.h:75
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
int calculer_correction_deplacement(DoubleTab &deplacement, const ArrOfDouble &varVolume, const DoubleTab &deplacement_varVolume, const ArrOfDouble &norme2_deplacement_varVolume) const
Cette fonction calcule une correction sur un deplacement liee a une variation de volume imposee Utile...
int supprimer_facettes_bord(Maillage_FT_Disc &maillage) const
Cette fonction marque a supprimer les facettes ayant leurs 3 sommets de bord Marquer a supprimer = co...
double critere_arete_
int diviser_grandes_aretes(Maillage_FT_Disc &maillage) const
Cette fonction divise les grandes aretes en 2.
int sauvegarder(Sortie &) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
int chercher_arete_tab(int tmp, const ArrOfInt &tab_index, const IntTab &tab_aretes, int pe0, int numOwner0, int pe1, int numOwner1) const
int lissage_courbure_iterations_old_
int lissage_courbure_iterations_systematique_
int get_nb_iter_bary_volume_seul()
double regulariser_maillage(Maillage_FT_Disc &maillage, ArrOfDouble &var_volume, const double facteur_barycentrage_tangent, const double coeff_lissage, const int nb_iter_barycentrage, const int nb_iter_lissage, const int max_nb_iter_correction_volume, const double seuil_dvolume) const
Algorithme general de lissage du maillage.
int traite_decollement(Maillage_FT_Disc &maillage, const DoubleTab &deplacement) const
Cette fonction permet de gerer le decollement de l'interface de la paroi Si un sommet de bord n'a pas...
int supprimer_facettes_nulles(Maillage_FT_Disc &maillage) const
Cette fonction "supprime" les facettes de surface nulle : Elle les reduit a 1 sommet (le sommet 0,...
void barycentrer_lisser_systematique(double temps, Maillage_FT_Disc &maillage)
applique barycentrage, lissage et correction de volume.
double variation_volume_
int a_remailler(double temps, const Maillage_FT_Disc &maillage) const
int nb_iter_bary_volume_seul_
virtual double calculer_longueurIdeale2_arete(const Maillage_FT_Disc &maillage, int som0, double x, double y, double z) const
Cette fonction calcule le carre de la longueur ideale d'une arete Dans un premier,...
void set_param(Param &p) const override
Methode appelee par readOn.
double calculer_variation_volume_facette_3D(int fa7, const Maillage_FT_Disc &maillage, const DoubleTab &position_initiale) const
int traite_adherence(Maillage_FT_Disc &maillage) const
Cette fonction permet de gerer l'adherence de l'interface a la paroi Si une facette possede 3 sommets...
double redistribuer_sommets(Maillage_FT_Disc &maillage, const double relaxation_direction_tangente, const double relaxation_direction_normale, ArrOfDouble &var_volume_impose, ArrOfDouble &var_volume_obtenu) const
Deplace les sommets du maillage pour les redistribuer de facon homogene.
int lissage_courbure_iterations_si_remaillage_
int inserer_tab_aretes(int &nb_tab_aretes, IntTab &tab_aretes, DoubleTab &tab_criteres, int pe0, int numOwner0, int pe1, int numOwner1, int face_bord1, int peRequete, int fa7_peR, int iarete_fa7_peR) const
int permuter_aretes(Maillage_FT_Disc &maillage) const
Cette fonction effectue des permutations d'aretes afin d'ameliorer la qualite du maillage.
OBS_PTR(Domaine_VF) refdomaine_VF_
void associer_domaine(const Domaine_dis_base &domaine_dis)
Cette fonction stocke le domaine_dis dans refdomaine_dis_.
int marquer_aretes(Maillage_FT_Disc &maillage, IntTab &tab_aretesMarquees, ArrOfInt &tab_somD, DoubleTab &tab_deplacement_somD, int drap) const
void remaillage_local_interface(double temps, Maillage_FT_Disc &maillage)
Verifie les criteres de remaillage locaux (longueur des aretes) et effectue les remaillages locaux si...
double calculer_variation_volume(const Maillage_FT_Disc &maillage, const DoubleTab &position_initiale, ArrOfDouble &varVolume) const
Cette fonction calcule le volume de phase 0 engendre par chaque sommet lors du deplacement de l'inter...
int nettoyer_maillage(Maillage_FT_Disc &maillage) const
Cette fonction nettoie le maillage : Elle supprime les facettes reduites a 1 sommet.
double calculer_variation_volume_facette_2D(int fa7, const Maillage_FT_Disc &maillage, const DoubleTab &position_initiale) const
Cette fonction calcule la difference de volume au niveau d'une facette par rapport a une position ini...
double lissage_courbure_coeff_
double dt_remaillage_
double facteur_longueur_ideale_
double calculer_volume_sommets_supprimes(const Maillage_FT_Disc &maillage, const ArrOfInt &tab_somSupp, ArrOfDouble &varVolume) const
Cette fonction calcule la variation de volume liee a la suppression de sommets.
int supprimer_doublons_facettes(Maillage_FT_Disc &maillage) const
Cette fonction marque a supprimer les facettes en double.
void set_is_solid_particle(const bool is_solid_particle)
int tester_a_remailler(const Maillage_FT_Disc &maillage) const
double qualiteTriangle(const FTd_vecteur3 &som0, const FTd_vecteur3 &som1, const FTd_vecteur3 &som2, double &aire) const
Cette methode calcule, pour un triangle donne, sa qualite : celle-ci est comprise dans ]0,...
double seuil_dvolume_residuel_
int reprendre(Entree &) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
void lisser_dvolume(const Maillage_FT_Disc &maillage, ArrOfDouble &var_volume, const int nb_iterations) const
Regularise le champ scalaire "var_volume" defini aux sommets du "maillage".
int a_lisser(double temps) const
void corriger_volume_(Maillage_FT_Disc &maillage, ArrOfDouble &var_volume, const int nb_iter_corrections_vol)
double relax_barycentrage_
double temps_dernier_remaillage_
virtual void regulariser_courbure(Maillage_FT_Disc &maillage, const double coeff, ArrOfDouble &dvolume) const
Regularise le maillage en deplacant les sommets pour reduire les gradients de courbure.
void corriger_volume(Maillage_FT_Disc &maillage, ArrOfDouble &var_volume)
deplacement des sommets se sorte a produire la variation de volume prescrite a chaque sommet.
double temps_dernier_lissage_
int calculer_barycentre_facettes_voisines(const Maillage_FT_Disc &maillage, DoubleTab &barycentres) const
Cette fonction calcule pour chaque sommet le barycentre de l'ensemble des facettes voisines du sommet...
int calculer_connectivites_sommetFacettes(const Maillage_FT_Disc &maillage, ArrOfInt &fa7VoisinesSom_index, IntTab &fa7VoisinesSom_data) const
Cette fonction calcule les connectivites sommet ->facettes voisines Les facettes voisines des sommets...
double valeur_longueur_fixe_
int supprimer_petites_aretes(Maillage_FT_Disc &maillage, ArrOfDouble &varVolume) const
A l'aide de "marquer_aretes", on determine les aretes trop petites du maillage.
void barycentrer_lisser_apres_remaillage(Maillage_FT_Disc &maillage, ArrOfDouble &var_volume)
idem mais avec le nombre d'iterations de lissage si remaillage
int calculer_differentielle_volume(const Maillage_FT_Disc &maillage, DoubleTab &differentielle_volume) const
Calcul de la differentielle du volume de phase 0 par rapport au deplacement de chaque sommet de l'int...
double lissage_critere_
double surface_interface_
const bool & get_is_solid_particle() const