16#include <Solveur_Masse_Face_proto.h>
17#include <Masse_ajoutee_base.h>
18#include <Pb_Multiphase.h>
19#include <Matrix_tools.h>
21#include <Domaine_VF.h>
33 const DoubleVect& pf = solv_mass_->equation().milieu().porosite_face(), &vf = domaine.volumes_entrelaces();
35 &vfd = domaine.volumes_entrelaces_dir();
36 int i, e, f, n, N = solv_mass_->equation().inconnue().valeurs().line_size();
40 for (f = 0; f < domaine.nb_faces(); f++)
41 for (n = 0; n < N; n++)
43 for (fac = 0, i = 0; i < 2; i++)
44 if ((e = f_e(f, i)) >= 0)
45 fac += vfd(f, i) / vf(f) * (a_r ? (*a_r)(e, n) : 1);
47 sm(f, n) /= pf(f) * vf(f) * fac;
58 const std::string& nom_inc = solv_mass_->equation().inconnue().
le_nom().
getString();
59 if (!matrices.count(nom_inc))
return;
63 const DoubleTab& inco = solv_mass_->equation().inconnue().valeurs();
68 for (f = 0, i = 0; f < domaine.nb_faces(); f++)
69 for (n = 0; n < N; n++, i++)
71 for (m = 0; m < N; m++) sten.
append_line(i, N * f + m);
83 const DoubleTab& inco = solv_mass_->equation().inconnue().valeurs(), &passe = solv_mass_->equation().inconnue().passe();
84 Matrice_Morse *mat = matrices[solv_mass_->equation().inconnue().le_nom().getString()];
87 const DoubleVect& pf = solv_mass_->equation().milieu().porosite_face(), &vf = domaine.volumes_entrelaces();
89 const DoubleTab& vfd = domaine.volumes_entrelaces_dir(), &rho = solv_mass_->equation().milieu().masse_volumique().passe(),
92 int i, e, f, m, n, N = inco.
line_size(), cR = rho.dimension_tot(0) == 1;
95 DoubleTrav masse(N, N), masse_e(N, N);
96 for (f = 0; f < domaine.nb_faces(); f++)
99 for (masse = 0, n = 0; n < N; n++) masse(n, n) = vf(f);
100 else for (masse = 0, i = 0; i < 2; i++)
101 if ((e = f_e(f, i)) >= 0)
103 for (masse_e = 0, n = 0; n < N; n++) masse_e(n, n) = (*a_r)(e, n);
104 if (corr) corr->
ajouter(&(*alpha)(e, 0), &rho(!cR * e, 0), masse_e);
105 for (n = 0; n < N; n++)
106 for (m = 0; m < N; m++) masse(n, m) += vfd(f, i) * masse_e(n, m);
108 for (n = 0; n < N; n++)
110 for (m = 0; m < N; m++) secmem(f, n) += pf(f) / dt * masse(n, m) * (passe(f, m) - resoudre_en_increments * inco(f, m));
112 for (m = 0; m < N; m++)
113 if (masse(n, m)) (*mat)(N * f + n, N * f + m) += pf(f) / dt * masse(n, m);
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Champ_Inc_base & champ_conserve() const
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
classe Masse_ajoutee_base masse ajoutee de la forme
virtual void ajouter(const double *alpha, const double *rho, DoubleTab &a_r) const =0
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).
const std::string & getString() const
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
const Equation_base & equation(int) const override
Renvoie l'equation d'hydraulique de type Navier_Stokes_std si i=0 Renvoie l'equation de la thermique ...
virtual Equation_base & equation_masse()
int has_correlation(std::string nom_correlation) const
const Correlation_base & get_correlation(std::string nom_correlation) const
classe QDM_Multiphase Cette classe porte les termes de l'equation de la dynamique
void associer_masse_proto(const Solveur_Masse_base &, const Domaine_VF &)
void ajouter_blocs_proto(matrices_t matrices, DoubleTab &secmem, double dt, const tabs_t &semi_impl, int resoudre_en_increments) const
void dimensionner_blocs_proto(matrices_t matrices, const tabs_t &semi_impl, const bool allocate, Stencil &) const
DoubleTab & appliquer_impl_proto(DoubleTab &) const
classe Solveur_Masse_base Represente la matrice de masse d'une equation.
_SIZE_ size_totale() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")