TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Assembleur_P_DG Class Reference

Assembles the pressure Laplacian matrix for the DG incompressible Navier-Stokes solver. More...

#include <Assembleur_P_DG.h>

Inheritance diagram for Assembleur_P_DG:
[legend]
Collaboration diagram for Assembleur_P_DG:
[legend]

Public Member Functions

void associer_domaine_dis_base (const Domaine_dis_base &) override
void associer_domaine_cl_dis_base (const Domaine_Cl_dis_base &) override
const Domaine_dis_basedomaine_dis_base () const override
const Domaine_Cl_dis_basedomaine_Cl_dis_base () const override
int assembler (Matrice &) override
int assembler_rho_variable (Matrice &, const Champ_Don_base &rho) override
 Assemblage de la matrice div( porosite/rho * grad P ) Le type du champ "rho" a fournir depend de la discretisation (vdf, vef, p1b, .
int assembler_QC (const DoubleTab &, Matrice &) override
 Assemble la matrice de pression pour un fluide quasi compressible laplacein(P) est remplace par div(grad(P)/rho).
int assembler_mat (Matrice &, const DoubleVect &, int incr_pression, int resoudre_en_u) override
 Core routine that builds the SIP pressure Laplacian matrix.
int modifier_secmem (DoubleTab &) override
int modifier_solution (DoubleTab &) override
 Removes the arbitrary pressure constant by pinning the minimum pressure to zero.
void completer (const Equation_base &) override
const Equation_baseequation () const
void corriger_vitesses (const DoubleTab &dP, DoubleTab &dv) const override
Public Member Functions inherited from Assembleur_base
int set_resoudre_increment_pression (int flag)
 Definit la valeur du drapeau resoudre_increment_pression_.
int get_resoudre_increment_pression () const
 Renvoie la valeur du drapeau resoudre_increment_pression_ (0 ou 1) Renvoie -1 si le drapeau n'a pas ete initialise.
int set_resoudre_en_u (int flag)
 Definit la valeur du drapeau resoudre_en_u__.
int get_resoudre_en_u () const
 Renvoie la valeur du drapeau resoudre_en_u_ (0 ou 1) Renvoie -1 si le drapeau n'a pas ete initialise.
virtual void modifier_secmem_pour_incr_p (const DoubleTab &press, const double fac, DoubleTab &incr) const
virtual void dimensionner_continuite (matrices_t matrices, int aux_only=0) const
virtual void assembler_continuite (matrices_t matrices, DoubleTab &secmem, int aux_only=0) const
virtual DoubleTab norme_continuite () const
Public Member Functions inherited from Objet_U
 ~Objet_U () override
 Destructeur, supprime l'objet de la liste d'objets enregistres dans "memoire".
int numero () const
 Renvoie l'indice de l'objet dans Memoire::data.
virtual int duplique () const =0
virtual SortieprintOn (Sortie &) const
 Ecriture de l'objet sur un flot de sortie Methode a surcharger.
virtual EntreereadOn (Entree &)
 Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual unsigned taille_memoire () const =0
virtual int est_egal_a (const Objet_U &) const
 Renvoie 1 si l'objet x et *this sont une seule et meme instance (meme adresse en memoire).
virtual const Nomle_nom () const
 Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual void nommer (const Nom &)
 Donne un nom a l'Objet_U Methode virtuelle a surcharger.
virtual int reprendre (Entree &)
 Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual int sauvegarder (Sortie &) const
 Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
int get_object_id () const
 Renvoie l'identifiant unique de l'objet object_id_.
virtual const Type_infoget_info () const
 Donne des informations sur le type de l'Objet_U.
const Nomque_suis_je () const
 renvoie la chaine identifiant la classe.
const char * le_type () const
 Donne le nom du type de l'Objet_U.
virtual int change_num (const int *const)
 Change le numero interne de l'Objet_U.
virtual int lire_motcle_non_standard (const Motcle &motlu, Entree &is)
 Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
virtual int associer_ (Objet_U &)
 Associe l'Objet_U a un autre Objet_U Methode virtuelle a surcharger.
const Interpreteinterprete () const
Interpreteinterprete ()
Public Member Functions inherited from Process
virtual ~Process ()

Protected Member Functions

 OBS_PTR (Equation_base) mon_equation
 OBS_PTR (Domaine_DG) le_dom_dg_
 OBS_PTR (Domaine_Cl_DG) le_dom_Cl_dg_
Protected Member Functions inherited from Objet_U
 Objet_U ()
 Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_), et enregistre l'objet en "memoire".
 Objet_U (const Objet_U &)
 Constructeur par copie.
const Objet_Uoperator= (const Objet_U &)
 Operateur= : ne fait rien (on conserve le numero et l'identifiant).
virtual void set_param (Param &) const

Protected Attributes

DoubleTab les_coeff_pression
int has_P_ref = 0
int stencil_done = 0
Matrice_Morse rec

Additional Inherited Members

Static Public Member Functions inherited from Objet_U
static const Nomnom_du_cas ()
 Renvoie une reference constante vers le nom du cas.
static Nomget_set_nom_du_cas ()
 Renvoie une reference non constante vers le nom du cas (pour pouvoir le modifier).
static const Type_infoinfo ()
 Donne des informations sur le type de l'Objet_U.
static const Objet_Uself_cast (const Objet_U &)
 methode ajoutee pour caster en python
static Objet_Uself_cast (Objet_U &)
Static Public Member Functions inherited from Process
static int me ()
 renvoie mon rang dans le groupe de communication courant.
static int nproc ()
 renvoie le nombre de processeurs dans le groupe courant Voir Comm_Group::nproc() et PE_Groups::current_group()
static bool is_parallel ()
static void exit (int exit_code=-1)
 Routine de sortie de TRUST dans une region Kokkos.
static double mp_sum (double)
 Calcule la somme de x sur tous les processeurs du groupe courant.
static float mp_sum (float)
static trustIdType mp_sum (trustIdType)
 Calcule la somme de x sur tous les processeurs du groupe courant.
static double mp_max (double)
static double mp_min (double)
static int mp_max (int)
 renvoie le plus grand int i sur l'ensemble des processeurs du groupe courant.
static int mp_min (int)
 renvoie le plus petit int i sur l'ensemble des processeurs du groupe courant.
static double mp_sum_as_double (int v)
static trustIdType mppartial_sum (trustIdType i)
 Calul de la somme partielle de i sur les processeurs 0 a me()-1 (renvoie 0 sur le processeur 0).
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2)
 C++14 compatible mp_sum_for_each: combine multiple mp_sum calls into one collective operation Usage: mp_sum_for_each(a, b); mp_sum_for_each(a, b, c); mp_sum_for_each(a, b, c, d); mp_sum_for_each(a, b, c, d, e); All arguments must be of the same type (double or int) and are modified in place. Supports 2-5 parameters.
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_sum_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2)
 C++14 compatible mp_max_for_each: combine multiple mp_max calls into one collective operation.
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_max_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2)
 C++14 compatible mp_min_for_each: combine multiple mp_min calls into one collective operation.
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4)
template<typename T>
static void mp_min_for_each (T &arg1, T &arg2, T &arg3, T &arg4, T &arg5)
template<typename _TYPE_>
static void mp_sum_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
template<typename _TYPE_>
static void mp_max_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
template<typename _TYPE_>
static void mp_min_for_each_item (TRUSTArray< _TYPE_ > &x, int n=-1)
static bool mp_and (bool)
 Calcule le 'et' logique de b sur tous les processeurs du groupe courant.
static bool mp_or (bool)
static int check_int_overflow (trustIdType)
static int je_suis_maitre ()
 renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0), 0 sinon.
static KOKKOS_INLINE_FUNCTION void Kokkos_exit (const char *)
 Routine de sortie de TRUST dans une region Kokkos.
static int node_master ()
 renvoie 1 si on est sur le processeur maitre du noeud numa, 0 sinon.
static void exit (const Nom &message, int exit_code=-1)
static bool is_sequential ()
static void barrier ()
 Synchronise tous les processeurs du groupe courant (attend que tous les processeurs soient arrives a la barriere).
static void abort ()
 Routine de sortie de Trio-U sur une erreur abort().
static SortieJournal (int message_level=0)
 Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
static double ram_processeur ()
static void imprimer_ram_totale (int all_process=0)
static bool force_single_file (const int ranks, const Nom &filename)
Static Public Attributes inherited from Objet_U
static double precision_geom = 1e-10
static constexpr bool HAS_POINTER = false
static int dimension =0
static int format_precision_geom =11
static int axi =0
static int bidim_axi =0
static int DEACTIVATE_SIGINT_CATCH =0
static Type_info info_obj
static bool disable_TU =false
 Flag to disable or not the writing of the .TU files.
static bool stat_per_proc_perf_log =false
 Flag to enable the writing of the statistics detailed per processor in _csv.TU file.
Static Public Attributes inherited from Process
static int exception_sur_exit =0
static int multiple_files =5120

Detailed Description

Assembles the pressure Laplacian matrix for the DG incompressible Navier-Stokes solver.

This class builds the global pressure matrix arising from the SIP (Symmetric Interior Penalty) DG discretization of the pressure Poisson problem. It is the pressure-space counterpart of the diffusion operator assembly in Op_Diff_DG_Elem, but operates directly on the pressure unknown without diffusivity weighting (nu = 1).

The assembled matrix corresponds to the bilinear form: a(p_h, q_h) = sum_T integral_T grad(p_h).grad(q_h)

  • sum_f 0.5 * integral_f { grad(p_h) }.n * [q_h] (consistency)
  • sum_f 0.5 * integral_f [p_h] * { grad(q_h) }.n (symmetry)
  • sum_f (eta_F/h_T) * integral_f [p_h] * [q_h] (penalty)

where the sums run over all elements T and all faces f (internal and Dirichlet boundary).

The matrix is stored as a Matrice_Morse (unsymmetric storage, though the assembled system is symmetric by construction). The sparsity pattern couples each pressure DOF to all pressure DOFs in the same element and in all face-neighbouring elements.

Additionally, the class:

  • Stores a velocity-reconstruction matrix rec (Matrice_Morse) used by corriger_vitesses() to apply the pressure correction -grad(dP) to the velocity.
  • Handles pressure referencing via modifier_solution(), which pins the minimum pressure to zero when no Dirichlet pressure condition is imposed (has_P_ref == 0).
  • Provides a stub for quasi-compressible flows (assembler_QC) which is not yet fully implemented and aborts at runtime.
See also
Op_Diff_DG_Elem, Op_Grad_DG, Assembleur_base

Definition at line 56 of file Assembleur_P_DG.h.

Member Function Documentation

◆ assembler()

int Assembleur_P_DG::assembler ( Matrice & la_matrice)
overridevirtual

Implements Assembleur_base.

Definition at line 56 of file Assembleur_P_DG.cpp.

◆ assembler_mat()

int Assembleur_P_DG::assembler_mat ( Matrice & la_matrice,
const DoubleVect & diag,
int incr_pression,
int resoudre_en_u )
overridevirtual

Core routine that builds the SIP pressure Laplacian matrix.

The assembly follows the same three-term SIP structure as Op_Diff_DG_Elem but with unit diffusivity (no nu weighting) and acting on the pressure unknown only. It proceeds in three stages:

1. Sparsity pattern construction tab1 (row pointers) and tab2 (column indices) are filled in two passes using the pre-computed sorted face-neighbour stencil, yielding a pressure x pressure matrix of size size_p x size_p where each element block couples to all its face-neighbours.

2. Volume stiffness term For each element: mat(i, j) += integral of grad(phi_i).grad(phi_j)

3. Internal face SIP terms For each internal face shared by elem0 and elem1:

  • Penalty term: (eta_F/h_T) * integral of phi_i * phi_j, added to the diagonal blocks and subtracted from the off-diagonal (cross-element) blocks.
  • Consistency + symmetry terms: 0.5 * integral of grad(phi_i).n * phi_j, assembled into all four block combinations with signs ensuring global symmetry.

4. Boundary face SIP terms (Dirichlet faces: fcl flag 6 or 7) The same penalty and consistency terms are applied to the single adjacent element, weakly enforcing the Dirichlet pressure condition in the SIP sense.

Parameters
la_matriceThe output matrix (typed as Matrice_Morse).
diagUnused diagonal coefficient vector (kept for interface compatibility).
incr_pressionIf 1, the solver works on pressure increments.
resoudre_en_uIf 1, the solver works in velocity units.
Returns
Always 1.

Reimplemented from Assembleur_base.

Definition at line 101 of file Assembleur_P_DG.cpp.

◆ assembler_QC()

int Assembleur_P_DG::assembler_QC ( const DoubleTab & tab_rho,
Matrice & matrice )
overridevirtual

Assemble la matrice de pression pour un fluide quasi compressible laplacein(P) est remplace par div(grad(P)/rho).

Parameters
(DoubleTab&tab_rho) mass volumique Valeurs par dDGaut:
Returns
(int) renvoie toujours 1
Exceptions
DGfetsde bord:

Reimplemented from Assembleur_base.

Definition at line 375 of file Assembleur_P_DG.cpp.

◆ assembler_rho_variable()

int Assembleur_P_DG::assembler_rho_variable ( Matrice & mat,
const Champ_Don_base & rho )
overridevirtual

Assemblage de la matrice div( porosite/rho * grad P ) Le type du champ "rho" a fournir depend de la discretisation (vdf, vef, p1b, .

..) Pour le front-tracking par exemple.

Reimplemented from Assembleur_base.

Definition at line 62 of file Assembleur_P_DG.cpp.

◆ associer_domaine_cl_dis_base()

void Assembleur_P_DG::associer_domaine_cl_dis_base ( const Domaine_Cl_dis_base & le_dom_Cl_dis)
overridevirtual

Implements Assembleur_base.

Definition at line 449 of file Assembleur_P_DG.cpp.

◆ associer_domaine_dis_base()

void Assembleur_P_DG::associer_domaine_dis_base ( const Domaine_dis_base & le_dom_dis)
overridevirtual

Implements Assembleur_base.

Definition at line 444 of file Assembleur_P_DG.cpp.

◆ completer()

void Assembleur_P_DG::completer ( const Equation_base & Eqn)
overridevirtual

Implements Assembleur_base.

Definition at line 454 of file Assembleur_P_DG.cpp.

◆ corriger_vitesses()

void Assembleur_P_DG::corriger_vitesses ( const DoubleTab & dP,
DoubleTab & dv ) const
inlineoverridevirtual

Reimplemented from Assembleur_base.

Definition at line 77 of file Assembleur_P_DG.h.

◆ domaine_Cl_dis_base()

const Domaine_Cl_dis_base & Assembleur_P_DG::domaine_Cl_dis_base ( ) const
overridevirtual

Implements Assembleur_base.

Definition at line 439 of file Assembleur_P_DG.cpp.

◆ domaine_dis_base()

const Domaine_dis_base & Assembleur_P_DG::domaine_dis_base ( ) const
overridevirtual

Implements Assembleur_base.

Definition at line 434 of file Assembleur_P_DG.cpp.

◆ equation()

const Equation_base & Assembleur_P_DG::equation ( ) const
inline

Definition at line 74 of file Assembleur_P_DG.h.

◆ modifier_secmem()

int Assembleur_P_DG::modifier_secmem ( DoubleTab & secmem)
overridevirtual

Implements Assembleur_base.

Definition at line 396 of file Assembleur_P_DG.cpp.

◆ modifier_solution()

int Assembleur_P_DG::modifier_solution ( DoubleTab & pression)
overridevirtual

Removes the arbitrary pressure constant by pinning the minimum pressure to zero.

When no Dirichlet pressure reference is imposed (has_P_ref == 0), the pressure field is defined only up to a constant. This method makes the solution unique by subtracting the global minimum pressure value (computed consistently across MPI processes via mp_min) from all elements, then exchanges ghost values. If a pressure reference is already set (has_P_ref == 1), the method is a no-op.

Parameters
pressionThe pressure field to modify in-place.
Returns
Always 1.

Implements Assembleur_base.

Definition at line 413 of file Assembleur_P_DG.cpp.

◆ OBS_PTR() [1/3]

Assembleur_P_DG::OBS_PTR ( Domaine_Cl_DG )
protected

◆ OBS_PTR() [2/3]

Assembleur_P_DG::OBS_PTR ( Domaine_DG )
protected

◆ OBS_PTR() [3/3]

Assembleur_P_DG::OBS_PTR ( Equation_base )
protected

Member Data Documentation

◆ has_P_ref

int Assembleur_P_DG::has_P_ref = 0
protected

Definition at line 90 of file Assembleur_P_DG.h.

◆ les_coeff_pression

DoubleTab Assembleur_P_DG::les_coeff_pression
protected

Definition at line 88 of file Assembleur_P_DG.h.

◆ rec

Matrice_Morse Assembleur_P_DG::rec
protected

Definition at line 93 of file Assembleur_P_DG.h.

◆ stencil_done

int Assembleur_P_DG::stencil_done = 0
protected

Definition at line 91 of file Assembleur_P_DG.h.


The documentation for this class was generated from the following files: