TrioCFD 1.9.9_beta
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 */
class Champ_Don_base base class of Given Fields (not calculated)
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
class Champ_base This class is the base of the fields hierarchy.
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()
Returns the problem associated with the equation.
: class Maillage_FT_Disc Cette classe decrit un maillage:
Milieu_base This class is the base of the (physical) medium hierarchy.
Definition Milieu_base.h:50
A character string (Nom) in uppercase.
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
The value of the unknown at the time step has been calculated.
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
Associates with the Problem passed as parameter.
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
We resume the unknown from an input stream.
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
We save the unknown, then the source terms to an output stream.
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
Reads non-simple-type parameters of an Objet_U from an input stream.
OWN_PTR(Champ_Fonc_base) champ_rho_faces_
Navier-Stokes equation for a viscous incompressible fluid (div U = 0) with turbulence modelling.
const Fluide_base & fluide() const
Returns the incompressible fluid (physical medium of the equation) associated with the equation.
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
class Probleme_base It is a Probleme_U that is not a coupling.
class SolveurSys A SolveurSys represents any class
Definition SolveurSys.h:32
Base class for output streams.
Definition Sortie.h:52