16#include <Assembleur_P_PolyMAC_MPFA.h>
17#include <Op_Grad_PolyMAC_MPFA_Face.h>
18#include <Neumann_sortie_libre.h>
19#include <Champ_Face_PolyMAC_MPFA.h>
20#include <Masse_PolyMAC_MPFA_Face.h>
21#include <Domaine_PolyMAC_MPFA.h>
22#include <Domaine_Cl_PolyMAC_family.h>
23#include <Matrice_Diagonale.h>
24#include <Navier_Stokes_std.h>
25#include <Matrice_Morse_Sym.h>
26#include <Schema_Temps_base.h>
27#include <Matrice_Bloc_Sym.h>
28#include <Static_Int_Lists.h>
29#include <Operateur_Grad.h>
30#include <Pb_Multiphase.h>
31#include <Matrix_tools.h>
32#include <Array_tools.h>
36#include <Perf_counters.h>
48 Cerr <<
"Assemblage de la matrice de pression ... ";
49 statistics().begin_count(STD_COUNTERS::matrix_assembly,statistics().get_last_opened_counter_level()+1);
50 la_matrice.typer(
"Matrice_Morse");
56 const DoubleTab& fgrad_c = grad.
fgrad_c;
57 const IntTab& f_e = domaine.face_voisins(), &fgrad_d = grad.
fgrad_d, &fgrad_e = grad.
fgrad_e;
59 int i, j, e, eb, f, ne = domaine.nb_elem(), ne_tot = domaine.nb_elem_tot();
63 for (
int n_bord=0; n_bord<le_dom_PolyMAC_CDO->nb_front_Cl(); n_bord++)
64 if (sub_type(
Neumann_sortie_libre, le_dom_Cl_PolyMAC_CDO->les_conditions_limites(n_bord).valeur()) )
70 Stencil stencil(0, 2);
72 for (f = 0; f < domaine.nb_faces(); f++)
73 for (i = 0; i < 2 && (e = f_e(f, i)) >= 0; i++)
75 for (j = fgrad_d(f); j < fgrad_d(f + 1); j++)
76 if ((eb = fgrad_e(j)) < ne_tot) stencil.
append_line(e, eb);
78 tableau_trier_retirer_doublons(stencil);
93 for (f = 0; f < domaine.nb_faces(); f++)
94 for (i = 0; i < 2 && (e = f_e(f, i)) >= 0; i++)
96 for (j = fgrad_d(f); j < fgrad_d(f + 1); j++)
97 if ((eb = fgrad_e(j)) < ne_tot)
98 mat(e, eb) += (i ? 1 : -1) * pf(f) * fs(f) * fgrad_c(j, 0);
101 if (!
has_P_ref && is_first_proc_with_real_elems) mat(0, 0) *= 2;
102 statistics().end_count(STD_COUNTERS::matrix_assembly);
109 if (aux_only)
return;
110 int e, n, N = ref_cast(
Pb_Multiphase,
equation().probleme()).nb_phases(), ne_tot = le_dom_PolyMAC_CDO->nb_elem_tot();
111 Stencil stencil(0, 2);
113 for (e = 0; e < le_dom_PolyMAC_CDO->nb_elem(); e++)
114 for (n = 0; n < N; n++) stencil.
append_line(e, N * e + n);
120 if (aux_only)
return;
121 const DoubleTab& alpha = ref_cast(
Pb_Multiphase,
equation().probleme()).equation_masse().inconnue().valeurs();
126 for (e = 0; e < le_dom_PolyMAC_CDO->nb_elem(); e++)
127 for (secmem(e) = -pe(e) * ve(e), n = 0; n < N; n++) secmem(e) += pe(e) * ve(e) * alpha(e, n);
129 for (e = 0; e < le_dom_PolyMAC_CDO->nb_elem(); e++)
130 for (n = 0; n < N; n++) mat(e, N * e + n) = -pe(e) * ve(e);
const Equation_base & equation() const
void dimensionner_continuite(matrices_t matrices, int aux_only=0) const override
void assembler_continuite(matrices_t matrices, DoubleTab &secmem, int aux_only=0) const override
int assembler_mat(Matrice &, const DoubleVect &, int incr_pression, int resoudre_en_u) override
int set_resoudre_en_u(int flag)
Definit la valeur du drapeau resoudre_en_u__.
int set_resoudre_increment_pression(int flag)
Definit la valeur du drapeau resoudre_increment_pression_.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
void set_nb_columns(const int)
Classe Matrice Classe generique de la hierarchie des matrices.
DoubleVect & porosite_elem()
DoubleVect & porosite_face()
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
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 const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
class Op_Grad_PolyMAC_MPFA_Face
void update_grad(int full_stencil=0) const
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
static double mp_min(double)
static int me()
renvoie mon rang dans le groupe de communication courant.
Classe de base des flux de sortie.