TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
QDM_Multiphase.h
1/****************************************************************************
2* Copyright (c) 2026, 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 QDM_Multiphase_included
17#define QDM_Multiphase_included
18
19#include <Operateur_Evanescence.h>
20#include <Navier_Stokes_std.h>
21#include <vector>
22
23/*! @brief classe QDM_Multiphase Cette classe porte les termes de l'equation de la dynamique
24 *
25 * pour un fluide sans modelisation de la turbulence.
26 * On suppose l'hypothese de fluide quasi compressible.
27 * Sous ces hypotheses, on utilise la forme suivante des equations de
28 * Navier_Stokes:
29 * DU/dt = div(terme visqueux) - gradP/rho + sources/rho
30 * div U = W
31 * avec DU/dt : derivee particulaire de la vitesse
32 * rho : masse volumique
33 * Rq : l'implementation de la classe permet bien sur de negliger
34 * certains termes de l'equation (le terme visqueux, le terme
35 * convectif, tel ou tel terme source).
36 * L'inconnue est le champ de vitesse.
37 *
38 * @sa Equation_base Pb_Thermohydraulique_QC Navier_Stokes_std
39 */
41{
42 Declare_instanciable(QDM_Multiphase);
43
44public :
45
46 void set_param(Param& param) const override;
47 int lire_motcle_non_standard(const Motcle&, Entree&) override;
48 void completer() override;
49 void discretiser_vitesse() override;
50 void discretiser_grad_p() override;
51 void mettre_a_jour(double temps) override;
52 int impr(Sortie& os) const override
53 {
54 return Equation_base::impr(os); //idem
55 }
56 bool initTimeStep(double dt) override;
57 void abortTimeStep() override;
58
59 void dimensionner_matrice_sans_mem(Matrice_Morse& matrice) override;
60
61 /*
62 interface {dimensionner,assembler}_blocs
63 specificites : prend en compte l'evanescence (en dernier)
64 */
65 int has_interface_blocs() const override;
66 void dimensionner_blocs(matrices_t matrices, const tabs_t& semi_impl = {}) const override;
67 const Champ_Don_base& diffusivite_pour_transport() const override;
68 const Champ_base& diffusivite_pour_pas_de_temps() const override;
69 const Champ_base& vitesse_pour_transport() const override;
70 void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab& secmem, const tabs_t& semi_impl = {}) override;
71 void creer_champ(const Motcle& motlu) override;
72 void get_noms_champs_postraitables(Noms& nom,Option opt=NONE) const override;
73
74 double alpha_res() const ;
75
76protected:
77 Entree& lire_cond_init(Entree&) override; //pour lire la pression
78 int preparer_calcul() override; //appelle la methode de Equation_base
79
80 std::vector<OWN_PTR(Champ_Inc_base)> vit_phases_; //vitesses de chaque phase
82
83 std::vector<OWN_PTR(Champ_Fonc_base)> grad_vit_phases_; //gradient des vitesses de chaque phase
85
87};
88
89#endif /* QDM_Multiphase_included */
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
Classe Champ_Inc_base.
virtual int impr(Sortie &os) const
Imprime les operateurs de l'equation sur un flot de sortie, de facon inconditionnelle.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Un tableau d'objets de la classe Motcle.
Definition Motcle.h:63
OWN_PTR(Assembleur_base) &assembleur_pression()
friend class Entree
Definition Objet_U.h:76
friend class Sortie
Definition Objet_U.h:75
classe Operateur_Evanescence Classe generique de la hierarchie des operateurs representant un terme
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
classe QDM_Multiphase Cette classe porte les termes de l'equation de la dynamique
void completer() override
Complete l'equation base, associe la pression a l'equation,.
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const override
bool initTimeStep(double dt) override
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Operateur_Evanescence evanescence_
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_Don_base & diffusivite_pour_transport() const override
void creer_champ(const Motcle &motlu) override
Motcles noms_grad_vit_phases_
void discretiser_vitesse() override
std::vector< OWN_PTR(Champ_Inc_base)> vit_phases_
const Champ_base & vitesse_pour_transport() const override
void discretiser_grad_p() override
void abortTimeStep() override
Reinitialiser ce qui doit l'etre.
int preparer_calcul() override
cf Equation_base::preparer_calcul() Assemblage du solveur pression et
void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) override
double alpha_res() const
Entree & lire_cond_init(Entree &) override
Lecture des conditions initiales dans un flot d'entree.
void set_param(Param &param) const override
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps de l'equation.
std::vector< OWN_PTR(Champ_Fonc_base)> grad_vit_phases_
int impr(Sortie &os) const override
Effectue quelques impressions sur un flot de sortie: - maximum de div U.
int has_interface_blocs() const override
Motcles noms_vit_phases_
const Champ_base & diffusivite_pour_pas_de_temps() const override
void dimensionner_matrice_sans_mem(Matrice_Morse &matrice) override
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.