TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Transport_Marqueur_FT.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 Transport_Marqueur_FT_included
17#define Transport_Marqueur_FT_included
18
19#include <Transport_Interfaces_FT_Disc.h>
20#include <Marqueur_FT.h>
21
22enum Methode_calcul_vp { INTERPOLEE, BILAN_QDM };
23enum Methode_couplage { SUIVI, ONE_WAY_COUPLING, TWO_WAY_COUPLING };
24
25//Description
26//Classe chargee de la gestion des particules (ponctuelles ou materielles)
27
28//La presence de particules dans l ecoulement peut resulter :
29//- d une distribution en condition initiale
30//- d une injection periodique en temps
31//- d une transformation d une inclusion d une phase dans une autre (cas diphasique)
32
33//L integration des trajectoires des particules est faite a partir d un champ de vitesse resultant soit :
34//- d une interpolation du champ de vitesse du fluide aux positions des particules (methode_calcul_vp_=INTERPOLEE
35// ou methode_couplage_=SUIVI)
36//- d un bilan de q.d.m. des particules (methode_calcul_vp_=BILAN_QDM) pour ce dernier cas on peut prendre en compte
37// uniquement l action du fluide sur les particules (methode_couplage_=ONE_WAY_COUPLING) ou tenir compte en plus
38// de la reaction des particules (methode_couplage_=TWO_WAY_COUPLING)
39
40//La classe declenche ou realise les operations de lecture, d actualisation ou de postraitement
41//concernant les attributs maillage_interface et proprietes_particules_ ou encore
42//maillage_inject_ et proprietes_inject_ (portes par Transport_Interfaces_FT_Disc_interne)
43//
44//maillage_interface (ou maillage_inject_) designe ici un ensemble de points sans notion de facettes
45//proprietes_particules_ (ou proprietes_inject_) est un objet portant les proprietes physiques
46// des particules (voir Proprietes_part_vol)
47
48//Rq : Dans la version actuelle, les particules ponctuelles sont distinguees des particules materielles
49// par l attribut nb_particules_ de Proprietes_part_vol (nb_particules_ = 0 dans le cas de particules ponctuelles)
50
51//La classe porte aussi les proprietes du fluide (vit_fluide_som_ ...) estimees aux positions de particules.
52//Ces quantites sont necessaires pour estimer les sources intervenant dans le bilan de q.d.m. des particules
53//(methode_calcul_vp_=BILAN_QDM)
54
55//Description succinte des operations mises en jeu pour realiser le transport des particules
56//Actualisation :
57//-initTimestep() : injection, transformation
58// evaluation des proprietes du fluide
59// mise a jour des conditions limites
60// calcul des sources (Trainee, ...)
61// actualisation de delta_v
62//-mettre_a_jour() : calcul de la vitesse des particules
63// transport des particules
64
65
66
68{
69 Declare_instanciable_sans_constructeur(Transport_Marqueur_FT);
70public:
71
73 void set_param(Param& titi) const override;
74 int lire_motcle_non_standard(const Motcle&, Entree&) override;
75 Entree& lire_cond_init(Entree& is) override;
76 Entree& lire_cl(Entree&) override;
79
80 void discretiser() override;
81 int preparer_calcul() override;
82 void completer() override;
83
84 void mettre_a_jour(double temps) override;
85 bool initTimeStep(double dt) override;
86 void imposer_cond_lim();
87 static void appliquer_reflexion_vitesse(const double x, const double y, const double z,
88 const int som,int& face_bord,
89 const Domaine_VF& domaine_vf,
90 DoubleTab& vitesse);
91
92 //Effectue l integration d un ensemble de points (sans notion de facettes)
93 void integrer_ensemble_lagrange(const double temps) override;
94
95 //Calcul des proprietes du fluide aux positions des particule
97 //Calcul de la vitesse des particules (interpolation ou bilan de qdm)
98 void calcul_vitesse_p(DoubleTab& deplacement) const;
99
100 //Resolution du bilan de qdm des particules
101 void resoudre_edo(DoubleTab& vitesse_p, DoubleTab& source_stockage, const double delta_t);
102
103 //Actualiser d une partie ou tout le tableau delta_v
104 void update_delta_v(int n_deb,int n_fin,const Maillage_FT_Disc& ens_points,int calc=1);
105 //Methodes pour le parallelisme des proprietes de particules
107 Proprietes_part_vol& proprietes);
109 Proprietes_part_vol& proprietes);
110
111 inline int linject(double temps) const;
112 void injecter(double temps);
113 void injection(const Maillage_FT_Disc& maill_inject,const Proprietes_part_vol& propr_inject);
115
116 inline int ltransfo(double temps) const;
117 void transformer(double temps);
119
120 void transformation(Maillage_FT_Disc& maillage,Proprietes_part_vol& proprietes);
121
122 void calcul_proprietes_geometriques(const IntVect& num_compo,
123 const int nb_compo_glob,
124 const DoubleTab& indic,
125 ArrOfDouble& volumes,
126 DoubleTab& positions);
127
128 void detection_groupes_a_supprimer(const ArrOfDouble& volumes,
129 const DoubleTab& positions,
130 ArrOfInt& flags_compo_a_supprimer);
131
132 void construction_ensemble_proprietes(const IntVect& num_compo,
133 const int nb_compo,
134 Maillage_FT_Disc& ens_points,
135 Proprietes_part_vol& propri,
136 const ArrOfInt& flags_compos_a_supprimer,
137 const DoubleTab& positions,
138 const ArrOfDouble& volumes);
139
140 //On surcharge les deux methodes suivantes pour quelle ne fasse rien
141 int sauvegarder(Sortie& ) const override;
142 int reprendre(Entree&) override;
143
144 //Methodes de l interface des champs postraitables (champs euleriens)
145 /////////////////////////////////////////////////////
146 //Methode creer_champ pas codee a surcharger si necessaire
147 void creer_champ(const Motcle& motlu) override;
148 const Champ_base& get_champ(const Motcle& nom) const override;
149 bool has_champ(const Motcle& nom, OBS_PTR(Champ_base) &ref_champ) const override;
150 bool has_champ(const Motcle& nom) const override;
151 void get_noms_champs_postraitables(Noms& nom,Option opt=NONE) const override;
152 /////////////////////////////////////////////////////
153
154 //methodes utilisees pour le post-traitement des quantites lagrangiennes
155 int get_champ_post_FT(const Motcle& champ, Postraitement_base::Localisation loc, DoubleTab *ftab = 0) const override;
156 int get_champ_post_FT(const Motcle& champ, Postraitement_base::Localisation loc, IntTab *itab = 0) const override;
157
158 const DoubleTab& calculer_valeurs_densite(DoubleTab& val_densite) const;
159 const DoubleTab& calculer_valeurs_volumes(DoubleTab& val_volume) const;
160
161
162 const Champ_Inc_base& inconnue() const override; //renvoie un champ bidon
163 Champ_Inc_base& inconnue() override;
164
165 //Methodes d acces aux tableaux contenant les proprietes du fluide
166 inline const DoubleTab& vitesse_fluide() const;
167 inline const DoubleTab& rho_fluide() const;
168 inline const DoubleTab& visco_dyn_fluide() const;
169 inline const DoubleTab& grad_pression() const;
170
171 inline const double& temps_debut_integration() const;
172 inline const double& dela_t() const;
173 inline const int& resol_implicite() const;
174
175 //Methode d acces au terme source stocke (somme de chacune des sources)
176 inline const DoubleTab& source_stockage() const;
177
178protected:
179
180 OWN_PTR(Champ_Fonc_base) densite_particules_; //Exprime le nombre de particules par maille
181 OWN_PTR(Champ_Fonc_base) volume_particules_; //Exprime le volume des particules par maille
182
183 double t_debut_integr_; //Instant de demarrage de l integration
184 double t_debut_inject_; //Instant de la premiere injection
185 double t_debut_transfo_; //Instant de la premiere transformation
186 double t_derniere_inject_; //Instant de la derniere injection realisee
187 double t_derniere_transfo_; //Instant de la derniere transformation realisee
188 double dt_inject_; //periode d injection
189 double dt_transfo_; //periode de transformation
190
191 Noms nom_sz_transfo_; //Noms des sous_domaines ou l on impose eventuellement un transformation
192 double diametre_min_; //Diametre minimum pour declencher une transformation
193 double beta_transfo_; //Parametre multiplicatif du volume de controle
194
195 double dt_p_; //Pas de temps pour la resolution du bilan de q.d.m.
196 int nb_it_; //dt_p_ = dt_/nb_it_
197
198 int implicite_; //Activation de la resolution implicite (pour masse ajoutee)
199
200 // L'inconnue de cette equation n a pas de sens
201 //Creation d un champ bidon
202 OWN_PTR(Champ_Inc_base) champ_bidon_;
203
204 int phase_marquee_; //numero de la phase marquee par des particules (-1 pour cas monophasique)
205 Nom nom_eq_interf_; //Pour recuperer l equation d interface entre les deux phases
206 Methode_calcul_vp methode_calcul_vp_; //Interpolation (INTERPOLEE par defaut) ou resolution du bilan de qdm des particules (BILAN_QDM)
207 Methode_couplage methode_couplage_; //Pas de couplage (SUIVI par defaut)
208 //Action des particules sur le fluide (ONE_WAY_COUPLING)
209 //+action des particules sur le fluide (TWO_WAY_COUPLING)
210
211 //Tableaux contenant les proprietes du fluide aux positions des particules
215 DoubleTab grad_P_som_;
216
217 int contrib_one_way; //Pour supprimer l action du fluide sur les particules (contrib_one_way=0)
218 //par defaut contrib_one_way=1
219
220 DoubleTab source_stockage_; //Tableau qui sert a stocker la contribution des termes sources
221
222
223
224};
225
226
228{
229 return t_debut_integr_;
230}
231
232inline const double& Transport_Marqueur_FT::dela_t() const
233{
234 return dt_p_;
235}
236
238{
239 return implicite_;
240}
241
242
243inline const DoubleTab& Transport_Marqueur_FT::vitesse_fluide() const
244{
245 return vit_fluide_som_;
246}
247
248inline const DoubleTab& Transport_Marqueur_FT::rho_fluide() const
249{
250 return rho_fluide_som_;
251}
252
253inline const DoubleTab& Transport_Marqueur_FT::visco_dyn_fluide() const
254{
256}
257
258inline const DoubleTab& Transport_Marqueur_FT::grad_pression() const
259{
260 return grad_P_som_;
261}
262
263inline const DoubleTab& Transport_Marqueur_FT::source_stockage() const
264{
265 return source_stockage_;
266}
267
268inline int Transport_Marqueur_FT::linject(double temps) const
269{
270 if ((sup_ou_egal(temps,t_debut_inject_)) && (sup_strict(temps-t_derniere_inject_,dt_inject_)))
271 return 1;
272 else
273 return 0;
274}
275
276inline int Transport_Marqueur_FT::ltransfo(double temps) const
277{
278 if ((sup_ou_egal(temps,t_debut_transfo_)) && (sup_strict(temps-t_derniere_transfo_,dt_transfo_)))
279 return 1;
280 else
281 return 0;
282}
283
284#endif
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
Classe Champ_Inc_base.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
class Domaine_VF
Definition Domaine_VF.h:44
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
: class Maillage_FT_Disc Cette classe decrit un maillage:
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
Classe qui porte les proprietes de particules.
Classe de base des flux de sortie.
Definition Sortie.h:52
Transport_Interfaces_FT_Disc()
constructeur par defaut
const Maillage_FT_Disc & maillage_inject() const
OBS_PTR(Probleme_base) probleme_base_
const DoubleTab & grad_pression() const
int linject(double temps) const
void creer_champ(const Motcle &motlu) override
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
int get_champ_post_FT(const Motcle &champ, Postraitement_base::Localisation loc, DoubleTab *ftab=0) const override
Cherche le champ discret aux interfaces dont le nom est "champ", et verifie qu'il peut etre postraite...
int ltransfo(double temps) const
OWN_PTR(Champ_Fonc_base) volume_particules_
int reprendre(Entree &) override
On reprend l'inconnue a partir d'un flot d'entree.
Methode_couplage methode_couplage_
const DoubleTab & vitesse_fluide() const
void mettre_a_jour(double temps) override
La valeur de l'inconnue sur le pas de temps a ete calculee.
void calcul_proprietes_geometriques(const IntVect &num_compo, const int nb_compo_glob, const DoubleTab &indic, ArrOfDouble &volumes, DoubleTab &positions)
const double & dela_t() const
void construction_ensemble_proprietes(const IntVect &num_compo, const int nb_compo, Maillage_FT_Disc &ens_points, Proprietes_part_vol &propri, const ArrOfInt &flags_compos_a_supprimer, const DoubleTab &positions, const ArrOfDouble &volumes)
const DoubleTab & calculer_valeurs_densite(DoubleTab &val_densite) const
const DoubleTab & visco_dyn_fluide() const
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
Entree & lire_transformation(Entree &is)
void calcul_vitesse_p(DoubleTab &deplacement) const
Entree & lire_injection(Entree &is)
const DoubleTab & source_stockage() const
const Champ_Inc_base & inconnue() const override
OWN_PTR(Champ_Fonc_base) densite_particules_
const double & temps_debut_integration() const
void completer() override
Complete la construction (initialisation) des objets : maillage_interface et proprietes_particules_.
void integrer_ensemble_lagrange(const double temps) override
void discretiser() override
Discretisation des champs: - indicatrice_ : champ scalaire discretise aux elements.
void update_tableaux_apres_transport(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
OWN_PTR(Champ_Inc_base) champ_bidon_
const int & resol_implicite() const
int preparer_calcul() override
Tout ce qui ne depend pas des autres problemes eventuels.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void update_delta_v(int n_deb, int n_fin, const Maillage_FT_Disc &ens_points, int calc=1)
const DoubleTab & rho_fluide() const
void transformation(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
const Champ_base & get_champ(const Motcle &nom) const override
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Entree & lire_cond_init(Entree &is) override
Lecture des conditions initiales dans un flot d'entree.
void calculer_proprietes_fluide_pos_particules(const Maillage_FT_Disc &ens_points)
Entree & lire_cl(Entree &) override
Lecture des conditions limites sur un flot d'entree.
const DoubleTab & calculer_valeurs_volumes(DoubleTab &val_volume) const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
void ajouter_points(const Maillage_FT_Disc &maillage_inject)
void preparer_tableaux_avant_transport(Maillage_FT_Disc &maillage, Proprietes_part_vol &proprietes)
void detection_groupes_a_supprimer(const ArrOfDouble &volumes, const DoubleTab &positions, ArrOfInt &flags_compo_a_supprimer)
void resoudre_edo(DoubleTab &vitesse_p, DoubleTab &source_stockage, const double delta_t)
static void appliquer_reflexion_vitesse(const double x, const double y, const double z, const int som, int &face_bord, const Domaine_VF &domaine_vf, DoubleTab &vitesse)
void injection(const Maillage_FT_Disc &maill_inject, const Proprietes_part_vol &propr_inject)
void set_param(Param &titi) const override
Methode_calcul_vp methode_calcul_vp_