|
TRUST 1.9.8
HPC thermohydraulic platform
|
Concrete DG diffusion operator acting on element-based unknowns. More...
#include <Op_Diff_DG_Elem.h>
Public Member Functions | |
| virtual void | calculer_flux_bord (const DoubleTab &inco) const =delete |
| void | modifier_pour_Cl (Matrice_Morse &la_matrice, DoubleTab &secmem) const override |
| DOES NOTHING - to override in derived classes. | |
| void | completer () override |
| Finalizes operator setup after all associations have been made. | |
| void | dimensionner (Matrice_Morse &mat) const override |
| Builds the sparsity pattern of the DG diffusion matrix in a Matrice_Morse. | |
| int | has_interface_blocs () const override |
| void | dimensionner_blocs (matrices_t matrices, const tabs_t &semi_impl={}) const override |
| Sizes the block matrices used by the interface_blocs assembly mechanism. | |
| void | ajouter_blocs (matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override |
| Assembles the SIP diffusion operator into the matrix and right-hand side. | |
| void | dimensionner_termes_croises (Matrice_Morse &, const Probleme_base &autre_pb, int nl, int nc) const override |
| void | ajouter_termes_croises (const DoubleTab &inco, const Probleme_base &autre_pb, const DoubleTab &autre_inco, DoubleTab &resu) const override |
| void | contribuer_termes_croises (const DoubleTab &inco, const Probleme_base &autre_pb, const DoubleTab &autre_inco, Matrice_Morse &matrice) const override |
| void | contribuer_au_second_membre (DoubleTab &resu) const override |
| Adds boundary condition contributions to the right-hand side. | |
| Public Member Functions inherited from Op_Diff_DG_base | |
| void | associer (const Domaine_dis_base &, const Domaine_Cl_dis_base &, const Champ_Inc_base &) override |
| Associates the operator with a DG domain and its boundary conditions. | |
| double | calculer_dt_stab () const override |
| Computes the maximum stable explicit time step for the diffusion operator. | |
| void | associer_diffusivite (const Champ_base &diffu) override |
| const Champ_base & | diffusivite () const override |
| void | mettre_a_jour (double t) override |
| DOES NOTHING - to override in derived classes. | |
| void | update_nu () const |
| Updates the cached effective diffusivity field nu_ by combining molecular and turbulent contributions. | |
| double | nu (int i, int compo) const |
| DoubleTab & | calculer (const DoubleTab &, DoubleTab &) const override |
| Computes the diffusion operator applied to inco and stores the result in resu. | |
| int | impr (Sortie &os) const override |
| DOES NOTHING - to override in derived classes. | |
| Public Member Functions inherited from Operateur_Diff_base | |
| virtual void | associer_diffusivite_pour_pas_de_temps (const Champ_base &) |
| Associe la vraie diffusivite en m^2/s (en QC par exemple, l'operateur est applique a rho*u, et on associe alors la viscosite dynamique a. | |
| virtual void | associer_diffusivite_volumique (const Champ_base &) |
| virtual void | calculer_borne_locale (DoubleVect &, double, double) const |
| virtual void | init_op_ext () const |
| virtual bool | is_turb () const |
| virtual const Correlation_base * | correlation_viscosite_turbulente () const |
| virtual void | calculer_von_mises (const DoubleTab &deplacement, DoubleTab &deformation, DoubleTab &contraintes, DoubleTab &von_mises) const |
| Public Member Functions inherited from Operateur_base | |
| virtual DoubleTab & | ajouter (const DoubleTab &, DoubleTab &) const |
| virtual void | associer_champ (const Champ_Inc_base &, const std::string &nom_ch) |
| virtual void | associer_domaine_cl_dis (const Domaine_Cl_dis_base &) |
| virtual void | dimensionner_bloc_vitesse (Matrice_Morse &matrice) const |
| virtual void | contribuer_a_avec (const DoubleTab &, Matrice_Morse &) const |
| DOES NOTHING - to override in derived classes. | |
| virtual void | contribuer_bloc_vitesse (const DoubleTab &, Matrice_Morse &) const |
| void | tester_contribuer_a_avec (const DoubleTab &, const Matrice_Morse &) |
| virtual void | calculer_dt_local (DoubleTab &) const |
| virtual void | abortTimeStep () |
| virtual void | resetTime (double time) |
| void | associer_eqn (const Equation_base &) |
| Associe une equation a l'operateur. | |
| int | get_decal_temps () const |
| int | set_decal_temps (int) |
| int | get_nb_ss_pas_de_temps () const |
| int | set_nb_ss_pas_de_temps (int) |
| const Matrice & | get_matrice () const |
| Matrice & | set_matrice () |
| const SolveurSys & | get_solveur () const |
| SolveurSys & | set_solveur () |
| Entree & | lire_solveur (Entree &) |
| virtual int | systeme_invariant () const |
| virtual void | ajouter_contribution_explicite_au_second_membre (const Champ_Inc_base &inconnue, DoubleTab &derivee) const |
| const Champ_Inc_base & | mon_inconnue () const |
| bool | has_champ_inco () const |
| const std::string & | nom_inconnue () const |
| void | ouvrir_fichier (SFichier &os, const Nom &, const int flag=1) const |
| Ouverture/creation d'un fichier d'impression d'un operateur A surcharger dans les classes derivees. | |
| void | ouvrir_fichier_partage (EcrFicPartage &, const Nom &, const int flag=1) const |
| Ouverture/creation d'un fichier d'impression d'un operateur A surcharger dans les classes derivees. | |
| void | set_fichier (const Nom &) |
| const Nom | fichier () const |
| void | set_description (const Nom &nom) |
| const Nom | description () const |
| DoubleTab & | flux_bords () |
| DoubleTab & | flux_bords () const |
| void | creer_champ (const Motcle &motlu) override |
| const Champ_base & | get_champ (const Motcle &nom) const override |
| bool | has_champ (const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override |
| bool | has_champ (const Motcle &nom) const override |
| void | get_noms_champs_postraitables (Noms &nom, Option opt=NONE) const override |
| void | calculer_pour_post (Champ_base &espace_stockage, const Nom &option, int comp) const override |
| Motcle | get_localisation_pour_post (const Nom &option) const override |
| virtual void | ajouter_flux (const DoubleTab &inconnue, DoubleTab &contribution) const |
| virtual void | calculer_flux (const DoubleTab &inconnue, DoubleTab &flux) const |
| virtual void | preparer_calcul () |
| bool | has_impr_file () 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 Sortie & | printOn (Sortie &) const |
| Ecriture de l'objet sur un flot de sortie Methode a surcharger. | |
| virtual Entree & | readOn (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 Nom & | le_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_info * | get_info () const |
| Donne des informations sur le type de l'Objet_U. | |
| const Nom & | que_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 Interprete & | interprete () const |
| Interprete & | interprete () |
| Public Member Functions inherited from Process | |
| virtual | ~Process () |
| Public Member Functions inherited from MorEqn | |
| void | associer_eqn (const Equation_base &) |
| Associe une equation a l'objet. | |
| const Equation_base & | equation () const |
| Renvoie la reference sur l'equation pointe par MorEqn::mon_equation. | |
| Equation_base & | equation () |
| Renvoie la reference sur l'equation pointe par MorEqn::mon_equation. | |
| int | mon_equation_non_nul () const |
| virtual void | check_multiphase_compatibility () const |
| Public Member Functions inherited from Champs_compris_interface | |
| virtual | ~Champs_compris_interface () |
| virtual bool | has_champ (const Motcle &nom, OBS_PTR(Champ_base)&ref_champ) const =0 |
| Public Member Functions inherited from Support_Champ_Masse_Volumique | |
| Support_Champ_Masse_Volumique () | |
| Constructeur de la classe. | |
| virtual | ~Support_Champ_Masse_Volumique () |
| Destructeur virtuel (pour eviter les warnings). | |
| virtual void | associer_champ_masse_volumique (const Champ_base &) |
| Methode a appeler dans la preparation du probleme pour demander a l'objet de tenir compte du champ de masse volumique en parametre. | |
| virtual void | dissocier_champ_masse_volumique () |
| Annule la reference a la masse volumique. | |
| virtual int | has_champ_masse_volumique () const |
| Renvoie 1 si la masse volumique a ete associee, 0 sinon. | |
| virtual const Champ_base & | get_champ_masse_volumique () const |
| Renvoie le champ de masse volumique. | |
| const int & | support_ok () const |
| Public Member Functions inherited from Op_Diff_Turbulent_base | |
| virtual | ~Op_Diff_Turbulent_base () |
| void | associer_diffusivite_turbulente (const Champ_Fonc_base &) |
| const Champ_Fonc_base & | diffusivite_turbulente () const |
| bool | has_diffusivite_turbulente () const |
Additional Inherited Members | |
| Static Public Member Functions inherited from Objet_U | |
| static const Nom & | nom_du_cas () |
| Renvoie une reference constante vers le nom du cas. | |
| static Nom & | get_set_nom_du_cas () |
| Renvoie une reference non constante vers le nom du cas (pour pouvoir le modifier). | |
| static const Type_info * | info () |
| Donne des informations sur le type de l'Objet_U. | |
| static const Objet_U & | self_cast (const Objet_U &) |
| methode ajoutee pour caster en python | |
| static Objet_U & | self_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 Sortie & | Journal (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) |
| Public Attributes inherited from Operateur_Diff_base | |
| std::vector< const Operateur_Diff_base * > | op_ext |
| Public Attributes inherited from Operateur_base | |
| int | col_width_ |
| 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 |
| Protected Member Functions inherited from Op_Diff_DG_base | |
| OBS_PTR (Domaine_DG) le_dom_dg_ | |
| OBS_PTR (Domaine_Cl_DG) la_zcl_dg_ | |
| OBS_PTR (Champ_base) diffusivite_ | |
| Protected Member Functions inherited from Operateur_Diff_base | |
| virtual const Champ_base & | diffusivite_pour_pas_de_temps () const |
| Renvoie le champ_don correspondant a la vraie diffusivite du milieu qui sert pour le calcul du pas de temps. | |
| OBS_PTR (Champ_base) diffusivite_pour_pas_de_temps_ | |
| Protected Member Functions inherited from Operateur_base | |
| OBS_PTR (Champ_Inc_base) le_champ_inco | |
| 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_U & | operator= (const Objet_U &) |
| Operateur= : ne fait rien (on conserve le numero et l'identifiant). | |
| virtual void | set_param (Param &) const |
| Protected Member Functions inherited from MorEqn | |
| OBS_PTR (Equation_base) mon_equation | |
| virtual | ~MorEqn () |
| Protected Member Functions inherited from Support_Champ_Masse_Volumique | |
| virtual void | declare_support_masse_volumique (int ok) |
| Le constructeur d'une classe derivee qui se sert de la masse volumique doit appeler cette fonction avec la valeur 1. | |
| Protected Attributes inherited from Op_Diff_DG_base | |
| SFichier | Flux |
| SFichier | Flux_moment |
| SFichier | Flux_sum |
| int | nu_a_jour_ = 0 |
| DoubleTab | nu_ |
| bool | is_var_ |
| bool | is_aniso_ |
| Protected Attributes inherited from Operateur_base | |
| int | decal_temps |
| int | nb_ss_pas_de_temps |
| SolveurSys | solveur |
| Matrice | matrice_ |
| Nom | out_ |
| Nom | description_ |
| DoubleTab | flux_bords_ |
| Champs_compris | champs_compris_ |
| std::string | nom_inco_ |
Concrete DG diffusion operator acting on element-based unknowns.
This class implements the Symmetric Interior Penalty (SIP) Galerkin discretization of the diffusion operator for scalar and vector fields discretized on DG elements. It assembles both the global stiffness matrix and the right-hand side contribution through the interface_blocs mechanism (has_interface_blocs() returns 1).
The SIP formulation introduces three families of face integrals at every internal face shared by elements T0 and T1:
where gamma = 2*nu_0*nu_1/(nu_0+nu_1) is the harmonic mean of the diffusivities on each side, eta_F is the element-local penalty coefficient, and h_T is the minimum characteristic size of the two adjacent elements.
At boundary faces the same three terms are applied to a single element, with the boundary condition value contributing to the right-hand side through contribuer_au_second_membre(). Supported boundary conditions are:
The stencil (sparsity pattern) of the assembled matrix couples every element to all its face-neighbours, as computed by dimensionner() and dimensionner_blocs().
Cross-problem coupling (dimensionner_termes_croises, ajouter_termes_croises, contribuer_termes_croises) is declared but not yet implemented (throws at runtime).
Definition at line 57 of file Op_Diff_DG_Elem.h.
|
overridevirtual |
Assembles the SIP diffusion operator into the matrix and right-hand side.
This is the core assembly routine. It proceeds in three stages:
1. Volume integrals (stiffness term) For each element, the term integral of nu * grad(phi_i) . grad(phi_j) is integrated using the element quadrature rule and accumulated into the diagonal block of the matrix and into secmem.
2. Internal face integrals (SIP terms) For each internal face shared by elem0 and elem1:
3. Boundary face integrals (Dirichlet enforcement) For boundary faces flagged as Dirichlet (fcl flag > 5), the same penalty and consistency terms are applied to the single adjacent element, imposing the boundary condition weakly in the SIP sense. The Dirichlet value contribution to secmem is handled separately by contribuer_au_second_membre().
Both isotropic and anisotropic diffusivities are supported: for anisotropic cases, nu_F is computed as the normal projection of the diffusivity tensor onto the face.
The DOF ordering within an element is: phi0.ex, phi1.ex, ..., phi0.ey, phi1.ey, ... for vector fields (nb_bfunc DOFs per spatial direction).
| matrices | Map of matrix name → Matrice_Morse pointer to accumulate into. |
| secmem | Right-hand side array to accumulate into. |
| semi_impl | Map of semi-implicit field values (matrix assembly is skipped if the unknown is present here). |
Reimplemented from Operateur_base.
Definition at line 236 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Reimplemented from Operateur_base.
Definition at line 559 of file Op_Diff_DG_Elem.cpp.
|
virtualdelete |
|
overridevirtual |
Finalizes operator setup after all associations have been made.
Calls the parent completer(), then:
Reimplemented from Op_Diff_DG_base.
Definition at line 58 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Adds boundary condition contributions to the right-hand side.
Loops over all boundary faces and, depending on the boundary condition type, adds the appropriate weak enforcement term to resu:
Both isotropic and anisotropic diffusivities are handled for the Dirichlet terms. The use of Champ_front_softanalytique is explicitly forbidden and triggers an error.
| resu | The right-hand side array to accumulate boundary contributions into. |
Reimplemented from Operateur_base.
Definition at line 596 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Reimplemented from Operateur_base.
Definition at line 565 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Builds the sparsity pattern of the DG diffusion matrix in a Matrice_Morse.
The matrix couples each element to all its face-neighbours as given by the pre-computed sorted stencil (Domaine_DG::get_stencil_sorted()). The global index space is built from the BasisFunction index map indices_glob_elem, so that each element contributes a block of nb_basis_func * dim rows and the column range of a row spans nb_basis_func columns per neighbour element (including itself).
The method fills tab1 (row pointers) in a first pass, then tab2 (column indices) in a second pass, and finally marks the stencil as sorted.
| la_matrice | The Matrice_Morse whose sparsity pattern is to be set. |
Reimplemented from Operateur_base.
Definition at line 92 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Sizes the block matrices used by the interface_blocs assembly mechanism.
If the unknown is treated semi-implicitly (its name appears in semi_impl), no matrix needs to be dimensioned and the method returns immediately. Otherwise, for each external operator registered in op_ext (used for monolithic thermal coupling), the corresponding sub-matrix is sized by calling dimensionner(). Cross-problem coupling (i > 0) is not yet implemented and throws at runtime.
| matrices | Map of matrix name → Matrice_Morse pointer to be sized. |
| semi_impl | Map of semi-implicit field names to their current values. |
Reimplemented from Operateur_base.
Definition at line 174 of file Op_Diff_DG_Elem.cpp.
|
overridevirtual |
Reimplemented from Operateur_base.
Definition at line 553 of file Op_Diff_DG_Elem.cpp.
|
inlineoverridevirtual |
Reimplemented from Operateur_base.
Definition at line 69 of file Op_Diff_DG_Elem.h.
|
inlineoverridevirtual |
DOES NOTHING - to override in derived classes.
| (Matrice_Morse&) | une matrice au format Morse |
| (DoubleTab&) | un tableau de valeur (double) |
| methode | a surcharger |
Reimplemented from Operateur_base.
Definition at line 64 of file Op_Diff_DG_Elem.h.