TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Navier_Stokes_FT_Disc.h
1/****************************************************************************
2* Copyright (c) 2024, 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 Navier_Stokes_FT_Disc_included
17#define Navier_Stokes_FT_Disc_included
18
19#include <Convection_Diffusion_Temperature_FT_Disc.h>
20#include <Navier_Stokes_FT_Disc_interne.h>
21#include <Navier_Stokes_Turbulent.h>
22#include <type_traits>
23#include <TRUST_Ref.h>
24#include <Collision_Model_FT_base.h>
25
29
31{
32 Declare_instanciable(Navier_Stokes_FT_Disc);
33public:
35
36 void set_param(Param& titi) const override;
37 int lire_motcle_non_standard(const Motcle&, Entree&) override;
38 const Milieu_base& milieu() const override;
39 Milieu_base& milieu() override;
40 void associer_pb_base(const Probleme_base& probleme) override;
41 void discretiser() override;
42 std::vector<YAML_data> data_a_sauvegarder() const override;
43 int sauvegarder(Sortie&) const override;
44 int reprendre(Entree&) override;
45 int preparer_calcul() override;
46 void mettre_a_jour(double temps) override;
47 void mettre_a_jour_physical_properties(double temps);
48 void calculer_la_pression_en_pa() override;
49 DoubleTab& derivee_en_temps_inco(DoubleTab& vpoint) override;
50 void projeter() override;
52 void correct_at_exit_bad_gradient(DoubleTab& u0) const;
53 void calculer_delta_u_interface(Champ_base& u0, int phase_pilote, int ordre, const bool future_or_past = false);
54 void shift_secmem2(DoubleTab& shift_secmem2);
55 const Champ_Don_base& diffusivite_pour_transport() const override;
56
57 virtual const Champ_base* get_delta_vitesse_interface() const;
58 virtual const Fluide_Diphasique& fluide_diphasique() const;
59
61 const DoubleVect& volumes_entrelaces, const IntVect& orientation, const DoubleTab& indicatrice, const ArrOfDouble& g, DoubleTab& gravite_face) const;
62
63 int is_terme_gravite_rhog() const;
64 const Champ_Fonc_base& champ_rho_faces() const;
65
66 virtual void calculer_dI_dt(DoubleVect& dI_dt, const DoubleTab& tab_vitesse); // const;
67 const int& get_is_penalized() const;
68 bool get_new_mass_source() const;
69 bool is_shift_secmem2_activated() const ;
70 const DoubleTab& get_interfacial_area() const;
71 DoubleTab& get_set_interfacial_area(); // Open access in write-mode..
72 const DoubleTab& get_mpoint() const;
73 DoubleTab& get_set_mpoint(); // Open access to mpoint in write-mode...
74 //void corriger_mpoint(); // Apply correction based on TCL model
75
76 const SolveurSys& get_solveur_pression() const;
77
80 // both following methods should be protected but Transport_Interfaces_FT_Disc is not a friend of NS_FT_Disc...
82 void swap_particles_eulerian_id_number(const ArrOfInt& gravity_center_elem);
83
84 DoubleTab& get_set_velocity_field_Stokes_th() { return velocity_field_Stokes_th_->valeurs(); }
85 DoubleTab& get_set_pressure_field_Stokes_th() { return pressure_field_Stokes_th_->valeurs(); }
86
87protected:
88
89 // Methode surchargee de Navier_Stokes_std :
90 void discretiser_assembleur_pression() override;
91 void associer_milieu_base(const Milieu_base& fluide) override;
92
93 // Nouvelles methodes
94 virtual const Probleme_FT_Disc_gen& probleme_ft() const;
96 virtual void calculer_champ_forces_superficielles(const Maillage_FT_Disc& maillage, const Champ_base& gradient_indicatrice, Champ_base& potentiel_elements, Champ_base& potentiel_faces,
97 Champ_base& champ);
98 virtual void calculer_gradient_indicatrice(const Champ_base& indicatrice, const DoubleTab& distance_interface_sommets, Champ_base& gradient_i);
99
100 // for fpi module
101 void set_is_solid_particle(const bool& is_solid_particle) { is_solid_particle_=is_solid_particle; }
102 void set_id_fluid_phase(const int& id_fluid_phase) { id_fluid_phase_=id_fluid_phase; }
103
104 void compute_eulerian_field_contact_forces(const Maillage_FT_Disc& mesh, const Champ_base& field_volumic_phase_indicator_function);
105
106 void eulerian_discretization_contact_forces(const DoubleTab& volumic_phase_indicator_function, const DoubleTab& interlaced_volumes, const DoubleTab& eu);
108
109 // Masse volumique calculee aux elements
110 OWN_PTR(Champ_Fonc_base) champ_rho_elem_;
111 // Masse volumique calculee pour les volumes de controle de la vitesse
112 // (pour division v = (rho.v) / rho et pour matrice de pression)
113 OWN_PTR(Champ_Fonc_base) champ_rho_faces_;
114 // Viscosite dynamique (calcul dans preparer_pas_de_temps)
115 // champ du type requis pour l'operateur diffusion.
117 // Viscosite cinematique pour le calcul du pas de temps de diffusion
119
120 // for fpi_module
121 bool is_solid_particle_=false; // pointer to Fluide_Diphasique::is_solid_particle_
122 int id_fluid_phase_=1; // number (0 or 1) of the Fluid_Incompressible phase
124 OWN_PTR(Champ_Fonc_base) particles_eulerian_id_number_post_; // for post-processing only
125 OWN_PTR(Champ_Fonc_base) velocity_field_Stokes_th_;
126 OWN_PTR(Champ_Fonc_base) pressure_field_Stokes_th_;
127
128private:
129 const Navier_Stokes_FT_Disc_interne& variables_internes() const;
130 Navier_Stokes_FT_Disc_interne& variables_internes();
131
132 // Ne pas utiliser ce pointeur : utiliser variables_internes() a la place !
133 Navier_Stokes_FT_Disc_interne variables_internes_;
134
135 double minx = -123., maxx = -123., pente = -123.;
136 bool is_repulsion = false;
137 bool correction_diffusion_pch_ = false;
138};
139
140#endif /* Navier_Stokes_FT_Disc_included */
classe Champ_Don_base classe de base des Champs donnes (non calcules)
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
: class Collision_Model_FT
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
: class Maillage_FT_Disc Cette classe decrit un maillage:
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
const DoubleTab & get_mpoint() const
DoubleTab & get_set_velocity_field_Stokes_th()
void associer_milieu_base(const Milieu_base &fluide) override
virtual void calculer_gradient_indicatrice(const Champ_base &indicatrice, const DoubleTab &distance_interface_sommets, Champ_base &gradient_i)
Calcul du gradient de l'indicatrice.
DoubleTab & derivee_en_temps_inco(DoubleTab &vpoint) override
Calcul de la derivee en temps de la vitesse.
void projeter() override
methode appelee par Navier_Stokes_std::preparer_calcul.
const SolveurSys & get_solveur_pression() const
virtual const Champ_base * get_delta_vitesse_interface() const
Si le champ de vitesse est discontinu (calcul avec changement de phase), renvoie un pointeur vers le ...
void discretiser_assembleur_pression() override
Methode surchargee de Navier_Stokes_std, appelee par Navier_Stokes_std::discretiser().
void set_id_fluid_phase(const int &id_fluid_phase)
void calculer_delta_u_interface(Champ_base &u0, int phase_pilote, int ordre, const bool future_or_past=false)
Calcul du saut de vitesse a l'interface du au changement de phase.
virtual void calculer_champ_forces_superficielles(const Maillage_FT_Disc &maillage, const Champ_base &gradient_indicatrice, Champ_base &potentiel_elements, Champ_base &potentiel_faces, Champ_base &champ)
Calcul des forces de tension superficielles (F_sigma) et de la partie a rotationnel non nul de la gra...
void compute_particles_eulerian_id_number(const OWN_PTR(Collision_Model_FT_base)&collision_model_ptr)
const DoubleTab & get_interfacial_area() const
void mettre_a_jour(double temps) override
La valeur de l'inconnue sur le pas de temps a ete calculee.
int preparer_calcul() override
methode appelee par Probleme_base::preparer_calcul()
void eulerian_discretization_contact_forces(const DoubleTab &volumic_phase_indicator_function, const DoubleTab &interlaced_volumes, const DoubleTab &eu)
void associer_pb_base(const Probleme_base &probleme) override
S'associe au Probleme passe en parametre.
const int & get_is_penalized() const
void compute_boussinesq_additional_gravity(const Convection_Diffusion_Temperature_FT_Disc &eq, const Fluide_Diphasique &fluide_diphasique, const IntTab &face_voisins, const DoubleVect &volumes_entrelaces, const IntVect &orientation, const DoubleTab &indicatrice, const ArrOfDouble &g, DoubleTab &gravite_face) const
OWN_PTR(Champ_Fonc_base) champ_rho_elem_
const Milieu_base & milieu() const override
OBS_PTR(Probleme_FT_Disc_gen) probleme_ft_
virtual const Probleme_FT_Disc_gen & probleme_ft() const
OWN_PTR(Champ_Don_base) champ_mu_
OWN_PTR(Champ_Don_base) champ_nu_
void shift_secmem2(DoubleTab &shift_secmem2)
void compute_eulerian_field_contact_forces(const Maillage_FT_Disc &mesh, const Champ_base &field_volumic_phase_indicator_function)
int reprendre(Entree &) override
On reprend l'inconnue a partir d'un flot d'entree.
void set_param(Param &titi) const override
virtual void calculer_dI_dt(DoubleVect &dI_dt, const DoubleTab &tab_vitesse)
virtual const Fluide_Diphasique & fluide_diphasique() const
OWN_PTR(Champ_Fonc_base) particles_eulerian_id_number_post_
int sauvegarder(Sortie &) const override
On sauvegarde l'inconnue, puis les sources sur un flot de sortie.
const Champ_Don_base & diffusivite_pour_transport() const override
void set_is_solid_particle(const bool &is_solid_particle)
void calculer_la_pression_en_pa() override
In Front Tracking, pression is in Pa and so pression_pa field <=> pression field.
void discretiser() override
Discretisation des champs utilises dans cette equation.
virtual const Champ_base & calculer_div_normale_interface()
void correct_at_exit_bad_gradient(DoubleTab &u0) const
friend class Post_Processing_Hydrodynamic_Forces
OWN_PTR(Champ_Fonc_base) velocity_field_Stokes_th_
OWN_PTR(Champ_Fonc_base) pressure_field_Stokes_th_
std::vector< YAML_data > data_a_sauvegarder() const override
for PDI IO: retrieve name, type and dimensions of the fields to save/restore
void mettre_a_jour_physical_properties(double temps)
const IntTab & get_particles_eulerian_id_number() const
void swap_particles_eulerian_id_number(const ArrOfInt &gravity_center_elem)
const Champ_Fonc_base & champ_rho_faces() const
DoubleTab & get_set_pressure_field_Stokes_th()
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.
OWN_PTR(Champ_Fonc_base) champ_rho_faces_
classe Navier_Stokes_Turbulent Cette classe represente l'equation de la dynamique pour un fluide
const Fluide_base & fluide() const
Renvoie le fluide incompressible (milieu physique de l'equation) associe a l'equation.
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
class SolveurSys Un SolveurSys represente n'importe qu'elle classe
Definition SolveurSys.h:32
Classe de base des flux de sortie.
Definition Sortie.h:52