16#include <Source_Force_Tchen_base.h>
17#include <Champ_Face_base.h>
18#include <Pb_Multiphase.h>
19#include <Matrix_tools.h>
20#include <Array_tools.h>
30 const Pb_Multiphase *pbm = sub_type(Pb_Multiphase,
equation().probleme()) ? &ref_cast(Pb_Multiphase,
equation().probleme()) : nullptr;
33 for (
int n = 0; n < pbm->
nb_phases(); n++)
48 const DoubleTab& inco = ch.
valeurs();
49 const IntTab& fcl = ch.
fcl();
52 Stencil stencil(0, 2);
54 int N = inco.
line_size(), nf = domaine.nb_faces();
57 for (
int f = 0; f < nf; f++)
59 for (
int k = 0 ; k<N ; k++)
66 tableau_trier_retirer_doublons(stencil);
76 const IntTab& f_e = domaine.face_voisins(), &fcl = ch.
fcl();
82 int N = inco.
line_size(), nf = domaine.nb_faces();
88 for (
int f = 0; f < nf; f++)
90 for (
int k = 0 ; k<N ; k++)
93 double alpha_loc = f_e(f, 1)>=0 ? alpha(f_e(f, 0), k) * vf_dir(f, 0)/vf(f) + alpha(f_e(f, 1), k) * vf_dir(f, 1)/vf(f) : alpha(f_e(f, 0), k) ;
94 double rho_loc = f_e(f, 1)>=0 ? rho(f_e(f, 0),
n_l) * vf_dir(f, 0)/vf(f) + rho(f_e(f, 1),
n_l) * vf_dir(f, 1)/vf(f) : rho(f_e(f, 0),
n_l) ;
95 double fac = pf(f) * vf(f) * alpha_loc * rho_loc ;
97 secmem(f, k ) += fac * (inco(f,
n_l)-pvit(f,
n_l))/pas_tps;
98 secmem(f,
n_l) -= fac * (inco(f,
n_l)-pvit(f,
n_l))/pas_tps;
101 (*mat)( N * f + k , N * f +
n_l) -= fac/pas_tps ;
102 (*mat)( N * f +
n_l, N * f +
n_l) += fac/pas_tps ;
const IntTab & fcl() const
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & passe(int i=1)
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
int nb_colonnes() const override
Return local number of columns (=size on the current proc).
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
virtual int debute_par(const char *const n) const
const std::string & getString() const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
const Nom & nom_phase(int i) const
const Schema_Temps_base & schema_temps() const
Renvoie le schema en temps associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
Classe de base des flux de sortie.
classe Force_Tchen Force de Tchen dans un ecoulement multiphase
virtual void dimensionner_blocs_aux(Stencil &) const =0
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override
virtual void ajouter_blocs_aux(matrices_t, DoubleTab &) const =0
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const override
_SIZE_ size_totale() const