libMesh
Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
libMesh::StaticCondensation Class Referenceabstract

#include <static_condensation.h>

Inheritance diagram for libMesh::StaticCondensation:
[legend]

Classes

struct  MatrixData
 Data stored on a per-element basis used to compute element Schur complements and their applications to vectors. More...
 

Public Member Functions

 StaticCondensation (const MeshBase &mesh, System &system, const DofMap &full_dof_map, StaticCondensationDofMap &reduced_dof_map)
 
virtual ~StaticCondensation ()
 
virtual SparseMatrix< Number > & operator= (const SparseMatrix< Number > &) override
 This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual. More...
 
virtual SolverPackage solver_package () override
 
virtual void init (const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type nnz=30, const numeric_index_type noz=10, const numeric_index_type blocksize=1) override
 Initialize SparseMatrix with the specified sizes. More...
 
virtual void init (const ParallelType type) override
 Initialize this matrix using the sparsity structure computed by dof_map. More...
 
virtual bool initialized () const override
 
virtual void clear () noexcept override
 Restores the SparseMatrix<T> to a pristine state. More...
 
virtual void zero () override
 Set all entries to 0. More...
 
virtual std::unique_ptr< SparseMatrix< Number > > zero_clone () const override
 
virtual std::unique_ptr< SparseMatrix< Number > > clone () const override
 
virtual void close () override
 Calls the SparseMatrix's internal assembly routines, ensuring that the values are consistent across processors. More...
 
virtual numeric_index_type m () const override
 
virtual numeric_index_type n () const override
 
virtual numeric_index_type row_start () const override
 
virtual numeric_index_type row_stop () const override
 
virtual numeric_index_type col_start () const override
 
virtual numeric_index_type col_stop () const override
 
virtual void set (const numeric_index_type i, const numeric_index_type j, const Number value) override
 Set the element (i,j) to value. More...
 
virtual void add (const numeric_index_type i, const numeric_index_type j, const Number value) override
 Add value to the element (i,j). More...
 
virtual void add_matrix (const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) override
 Add the full matrix dm to the SparseMatrix. More...
 
virtual void add_matrix (const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &dof_indices) override
 Same as add_matrix, but assumes the row and column maps are the same. More...
 
virtual void add (const Number a, const SparseMatrix< Number > &X) override
 Compute \( A \leftarrow A + a*X \) for scalar a, matrix X. More...
 
virtual Number operator() (const numeric_index_type i, const numeric_index_type j) const override
 
virtual Real l1_norm () const override
 
virtual Real linfty_norm () const override
 
virtual bool closed () const override
 
virtual void print_personal (std::ostream &os=libMesh::out) const override
 Print the contents of the matrix to the screen in a package-personalized style, if available. More...
 
virtual void get_diagonal (NumericVector< Number > &dest) const override
 Copies the diagonal part of the matrix into dest. More...
 
virtual void get_transpose (SparseMatrix< Number > &dest) const override
 Copies the transpose of the matrix into dest, which may be *this. More...
 
virtual void get_row (numeric_index_type i, std::vector< numeric_index_type > &indices, std::vector< Number > &values) const override
 Get a row from the matrix. More...
 
void init ()
 Size the element matrices. More...
 
void setup ()
 A no-op to be consistent with shimming from the StaticCondenstionPreconditioner. More...
 
void apply (const NumericVector< Number > &full_rhs, NumericVector< Number > &full_sol)
 Perform our three stages, forward_elimination(), a solve() on the condensed system, and finally a backwards_substitution() More...
 
const SparseMatrix< Number > & get_condensed_mat () const
 
void set_current_elem (const Elem &elem)
 Set the current element. More...
 
StaticCondensationPreconditionerget_preconditioner ()
 Get the preconditioning wrapper. More...
 
LinearSolver< Number > & reduced_system_solver ()
 
virtual bool require_sparsity_pattern () const override
 
void uncondensed_dofs_only ()
 Sets whether this matrix represents uncondensed dofs only. More...
 
void dont_condense_vars (const std::unordered_set< unsigned int > &vars)
 Add vars to the list of variables not to condense. More...
 
 StaticCondensation (const MeshBase &, const System &, const DofMap &full_dof_map, StaticCondensationDofMap &reduced_dof_map)
 
const std::unordered_set< unsigned int > & uncondensed_vars () const
 
StaticCondensationPreconditionerget_preconditioner ()
 
virtual SparseMatrix< Number > & operator= (const SparseMatrix< Number > &) override
 This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual. More...
 
virtual SolverPackage solver_package () override
 
virtual void init (const numeric_index_type, const numeric_index_type, const numeric_index_type, const numeric_index_type, const numeric_index_type=30, const numeric_index_type=10, const numeric_index_type=1) override
 Initialize SparseMatrix with the specified sizes. More...
 
virtual void init (ParallelType) override
 Initialize this matrix using the sparsity structure computed by dof_map. More...
 
virtual void clear () override
 Restores the SparseMatrix<T> to a pristine state. More...
 
virtual void zero () override
 Set all entries to 0. More...
 
virtual std::unique_ptr< SparseMatrix< Number > > zero_clone () const override
 
virtual std::unique_ptr< SparseMatrix< Number > > clone () const override
 
virtual void close () override
 Calls the SparseMatrix's internal assembly routines, ensuring that the values are consistent across processors. More...
 
virtual numeric_index_type m () const override
 
virtual numeric_index_type n () const override
 
virtual numeric_index_type row_start () const override
 
virtual numeric_index_type row_stop () const override
 
virtual numeric_index_type col_start () const override
 
virtual numeric_index_type col_stop () const override
 
virtual void set (const numeric_index_type, const numeric_index_type, const Number) override
 Set the element (i,j) to value. More...
 
virtual void add (const numeric_index_type, const numeric_index_type, const Number) override
 Add value to the element (i,j). More...
 
virtual void add_matrix (const DenseMatrix< Number > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &) override
 Add the full matrix dm to the SparseMatrix. More...
 
virtual void add_matrix (const DenseMatrix< Number > &, const std::vector< numeric_index_type > &) override
 Same as add_matrix, but assumes the row and column maps are the same. More...
 
virtual void add (const Number, const SparseMatrix< Number > &) override
 Compute \( A \leftarrow A + a*X \) for scalar a, matrix X. More...
 
virtual Number operator() (const numeric_index_type, const numeric_index_type) const override
 
virtual Real l1_norm () const override
 
virtual Real linfty_norm () const override
 
virtual bool closed () const override
 
virtual void print_personal (std::ostream &=libMesh::out) const override
 Print the contents of the matrix to the screen in a package-personalized style, if available. More...
 
virtual void get_diagonal (NumericVector< Number > &) const override
 Copies the diagonal part of the matrix into dest. More...
 
virtual void get_transpose (SparseMatrix< Number > &) const override
 Copies the transpose of the matrix into dest, which may be *this. More...
 
virtual void get_row (numeric_index_type, std::vector< numeric_index_type > &, std::vector< Number > &) const override
 Get a row from the matrix. More...
 
void init ()
 
void setup ()
 
void apply (const NumericVector< Number > &, NumericVector< Number > &)
 
void attach_dof_map (const DofMap &dof_map)
 Set a pointer to the DofMap to use. More...
 
void attach_sparsity_pattern (const SparsityPattern::Build &sp)
 Set a pointer to a sparsity pattern to use. More...
 
virtual bool need_full_sparsity_pattern () const
 
virtual void update_sparsity_pattern (const SparsityPattern::Graph &)
 Updates the matrix sparsity pattern. More...
 
virtual void zero_rows (std::vector< numeric_index_type > &rows, Number diag_value=0.0)
 Sets all row entries to 0 then puts diag_value in the diagonal entry. More...
 
virtual void flush ()
 For PETSc matrix , this function is similar to close but without shrinking memory. More...
 
virtual numeric_index_type local_m () const
 Get the number of rows owned by this process. More...
 
virtual numeric_index_type local_n () const
 Get the number of columns owned by this process. More...
 
virtual void add_block_matrix (const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &brows, const std::vector< numeric_index_type > &bcols)
 Add the full matrix dm to the SparseMatrix. More...
 
virtual void add_block_matrix (const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &dof_indices)
 Same as add_block_matrix(), but assumes the row and column maps are the same. More...
 
virtual void matrix_matrix_mult (SparseMatrix< Number > &, SparseMatrix< Number > &, bool)
 Compute Y = A*X for matrix X. More...
 
virtual void add_sparse_matrix (const SparseMatrix< Number > &, const std::map< numeric_index_type, numeric_index_type > &, const std::map< numeric_index_type, numeric_index_type > &, const Number)
 Add scalar* spm to the rows and cols of this matrix (A): A(rows[i], cols[j]) += scalar * spm(i,j) More...
 
Real l1_norm_diff (const SparseMatrix< Number > &other_mat) const
 
virtual std::size_t n_nonzeros () const
 
void print (std::ostream &os=libMesh::out, const bool sparse=false) const
 Print the contents of the matrix to the screen in a uniform style, regardless of matrix/solver package being used. More...
 
void print (std::ostream &os, const bool sparse) const
 
virtual void print_matlab (const std::string &="") const
 Print the contents of the matrix in Matlab's sparse matrix format. More...
 
virtual void print_petsc_binary (const std::string &filename)
 Write the contents of the matrix to a file in PETSc's binary sparse matrix format. More...
 
virtual void print_petsc_hdf5 (const std::string &filename)
 Write the contents of the matrix to a file in PETSc's HDF5 sparse matrix format. More...
 
virtual void read (const std::string &filename)
 Read the contents of the matrix from a file, with the file format inferred from the extension of filename. More...
 
virtual void read_matlab (const std::string &filename)
 Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc. More...
 
virtual void read_petsc_binary (const std::string &filename)
 Read the contents of the matrix from a file in PETSc's binary sparse matrix format. More...
 
virtual void read_petsc_hdf5 (const std::string &filename)
 Read the contents of the matrix from a file in PETSc's HDF5 sparse matrix format. More...
 
virtual void create_submatrix (SparseMatrix< Number > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const
 This function creates a matrix called "submatrix" which is defined by the row and column indices given in the "rows" and "cols" entries. More...
 
virtual void create_submatrix_nosort (SparseMatrix< Number > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &) const
 Similar to the above function, this function creates a submatrix which is defined by the indices given in the rows and cols vectors. More...
 
virtual void reinit_submatrix (SparseMatrix< Number > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const
 This function is similar to the one above, but it allows you to reuse the existing sparsity pattern of "submatrix" instead of reallocating it again. More...
 
void vector_mult (NumericVector< Number > &dest, const NumericVector< Number > &arg) const
 Multiplies the matrix by the NumericVector arg and stores the result in NumericVector dest. More...
 
void vector_mult_add (NumericVector< Number > &dest, const NumericVector< Number > &arg) const
 Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest. More...
 
virtual void scale (const Number scale)
 Scales all elements of this matrix by scale. More...
 
virtual bool supports_hash_table () const
 
void use_hash_table (bool use_hash)
 Sets whether to use hash table assembly. More...
 
bool use_hash_table () const
 
virtual void restore_original_nonzero_pattern ()
 Reset the memory storage of the matrix. More...
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
Mat mat ()
 
Mat mat () const
 
void set_destroy_mat_on_exit (bool destroy=true)
 If set to false, we don't delete the Mat on destruction and allow instead for PETSc to manage it. More...
 
void swap (PetscMatrixBase< T > &)
 Swaps the internal data pointers of two PetscMatrices, no actual values are swapped. More...
 
void set_context ()
 Set the context (ourself) for _mat. More...
 
virtual numeric_index_type local_m () const final
 Get the number of rows owned by this process. More...
 
virtual numeric_index_type local_n () const final
 Get the number of columns owned by this process. More...
 
void attach_dof_map (const DofMap &dof_map)
 Set a pointer to the DofMap to use. More...
 
void attach_sparsity_pattern (const SparsityPattern::Build &sp)
 Set a pointer to a sparsity pattern to use. More...
 
virtual bool need_full_sparsity_pattern () const
 
virtual void update_sparsity_pattern (const SparsityPattern::Graph &)
 Updates the matrix sparsity pattern. More...
 
virtual void zero_rows (std::vector< numeric_index_type > &rows, T diag_value=0.0)
 Sets all row entries to 0 then puts diag_value in the diagonal entry. More...
 
virtual void flush ()
 For PETSc matrix , this function is similar to close but without shrinking memory. More...
 
virtual void set (const numeric_index_type i, const numeric_index_type j, const T value)=0
 Set the element (i,j) to value. More...
 
virtual void add (const numeric_index_type i, const numeric_index_type j, const T value)=0
 Add value to the element (i,j). More...
 
virtual void add (const T a, const SparseMatrix< T > &X)=0
 Compute \( A \leftarrow A + a*X \) for scalar a, matrix X. More...
 
virtual void add_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols)=0
 Add the full matrix dm to the SparseMatrix. More...
 
virtual void add_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &dof_indices)=0
 Same as add_matrix, but assumes the row and column maps are the same. More...
 
virtual void add_block_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &brows, const std::vector< numeric_index_type > &bcols)
 Add the full matrix dm to the SparseMatrix. More...
 
virtual void add_block_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &dof_indices)
 Same as add_block_matrix(), but assumes the row and column maps are the same. More...
 
virtual void matrix_matrix_mult (SparseMatrix< T > &, SparseMatrix< T > &, bool)
 Compute Y = A*X for matrix X. More...
 
virtual void add_sparse_matrix (const SparseMatrix< T > &, const std::map< numeric_index_type, numeric_index_type > &, const std::map< numeric_index_type, numeric_index_type > &, const T)
 Add scalar* spm to the rows and cols of this matrix (A): A(rows[i], cols[j]) += scalar * spm(i,j) More...
 
Real l1_norm_diff (const SparseMatrix< T > &other_mat) const
 
virtual std::size_t n_nonzeros () const
 
void print (std::ostream &os=libMesh::out, const bool sparse=false) const
 Print the contents of the matrix to the screen in a uniform style, regardless of matrix/solver package being used. More...
 
virtual void print_matlab (const std::string &="") const
 Print the contents of the matrix in Matlab's sparse matrix format. More...
 
virtual void print_petsc_binary (const std::string &filename)
 Write the contents of the matrix to a file in PETSc's binary sparse matrix format. More...
 
virtual void print_petsc_hdf5 (const std::string &filename)
 Write the contents of the matrix to a file in PETSc's HDF5 sparse matrix format. More...
 
virtual void read (const std::string &filename)
 Read the contents of the matrix from a file, with the file format inferred from the extension of filename. More...
 
virtual void read_matlab (const std::string &filename)
 Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc. More...
 
virtual void read_petsc_binary (const std::string &filename)
 Read the contents of the matrix from a file in PETSc's binary sparse matrix format. More...
 
virtual void read_petsc_hdf5 (const std::string &filename)
 Read the contents of the matrix from a file in PETSc's HDF5 sparse matrix format. More...
 
virtual void create_submatrix (SparseMatrix< T > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const
 This function creates a matrix called "submatrix" which is defined by the row and column indices given in the "rows" and "cols" entries. More...
 
virtual void create_submatrix_nosort (SparseMatrix< T > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &) const
 Similar to the above function, this function creates a submatrix which is defined by the indices given in the rows and cols vectors. More...
 
virtual void reinit_submatrix (SparseMatrix< T > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const
 This function is similar to the one above, but it allows you to reuse the existing sparsity pattern of "submatrix" instead of reallocating it again. More...
 
void vector_mult (NumericVector< T > &dest, const NumericVector< T > &arg) const
 Multiplies the matrix by the NumericVector arg and stores the result in NumericVector dest. More...
 
void vector_mult_add (NumericVector< T > &dest, const NumericVector< T > &arg) const
 Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest. More...
 
virtual void get_diagonal (NumericVector< T > &dest) const =0
 Copies the diagonal part of the matrix into dest. More...
 
virtual void get_transpose (SparseMatrix< T > &dest) const =0
 Copies the transpose of the matrix into dest, which may be *this. More...
 
virtual void get_row (numeric_index_type i, std::vector< numeric_index_type > &indices, std::vector< T > &values) const =0
 Get a row from the matrix. More...
 
virtual void scale (const T scale)
 Scales all elements of this matrix by scale. More...
 
virtual bool supports_hash_table () const
 
void use_hash_table (bool use_hash)
 Sets whether to use hash table assembly. More...
 
bool use_hash_table () const
 
virtual void restore_original_nonzero_pattern ()
 Reset the memory storage of the matrix. More...
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static std::unique_ptr< SparseMatrix< Number > > build (const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package(), const MatrixBuildType matrix_build_type=MatrixBuildType::AUTOMATIC)
 Builds a SparseMatrix<T> using the linear solver package specified by solver_package. More...
 
static std::string get_info ()
 Gets a string containing the reference information. More...
 
static void print_info (std::ostream &out_stream=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 
static PetscMatrixBase< T > * get_context (Mat mat, const TIMPI::Communicator &comm)
 
static std::unique_ptr< SparseMatrix< T > > build (const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package(), const MatrixBuildType matrix_build_type=MatrixBuildType::AUTOMATIC)
 Builds a SparseMatrix<T> using the linear solver package specified by solver_package. More...
 
static std::string get_info ()
 Gets a string containing the reference information. More...
 
static void print_info (std::ostream &out_stream=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 

Protected Types

typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 
typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
 Data structure to log the information. More...
 

Protected Member Functions

virtual void _get_submatrix (SparseMatrix< Number > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
 Protected implementation of the create_submatrix and reinit_submatrix routines. More...
 
void increment_constructor_count (const std::string &name) noexcept
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name) noexcept
 Increments the destruction counter. More...
 
virtual void _get_submatrix (SparseMatrix< T > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
 Protected implementation of the create_submatrix and reinit_submatrix routines. More...
 
void increment_constructor_count (const std::string &name) noexcept
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name) noexcept
 Increments the destruction counter. More...
 

Protected Attributes

DofMap const * _dof_map
 The DofMap object associated with this object. More...
 
SparsityPattern::Build const * _sp
 The sparsity pattern associated with this object. More...
 
bool _is_initialized
 Flag indicating whether or not the matrix has been initialized. More...
 
bool _use_hash_table
 Flag indicating whether the matrix is assembled using a hash table. More...
 
const Parallel::Communicator_communicator
 
Mat _mat
 PETSc matrix datatype to store values. More...
 
bool _destroy_mat_on_exit
 This boolean value should only be set to false for the constructor which takes a PETSc Mat object. More...
 
DofMap const * _dof_map
 The DofMap object associated with this object. More...
 
SparsityPattern::Build const * _sp
 The sparsity pattern associated with this object. More...
 
bool _is_initialized
 Flag indicating whether or not the matrix has been initialized. More...
 
bool _use_hash_table
 Flag indicating whether the matrix is assembled using a hash table. More...
 
const Parallel::Communicator_communicator
 

Static Protected Attributes

static Counts _counts
 Actually holds the data. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 
static Counts _counts
 Actually holds the data. More...
 
static Threads::atomic< unsigned int_n_objects
 The number of objects. More...
 
static Threads::spin_mutex _mutex
 Mutual exclusion object to enable thread-safe reference counting. More...
 
static bool _enable_print_counter = true
 Flag to control whether reference count information is printed when print_info is called. More...
 

Private Member Functions

void forward_elimination (const NumericVector< Number > &full_rhs)
 Takes an incoming "full" RHS from the solver, where full means the union of uncondensed and condennsed dofs, and condenses it down into the condensed _reduced_rhs data member using element Schur complements. More...
 
void backwards_substitution (const NumericVector< Number > &full_rhs, NumericVector< Number > &full_sol)
 After performing the solve with the _reduced_rhs and Schur complement matrix (_reduced_sys_mat) to determine the _reduced_sol, we use the uncondensed full_rhs along with the _reduced_sol to back substitute into the full_sol, which is the final output data of the static condensation preconditioner application. More...
 

Static Private Member Functions

static void set_local_vectors (const NumericVector< Number > &global_vector, const std::vector< dof_id_type > &elem_dof_indices, std::vector< Number > &elem_dof_values_vec, EigenVector &elem_dof_values)
 Retrieves the degree of freedom values from global_vector corresponding to elem_dof_indices, filling both elem_dof_values_vec and elem_dof_values. More...
 

Private Attributes

std::unordered_map< dof_id_type, MatrixData_elem_to_matrix_data
 A map from element ID to Schur complement data. More...
 
const MeshBase_mesh
 
System_system
 
const DofMap_full_dof_map
 
StaticCondensationDofMap_reduced_dof_map
 
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
 global sparse matrix for the uncondensed degrees of freedom More...
 
std::unique_ptr< NumericVector< Number > > _reduced_sol
 solution for the uncondensed degrees of freedom More...
 
std::unique_ptr< NumericVector< Number > > _reduced_rhs
 RHS corresponding to the uncondensed degrees of freedom. More...
 
std::unique_ptr< LinearSolver< Number > > _reduced_solver
 The solver for the uncondensed degrees of freedom. More...
 
std::unique_ptr< NumericVector< Number > > _ghosted_full_sol
 This is a ghosted representation of the full (uncondensed + condensed) solution. Note that. More...
 
dof_id_type _current_elem_id
 The current element ID. More...
 
DenseMatrix< Number_size_one_mat
 Helper data member for adding individual matrix elements. More...
 
std::unique_ptr< StaticCondensationPreconditioner_scp
 Preconditioner object which will call back to us for the preconditioning action. More...
 
bool _sc_is_initialized
 Whether our object has been initialized. More...
 
bool _have_cached_values
 Whether we have cached values via add_XXX() More...
 
ParallelType _parallel_type
 The parallel type to use for the reduced matrix. More...
 
bool _uncondensed_dofs_only
 whether this matrix represents uncondensed dofs only. More...
 

Detailed Description

Definition at line 60 of file static_condensation.h.

Member Typedef Documentation

◆ Counts [1/2]

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 119 of file reference_counter.h.

◆ Counts [2/2]

typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts
protectedinherited

Data structure to log the information.

The log is identified by the class name.

Definition at line 119 of file reference_counter.h.

Constructor & Destructor Documentation

◆ StaticCondensation() [1/2]

libMesh::StaticCondensation::StaticCondensation ( const MeshBase mesh,
System system,
const DofMap full_dof_map,
StaticCondensationDofMap reduced_dof_map 
)

Definition at line 39 of file static_condensation.C.

References _scp, _size_one_mat, and libMesh::DenseMatrix< T >::resize().

43  : PetscMatrixShellMatrix<Number>(full_dof_map.comm()),
44  _mesh(mesh),
45  _system(system),
46  _full_dof_map(full_dof_map),
47  _reduced_dof_map(reduced_dof_map),
49  _sc_is_initialized(false),
50  _have_cached_values(false),
53 {
54  _size_one_mat.resize(1, 1);
55  _scp = std::make_unique<StaticCondensationPreconditioner>(*this);
56 }
StaticCondensationDofMap & _reduced_dof_map
ParallelType _parallel_type
The parallel type to use for the reduced matrix.
MeshBase & mesh
dof_id_type _current_elem_id
The current element ID.
template class LIBMESH_EXPORT PetscMatrixShellMatrix< Number >
DenseMatrix< Number > _size_one_mat
Helper data member for adding individual matrix elements.
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
Definition: dof_object.h:482
bool _uncondensed_dofs_only
whether this matrix represents uncondensed dofs only.
std::unique_ptr< StaticCondensationPreconditioner > _scp
Preconditioner object which will call back to us for the preconditioning action.
void resize(const unsigned int new_m, const unsigned int new_n)
Resizes the matrix to the specified size and calls zero().
Definition: dense_matrix.h:895
bool _have_cached_values
Whether we have cached values via add_XXX()
bool _sc_is_initialized
Whether our object has been initialized.

◆ ~StaticCondensation()

libMesh::StaticCondensation::~StaticCondensation ( )
virtualdefault

◆ StaticCondensation() [2/2]

libMesh::StaticCondensation::StaticCondensation ( const MeshBase ,
const System ,
const DofMap full_dof_map,
StaticCondensationDofMap reduced_dof_map 
)

Definition at line 489 of file static_condensation.C.

493  : SparseMatrix<Number>(full_dof_map.comm())
494 {
495  libmesh_error_msg(
496  "Static condensation requires configuring libMesh with PETSc and Eigen support");
497 }
template class LIBMESH_EXPORT SparseMatrix< Number >

Member Function Documentation

◆ _get_submatrix() [1/2]

virtual void libMesh::SparseMatrix< Number >::_get_submatrix ( SparseMatrix< Number > &  ,
const std::vector< numeric_index_type > &  ,
const std::vector< numeric_index_type > &  ,
const bool   
) const
inlineprotectedvirtualinherited

Protected implementation of the create_submatrix and reinit_submatrix routines.

Note
This function must be overridden in derived classes for it to work properly!

Definition at line 629 of file sparse_matrix.h.

633  {
634  libmesh_not_implemented();
635  }

◆ _get_submatrix() [2/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::_get_submatrix ( SparseMatrix< T > &  ,
const std::vector< numeric_index_type > &  ,
const std::vector< numeric_index_type > &  ,
const bool   
) const
inlineprotectedvirtualinherited

Protected implementation of the create_submatrix and reinit_submatrix routines.

Note
This function must be overridden in derived classes for it to work properly!

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 629 of file sparse_matrix.h.

Referenced by libMesh::SparseMatrix< ValOut >::create_submatrix(), and libMesh::SparseMatrix< ValOut >::reinit_submatrix().

633  {
634  libmesh_not_implemented();
635  }

◆ add() [1/6]

void libMesh::StaticCondensation::add ( const numeric_index_type  i,
const numeric_index_type  j,
const Number  value 
)
overridevirtual

Add value to the element (i,j).

Throws an error if the entry does not exist. Zero values can be "added" to non-existent entries.

Implements libMesh::SparseMatrix< Number >.

Definition at line 270 of file static_condensation.C.

References _size_one_mat, add_matrix(), and value.

273 {
274  _size_one_mat(0, 0) = value;
275  this->add_matrix(_size_one_mat, {i}, {j});
276 }
DenseMatrix< Number > _size_one_mat
Helper data member for adding individual matrix elements.
virtual void add_matrix(const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) override
Add the full matrix dm to the SparseMatrix.
static const bool value
Definition: xdr_io.C:54

◆ add() [2/6]

void libMesh::StaticCondensation::add ( const Number  a,
const SparseMatrix< Number > &  X 
)
overridevirtual

Compute \( A \leftarrow A + a*X \) for scalar a, matrix X.

Implements libMesh::SparseMatrix< Number >.

Definition at line 345 of file static_condensation.C.

346 {
347  libmesh_not_implemented();
348 }

◆ add() [3/6]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add ( const numeric_index_type  i,
const numeric_index_type  j,
const T  value 
)
pure virtualinherited

◆ add() [4/6]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add ( const T  a,
const SparseMatrix< T > &  X 
)
pure virtualinherited

◆ add() [5/6]

virtual void libMesh::StaticCondensation::add ( const numeric_index_type  i,
const numeric_index_type  j,
const Number  value 
)
inlineoverridevirtual

Add value to the element (i,j).

Throws an error if the entry does not exist. Zero values can be "added" to non-existent entries.

Implements libMesh::SparseMatrix< Number >.

Definition at line 364 of file static_condensation.h.

365  {
366  libmesh_not_implemented();
367  }

◆ add() [6/6]

virtual void libMesh::StaticCondensation::add ( const Number  a,
const SparseMatrix< Number > &  X 
)
inlineoverridevirtual

Compute \( A \leftarrow A + a*X \) for scalar a, matrix X.

Implements libMesh::SparseMatrix< Number >.

Definition at line 379 of file static_condensation.h.

380  {
381  libmesh_not_implemented();
382  }

◆ add_block_matrix() [1/4]

template<typename T>
void libMesh::SparseMatrix< T >::add_block_matrix ( const DenseMatrix< T > &  dm,
const std::vector< numeric_index_type > &  brows,
const std::vector< numeric_index_type > &  bcols 
)
virtualinherited

Add the full matrix dm to the SparseMatrix.

This is useful for adding an element matrix at assembly time. The matrix is assumed blocked, and brow, bcol correspond to the block row and column indices.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 91 of file sparse_matrix.C.

Referenced by libMesh::SparseMatrix< ValOut >::add_block_matrix().

94 {
95  libmesh_assert_equal_to (dm.m() / brows.size(), dm.n() / bcols.size());
96 
97  const numeric_index_type blocksize = cast_int<numeric_index_type>
98  (dm.m() / brows.size());
99 
100  libmesh_assert_equal_to (dm.m()%blocksize, 0);
101  libmesh_assert_equal_to (dm.n()%blocksize, 0);
102 
103  std::vector<numeric_index_type> rows, cols;
104 
105  rows.reserve(blocksize*brows.size());
106  cols.reserve(blocksize*bcols.size());
107 
108  for (auto & row : brows)
109  {
110  numeric_index_type i = row * blocksize;
111 
112  for (unsigned int v=0; v<blocksize; v++)
113  rows.push_back(i++);
114  }
115 
116  for (auto & col : bcols)
117  {
118  numeric_index_type j = col * blocksize;
119 
120  for (unsigned int v=0; v<blocksize; v++)
121  cols.push_back(j++);
122  }
123 
124  this->add_matrix (dm, rows, cols);
125 }
virtual void add_matrix(const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols)=0
Add the full matrix dm to the SparseMatrix.
dof_id_type numeric_index_type
Definition: id_types.h:99

◆ add_block_matrix() [2/4]

void libMesh::SparseMatrix< Number >::add_block_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  brows,
const std::vector< numeric_index_type > &  bcols 
)
virtualinherited

Add the full matrix dm to the SparseMatrix.

This is useful for adding an element matrix at assembly time. The matrix is assumed blocked, and brow, bcol correspond to the block row and column indices.

Definition at line 91 of file sparse_matrix.C.

94 {
95  libmesh_assert_equal_to (dm.m() / brows.size(), dm.n() / bcols.size());
96 
97  const numeric_index_type blocksize = cast_int<numeric_index_type>
98  (dm.m() / brows.size());
99 
100  libmesh_assert_equal_to (dm.m()%blocksize, 0);
101  libmesh_assert_equal_to (dm.n()%blocksize, 0);
102 
103  std::vector<numeric_index_type> rows, cols;
104 
105  rows.reserve(blocksize*brows.size());
106  cols.reserve(blocksize*bcols.size());
107 
108  for (auto & row : brows)
109  {
110  numeric_index_type i = row * blocksize;
111 
112  for (unsigned int v=0; v<blocksize; v++)
113  rows.push_back(i++);
114  }
115 
116  for (auto & col : bcols)
117  {
118  numeric_index_type j = col * blocksize;
119 
120  for (unsigned int v=0; v<blocksize; v++)
121  cols.push_back(j++);
122  }
123 
124  this->add_matrix (dm, rows, cols);
125 }
unsigned int m() const
virtual void add_matrix(const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols)=0
Add the full matrix dm to the SparseMatrix.
dof_id_type numeric_index_type
Definition: id_types.h:99
unsigned int n() const

◆ add_block_matrix() [3/4]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add_block_matrix ( const DenseMatrix< T > &  dm,
const std::vector< numeric_index_type > &  dof_indices 
)
inlinevirtualinherited

Same as add_block_matrix(), but assumes the row and column maps are the same.

Thus the matrix dm must be square.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 337 of file sparse_matrix.h.

339  { this->add_block_matrix (dm, dof_indices, dof_indices); }
virtual void add_block_matrix(const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &brows, const std::vector< numeric_index_type > &bcols)
Add the full matrix dm to the SparseMatrix.
Definition: sparse_matrix.C:91

◆ add_block_matrix() [4/4]

virtual void libMesh::SparseMatrix< Number >::add_block_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  dof_indices 
)
inlinevirtualinherited

Same as add_block_matrix(), but assumes the row and column maps are the same.

Thus the matrix dm must be square.

Definition at line 337 of file sparse_matrix.h.

339  { this->add_block_matrix (dm, dof_indices, dof_indices); }
virtual void add_block_matrix(const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &brows, const std::vector< numeric_index_type > &bcols)
Add the full matrix dm to the SparseMatrix.
Definition: sparse_matrix.C:91

◆ add_matrix() [1/6]

void libMesh::StaticCondensation::add_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
)
overridevirtual

Add the full matrix dm to the SparseMatrix.

This is useful for adding an element matrix at assembly time.

Implements libMesh::SparseMatrix< Number >.

Definition at line 278 of file static_condensation.C.

References _current_elem_id, libMesh::StaticCondensationDofMap::_elem_to_dof_data, _elem_to_matrix_data, _have_cached_values, _reduced_dof_map, libMesh::DofObject::invalid_id, libMesh::libmesh_assert(), libMesh::DenseMatrixBase< T >::m(), libMesh::make_range(), libMesh::PetscMatrixBase< T >::mat(), and libMesh::DenseMatrixBase< T >::n().

Referenced by add(), and add_matrix().

281 {
282  if (rows.empty() || cols.empty())
283  return;
284 
286  auto & matrix_data = libmesh_map_find(_elem_to_matrix_data, _current_elem_id);
287  const auto & dof_data = libmesh_map_find(_reduced_dof_map._elem_to_dof_data, _current_elem_id);
288  EigenMatrix * mat;
289 
290  auto info_from_index = [&dof_data](const auto global_index) {
291  auto index_it = dof_data.condensed_global_to_local_map.find(global_index);
292  const bool index_is_condensed = index_it != dof_data.condensed_global_to_local_map.end();
293  if (!index_is_condensed)
294  {
295  index_it = dof_data.uncondensed_global_to_local_map.find(global_index);
296  if (index_it == dof_data.uncondensed_global_to_local_map.end())
297  libmesh_error_msg("Failed to find the global index "
298  << global_index
299  << " in our current element's degree of freedom information. One way "
300  "this can happen is when using a discontinuous Galerkin method, "
301  "adding element matrices to both + and - sides of a face");
302  }
303  else
304  // We found the dof in the condensed container. Let's assert that it's not also in the
305  // uncondensed container
306  libmesh_assert(dof_data.uncondensed_global_to_local_map.find(global_index) ==
307  dof_data.uncondensed_global_to_local_map.end());
308 
309  return std::make_pair(index_is_condensed, index_it->second);
310  };
311 
312  for (const auto i : make_range(dm.m()))
313  for (const auto j : make_range(dm.n()))
314  {
315  const auto global_i = rows[i];
316  const auto global_j = cols[j];
317  const auto [i_is_condensed, local_i] = info_from_index(global_i);
318  const auto [j_is_condensed, local_j] = info_from_index(global_j);
319  if (i_is_condensed)
320  {
321  if (j_is_condensed)
322  mat = &matrix_data.Acc;
323  else
324  mat = &matrix_data.Acu;
325  }
326  else
327  {
328  if (j_is_condensed)
329  mat = &matrix_data.Auc;
330  else
331  mat = &matrix_data.Auu;
332  }
333  (*mat)(local_i, local_j) += dm(i, j);
334  }
335 
336  _have_cached_values = true;
337 }
StaticCondensationDofMap & _reduced_dof_map
unsigned int m() const
dof_id_type _current_elem_id
The current element ID.
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
libmesh_assert(ctx)
MatrixXcd EigenMatrix
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
Definition: dof_object.h:482
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
bool _have_cached_values
Whether we have cached values via add_XXX()
unsigned int n() const

◆ add_matrix() [2/6]

void libMesh::StaticCondensation::add_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  dof_indices 
)
overridevirtual

Same as add_matrix, but assumes the row and column maps are the same.

Thus the matrix dm must be square.

Implements libMesh::SparseMatrix< Number >.

Definition at line 339 of file static_condensation.C.

References add_matrix().

341 {
342  this->add_matrix(dm, dof_indices, dof_indices);
343 }
virtual void add_matrix(const DenseMatrix< Number > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) override
Add the full matrix dm to the SparseMatrix.

◆ add_matrix() [3/6]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add_matrix ( const DenseMatrix< T > &  dm,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
)
pure virtualinherited

◆ add_matrix() [4/6]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add_matrix ( const DenseMatrix< T > &  dm,
const std::vector< numeric_index_type > &  dof_indices 
)
pure virtualinherited

◆ add_matrix() [5/6]

virtual void libMesh::StaticCondensation::add_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
)
inlineoverridevirtual

Add the full matrix dm to the SparseMatrix.

This is useful for adding an element matrix at assembly time.

Implements libMesh::SparseMatrix< Number >.

Definition at line 368 of file static_condensation.h.

371  {
372  libmesh_not_implemented();
373  }

◆ add_matrix() [6/6]

virtual void libMesh::StaticCondensation::add_matrix ( const DenseMatrix< Number > &  dm,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineoverridevirtual

Same as add_matrix, but assumes the row and column maps are the same.

Thus the matrix dm must be square.

Implements libMesh::SparseMatrix< Number >.

Definition at line 374 of file static_condensation.h.

376  {
377  libmesh_not_implemented();
378  }

◆ add_sparse_matrix() [1/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::add_sparse_matrix ( const SparseMatrix< T > &  ,
const std::map< numeric_index_type, numeric_index_type > &  ,
const std::map< numeric_index_type, numeric_index_type > &  ,
const T   
)
inlinevirtualinherited

Add scalar* spm to the rows and cols of this matrix (A): A(rows[i], cols[j]) += scalar * spm(i,j)

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 356 of file sparse_matrix.h.

360  { libmesh_not_implemented(); }

◆ add_sparse_matrix() [2/2]

virtual void libMesh::SparseMatrix< Number >::add_sparse_matrix ( const SparseMatrix< Number > &  ,
const std::map< numeric_index_type, numeric_index_type > &  ,
const std::map< numeric_index_type, numeric_index_type > &  ,
const Number   
)
inlinevirtualinherited

Add scalar* spm to the rows and cols of this matrix (A): A(rows[i], cols[j]) += scalar * spm(i,j)

Definition at line 356 of file sparse_matrix.h.

360  { libmesh_not_implemented(); }

◆ apply() [1/2]

void libMesh::StaticCondensation::apply ( const NumericVector< Number > &  full_rhs,
NumericVector< Number > &  full_sol 
)

Perform our three stages, forward_elimination(), a solve() on the condensed system, and finally a backwards_substitution()

Definition at line 457 of file static_condensation.C.

References _ghosted_full_sol, libMesh::StaticCondensationDofMap::_local_uncondensed_dofs, _reduced_dof_map, _reduced_rhs, _reduced_sol, _reduced_solver, _reduced_sys_mat, backwards_substitution(), forward_elimination(), libMesh::NumericVector< T >::get_subvector(), libMesh::NumericVector< T >::restore_subvector(), and libMesh::NumericVector< T >::zero().

Referenced by libMesh::StaticCondensationPreconditioner::apply().

459 {
460  forward_elimination(full_rhs);
461  // Apparently PETSc will send us the yvec without zeroing it ahead of time. This can be a poor
462  // initial guess for the Krylov solve as well as lead to bewildered users who expect their initial
463  // residual norm to equal the norm of the RHS
464  full_parallel_sol.zero();
465  _reduced_sol = full_parallel_sol.get_subvector(_reduced_dof_map._local_uncondensed_dofs);
467  // Must restore to the full solution because during backwards substitution we will need to be able
468  // to read ghosted dofs and we don't support ghosting of subvectors
469  full_parallel_sol.restore_subvector(std::move(_reduced_sol),
471  *_ghosted_full_sol = full_parallel_sol;
472  backwards_substitution(full_rhs, full_parallel_sol);
473 }
void forward_elimination(const NumericVector< Number > &full_rhs)
Takes an incoming "full" RHS from the solver, where full means the union of uncondensed and condennse...
StaticCondensationDofMap & _reduced_dof_map
void backwards_substitution(const NumericVector< Number > &full_rhs, NumericVector< Number > &full_sol)
After performing the solve with the _reduced_rhs and Schur complement matrix (_reduced_sys_mat) to de...
std::unique_ptr< LinearSolver< Number > > _reduced_solver
The solver for the uncondensed degrees of freedom.
std::unique_ptr< NumericVector< Number > > _reduced_sol
solution for the uncondensed degrees of freedom
std::vector< dof_id_type > _local_uncondensed_dofs
All the uncondensed degrees of freedom (numbered in the "full" uncondensed + condensed space)...
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom
std::unique_ptr< NumericVector< Number > > _reduced_rhs
RHS corresponding to the uncondensed degrees of freedom.
std::unique_ptr< NumericVector< Number > > _ghosted_full_sol
This is a ghosted representation of the full (uncondensed + condensed) solution. Note that...

◆ apply() [2/2]

void libMesh::StaticCondensation::apply ( const NumericVector< Number > &  ,
NumericVector< Number > &   
)
inline

Definition at line 404 of file static_condensation.h.

404 { libmesh_not_implemented(); }

◆ attach_dof_map() [1/2]

template<typename T >
void libMesh::SparseMatrix< T >::attach_dof_map ( const DofMap dof_map)
inherited

Set a pointer to the DofMap to use.

If a separate sparsity pattern is not being used, use the one from the DofMap.

The lifetime of dof_map must exceed the lifetime of this.

Definition at line 72 of file sparse_matrix.C.

Referenced by libMesh::__libmesh_tao_hessian(), DMlibMeshJacobian(), libMesh::libmesh_petsc_snes_jacobian(), and libMesh::DofMap::update_sparsity_pattern().

73 {
74  _dof_map = &dof_map;
75  if (!_sp)
76  _sp = dof_map.get_sparsity_pattern();
77 }
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.
const SparsityPattern::Graph & get_sparsity_pattern() const
Rows of sparse matrix indices, indexed by the offset from the first DoF on this processor.
DofMap const * _dof_map
The DofMap object associated with this object.

◆ attach_dof_map() [2/2]

void libMesh::SparseMatrix< Number >::attach_dof_map ( const DofMap dof_map)
inherited

Set a pointer to the DofMap to use.

If a separate sparsity pattern is not being used, use the one from the DofMap.

The lifetime of dof_map must exceed the lifetime of this.

Definition at line 72 of file sparse_matrix.C.

73 {
74  _dof_map = &dof_map;
75  if (!_sp)
76  _sp = dof_map.get_sparsity_pattern();
77 }
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.
const SparsityPattern::Graph & get_sparsity_pattern() const
Rows of sparse matrix indices, indexed by the offset from the first DoF on this processor.
DofMap const * _dof_map
The DofMap object associated with this object.

◆ attach_sparsity_pattern() [1/2]

template<typename T >
void libMesh::SparseMatrix< T >::attach_sparsity_pattern ( const SparsityPattern::Build sp)
inherited

Set a pointer to a sparsity pattern to use.

Useful in cases where a matrix requires a wider (or for efficiency narrower) pattern than most matrices in the system, or in cases where no system sparsity pattern is being calculated by the DofMap.

The lifetime of sp must exceed the lifetime of this.

Definition at line 82 of file sparse_matrix.C.

Referenced by libMesh::DofMap::update_sparsity_pattern().

83 {
84  _sp = &sp;
85 }
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.

◆ attach_sparsity_pattern() [2/2]

void libMesh::SparseMatrix< Number >::attach_sparsity_pattern ( const SparsityPattern::Build sp)
inherited

Set a pointer to a sparsity pattern to use.

Useful in cases where a matrix requires a wider (or for efficiency narrower) pattern than most matrices in the system, or in cases where no system sparsity pattern is being calculated by the DofMap.

The lifetime of sp must exceed the lifetime of this.

Definition at line 82 of file sparse_matrix.C.

83 {
84  _sp = &sp;
85 }
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.

◆ backwards_substitution()

void libMesh::StaticCondensation::backwards_substitution ( const NumericVector< Number > &  full_rhs,
NumericVector< Number > &  full_sol 
)
private

After performing the solve with the _reduced_rhs and Schur complement matrix (_reduced_sys_mat) to determine the _reduced_sol, we use the uncondensed full_rhs along with the _reduced_sol to back substitute into the full_sol, which is the final output data of the static condensation preconditioner application.

Definition at line 419 of file static_condensation.C.

References libMesh::StaticCondensationDofMap::_elem_to_dof_data, _elem_to_matrix_data, _ghosted_full_sol, _mesh, _reduced_dof_map, libMesh::NumericVector< T >::close(), libMesh::NumericVector< T >::insert(), libMesh::libmesh_assert(), and set_local_vectors().

Referenced by apply().

421 {
422  std::vector<dof_id_type> elem_condensed_dofs, elem_uncondensed_dofs;
423  std::vector<Number> elem_condensed_rhs_vec, elem_uncondensed_sol_vec;
424  EigenVector elem_condensed_rhs, elem_uncondensed_sol, elem_condensed_sol;
425 
426  for (auto elem : _mesh.active_local_element_ptr_range())
427  {
428  auto & matrix_data = libmesh_map_find(_elem_to_matrix_data, elem->id());
429  const auto & dof_data = libmesh_map_find(_reduced_dof_map._elem_to_dof_data, elem->id());
430  elem_condensed_dofs.resize(dof_data.condensed_global_to_local_map.size());
431  elem_uncondensed_dofs.resize(dof_data.uncondensed_global_to_local_map.size());
432  for (const auto & [global_dof, local_dof] : dof_data.condensed_global_to_local_map)
433  {
434  libmesh_assert(local_dof < elem_condensed_dofs.size());
435  elem_condensed_dofs[local_dof] = global_dof;
436  }
437  for (const auto & [global_dof, local_dof] : dof_data.uncondensed_global_to_local_map)
438  {
439  libmesh_assert(local_dof < elem_uncondensed_dofs.size());
440  elem_uncondensed_dofs[local_dof] = global_dof;
441  }
442 
443  set_local_vectors(full_rhs, elem_condensed_dofs, elem_condensed_rhs_vec, elem_condensed_rhs);
445  elem_uncondensed_dofs,
446  elem_uncondensed_sol_vec,
447  elem_uncondensed_sol);
448 
449  elem_condensed_sol =
450  matrix_data.AccFactor.solve(elem_condensed_rhs - matrix_data.Acu * elem_uncondensed_sol);
451  full_sol.insert(elem_condensed_sol.data(), elem_condensed_dofs);
452  }
453 
454  full_sol.close();
455 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)
Inserts the entries of v in *this at the locations specified by v.
static void set_local_vectors(const NumericVector< Number > &global_vector, const std::vector< dof_id_type > &elem_dof_indices, std::vector< Number > &elem_dof_values_vec, EigenVector &elem_dof_values)
Retrieves the degree of freedom values from global_vector corresponding to elem_dof_indices, filling both elem_dof_values_vec and elem_dof_values.
StaticCondensationDofMap & _reduced_dof_map
VectorXcd EigenVector
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
libmesh_assert(ctx)
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
virtual void close()=0
Calls the NumericVector&#39;s internal assembly routines, ensuring that the values are consistent across ...
std::unique_ptr< NumericVector< Number > > _ghosted_full_sol
This is a ghosted representation of the full (uncondensed + condensed) solution. Note that...

◆ build() [1/2]

template<typename T >
std::unique_ptr< SparseMatrix< T > > libMesh::SparseMatrix< T >::build ( const Parallel::Communicator comm,
const SolverPackage  solver_package = libMesh::default_solver_package(),
const MatrixBuildType  matrix_build_type = MatrixBuildType::AUTOMATIC 
)
staticinherited

Builds a SparseMatrix<T> using the linear solver package specified by solver_package.

Definition at line 165 of file sparse_matrix.C.

Referenced by libMesh::CondensedEigenSystem::add_matrices(), libMesh::System::add_matrix(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::CondensedEigenSystem::copy_super_to_sub(), init(), main(), libMesh::DofMap::process_mesh_constraint_rows(), ConstraintOperatorTest::test1DCoarseningNewNodes(), ConstraintOperatorTest::test1DCoarseningOperator(), ConstraintOperatorTest::testCoreform(), ConnectedComponentsTest::testEdge(), SystemsTest::testProjectMatrix1D(), SystemsTest::testProjectMatrix2D(), and SystemsTest::testProjectMatrix3D().

168 {
169  // Avoid unused parameter warnings when no solver packages are enabled.
171 
172  if (matrix_build_type == MatrixBuildType::DIAGONAL)
173  return std::make_unique<DiagonalMatrix<T>>(comm);
174 
175  // Build the appropriate vector
176  switch (solver_package)
177  {
178 
179 #ifdef LIBMESH_HAVE_LASPACK
180  case LASPACK_SOLVERS:
181  return std::make_unique<LaspackMatrix<T>>(comm);
182 #endif
183 
184 
185 #ifdef LIBMESH_HAVE_PETSC
186  case PETSC_SOLVERS:
187  return std::make_unique<PetscMatrix<T>>(comm);
188 #endif
189 
190 
191 #ifdef LIBMESH_TRILINOS_HAVE_EPETRA
192  case TRILINOS_SOLVERS:
193  return std::make_unique<EpetraMatrix<T>>(comm);
194 #endif
195 
196 
197 #ifdef LIBMESH_HAVE_EIGEN
198  case EIGEN_SOLVERS:
199  return std::make_unique<EigenSparseMatrix<T>>(comm);
200 #endif
201 
202  default:
203  libmesh_error_msg("ERROR: Unrecognized solver package: " << solver_package);
204  }
205 }
const Parallel::Communicator & comm() const
void libmesh_ignore(const Args &...)
virtual SolverPackage solver_package()=0

◆ build() [2/2]

std::unique_ptr< SparseMatrix< Number > > libMesh::SparseMatrix< Number >::build ( const Parallel::Communicator comm,
const SolverPackage  solver_package = libMesh::default_solver_package(),
const MatrixBuildType  matrix_build_type = MatrixBuildType::AUTOMATIC 
)
staticinherited

Builds a SparseMatrix<T> using the linear solver package specified by solver_package.

Definition at line 165 of file sparse_matrix.C.

168 {
169  // Avoid unused parameter warnings when no solver packages are enabled.
171 
172  if (matrix_build_type == MatrixBuildType::DIAGONAL)
173  return std::make_unique<DiagonalMatrix<T>>(comm);
174 
175  // Build the appropriate vector
176  switch (solver_package)
177  {
178 
179 #ifdef LIBMESH_HAVE_LASPACK
180  case LASPACK_SOLVERS:
181  return std::make_unique<LaspackMatrix<T>>(comm);
182 #endif
183 
184 
185 #ifdef LIBMESH_HAVE_PETSC
186  case PETSC_SOLVERS:
187  return std::make_unique<PetscMatrix<T>>(comm);
188 #endif
189 
190 
191 #ifdef LIBMESH_TRILINOS_HAVE_EPETRA
192  case TRILINOS_SOLVERS:
193  return std::make_unique<EpetraMatrix<T>>(comm);
194 #endif
195 
196 
197 #ifdef LIBMESH_HAVE_EIGEN
198  case EIGEN_SOLVERS:
199  return std::make_unique<EigenSparseMatrix<T>>(comm);
200 #endif
201 
202  default:
203  libmesh_error_msg("ERROR: Unrecognized solver package: " << solver_package);
204  }
205 }
const Parallel::Communicator & comm() const
void libmesh_ignore(const Args &...)
virtual SolverPackage solver_package()=0

◆ clear() [1/2]

void libMesh::StaticCondensation::clear ( )
overridevirtualnoexcept

Restores the SparseMatrix<T> to a pristine state.

Implements libMesh::SparseMatrix< Number >.

Definition at line 75 of file static_condensation.C.

References _current_elem_id, _elem_to_matrix_data, _have_cached_values, _reduced_rhs, _reduced_sol, _reduced_solver, _reduced_sys_mat, _sc_is_initialized, libMesh::PetscMatrixBase< T >::clear(), and libMesh::DofObject::invalid_id.

Referenced by libMesh::StaticCondensationPreconditioner::clear().

76 {
78 
79  _elem_to_matrix_data.clear();
80  _reduced_sys_mat.reset();
81  _reduced_sol.reset();
82  _reduced_rhs.reset();
83  _reduced_solver.reset();
85  _have_cached_values = false;
86  _sc_is_initialized = false;
87 }
virtual void clear() noexcept override
clear() is called from the destructor, so it should not throw.
std::unique_ptr< LinearSolver< Number > > _reduced_solver
The solver for the uncondensed degrees of freedom.
std::unique_ptr< NumericVector< Number > > _reduced_sol
solution for the uncondensed degrees of freedom
dof_id_type _current_elem_id
The current element ID.
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
Definition: dof_object.h:482
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom
std::unique_ptr< NumericVector< Number > > _reduced_rhs
RHS corresponding to the uncondensed degrees of freedom.
bool _have_cached_values
Whether we have cached values via add_XXX()
bool _sc_is_initialized
Whether our object has been initialized.

◆ clear() [2/2]

virtual void libMesh::StaticCondensation::clear ( )
inlineoverridevirtual

Restores the SparseMatrix<T> to a pristine state.

Implements libMesh::SparseMatrix< Number >.

Definition at line 343 of file static_condensation.h.

343 { libmesh_not_implemented(); }

◆ clone() [1/2]

std::unique_ptr< SparseMatrix< Number > > libMesh::StaticCondensation::clone ( ) const
overridevirtual
Returns
A smart pointer to a copy of this matrix.
Note
This must be overridden in the derived classes.

Implements libMesh::SparseMatrix< Number >.

Definition at line 70 of file static_condensation.C.

71 {
72  libmesh_not_implemented();
73 }

◆ clone() [2/2]

virtual std::unique_ptr<SparseMatrix<Number> > libMesh::StaticCondensation::clone ( ) const
inlineoverridevirtual
Returns
A smart pointer to a copy of this matrix.
Note
This must be overridden in the derived classes.

Implements libMesh::SparseMatrix< Number >.

Definition at line 349 of file static_condensation.h.

350  {
351  libmesh_not_implemented();
352  }

◆ close() [1/2]

void libMesh::StaticCondensation::close ( )
overridevirtual

Calls the SparseMatrix's internal assembly routines, ensuring that the values are consistent across processors.

Implements libMesh::SparseMatrix< Number >.

Definition at line 185 of file static_condensation.C.

References libMesh::ParallelObject::_communicator, libMesh::StaticCondensationDofMap::_elem_to_dof_data, _elem_to_matrix_data, _have_cached_values, _reduced_dof_map, _reduced_sys_mat, _uncondensed_dofs_only, closed(), libMesh::make_range(), TIMPI::Communicator::max(), TIMPI::Communicator::min(), and libMesh::DenseMatrix< T >::resize().

186 {
188  if (!_have_cached_values)
189  {
190  bool closed = _reduced_sys_mat->closed();
191  // closed is not collective
193  if (!closed)
194  _reduced_sys_mat->close();
195  return;
196  }
197 
198  DenseMatrix<Number> shim;
199  std::vector<dof_id_type> reduced_space_indices;
200  for (auto & [elem_id, matrix_data] : _elem_to_matrix_data)
201  {
202  const auto & dof_data = libmesh_map_find(_reduced_dof_map._elem_to_dof_data, elem_id);
203  reduced_space_indices.clear();
204 
205  // The result matrix is either a Schur complement or it's simply the result of summing element
206  // matrices of the uncondensed degrees of freedom
207  EigenMatrix result = matrix_data.Auu;
209  {
210  matrix_data.AccFactor = matrix_data.Acc.partialPivLu();
211  result -= matrix_data.Auc * matrix_data.AccFactor.solve(matrix_data.Acu);
212  }
213  shim.resize(result.rows(), result.cols());
214  for (const auto i : make_range(result.rows()))
215  for (const auto j : make_range(result.cols()))
216  shim(i, j) = result(i, j);
217  for (const auto & var_reduced_space_indices : dof_data.reduced_space_indices)
218  reduced_space_indices.insert(reduced_space_indices.end(),
219  var_reduced_space_indices.begin(),
220  var_reduced_space_indices.end());
221  _reduced_sys_mat->add_matrix(shim, reduced_space_indices);
222  }
223 
224  _reduced_sys_mat->close();
225 
226  _have_cached_values = false;
227 }
StaticCondensationDofMap & _reduced_dof_map
const Parallel::Communicator & _communicator
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
void min(const T &r, T &o, Request &req) const
MatrixXcd EigenMatrix
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
bool _uncondensed_dofs_only
whether this matrix represents uncondensed dofs only.
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom
void max(const T &r, T &o, Request &req) const
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
bool _have_cached_values
Whether we have cached values via add_XXX()
virtual bool closed() const override

◆ close() [2/2]

virtual void libMesh::StaticCondensation::close ( )
inlineoverridevirtual

Calls the SparseMatrix's internal assembly routines, ensuring that the values are consistent across processors.

Implements libMesh::SparseMatrix< Number >.

Definition at line 353 of file static_condensation.h.

353 { libmesh_not_implemented(); }

◆ closed() [1/2]

bool libMesh::StaticCondensation::closed ( ) const
overridevirtual
Returns
true if the matrix has been assembled.

Implements libMesh::SparseMatrix< Number >.

Definition at line 229 of file static_condensation.C.

References _have_cached_values, and _reduced_sys_mat.

Referenced by close(), and setup().

230 {
231  return _reduced_sys_mat->closed() && !_have_cached_values;
232 }
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom
bool _have_cached_values
Whether we have cached values via add_XXX()

◆ closed() [2/2]

virtual bool libMesh::StaticCondensation::closed ( ) const
inlineoverridevirtual
Returns
true if the matrix has been assembled.

Implements libMesh::SparseMatrix< Number >.

Definition at line 389 of file static_condensation.h.

389 { libmesh_not_implemented(); }

◆ col_start() [1/2]

virtual numeric_index_type libMesh::StaticCondensation::col_start ( ) const
inlineoverridevirtual
Returns
The index of the first matrix column owned by this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 107 of file static_condensation.h.

References row_start().

107 { return this->row_start(); }
virtual numeric_index_type row_start() const override

◆ col_start() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::col_start ( ) const
inlineoverridevirtual
Returns
The index of the first matrix column owned by this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 358 of file static_condensation.h.

358 { libmesh_not_implemented(); }

◆ col_stop() [1/2]

virtual numeric_index_type libMesh::StaticCondensation::col_stop ( ) const
inlineoverridevirtual
Returns
The index of the last matrix column (+1) owned by this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 109 of file static_condensation.h.

References row_stop().

109 { return this->row_stop(); }
virtual numeric_index_type row_stop() const override

◆ col_stop() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::col_stop ( ) const
inlineoverridevirtual
Returns
The index of the last matrix column (+1) owned by this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 359 of file static_condensation.h.

359 { libmesh_not_implemented(); }

◆ comm() [1/2]

const Parallel::Communicator& libMesh::ParallelObject::comm ( ) const
inlineinherited
Returns
A reference to the Parallel::Communicator object used by this mesh.

Definition at line 97 of file parallel_object.h.

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::__libmesh_petsc_diff_solver_jacobian(), libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_tao_equality_constraints(), libMesh::__libmesh_tao_equality_constraints_jacobian(), libMesh::__libmesh_tao_gradient(), libMesh::__libmesh_tao_hessian(), libMesh::__libmesh_tao_inequality_constraints(), libMesh::__libmesh_tao_inequality_constraints_jacobian(), libMesh::__libmesh_tao_objective(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult_add(), libMesh::MeshRefinement::_refine_elements(), libMesh::MeshRefinement::_smooth_flags(), libMesh::DofMap::add_constraints_to_send_list(), add_cube_convex_hull_to_mesh(), libMesh::PetscDMWrapper::add_dofs_helper(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::RBEIMEvaluation::add_interpolation_data(), libMesh::CondensedEigenSystem::add_matrices(), libMesh::EigenSystem::add_matrices(), libMesh::System::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::System::add_variable(), libMesh::System::add_variables(), libMesh::System::add_vector(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::FEMSystem::assemble_qoi(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::MeshCommunication::assign_global_indices(), libMesh::Partitioner::assign_partitioning(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::Partitioner::build_graph(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::PetscDMWrapper::build_section(), libMesh::PetscDMWrapper::build_sf(), libMesh::MeshBase::cache_elem_data(), libMesh::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::RBSCMConstruction::compute_SCM_bounds_on_training_set(), libMesh::DofMap::computed_sparsity_already(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::ContinuationSystem::ContinuationSystem(), libMesh::MeshBase::copy_constraint_rows(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::CondensedEigenSystem::copy_super_to_sub(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::DofMap::create_dof_constraints(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::PetscMatrix< T >::create_submatrix_nosort(), create_wrapped_function(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::RBEIMEvaluation::distribute_bfs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::DTKSolutionTransfer::DTKSolutionTransfer(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_nodes(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::EpetraVector< T >::EpetraVector(), AssembleOptimization::equality_constraints(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::MeshRefinement::flag_elements_by_elem_fraction(), libMesh::MeshRefinement::flag_elements_by_error_fraction(), libMesh::MeshRefinement::flag_elements_by_error_tolerance(), libMesh::MeshRefinement::flag_elements_by_mean_stddev(), libMesh::MeshRefinement::flag_elements_by_nelem_target(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::DofMap::gather_constraints(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBEIMEvaluation::get_eim_basis_function_node_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_side_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_value(), libMesh::MeshBase::get_info(), libMesh::System::get_info(), libMesh::DofMap::get_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::RBEIMConstruction::get_max_abs_value(), libMesh::RBEIMConstruction::get_node_max_abs_value(), libMesh::RBEIMEvaluation::get_parametrized_function_node_value(), libMesh::RBEIMEvaluation::get_parametrized_function_side_value(), libMesh::RBEIMEvaluation::get_parametrized_function_value(), libMesh::RBEIMConstruction::get_random_point(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::AdvectionSystem::init_data(), libMesh::ClawSystem::init_data(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_parametrized_functions_in_training_set(), libMesh::RBEIMConstruction::inner_product(), integrate_function(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_equal_connectivity(), libMesh::MeshTools::libmesh_assert_equal_points(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_constraint_rows(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshTools::libmesh_assert_valid_unique_ids(), libMesh::libmesh_petsc_linesearch_shellfunc(), libMesh::libmesh_petsc_preconditioner_apply(), libMesh::libmesh_petsc_recalculate_monitor(), libMesh::libmesh_petsc_snes_fd_residual(), libMesh::libmesh_petsc_snes_jacobian(), libMesh::libmesh_petsc_snes_mffd_interface(), libMesh::libmesh_petsc_snes_mffd_residual(), libMesh::libmesh_petsc_snes_postcheck(), libMesh::libmesh_petsc_snes_precheck(), libMesh::libmesh_petsc_snes_residual(), libMesh::libmesh_petsc_snes_residual_helper(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), libMesh::LinearImplicitSystem::LinearImplicitSystem(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_bcids_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::DofMap::n_constrained_dofs(), libMesh::MeshBase::n_constraint_rows(), libMesh::DofMap::n_dofs(), libMesh::DofMap::n_dofs_per_processor(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), MixedOrderTest::n_neighbor_links(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::SparsityPattern::Build::n_nonzeros(), libMesh::MeshTools::n_p_levels(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_distribute_bfs(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::RBEIMConstruction::node_inner_product(), libMesh::MeshBase::operator==(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::MeshTools::paranoid_n_levels(), libMesh::Partitioner::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::petsc_auto_fieldsplit(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::prepare_for_use(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Partitioner::processor_pairs_to_interface_nodes(), libMesh::InterMeshProjection::project_system_vectors(), FEMParameters::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::RBEIMEvaluation::read_in_interior_basis_functions(), libMesh::RBEIMEvaluation::read_in_node_basis_functions(), libMesh::RBEIMEvaluation::read_in_side_basis_functions(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::System::read_legacy_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), LinearElasticityWithContact::residual_and_jacobian(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), scale_mesh_and_plot(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::send_and_insert_dof_values(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::Partitioner::set_interface_node_processor_ids_BFS(), libMesh::Partitioner::set_interface_node_processor_ids_linear(), libMesh::Partitioner::set_interface_node_processor_ids_petscpartitioner(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::Partitioner::set_parent_processor_ids(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::PetscDiffSolver::setup_petsc_data(), libMesh::RBEIMEvaluation::side_distribute_bfs(), libMesh::RBEIMEvaluation::side_gather_bfs(), libMesh::RBEIMConstruction::side_inner_product(), libMesh::Partitioner::single_partition(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::VariationalMeshSmoother::smooth(), libMesh::ClawSystem::solve_conservation_law(), libMesh::split_mesh(), libMesh::RBEIMConstruction::store_eim_solutions_for_training_set(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), ConstraintOperatorTest::test1DCoarseningNewNodes(), ConstraintOperatorTest::test1DCoarseningOperator(), libMesh::MeshRefinement::test_level_one(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), libMesh::MeshRefinement::test_unflagged(), DofMapTest::testBadElemFECombo(), SystemsTest::testBlockRestrictedVarNDofs(), BoundaryInfoTest::testBoundaryOnChildrenErrors(), VolumeTest::testC0PolygonMethods(), VolumeTest::testC0PolyhedronMethods(), ConstraintOperatorTest::testCoreform(), ConnectedComponentsTest::testEdge(), MeshInputTest::testExodusIGASidesets(), MeshTriangulationTest::testFoundCenters(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), PointLocatorTest::testPlanar(), MeshTriangulationTest::testPoly2TriRefinementBase(), SystemsTest::testProjectCubeWithMeshFunction(), BoundaryInfoTest::testRenumber(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), MeshTriangulationTest::testTriangulatorInterp(), MeshTriangulationTest::testTriangulatorMeshedHoles(), MeshTriangulationTest::testTriangulatorRoundHole(), libMesh::MeshTools::total_weight(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::Poly2TriTriangulator::triangulate(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::MeshRefinement::uniformly_coarsen(), update_current_local_solution(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::VTKIO::write_nodal_data(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), libMesh::RBEvaluation::write_out_vectors(), libMesh::TransientRBConstruction::write_riesz_representors_to_files(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::RBDataSerialization::RBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::TransientRBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::RBEIMEvaluationSerialization::write_to_file(), and libMesh::RBDataSerialization::RBSCMEvaluationSerialization::write_to_file().

98  { return _communicator; }
const Parallel::Communicator & _communicator

◆ comm() [2/2]

const Parallel::Communicator& libMesh::ParallelObject::comm ( ) const
inlineinherited
Returns
A reference to the Parallel::Communicator object used by this mesh.

Definition at line 97 of file parallel_object.h.

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::__libmesh_petsc_diff_solver_jacobian(), libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_tao_equality_constraints(), libMesh::__libmesh_tao_equality_constraints_jacobian(), libMesh::__libmesh_tao_gradient(), libMesh::__libmesh_tao_hessian(), libMesh::__libmesh_tao_inequality_constraints(), libMesh::__libmesh_tao_inequality_constraints_jacobian(), libMesh::__libmesh_tao_objective(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult_add(), libMesh::MeshRefinement::_refine_elements(), libMesh::MeshRefinement::_smooth_flags(), libMesh::DofMap::add_constraints_to_send_list(), add_cube_convex_hull_to_mesh(), libMesh::PetscDMWrapper::add_dofs_helper(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::RBEIMEvaluation::add_interpolation_data(), libMesh::CondensedEigenSystem::add_matrices(), libMesh::EigenSystem::add_matrices(), libMesh::System::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::System::add_variable(), libMesh::System::add_variables(), libMesh::System::add_vector(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::FEMSystem::assemble_qoi(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::MeshCommunication::assign_global_indices(), libMesh::Partitioner::assign_partitioning(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::Partitioner::build_graph(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::PetscDMWrapper::build_section(), libMesh::PetscDMWrapper::build_sf(), libMesh::MeshBase::cache_elem_data(), libMesh::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::RBSCMConstruction::compute_SCM_bounds_on_training_set(), libMesh::DofMap::computed_sparsity_already(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::ContinuationSystem::ContinuationSystem(), libMesh::MeshBase::copy_constraint_rows(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::CondensedEigenSystem::copy_super_to_sub(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::DofMap::create_dof_constraints(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::PetscMatrix< T >::create_submatrix_nosort(), create_wrapped_function(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::RBEIMEvaluation::distribute_bfs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::DTKSolutionTransfer::DTKSolutionTransfer(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_nodes(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::EpetraVector< T >::EpetraVector(), AssembleOptimization::equality_constraints(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::MeshRefinement::flag_elements_by_elem_fraction(), libMesh::MeshRefinement::flag_elements_by_error_fraction(), libMesh::MeshRefinement::flag_elements_by_error_tolerance(), libMesh::MeshRefinement::flag_elements_by_mean_stddev(), libMesh::MeshRefinement::flag_elements_by_nelem_target(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::DofMap::gather_constraints(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBEIMEvaluation::get_eim_basis_function_node_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_side_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_value(), libMesh::MeshBase::get_info(), libMesh::System::get_info(), libMesh::DofMap::get_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::RBEIMConstruction::get_max_abs_value(), libMesh::RBEIMConstruction::get_node_max_abs_value(), libMesh::RBEIMEvaluation::get_parametrized_function_node_value(), libMesh::RBEIMEvaluation::get_parametrized_function_side_value(), libMesh::RBEIMEvaluation::get_parametrized_function_value(), libMesh::RBEIMConstruction::get_random_point(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::AdvectionSystem::init_data(), libMesh::ClawSystem::init_data(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_parametrized_functions_in_training_set(), libMesh::RBEIMConstruction::inner_product(), integrate_function(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_equal_connectivity(), libMesh::MeshTools::libmesh_assert_equal_points(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_constraint_rows(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshTools::libmesh_assert_valid_unique_ids(), libMesh::libmesh_petsc_linesearch_shellfunc(), libMesh::libmesh_petsc_preconditioner_apply(), libMesh::libmesh_petsc_recalculate_monitor(), libMesh::libmesh_petsc_snes_fd_residual(), libMesh::libmesh_petsc_snes_jacobian(), libMesh::libmesh_petsc_snes_mffd_interface(), libMesh::libmesh_petsc_snes_mffd_residual(), libMesh::libmesh_petsc_snes_postcheck(), libMesh::libmesh_petsc_snes_precheck(), libMesh::libmesh_petsc_snes_residual(), libMesh::libmesh_petsc_snes_residual_helper(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), libMesh::LinearImplicitSystem::LinearImplicitSystem(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_bcids_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::DofMap::n_constrained_dofs(), libMesh::MeshBase::n_constraint_rows(), libMesh::DofMap::n_dofs(), libMesh::DofMap::n_dofs_per_processor(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), MixedOrderTest::n_neighbor_links(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::SparsityPattern::Build::n_nonzeros(), libMesh::MeshTools::n_p_levels(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_distribute_bfs(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::RBEIMConstruction::node_inner_product(), libMesh::MeshBase::operator==(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::MeshTools::paranoid_n_levels(), libMesh::Partitioner::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::petsc_auto_fieldsplit(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::prepare_for_use(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Partitioner::processor_pairs_to_interface_nodes(), libMesh::InterMeshProjection::project_system_vectors(), FEMParameters::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::RBEIMEvaluation::read_in_interior_basis_functions(), libMesh::RBEIMEvaluation::read_in_node_basis_functions(), libMesh::RBEIMEvaluation::read_in_side_basis_functions(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::System::read_legacy_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), LinearElasticityWithContact::residual_and_jacobian(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), scale_mesh_and_plot(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::send_and_insert_dof_values(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::Partitioner::set_interface_node_processor_ids_BFS(), libMesh::Partitioner::set_interface_node_processor_ids_linear(), libMesh::Partitioner::set_interface_node_processor_ids_petscpartitioner(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::Partitioner::set_parent_processor_ids(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::PetscDiffSolver::setup_petsc_data(), libMesh::RBEIMEvaluation::side_distribute_bfs(), libMesh::RBEIMEvaluation::side_gather_bfs(), libMesh::RBEIMConstruction::side_inner_product(), libMesh::Partitioner::single_partition(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::VariationalMeshSmoother::smooth(), libMesh::ClawSystem::solve_conservation_law(), libMesh::split_mesh(), libMesh::RBEIMConstruction::store_eim_solutions_for_training_set(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), ConstraintOperatorTest::test1DCoarseningNewNodes(), ConstraintOperatorTest::test1DCoarseningOperator(), libMesh::MeshRefinement::test_level_one(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), libMesh::MeshRefinement::test_unflagged(), DofMapTest::testBadElemFECombo(), SystemsTest::testBlockRestrictedVarNDofs(), BoundaryInfoTest::testBoundaryOnChildrenErrors(), VolumeTest::testC0PolygonMethods(), VolumeTest::testC0PolyhedronMethods(), ConstraintOperatorTest::testCoreform(), ConnectedComponentsTest::testEdge(), MeshInputTest::testExodusIGASidesets(), MeshTriangulationTest::testFoundCenters(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), PointLocatorTest::testPlanar(), MeshTriangulationTest::testPoly2TriRefinementBase(), SystemsTest::testProjectCubeWithMeshFunction(), BoundaryInfoTest::testRenumber(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), MeshTriangulationTest::testTriangulatorInterp(), MeshTriangulationTest::testTriangulatorMeshedHoles(), MeshTriangulationTest::testTriangulatorRoundHole(), libMesh::MeshTools::total_weight(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::Poly2TriTriangulator::triangulate(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::MeshRefinement::uniformly_coarsen(), update_current_local_solution(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::VTKIO::write_nodal_data(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), libMesh::RBEvaluation::write_out_vectors(), libMesh::TransientRBConstruction::write_riesz_representors_to_files(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::RBDataSerialization::RBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::TransientRBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::RBEIMEvaluationSerialization::write_to_file(), and libMesh::RBDataSerialization::RBSCMEvaluationSerialization::write_to_file().

98  { return _communicator; }
const Parallel::Communicator & _communicator

◆ create_submatrix() [1/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::create_submatrix ( SparseMatrix< T > &  submatrix,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
) const
inlinevirtualinherited

This function creates a matrix called "submatrix" which is defined by the row and column indices given in the "rows" and "cols" entries.

Currently this operation is only defined for the PetscMatrixBase subclasses. Note: The rows and cols vectors need to be sorted; Use the nosort version below if rows and cols vectors are not sorted; The rows and cols only contain indices that are owned by this processor.

Definition at line 509 of file sparse_matrix.h.

Referenced by libMesh::CondensedEigenSystem::copy_super_to_sub(), libMesh::libmesh_petsc_DMCreateInterpolation(), and libMesh::CondensedEigenSystem::solve().

512  {
513  this->_get_submatrix(submatrix,
514  rows,
515  cols,
516  false); // false means DO NOT REUSE submatrix
517  }
virtual void _get_submatrix(SparseMatrix< T > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
Protected implementation of the create_submatrix and reinit_submatrix routines.

◆ create_submatrix() [2/2]

virtual void libMesh::SparseMatrix< Number >::create_submatrix ( SparseMatrix< Number > &  submatrix,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
) const
inlinevirtualinherited

This function creates a matrix called "submatrix" which is defined by the row and column indices given in the "rows" and "cols" entries.

Currently this operation is only defined for the PetscMatrixBase subclasses. Note: The rows and cols vectors need to be sorted; Use the nosort version below if rows and cols vectors are not sorted; The rows and cols only contain indices that are owned by this processor.

Definition at line 509 of file sparse_matrix.h.

512  {
513  this->_get_submatrix(submatrix,
514  rows,
515  cols,
516  false); // false means DO NOT REUSE submatrix
517  }
virtual void _get_submatrix(SparseMatrix< Number > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
Protected implementation of the create_submatrix and reinit_submatrix routines.

◆ create_submatrix_nosort() [1/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::create_submatrix_nosort ( SparseMatrix< T > &  ,
const std::vector< numeric_index_type > &  ,
const std::vector< numeric_index_type > &   
) const
inlinevirtualinherited

Similar to the above function, this function creates a submatrix which is defined by the indices given in the rows and cols vectors.

Note: Both rows and cols can be unsorted; Use the above function for better efficiency if your indices are sorted; rows and cols can contain indices that are owned by other processors.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 527 of file sparse_matrix.h.

530  {
531  libmesh_not_implemented();
532  }

◆ create_submatrix_nosort() [2/2]

virtual void libMesh::SparseMatrix< Number >::create_submatrix_nosort ( SparseMatrix< Number > &  ,
const std::vector< numeric_index_type > &  ,
const std::vector< numeric_index_type > &   
) const
inlinevirtualinherited

Similar to the above function, this function creates a submatrix which is defined by the indices given in the rows and cols vectors.

Note: Both rows and cols can be unsorted; Use the above function for better efficiency if your indices are sorted; rows and cols can contain indices that are owned by other processors.

Definition at line 527 of file sparse_matrix.h.

530  {
531  libmesh_not_implemented();
532  }

◆ disable_print_counter_info() [1/2]

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 100 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

101 {
102  _enable_print_counter = false;
103  return;
104 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ disable_print_counter_info() [2/2]

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 100 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

101 {
102  _enable_print_counter = false;
103  return;
104 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ dont_condense_vars()

void libMesh::StaticCondensation::dont_condense_vars ( const std::unordered_set< unsigned int > &  vars)

Add vars to the list of variables not to condense.

This can be useful when some variable's equation is discretized with a DG method or if including the variable in the condensed block diagonal would result in it being singular

Definition at line 477 of file static_condensation.C.

References _reduced_dof_map, and libMesh::StaticCondensationDofMap::dont_condense_vars().

Referenced by main().

478 {
480 }
StaticCondensationDofMap & _reduced_dof_map
void dont_condense_vars(const std::unordered_set< unsigned int > &vars)
Add vars to the list of variables not to condense.

◆ enable_print_counter_info() [1/2]

void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 94 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

95 {
96  _enable_print_counter = true;
97  return;
98 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ enable_print_counter_info() [2/2]

void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

Methods to enable/disable the reference counter output from print_info()

Definition at line 94 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

95 {
96  _enable_print_counter = true;
97  return;
98 }
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ flush() [1/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::flush ( )
inlinevirtualinherited

For PETSc matrix , this function is similar to close but without shrinking memory.

This is useful when we want to switch between ADD_VALUES and INSERT_VALUES. close should be called before using the matrix.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 244 of file sparse_matrix.h.

244 { close(); }
virtual void close()=0
Calls the SparseMatrix&#39;s internal assembly routines, ensuring that the values are consistent across p...

◆ flush() [2/2]

virtual void libMesh::SparseMatrix< Number >::flush ( )
inlinevirtualinherited

For PETSc matrix , this function is similar to close but without shrinking memory.

This is useful when we want to switch between ADD_VALUES and INSERT_VALUES. close should be called before using the matrix.

Definition at line 244 of file sparse_matrix.h.

244 { close(); }
virtual void close()=0
Calls the SparseMatrix&#39;s internal assembly routines, ensuring that the values are consistent across p...

◆ forward_elimination()

void libMesh::StaticCondensation::forward_elimination ( const NumericVector< Number > &  full_rhs)
private

Takes an incoming "full" RHS from the solver, where full means the union of uncondensed and condennsed dofs, and condenses it down into the condensed _reduced_rhs data member using element Schur complements.

Definition at line 383 of file static_condensation.C.

References libMesh::StaticCondensationDofMap::_elem_to_dof_data, _elem_to_matrix_data, libMesh::StaticCondensationDofMap::_local_uncondensed_dofs, _mesh, _reduced_dof_map, _reduced_rhs, libMesh::NumericVector< T >::create_subvector(), libMesh::libmesh_assert(), and set_local_vectors().

Referenced by apply().

384 {
385  std::vector<dof_id_type> elem_condensed_dofs;
386  std::vector<Number> elem_condensed_rhs_vec;
387  EigenVector elem_condensed_rhs, elem_uncondensed_rhs;
388 
389  full_rhs.create_subvector(
390  *_reduced_rhs, _reduced_dof_map._local_uncondensed_dofs, /*all_global_entries=*/false);
391 
392  std::vector<dof_id_type> reduced_space_indices;
393  for (auto elem : _mesh.active_local_element_ptr_range())
394  {
395  auto & matrix_data = libmesh_map_find(_elem_to_matrix_data, elem->id());
396  reduced_space_indices.clear();
397  const auto & dof_data = libmesh_map_find(_reduced_dof_map._elem_to_dof_data, elem->id());
398  for (const auto & var_reduced_space_indices : dof_data.reduced_space_indices)
399  reduced_space_indices.insert(reduced_space_indices.end(),
400  var_reduced_space_indices.begin(),
401  var_reduced_space_indices.end());
402  elem_condensed_dofs.resize(dof_data.condensed_global_to_local_map.size());
403  for (const auto & [global_dof, local_dof] : dof_data.condensed_global_to_local_map)
404  {
405  libmesh_assert(local_dof < elem_condensed_dofs.size());
406  elem_condensed_dofs[local_dof] = global_dof;
407  }
408 
409  set_local_vectors(full_rhs, elem_condensed_dofs, elem_condensed_rhs_vec, elem_condensed_rhs);
410  elem_uncondensed_rhs = -matrix_data.Auc * matrix_data.AccFactor.solve(elem_condensed_rhs);
411 
412  libmesh_assert(cast_int<std::size_t>(elem_uncondensed_rhs.size()) ==
413  reduced_space_indices.size());
414  _reduced_rhs->add_vector(elem_uncondensed_rhs.data(), reduced_space_indices);
415  }
416  _reduced_rhs->close();
417 }
static void set_local_vectors(const NumericVector< Number > &global_vector, const std::vector< dof_id_type > &elem_dof_indices, std::vector< Number > &elem_dof_values_vec, EigenVector &elem_dof_values)
Retrieves the degree of freedom values from global_vector corresponding to elem_dof_indices, filling both elem_dof_values_vec and elem_dof_values.
StaticCondensationDofMap & _reduced_dof_map
VectorXcd EigenVector
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
virtual void create_subvector(NumericVector< T > &, const std::vector< numeric_index_type > &, bool=true) const
Fills in subvector from this vector using the indices in rows.
std::vector< dof_id_type > _local_uncondensed_dofs
All the uncondensed degrees of freedom (numbered in the "full" uncondensed + condensed space)...
libmesh_assert(ctx)
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
std::unique_ptr< NumericVector< Number > > _reduced_rhs
RHS corresponding to the uncondensed degrees of freedom.

◆ get_condensed_mat()

const SparseMatrix< Number > & libMesh::StaticCondensation::get_condensed_mat ( ) const
inline

Definition at line 290 of file static_condensation.h.

References _reduced_sys_mat, and libMesh::libmesh_assert().

291 {
293  return *_reduced_sys_mat;
294 }
libmesh_assert(ctx)
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom

◆ get_context()

template<typename T >
PetscMatrixBase< T > * libMesh::PetscMatrixBase< T >::get_context ( Mat  mat,
const TIMPI::Communicator comm 
)
staticinherited
Returns
The context for mat if it exists, else a nullptr

Definition at line 116 of file petsc_matrix_base.C.

Referenced by DMlibMeshJacobian(), form_matrixA(), and libMesh::libmesh_petsc_snes_jacobian().

117 {
118  void * ctx;
119  PetscContainer container;
120  LibmeshPetscCall2(comm, PetscObjectQuery((PetscObject)mat, "PetscMatrixCtx", (PetscObject *)&container));
121  if (!container)
122  return nullptr;
123 
124  LibmeshPetscCall2(comm, PetscContainerGetPointer(container, &ctx));
126  return static_cast<PetscMatrixBase<T> *>(ctx);
127 }
const Parallel::Communicator & comm() const
libmesh_assert(ctx)
void * ctx

◆ get_diagonal() [1/3]

void libMesh::StaticCondensation::get_diagonal ( NumericVector< Number > &  dest) const
overridevirtual

Copies the diagonal part of the matrix into dest.

Implements libMesh::SparseMatrix< Number >.

Definition at line 361 of file static_condensation.C.

361 { libmesh_not_implemented(); }

◆ get_diagonal() [2/3]

virtual void libMesh::StaticCondensation::get_diagonal ( NumericVector< Number > &  dest) const
inlineoverridevirtual

Copies the diagonal part of the matrix into dest.

Implements libMesh::SparseMatrix< Number >.

Definition at line 394 of file static_condensation.h.

394 { libmesh_not_implemented(); }

◆ get_diagonal() [3/3]

template<typename T>
virtual void libMesh::SparseMatrix< T >::get_diagonal ( NumericVector< T > &  dest) const
pure virtualinherited

◆ get_info() [1/2]

std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & [name, cd] : _counts)
59  oss << "| " << name << " reference count information:\n"
60  << "| Creations: " << cd.first << '\n'
61  << "| Destructions: " << cd.second << '\n';
62 
63  oss << " ---------------------------------------------------------------------------- \n";
64 
65  return oss.str();
66 
67 #else
68 
69  return "";
70 
71 #endif
72 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
static Counts _counts
Actually holds the data.

◆ get_info() [2/2]

std::string libMesh::ReferenceCounter::get_info ( )
staticinherited

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().

Referenced by libMesh::ReferenceCounter::print_info().

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & [name, cd] : _counts)
59  oss << "| " << name << " reference count information:\n"
60  << "| Creations: " << cd.first << '\n'
61  << "| Destructions: " << cd.second << '\n';
62 
63  oss << " ---------------------------------------------------------------------------- \n";
64 
65  return oss.str();
66 
67 #else
68 
69  return "";
70 
71 #endif
72 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
static Counts _counts
Actually holds the data.

◆ get_preconditioner() [1/2]

StaticCondensationPreconditioner& libMesh::StaticCondensation::get_preconditioner ( )
inline

Get the preconditioning wrapper.

Definition at line 175 of file static_condensation.h.

References _scp.

Referenced by libMesh::ImplicitSystem::setup_static_condensation_preconditioner().

175 { return *_scp; }
std::unique_ptr< StaticCondensationPreconditioner > _scp
Preconditioner object which will call back to us for the preconditioning action.

◆ get_preconditioner() [2/2]

StaticCondensationPreconditioner& libMesh::StaticCondensation::get_preconditioner ( )
inline

Definition at line 326 of file static_condensation.h.

326 { libmesh_not_implemented(); }

◆ get_row() [1/3]

void libMesh::StaticCondensation::get_row ( numeric_index_type  i,
std::vector< numeric_index_type > &  indices,
std::vector< Number > &  values 
) const
overridevirtual

Get a row from the matrix.

Parameters
iThe matrix row to get
indicesA container that will be filled with the column indices corresponding to (possibly) non-zero values
valuesA container holding the column values

Implements libMesh::SparseMatrix< Number >.

Definition at line 365 of file static_condensation.C.

368 {
369  libmesh_not_implemented();
370 }

◆ get_row() [2/3]

virtual void libMesh::StaticCondensation::get_row ( numeric_index_type  i,
std::vector< numeric_index_type > &  indices,
std::vector< Number > &  values 
) const
inlineoverridevirtual

Get a row from the matrix.

Parameters
iThe matrix row to get
indicesA container that will be filled with the column indices corresponding to (possibly) non-zero values
valuesA container holding the column values

Implements libMesh::SparseMatrix< Number >.

Definition at line 396 of file static_condensation.h.

399  {
400  libmesh_not_implemented();
401  }

◆ get_row() [3/3]

template<typename T>
virtual void libMesh::SparseMatrix< T >::get_row ( numeric_index_type  i,
std::vector< numeric_index_type > &  indices,
std::vector< T > &  values 
) const
pure virtualinherited

Get a row from the matrix.

Parameters
iThe matrix row to get
indicesA container that will be filled with the column indices corresponding to (possibly) non-zero values
valuesA container holding the column values

Implemented in libMesh::StaticCondensation, libMesh::PetscMatrix< T >, libMesh::EpetraMatrix< T >, libMesh::LaspackMatrix< T >, libMesh::DiagonalMatrix< T >, libMesh::EigenSparseMatrix< T >, libMesh::StaticCondensation, libMesh::PetscMFFDMatrix< T >, and libMesh::PetscMFFDMatrix< Number >.

Referenced by libMesh::MeshBase::copy_constraint_rows().

◆ get_transpose() [1/3]

void libMesh::StaticCondensation::get_transpose ( SparseMatrix< Number > &  dest) const
overridevirtual

Copies the transpose of the matrix into dest, which may be *this.

Implements libMesh::SparseMatrix< Number >.

Definition at line 363 of file static_condensation.C.

363 { libmesh_not_implemented(); }

◆ get_transpose() [2/3]

virtual void libMesh::StaticCondensation::get_transpose ( SparseMatrix< Number > &  dest) const
inlineoverridevirtual

Copies the transpose of the matrix into dest, which may be *this.

Implements libMesh::SparseMatrix< Number >.

Definition at line 395 of file static_condensation.h.

395 { libmesh_not_implemented(); }

◆ get_transpose() [3/3]

template<typename T>
virtual void libMesh::SparseMatrix< T >::get_transpose ( SparseMatrix< T > &  dest) const
pure virtualinherited

◆ increment_constructor_count() [1/2]

void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 183 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

184 {
185  libmesh_try
186  {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189  p.first++;
190  }
191  libmesh_catch (...)
192  {
193  auto stream = libMesh::err.get();
194  stream->exceptions(stream->goodbit); // stream must not throw
195  libMesh::err << "Encountered unrecoverable error while calling "
196  << "ReferenceCounter::increment_constructor_count() "
197  << "for a(n) " << name << " object." << std::endl;
198  std::terminate();
199  }
200 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ increment_constructor_count() [2/2]

void libMesh::ReferenceCounter::increment_constructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the construction counter.

Should be called in the constructor of any derived class that will be reference counted.

Definition at line 183 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().

184 {
185  libmesh_try
186  {
187  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188  std::pair<unsigned int, unsigned int> & p = _counts[name];
189  p.first++;
190  }
191  libmesh_catch (...)
192  {
193  auto stream = libMesh::err.get();
194  stream->exceptions(stream->goodbit); // stream must not throw
195  libMesh::err << "Encountered unrecoverable error while calling "
196  << "ReferenceCounter::increment_constructor_count() "
197  << "for a(n) " << name << " object." << std::endl;
198  std::terminate();
199  }
200 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ increment_destructor_count() [1/2]

void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 207 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

208 {
209  libmesh_try
210  {
211  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212  std::pair<unsigned int, unsigned int> & p = _counts[name];
213  p.second++;
214  }
215  libmesh_catch (...)
216  {
217  auto stream = libMesh::err.get();
218  stream->exceptions(stream->goodbit); // stream must not throw
219  libMesh::err << "Encountered unrecoverable error while calling "
220  << "ReferenceCounter::increment_destructor_count() "
221  << "for a(n) " << name << " object." << std::endl;
222  std::terminate();
223  }
224 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ increment_destructor_count() [2/2]

void libMesh::ReferenceCounter::increment_destructor_count ( const std::string &  name)
inlineprotectednoexceptinherited

Increments the destruction counter.

Should be called in the destructor of any derived class that will be reference counted.

Definition at line 207 of file reference_counter.h.

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.

Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().

208 {
209  libmesh_try
210  {
211  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212  std::pair<unsigned int, unsigned int> & p = _counts[name];
213  p.second++;
214  }
215  libmesh_catch (...)
216  {
217  auto stream = libMesh::err.get();
218  stream->exceptions(stream->goodbit); // stream must not throw
219  libMesh::err << "Encountered unrecoverable error while calling "
220  << "ReferenceCounter::increment_destructor_count() "
221  << "for a(n) " << name << " object." << std::endl;
222  std::terminate();
223  }
224 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
OStreamProxy err
static Counts _counts
Actually holds the data.
streamT * get()
Rather than implement every ostream/ios/ios_base function, we&#39;ll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:30

◆ init() [1/6]

void libMesh::StaticCondensation::init ( const numeric_index_type  m,
const numeric_index_type  n,
const numeric_index_type  m_l,
const numeric_index_type  n_l,
const numeric_index_type  nnz = 30,
const numeric_index_type  noz = 10,
const numeric_index_type  blocksize = 1 
)
overridevirtual

Initialize SparseMatrix with the specified sizes.

Parameters
mThe global number of rows.
nThe global number of columns.
m_lThe local number of rows.
n_lThe local number of columns.
nnzThe number of on-diagonal nonzeros per row (defaults to 30).
nozThe number of off-diagonal nonzeros per row (defaults to 10).
blocksizeOptional value indicating dense coupled blocks for systems with multiple variables all of the same type.

Reimplemented from libMesh::PetscMatrixShellMatrix< T >.

Definition at line 89 of file static_condensation.C.

References _parallel_type, libMesh::PetscMatrixShellMatrix< T >::init(), init(), initialized(), m(), n(), libMesh::ParallelObject::n_processors(), libMesh::PARALLEL, and libMesh::SERIAL.

Referenced by libMesh::StaticCondensationPreconditioner::init().

96 {
97  if (!this->initialized())
98  {
99  PetscMatrixShellMatrix<Number>::init(m, n, m_l, n_l, nnz, noz, blocksize);
100  _parallel_type = ((m == m_l) && (this->n_processors() > 1)) ? SERIAL : PARALLEL;
101  this->init();
102  }
103 }
void init()
Size the element matrices.
ParallelType _parallel_type
The parallel type to use for the reduced matrix.
virtual bool initialized() const override
virtual numeric_index_type n() const override
virtual numeric_index_type m() const override
processor_id_type n_processors() const
virtual void init(const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type=30, const numeric_index_type=10, const numeric_index_type blocksize=1) override
Initialize SparseMatrix with the specified sizes.

◆ init() [2/6]

void libMesh::StaticCondensation::init ( const ParallelType  )
overridevirtual

Initialize this matrix using the sparsity structure computed by dof_map.

Parameters
typeThe serial/parallel/ghosted type of the matrix

Reimplemented from libMesh::PetscMatrixShellMatrix< T >.

Definition at line 105 of file static_condensation.C.

References _parallel_type, libMesh::PetscMatrixShellMatrix< T >::init(), init(), and initialized().

106 {
107  if (!this->initialized())
108  {
110  _parallel_type = type;
111  this->init();
112  }
113 }
void init()
Size the element matrices.
ParallelType _parallel_type
The parallel type to use for the reduced matrix.
virtual bool initialized() const override
virtual void init(const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type=30, const numeric_index_type=10, const numeric_index_type blocksize=1) override
Initialize SparseMatrix with the specified sizes.

◆ init() [3/6]

void libMesh::StaticCondensation::init ( )

Size the element matrices.

Definition at line 120 of file static_condensation.C.

References libMesh::StaticCondensationDofMap::_elem_to_dof_data, _elem_to_matrix_data, _ghosted_full_sol, _parallel_type, _reduced_dof_map, libMesh::StaticCondensationDofMap::_reduced_nnz, libMesh::StaticCondensationDofMap::_reduced_noz, _reduced_rhs, _reduced_solver, libMesh::StaticCondensationDofMap::_reduced_sp, _reduced_sys_mat, _sc_is_initialized, libMesh::SparseMatrix< Number >::_sp, _system, libMesh::LinearSolver< T >::build(), libMesh::SparseMatrix< T >::build(), libMesh::NumericVector< T >::build(), libMesh::ParallelObject::comm(), libMesh::System::current_local_solution, libMesh::SparsityPattern::Build::get_n_nz(), libMesh::SparsityPattern::Build::get_n_oz(), initialized(), libMesh::StaticCondensationDofMap::initialized(), libMesh::INVALID_PARALLELIZATION, libMesh::libmesh_assert(), n(), libMesh::DofMapBase::n_dofs(), libMesh::DofMapBase::n_local_dofs(), libMesh::System::name(), libMesh::PARALLEL, and libMesh::SERIAL.

Referenced by init().

121 {
122  if (this->initialized())
123  return;
124 
126 
127  // This API is public, so it can be called without going through the other init overloads which
128  // would give us an indication of what kind of parallel type the user wants. If we've gotten no
129  // indication so far, we will default to parallel
133 
134  for (const auto & [elem_id, dof_data] : _reduced_dof_map._elem_to_dof_data)
135  {
136  auto & matrix_data = _elem_to_matrix_data[elem_id];
137 
138  const auto condensed_dof_size = dof_data.condensed_global_to_local_map.size();
139  const auto uncondensed_dof_size = dof_data.uncondensed_global_to_local_map.size();
140 
141  matrix_data.Acc.setZero(condensed_dof_size, condensed_dof_size);
142  matrix_data.Acu.setZero(condensed_dof_size, uncondensed_dof_size);
143  matrix_data.Auc.setZero(uncondensed_dof_size, condensed_dof_size);
144  matrix_data.Auu.setZero(uncondensed_dof_size, uncondensed_dof_size);
145  }
146 
147  //
148  // Build the reduced system data
149  //
150  const auto n = _reduced_dof_map.n_dofs();
151  const auto n_local =
154  _reduced_solver->init((_system.name() + "_condensed_").c_str());
156  // Init the RHS vector so we can conveniently get processor row offsets
157  _reduced_rhs->init(n, n_local);
158 
159  // Initialize the reduced system matrix
162  if (auto * const petsc_mat = dynamic_cast<PetscMatrix<Number> *>(_reduced_sys_mat.get()))
163  {
164  // Optimization for PETSc. This is critical for problems in which there are SCALAR dofs that
165  // introduce dense rows to avoid allocating a dense matrix
166  petsc_mat->init(
168  }
169  else
170  {
171  const auto & nnz = _sp->get_n_nz();
172  const auto & noz = _sp->get_n_oz();
173  const auto nz = nnz.empty() ? dof_id_type(0) : *std::max_element(nnz.begin(), nnz.end());
174  const auto oz = noz.empty() ? dof_id_type(0) : *std::max_element(noz.begin(), noz.end());
175  _reduced_sys_mat->init(n, n, n_local, n_local, nz, oz);
176  }
177 
178  // Build ghosted full solution vector. Note that this is, in general, *not equal* to the system
179  // solution, e.g. this may correspond to the solution for the Newton *update*
181 
182  _sc_is_initialized = true;
183 }
template class LIBMESH_EXPORT PetscMatrix< Number >
StaticCondensationDofMap & _reduced_dof_map
std::vector< dof_id_type > _reduced_nnz
Number of on-diagonal nonzeros per row in the reduced system.
static std::unique_ptr< LinearSolver< T > > build(const libMesh::Parallel::Communicator &comm_in, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a LinearSolver using the linear solver package specified by solver_package.
Definition: linear_solver.C:59
dof_id_type n_dofs() const
Definition: dof_map_base.h:105
std::unique_ptr< LinearSolver< Number > > _reduced_solver
The solver for the uncondensed degrees of freedom.
ParallelType _parallel_type
The parallel type to use for the reduced matrix.
const std::vector< dof_id_type > & get_n_oz() const
The number of off-processor nonzeros in my portion of the global matrix.
virtual bool initialized() const override
std::vector< dof_id_type > _reduced_noz
Number of off-diagonal nonzeros per row in the reduced system.
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.
const Parallel::Communicator & comm() const
virtual numeric_index_type n() const override
static std::unique_ptr< SparseMatrix< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package(), const MatrixBuildType matrix_build_type=MatrixBuildType::AUTOMATIC)
Builds a SparseMatrix<T> using the linear solver package specified by solver_package.
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
libmesh_assert(ctx)
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom
const std::vector< dof_id_type > & get_n_nz() const
The number of on-processor nonzeros in my portion of the global matrix.
std::unique_ptr< NumericVector< Number > > _reduced_rhs
RHS corresponding to the uncondensed degrees of freedom.
static std::unique_ptr< NumericVector< T > > build(const Parallel::Communicator &comm, SolverPackage solver_package=libMesh::default_solver_package(), ParallelType parallel_type=AUTOMATIC)
Builds a NumericVector on the processors in communicator comm using the linear solver package specifi...
dof_id_type n_local_dofs() const
Definition: dof_map_base.h:115
std::unique_ptr< NumericVector< Number > > current_local_solution
All the values I need to compute my contribution to the simulation at hand.
Definition: system.h:1605
std::unique_ptr< SparsityPattern::Build > _reduced_sp
Owned storage of the reduced system sparsity pattern.
bool initialized() const
Whether we are initialized.
const std::string & name() const
Definition: system.h:2342
std::unique_ptr< NumericVector< Number > > _ghosted_full_sol
This is a ghosted representation of the full (uncondensed + condensed) solution. Note that...
uint8_t dof_id_type
Definition: id_types.h:67
bool _sc_is_initialized
Whether our object has been initialized.

◆ init() [4/6]

virtual void libMesh::StaticCondensation::init ( const numeric_index_type  m,
const numeric_index_type  n,
const numeric_index_type  m_l,
const numeric_index_type  n_l,
const numeric_index_type  nnz = 30,
const numeric_index_type  noz = 10,
const numeric_index_type  blocksize = 1 
)
inlineoverridevirtual

Initialize SparseMatrix with the specified sizes.

Parameters
mThe global number of rows.
nThe global number of columns.
m_lThe local number of rows.
n_lThe local number of columns.
nnzThe number of on-diagonal nonzeros per row (defaults to 30).
nozThe number of off-diagonal nonzeros per row (defaults to 10).
blocksizeOptional value indicating dense coupled blocks for systems with multiple variables all of the same type.

Reimplemented from libMesh::PetscMatrixShellMatrix< T >.

Definition at line 332 of file static_condensation.h.

339  {
340  libmesh_not_implemented();
341  }

◆ init() [5/6]

virtual void libMesh::StaticCondensation::init ( ParallelType  )
inlineoverridevirtual

Initialize this matrix using the sparsity structure computed by dof_map.

Parameters
typeThe serial/parallel/ghosted type of the matrix

Reimplemented from libMesh::PetscMatrixShellMatrix< T >.

Definition at line 342 of file static_condensation.h.

342 { libmesh_not_implemented(); }

◆ init() [6/6]

void libMesh::StaticCondensation::init ( )
inline

Definition at line 402 of file static_condensation.h.

402 { libmesh_not_implemented(); }

◆ initialized()

bool libMesh::StaticCondensation::initialized ( ) const
overridevirtual
Returns
true if the matrix has been initialized, false otherwise.

Reimplemented from libMesh::SparseMatrix< Number >.

Definition at line 115 of file static_condensation.C.

References _sc_is_initialized, and libMesh::SparseMatrix< T >::initialized().

Referenced by init(), and libMesh::StaticCondensationPreconditioner::initialized().

116 {
118 }
virtual bool initialized() const
bool _sc_is_initialized
Whether our object has been initialized.

◆ l1_norm() [1/2]

Real libMesh::StaticCondensation::l1_norm ( ) const
overridevirtual
Returns
The \( \ell_1 \)-norm of the matrix, that is the max column sum: \( |M|_1 = \max_{j} \sum_{i} |M_{ij}| \)

This is the natural matrix norm that is compatible with the \( \ell_1 \)-norm for vectors, i.e. \( |Mv|_1 \leq |M|_1 |v|_1 \). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

Implements libMesh::SparseMatrix< Number >.

Definition at line 355 of file static_condensation.C.

355 { libmesh_not_implemented(); }

◆ l1_norm() [2/2]

virtual Real libMesh::StaticCondensation::l1_norm ( ) const
inlineoverridevirtual
Returns
The \( \ell_1 \)-norm of the matrix, that is the max column sum: \( |M|_1 = \max_{j} \sum_{i} |M_{ij}| \)

This is the natural matrix norm that is compatible with the \( \ell_1 \)-norm for vectors, i.e. \( |Mv|_1 \leq |M|_1 |v|_1 \). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

Implements libMesh::SparseMatrix< Number >.

Definition at line 387 of file static_condensation.h.

387 { libmesh_not_implemented(); }

◆ l1_norm_diff() [1/2]

template<typename T>
Real libMesh::SparseMatrix< T >::l1_norm_diff ( const SparseMatrix< T > &  other_mat) const
inherited
Returns
The l1_norm() of the difference of this and other_mat

Definition at line 879 of file sparse_matrix.C.

880 {
881  auto diff_mat = this->clone();
882  diff_mat->add(-1.0, other_mat);
883  return diff_mat->l1_norm();
884 }
virtual std::unique_ptr< SparseMatrix< T > > clone() const =0

◆ l1_norm_diff() [2/2]

Real libMesh::SparseMatrix< Number >::l1_norm_diff ( const SparseMatrix< Number > &  other_mat) const
inherited
Returns
The l1_norm() of the difference of this and other_mat

Definition at line 879 of file sparse_matrix.C.

880 {
881  auto diff_mat = this->clone();
882  diff_mat->add(-1.0, other_mat);
883  return diff_mat->l1_norm();
884 }
virtual std::unique_ptr< SparseMatrix< Number > > clone() const=0

◆ linfty_norm() [1/2]

Real libMesh::StaticCondensation::linfty_norm ( ) const
overridevirtual
Returns
The \( \ell_{\infty} \)-norm of the matrix, that is the max row sum:

\( |M|_{\infty} = \max_{i} \sum_{j} |M_{ij}| \)

This is the natural matrix norm that is compatible to the \( \ell_{\infty} \)-norm of vectors, i.e. \( |Mv|_{\infty} \leq |M|_{\infty} |v|_{\infty} \). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

Implements libMesh::SparseMatrix< Number >.

Definition at line 357 of file static_condensation.C.

357 { libmesh_not_implemented(); }

◆ linfty_norm() [2/2]

virtual Real libMesh::StaticCondensation::linfty_norm ( ) const
inlineoverridevirtual
Returns
The \( \ell_{\infty} \)-norm of the matrix, that is the max row sum:

\( |M|_{\infty} = \max_{i} \sum_{j} |M_{ij}| \)

This is the natural matrix norm that is compatible to the \( \ell_{\infty} \)-norm of vectors, i.e. \( |Mv|_{\infty} \leq |M|_{\infty} |v|_{\infty} \). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

Implements libMesh::SparseMatrix< Number >.

Definition at line 388 of file static_condensation.h.

388 { libmesh_not_implemented(); }

◆ local_m() [1/2]

template<typename T >
numeric_index_type libMesh::PetscMatrixBase< T >::local_m ( ) const
finalvirtualinherited

Get the number of rows owned by this process.

Reimplemented from libMesh::SparseMatrix< T >.

Definition at line 142 of file petsc_matrix_base.C.

143 {
144  libmesh_assert (this->initialized());
145 
146  PetscInt m = 0;
147 
148  LibmeshPetscCall(MatGetLocalSize (this->_mat, &m, NULL));
149 
150  return static_cast<numeric_index_type>(m);
151 }
virtual bool initialized() const
virtual numeric_index_type m() const override
dof_id_type numeric_index_type
Definition: id_types.h:99
libmesh_assert(ctx)
Mat _mat
PETSc matrix datatype to store values.

◆ local_m() [2/2]

virtual numeric_index_type libMesh::SparseMatrix< Number >::local_m ( ) const
inlinevirtualinherited

Get the number of rows owned by this process.

Reimplemented in libMesh::PetscMatrixBase< Number >.

Definition at line 254 of file sparse_matrix.h.

254 { return row_stop() - row_start(); }
virtual numeric_index_type row_stop() const=0
virtual numeric_index_type row_start() const=0

◆ local_n() [1/2]

template<typename T >
numeric_index_type libMesh::PetscMatrixBase< T >::local_n ( ) const
finalvirtualinherited

Get the number of columns owned by this process.

Reimplemented from libMesh::SparseMatrix< T >.

Definition at line 166 of file petsc_matrix_base.C.

167 {
168  libmesh_assert (this->initialized());
169 
170  PetscInt n = 0;
171 
172  LibmeshPetscCall(MatGetLocalSize (this->_mat, NULL, &n));
173 
174  return static_cast<numeric_index_type>(n);
175 }
virtual numeric_index_type n() const override
virtual bool initialized() const
dof_id_type numeric_index_type
Definition: id_types.h:99
libmesh_assert(ctx)
Mat _mat
PETSc matrix datatype to store values.

◆ local_n() [2/2]

virtual numeric_index_type libMesh::SparseMatrix< Number >::local_n ( ) const
inlinevirtualinherited

Get the number of columns owned by this process.

Reimplemented in libMesh::PetscMatrixBase< Number >.

Definition at line 259 of file sparse_matrix.h.

259 { return col_stop() - col_start(); }
virtual numeric_index_type col_stop() const=0
virtual numeric_index_type col_start() const=0

◆ m() [1/2]

numeric_index_type libMesh::StaticCondensation::m ( ) const
overridevirtual
Returns
The row-dimension of the matrix.

Implements libMesh::SparseMatrix< Number >.

Definition at line 249 of file static_condensation.C.

References _full_dof_map, and libMesh::DofMap::n_dofs().

Referenced by init(), and n().

249 { return _full_dof_map.n_dofs(); }
dof_id_type n_dofs(const unsigned int vn) const
Definition: dof_map.h:668

◆ m() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::m ( ) const
inlineoverridevirtual
Returns
The row-dimension of the matrix.

Implements libMesh::SparseMatrix< Number >.

Definition at line 354 of file static_condensation.h.

354 { libmesh_not_implemented(); }

◆ mat() [1/2]

template<typename T>
Mat libMesh::PetscMatrixBase< T >::mat ( )
inlineinherited
Returns
The raw PETSc matrix pointer.
Note
This is generally not required in user-level code.
Don't do anything crazy like calling MatDestroy() on it, or very bad things will likely happen!

Definition at line 120 of file petsc_matrix_base.h.

Referenced by add_matrix(), libMesh::PetscLinearSolver< Number >::init(), libMesh::libmesh_petsc_DMCreateInterpolation(), libMesh::libmesh_petsc_DMCreateRestriction(), libMesh::PetscDiffSolver::solve(), libMesh::TaoOptimizationSolver< T >::solve(), libMesh::PetscNonlinearSolver< Number >::solve(), and libMesh::PetscLinearSolver< Number >::solve_common().

120 { libmesh_assert (_mat); return _mat; }
libmesh_assert(ctx)
Mat _mat
PETSc matrix datatype to store values.

◆ mat() [2/2]

template<typename T>
Mat libMesh::PetscMatrixBase< T >::mat ( ) const
inlineinherited

Definition at line 121 of file petsc_matrix_base.h.

121 { libmesh_assert(_mat); return _mat; }
libmesh_assert(ctx)
Mat _mat
PETSc matrix datatype to store values.

◆ matrix_matrix_mult() [1/2]

virtual void libMesh::SparseMatrix< Number >::matrix_matrix_mult ( SparseMatrix< Number > &  ,
SparseMatrix< Number > &  ,
bool   
)
inlinevirtualinherited

Compute Y = A*X for matrix X.

Definition at line 349 of file sparse_matrix.h.

350  { libmesh_not_implemented(); }

◆ matrix_matrix_mult() [2/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::matrix_matrix_mult ( SparseMatrix< T > &  ,
SparseMatrix< T > &  ,
bool   
)
inlinevirtualinherited

Compute Y = A*X for matrix X.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 349 of file sparse_matrix.h.

350  { libmesh_not_implemented(); }

◆ n() [1/2]

virtual numeric_index_type libMesh::StaticCondensation::n ( ) const
inlineoverridevirtual
Returns
The column-dimension of the matrix.

Implements libMesh::SparseMatrix< Number >.

Definition at line 101 of file static_condensation.h.

References m().

Referenced by init().

101 { return this->m(); }
virtual numeric_index_type m() const override

◆ n() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::n ( ) const
inlineoverridevirtual
Returns
The column-dimension of the matrix.

Implements libMesh::SparseMatrix< Number >.

Definition at line 355 of file static_condensation.h.

355 { libmesh_not_implemented(); }

◆ n_nonzeros() [1/2]

template<typename T >
std::size_t libMesh::SparseMatrix< T >::n_nonzeros ( ) const
virtualinherited
Returns
the global number of non-zero entries in the matrix sparsity pattern

Definition at line 238 of file sparse_matrix.C.

Referenced by libMesh::SparseMatrix< ValOut >::n_nonzeros().

239 {
240  if (!_sp)
241  return 0;
242  return _sp->n_nonzeros();
243 }
std::size_t n_nonzeros() const
The total number of nonzeros in the global matrix.
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.

◆ n_nonzeros() [2/2]

std::size_t libMesh::SparseMatrix< Number >::n_nonzeros ( ) const
virtualinherited
Returns
the global number of non-zero entries in the matrix sparsity pattern

Definition at line 238 of file sparse_matrix.C.

239 {
240  if (!_sp)
241  return 0;
242  return _sp->n_nonzeros();
243 }
std::size_t n_nonzeros() const
The total number of nonzeros in the global matrix.
SparsityPattern::Build const * _sp
The sparsity pattern associated with this object.

◆ n_objects() [1/2]

static unsigned int libMesh::ReferenceCounter::n_objects ( )
inlinestaticinherited

Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 85 of file reference_counter.h.

References libMesh::ReferenceCounter::_n_objects.

Referenced by libMesh::LibMeshInit::~LibMeshInit().

86  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.

◆ n_objects() [2/2]

static unsigned int libMesh::ReferenceCounter::n_objects ( )
inlinestaticinherited

Prints the number of outstanding (created, but not yet destroyed) objects.

Definition at line 85 of file reference_counter.h.

References libMesh::ReferenceCounter::_n_objects.

Referenced by libMesh::LibMeshInit::~LibMeshInit().

86  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.

◆ n_processors() [1/2]

processor_id_type libMesh::ParallelObject::n_processors ( ) const
inlineinherited
Returns
The number of processors in the group.

Definition at line 103 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, libMesh::libmesh_assert(), and TIMPI::Communicator::size().

Referenced by libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::DofMap::add_constraints_to_send_list(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::System::add_vector(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::Partitioner::build_graph(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::copy_nodes_and_elements(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::EnsightIO::EnsightIO(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::MeshBase::get_info(), init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::DistributedMesh::insert_elem(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::DofMap::local_variable_indices(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::DofMap::n_dofs_per_processor(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::Partitioner::partition(), libMesh::MeshBase::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::DofMap::prepare_send_list(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::Partitioner::repartition(), OverlappingFunctorTest::run_partitioner_test(), libMesh::DofMap::scatter_constraints(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), WriteVecAndScalar::setupTests(), libMesh::RBEIMEvaluation::side_gather_bfs(), DistributedMeshTest::testRemoteElemError(), CheckpointIOTest::testSplitter(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

104  {
105  processor_id_type returnval =
106  cast_int<processor_id_type>(_communicator.size());
107  libmesh_assert(returnval); // We never have an empty comm
108  return returnval;
109  }
const Parallel::Communicator & _communicator
processor_id_type size() const
uint8_t processor_id_type
libmesh_assert(ctx)

◆ n_processors() [2/2]

processor_id_type libMesh::ParallelObject::n_processors ( ) const
inlineinherited
Returns
The number of processors in the group.

Definition at line 103 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, libMesh::libmesh_assert(), and TIMPI::Communicator::size().

Referenced by libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::DofMap::add_constraints_to_send_list(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::System::add_vector(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::Partitioner::build_graph(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::copy_nodes_and_elements(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::EnsightIO::EnsightIO(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::MeshBase::get_info(), init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::DistributedMesh::insert_elem(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::DofMap::local_variable_indices(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::DofMap::n_dofs_per_processor(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::Partitioner::partition(), libMesh::MeshBase::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::DofMap::prepare_send_list(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::Partitioner::repartition(), OverlappingFunctorTest::run_partitioner_test(), libMesh::DofMap::scatter_constraints(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), WriteVecAndScalar::setupTests(), libMesh::RBEIMEvaluation::side_gather_bfs(), DistributedMeshTest::testRemoteElemError(), CheckpointIOTest::testSplitter(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

104  {
105  processor_id_type returnval =
106  cast_int<processor_id_type>(_communicator.size());
107  libmesh_assert(returnval); // We never have an empty comm
108  return returnval;
109  }
const Parallel::Communicator & _communicator
processor_id_type size() const
uint8_t processor_id_type
libmesh_assert(ctx)

◆ need_full_sparsity_pattern() [1/2]

template<typename T>
virtual bool libMesh::SparseMatrix< T >::need_full_sparsity_pattern ( ) const
inlinevirtualinherited
Returns
true if this sparse matrix format needs to be fed the graph of the sparse matrix.

This is true for LaspackMatrix, but not PetscMatrixBase subclasses. In the case where the full graph is not required, we can efficiently approximate it to provide a good estimate of the required size of the sparse matrix.

Reimplemented in libMesh::EpetraMatrix< T >, and libMesh::LaspackMatrix< T >.

Definition at line 162 of file sparse_matrix.h.

Referenced by libMesh::DofMap::attach_matrix(), and libMesh::DofMap::update_sparsity_pattern().

163  { return false; }

◆ need_full_sparsity_pattern() [2/2]

virtual bool libMesh::SparseMatrix< Number >::need_full_sparsity_pattern ( ) const
inlinevirtualinherited
Returns
true if this sparse matrix format needs to be fed the graph of the sparse matrix.

This is true for LaspackMatrix, but not PetscMatrixBase subclasses. In the case where the full graph is not required, we can efficiently approximate it to provide a good estimate of the required size of the sparse matrix.

Definition at line 162 of file sparse_matrix.h.

163  { return false; }

◆ operator()() [1/2]

Number libMesh::StaticCondensation::operator() ( const numeric_index_type  i,
const numeric_index_type  j 
) const
overridevirtual
Returns
A copy of matrix entry (i,j).
Note
This may be an expensive operation, and you should always be careful where you call this function.

Implements libMesh::SparseMatrix< Number >.

Definition at line 350 of file static_condensation.C.

351 {
352  libmesh_not_implemented();
353 }

◆ operator()() [2/2]

virtual Number libMesh::StaticCondensation::operator() ( const numeric_index_type  i,
const numeric_index_type  j 
) const
inlineoverridevirtual
Returns
A copy of matrix entry (i,j).
Note
This may be an expensive operation, and you should always be careful where you call this function.

Implements libMesh::SparseMatrix< Number >.

Definition at line 383 of file static_condensation.h.

384  {
385  libmesh_not_implemented();
386  }

◆ operator=() [1/2]

SparseMatrix< Number > & libMesh::StaticCondensation::operator= ( const SparseMatrix< Number > &  )
overridevirtual

This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual.

This function should be overridden in derived classes so that they can be copied correctly via references to the base class. This design usually isn't a good idea in general, but in this context it works because we usually don't have a mix of different kinds of SparseMatrix active in the library at a single time.

Returns
A reference to *this as the base type.

Reimplemented from libMesh::SparseMatrix< Number >.

Definition at line 60 of file static_condensation.C.

61 {
62  libmesh_not_implemented();
63 }

◆ operator=() [2/2]

virtual SparseMatrix<Number>& libMesh::StaticCondensation::operator= ( const SparseMatrix< Number > &  )
inlineoverridevirtual

This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual.

This function should be overridden in derived classes so that they can be copied correctly via references to the base class. This design usually isn't a good idea in general, but in this context it works because we usually don't have a mix of different kinds of SparseMatrix active in the library at a single time.

Returns
A reference to *this as the base type.

Reimplemented from libMesh::SparseMatrix< Number >.

Definition at line 327 of file static_condensation.h.

328  {
329  libmesh_not_implemented();
330  }

◆ print() [1/3]

void libMesh::SparseMatrix< Complex >::print ( std::ostream &  os,
const bool  sparse 
) const
inherited

Definition at line 131 of file sparse_matrix.C.

132 {
133  // std::complex<>::operator<<() is defined, but use this form
134 
135  if (sparse)
136  {
137  libmesh_not_implemented();
138  }
139 
140  os << "Real part:" << std::endl;
141  for (auto i : make_range(this->m()))
142  {
143  for (auto j : make_range(this->n()))
144  os << std::setw(8) << (*this)(i,j).real() << " ";
145  os << std::endl;
146  }
147 
148  os << std::endl << "Imaginary part:" << std::endl;
149  for (auto i : make_range(this->m()))
150  {
151  for (auto j : make_range(this->n()))
152  os << std::setw(8) << (*this)(i,j).imag() << " ";
153  os << std::endl;
154  }
155 }
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
virtual numeric_index_type m() const=0
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
boost::multiprecision::float128 imag(const boost::multiprecision::float128)
virtual numeric_index_type n() const=0

◆ print() [2/3]

void libMesh::SparseMatrix< Number >::print ( std::ostream &  os = libMesh::out,
const bool  sparse = false 
) const
inherited

Print the contents of the matrix to the screen in a uniform style, regardless of matrix/solver package being used.

Definition at line 247 of file sparse_matrix.C.

248 {
249  parallel_object_only();
250 
251  libmesh_assert (this->initialized());
252 
253  const numeric_index_type first_dof = this->row_start(),
254  end_dof = this->row_stop();
255 
256  // We'll print the matrix from processor 0 to make sure
257  // it's serialized properly
258  if (this->processor_id() == 0)
259  {
260  libmesh_assert_equal_to (first_dof, 0);
261  for (numeric_index_type i : make_range(end_dof))
262  {
263  if (sparse)
264  {
265  for (auto j : make_range(this->n()))
266  {
267  T c = (*this)(i,j);
268  if (c != static_cast<T>(0.0))
269  {
270  os << i << " " << j << " " << c << std::endl;
271  }
272  }
273  }
274  else
275  {
276  for (auto j : make_range(this->n()))
277  os << (*this)(i,j) << " ";
278  os << std::endl;
279  }
280  }
281 
282  std::vector<numeric_index_type> ibuf, jbuf;
283  std::vector<T> cbuf;
284  numeric_index_type currenti = end_dof;
285  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
286  {
287  this->comm().receive(p, ibuf);
288  this->comm().receive(p, jbuf);
289  this->comm().receive(p, cbuf);
290  libmesh_assert_equal_to (ibuf.size(), jbuf.size());
291  libmesh_assert_equal_to (ibuf.size(), cbuf.size());
292 
293  if (ibuf.empty())
294  continue;
295  libmesh_assert_greater_equal (ibuf.front(), currenti);
296  libmesh_assert_greater_equal (ibuf.back(), ibuf.front());
297 
298  std::size_t currentb = 0;
299  for (;currenti <= ibuf.back(); ++currenti)
300  {
301  if (sparse)
302  {
303  for (numeric_index_type j=0; j<this->n(); j++)
304  {
305  if (currentb < ibuf.size() &&
306  ibuf[currentb] == currenti &&
307  jbuf[currentb] == j)
308  {
309  os << currenti << " " << j << " " << cbuf[currentb] << std::endl;
310  currentb++;
311  }
312  }
313  }
314  else
315  {
316  for (auto j : make_range(this->n()))
317  {
318  if (currentb < ibuf.size() &&
319  ibuf[currentb] == currenti &&
320  jbuf[currentb] == j)
321  {
322  os << cbuf[currentb] << " ";
323  currentb++;
324  }
325  else
326  os << static_cast<T>(0.0) << " ";
327  }
328  os << std::endl;
329  }
330  }
331  }
332  if (!sparse)
333  {
334  for (; currenti != this->m(); ++currenti)
335  {
336  for (numeric_index_type j=0; j<this->n(); j++)
337  os << static_cast<T>(0.0) << " ";
338  os << std::endl;
339  }
340  }
341  }
342  else
343  {
344  std::vector<numeric_index_type> ibuf, jbuf;
345  std::vector<T> cbuf;
346 
347  // We'll assume each processor has access to entire
348  // matrix rows, so (*this)(i,j) is valid if i is a local index.
349  for (numeric_index_type i : make_range(first_dof, end_dof))
350  {
351  for (auto j : make_range(this->n()))
352  {
353  T c = (*this)(i,j);
354  if (c != static_cast<T>(0.0))
355  {
356  ibuf.push_back(i);
357  jbuf.push_back(j);
358  cbuf.push_back(c);
359  }
360  }
361  }
362  this->comm().send(0,ibuf);
363  this->comm().send(0,jbuf);
364  this->comm().send(0,cbuf);
365  }
366 }
virtual bool initialized() const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const=0
processor_id_type n_processors() const
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const=0
libmesh_assert(ctx)
virtual numeric_index_type row_start() const=0
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
processor_id_type processor_id() const
virtual numeric_index_type n() const=0

◆ print() [3/3]

template<typename T >
void libMesh::SparseMatrix< T >::print ( std::ostream &  os = libMesh::out,
const bool  sparse = false 
) const
inherited

Print the contents of the matrix to the screen in a uniform style, regardless of matrix/solver package being used.

Definition at line 247 of file sparse_matrix.C.

Referenced by libMesh::EigenSparseMatrix< T >::print_personal(), and libMesh::LaspackMatrix< T >::print_personal().

248 {
249  parallel_object_only();
250 
251  libmesh_assert (this->initialized());
252 
253  const numeric_index_type first_dof = this->row_start(),
254  end_dof = this->row_stop();
255 
256  // We'll print the matrix from processor 0 to make sure
257  // it's serialized properly
258  if (this->processor_id() == 0)
259  {
260  libmesh_assert_equal_to (first_dof, 0);
261  for (numeric_index_type i : make_range(end_dof))
262  {
263  if (sparse)
264  {
265  for (auto j : make_range(this->n()))
266  {
267  T c = (*this)(i,j);
268  if (c != static_cast<T>(0.0))
269  {
270  os << i << " " << j << " " << c << std::endl;
271  }
272  }
273  }
274  else
275  {
276  for (auto j : make_range(this->n()))
277  os << (*this)(i,j) << " ";
278  os << std::endl;
279  }
280  }
281 
282  std::vector<numeric_index_type> ibuf, jbuf;
283  std::vector<T> cbuf;
284  numeric_index_type currenti = end_dof;
285  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
286  {
287  this->comm().receive(p, ibuf);
288  this->comm().receive(p, jbuf);
289  this->comm().receive(p, cbuf);
290  libmesh_assert_equal_to (ibuf.size(), jbuf.size());
291  libmesh_assert_equal_to (ibuf.size(), cbuf.size());
292 
293  if (ibuf.empty())
294  continue;
295  libmesh_assert_greater_equal (ibuf.front(), currenti);
296  libmesh_assert_greater_equal (ibuf.back(), ibuf.front());
297 
298  std::size_t currentb = 0;
299  for (;currenti <= ibuf.back(); ++currenti)
300  {
301  if (sparse)
302  {
303  for (numeric_index_type j=0; j<this->n(); j++)
304  {
305  if (currentb < ibuf.size() &&
306  ibuf[currentb] == currenti &&
307  jbuf[currentb] == j)
308  {
309  os << currenti << " " << j << " " << cbuf[currentb] << std::endl;
310  currentb++;
311  }
312  }
313  }
314  else
315  {
316  for (auto j : make_range(this->n()))
317  {
318  if (currentb < ibuf.size() &&
319  ibuf[currentb] == currenti &&
320  jbuf[currentb] == j)
321  {
322  os << cbuf[currentb] << " ";
323  currentb++;
324  }
325  else
326  os << static_cast<T>(0.0) << " ";
327  }
328  os << std::endl;
329  }
330  }
331  }
332  if (!sparse)
333  {
334  for (; currenti != this->m(); ++currenti)
335  {
336  for (numeric_index_type j=0; j<this->n(); j++)
337  os << static_cast<T>(0.0) << " ";
338  os << std::endl;
339  }
340  }
341  }
342  else
343  {
344  std::vector<numeric_index_type> ibuf, jbuf;
345  std::vector<T> cbuf;
346 
347  // We'll assume each processor has access to entire
348  // matrix rows, so (*this)(i,j) is valid if i is a local index.
349  for (numeric_index_type i : make_range(first_dof, end_dof))
350  {
351  for (auto j : make_range(this->n()))
352  {
353  T c = (*this)(i,j);
354  if (c != static_cast<T>(0.0))
355  {
356  ibuf.push_back(i);
357  jbuf.push_back(j);
358  cbuf.push_back(c);
359  }
360  }
361  }
362  this->comm().send(0,ibuf);
363  this->comm().send(0,jbuf);
364  this->comm().send(0,cbuf);
365  }
366 }
virtual bool initialized() const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const =0
processor_id_type n_processors() const
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const =0
libmesh_assert(ctx)
virtual numeric_index_type row_start() const =0
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
processor_id_type processor_id() const
virtual numeric_index_type n() const =0

◆ print_info() [1/2]

void libMesh::ReferenceCounter::print_info ( std::ostream &  out_stream = libMesh::out)
staticinherited

Prints the reference information, by default to libMesh::out.

Definition at line 81 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().

Referenced by libMesh::LibMeshInit::~LibMeshInit().

82 {
84  out_stream << ReferenceCounter::get_info();
85 }
static std::string get_info()
Gets a string containing the reference information.
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ print_info() [2/2]

void libMesh::ReferenceCounter::print_info ( std::ostream &  out_stream = libMesh::out)
staticinherited

Prints the reference information, by default to libMesh::out.

Definition at line 81 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().

Referenced by libMesh::LibMeshInit::~LibMeshInit().

82 {
84  out_stream << ReferenceCounter::get_info();
85 }
static std::string get_info()
Gets a string containing the reference information.
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called...

◆ print_matlab() [1/2]

template<typename T >
void libMesh::SparseMatrix< T >::print_matlab ( const std::string &  name = "") const
virtualinherited

Print the contents of the matrix in Matlab's sparse matrix format.

Optionally prints the matrix to the file named name. If name is not specified it is dumped to the screen.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 370 of file sparse_matrix.C.

371 {
372  parallel_object_only();
373 
374  libmesh_assert (this->initialized());
375 
376  const numeric_index_type first_dof = this->row_start(),
377  end_dof = this->row_stop();
378 
379  // We'll print the matrix from processor 0 to make sure
380  // it's serialized properly
381  if (this->processor_id() == 0)
382  {
383  std::unique_ptr<std::ofstream> file;
384 
385  if (name != "")
386  file = std::make_unique<std::ofstream>(name.c_str());
387 
388  std::ostream & os = (name == "") ? libMesh::out : *file;
389 
390  std::size_t sparsity_nonzeros = this->n_nonzeros();
391 
392  std::size_t real_nonzeros = 0;
393 
394  libmesh_assert_equal_to(first_dof, 0);
395  for (numeric_index_type i : make_range(end_dof))
396  {
397  for (auto j : make_range(this->n()))
398  {
399  T c = (*this)(i,j);
400  if (c != static_cast<T>(0.0))
401  ++real_nonzeros;
402  }
403  }
404 
405 
406  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
407  {
408  std::size_t nonzeros_on_p = 0;
409  this->comm().receive(p, nonzeros_on_p);
410  real_nonzeros += nonzeros_on_p;
411  }
412 
413  if (sparsity_nonzeros &&
414  sparsity_nonzeros != real_nonzeros)
415  libmesh_warning(sparsity_nonzeros <<
416  " nonzeros allocated, but " <<
417  real_nonzeros << " used.");
418 
419  // We probably want to be more consistent than that, if our
420  // sparsity is overallocated.
421 
422  // Print a header similar to PETSc's mat_view ascii_matlab
423  os << "%Mat Object: () " << this->n_processors() << " MPI processes\n"
424  << "% type: " << (this->n_processors() > 1 ? "mpi" : "seq") << "aij\n"
425  << "% Size = " << this->m() << ' ' << this->n() << '\n'
426  << "% Nonzeros = " << real_nonzeros << '\n'
427  << "zzz = zeros(" << real_nonzeros << ",3);\n"
428  << "zzz = [\n";
429 
430  for (numeric_index_type i : make_range(end_dof))
431  {
432  // FIXME - we need a base class way to iterate over a
433  // SparseMatrix row.
434  for (auto j : make_range(this->n()))
435  {
436  T c = (*this)(i,j);
437  if (c != static_cast<T>(0.0))
438  {
439  // Convert from 0-based to 1-based indexing
440  os << (i+1) << ' ' << (j+1) << " " << c << '\n';
441  }
442  }
443  }
444 
445  std::vector<numeric_index_type> ibuf, jbuf;
446  std::vector<T> cbuf;
447  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
448  {
449  this->comm().receive(p, ibuf);
450  this->comm().receive(p, jbuf);
451  this->comm().receive(p, cbuf);
452  libmesh_assert_equal_to (ibuf.size(), jbuf.size());
453  libmesh_assert_equal_to (ibuf.size(), cbuf.size());
454 
455  for (auto n : index_range(ibuf))
456  os << ibuf[n] << ' ' << jbuf[n] << " " << cbuf[n] << '\n';
457  }
458 
459  os << "];\n" << "Mat_sparse = spconvert(zzz);" << std::endl;
460  }
461  else
462  {
463  std::vector<numeric_index_type> ibuf, jbuf;
464  std::vector<T> cbuf;
465  std::size_t my_nonzeros = 0;
466 
467  // We'll assume each processor has access to entire
468  // matrix rows, so (*this)(i,j) is valid if i is a local index.
469  for (numeric_index_type i : make_range(first_dof, end_dof))
470  {
471  for (auto j : make_range(this->n()))
472  {
473  T c = (*this)(i,j);
474  if (c != static_cast<T>(0.0))
475  {
476  ibuf.push_back(i);
477  jbuf.push_back(j);
478  cbuf.push_back(c);
479  ++my_nonzeros;
480  }
481  }
482  }
483  this->comm().send(0,my_nonzeros);
484  this->comm().send(0,ibuf);
485  this->comm().send(0,jbuf);
486  this->comm().send(0,cbuf);
487  }
488 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
virtual bool initialized() const
virtual std::size_t n_nonzeros() const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const =0
processor_id_type n_processors() const
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const =0
libmesh_assert(ctx)
virtual numeric_index_type row_start() const =0
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
OStreamProxy out
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
processor_id_type processor_id() const
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
virtual numeric_index_type n() const =0

◆ print_matlab() [2/2]

void libMesh::SparseMatrix< Number >::print_matlab ( const std::string &  name = "") const
virtualinherited

Print the contents of the matrix in Matlab's sparse matrix format.

Optionally prints the matrix to the file named name. If name is not specified it is dumped to the screen.

Definition at line 370 of file sparse_matrix.C.

371 {
372  parallel_object_only();
373 
374  libmesh_assert (this->initialized());
375 
376  const numeric_index_type first_dof = this->row_start(),
377  end_dof = this->row_stop();
378 
379  // We'll print the matrix from processor 0 to make sure
380  // it's serialized properly
381  if (this->processor_id() == 0)
382  {
383  std::unique_ptr<std::ofstream> file;
384 
385  if (name != "")
386  file = std::make_unique<std::ofstream>(name.c_str());
387 
388  std::ostream & os = (name == "") ? libMesh::out : *file;
389 
390  std::size_t sparsity_nonzeros = this->n_nonzeros();
391 
392  std::size_t real_nonzeros = 0;
393 
394  libmesh_assert_equal_to(first_dof, 0);
395  for (numeric_index_type i : make_range(end_dof))
396  {
397  for (auto j : make_range(this->n()))
398  {
399  T c = (*this)(i,j);
400  if (c != static_cast<T>(0.0))
401  ++real_nonzeros;
402  }
403  }
404 
405 
406  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
407  {
408  std::size_t nonzeros_on_p = 0;
409  this->comm().receive(p, nonzeros_on_p);
410  real_nonzeros += nonzeros_on_p;
411  }
412 
413  if (sparsity_nonzeros &&
414  sparsity_nonzeros != real_nonzeros)
415  libmesh_warning(sparsity_nonzeros <<
416  " nonzeros allocated, but " <<
417  real_nonzeros << " used.");
418 
419  // We probably want to be more consistent than that, if our
420  // sparsity is overallocated.
421 
422  // Print a header similar to PETSc's mat_view ascii_matlab
423  os << "%Mat Object: () " << this->n_processors() << " MPI processes\n"
424  << "% type: " << (this->n_processors() > 1 ? "mpi" : "seq") << "aij\n"
425  << "% Size = " << this->m() << ' ' << this->n() << '\n'
426  << "% Nonzeros = " << real_nonzeros << '\n'
427  << "zzz = zeros(" << real_nonzeros << ",3);\n"
428  << "zzz = [\n";
429 
430  for (numeric_index_type i : make_range(end_dof))
431  {
432  // FIXME - we need a base class way to iterate over a
433  // SparseMatrix row.
434  for (auto j : make_range(this->n()))
435  {
436  T c = (*this)(i,j);
437  if (c != static_cast<T>(0.0))
438  {
439  // Convert from 0-based to 1-based indexing
440  os << (i+1) << ' ' << (j+1) << " " << c << '\n';
441  }
442  }
443  }
444 
445  std::vector<numeric_index_type> ibuf, jbuf;
446  std::vector<T> cbuf;
447  for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
448  {
449  this->comm().receive(p, ibuf);
450  this->comm().receive(p, jbuf);
451  this->comm().receive(p, cbuf);
452  libmesh_assert_equal_to (ibuf.size(), jbuf.size());
453  libmesh_assert_equal_to (ibuf.size(), cbuf.size());
454 
455  for (auto n : index_range(ibuf))
456  os << ibuf[n] << ' ' << jbuf[n] << " " << cbuf[n] << '\n';
457  }
458 
459  os << "];\n" << "Mat_sparse = spconvert(zzz);" << std::endl;
460  }
461  else
462  {
463  std::vector<numeric_index_type> ibuf, jbuf;
464  std::vector<T> cbuf;
465  std::size_t my_nonzeros = 0;
466 
467  // We'll assume each processor has access to entire
468  // matrix rows, so (*this)(i,j) is valid if i is a local index.
469  for (numeric_index_type i : make_range(first_dof, end_dof))
470  {
471  for (auto j : make_range(this->n()))
472  {
473  T c = (*this)(i,j);
474  if (c != static_cast<T>(0.0))
475  {
476  ibuf.push_back(i);
477  jbuf.push_back(j);
478  cbuf.push_back(c);
479  ++my_nonzeros;
480  }
481  }
482  }
483  this->comm().send(0,my_nonzeros);
484  this->comm().send(0,ibuf);
485  this->comm().send(0,jbuf);
486  this->comm().send(0,cbuf);
487  }
488 }
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
virtual bool initialized() const
virtual std::size_t n_nonzeros() const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const=0
processor_id_type n_processors() const
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const=0
libmesh_assert(ctx)
virtual numeric_index_type row_start() const=0
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
OStreamProxy out
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
processor_id_type processor_id() const
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
virtual numeric_index_type n() const=0

◆ print_personal() [1/2]

void libMesh::StaticCondensation::print_personal ( std::ostream &  os = libMesh::out) const
overridevirtual

Print the contents of the matrix to the screen in a package-personalized style, if available.

Implements libMesh::SparseMatrix< Number >.

Definition at line 359 of file static_condensation.C.

359 { libmesh_not_implemented(); }

◆ print_personal() [2/2]

virtual void libMesh::StaticCondensation::print_personal ( std::ostream &  os = libMesh::out) const
inlineoverridevirtual

Print the contents of the matrix to the screen in a package-personalized style, if available.

Implements libMesh::SparseMatrix< Number >.

Definition at line 390 of file static_condensation.h.

391  {
392  libmesh_not_implemented();
393  }

◆ print_petsc_binary() [1/2]

template<typename T >
void libMesh::SparseMatrix< T >::print_petsc_binary ( const std::string &  filename)
virtualinherited

Write the contents of the matrix to a file in PETSc's binary sparse matrix format.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 493 of file sparse_matrix.C.

494 {
495  libmesh_not_implemented_msg
496  ("libMesh cannot write PETSc binary-format files from non-PETSc matrices");
497 }

◆ print_petsc_binary() [2/2]

void libMesh::SparseMatrix< Number >::print_petsc_binary ( const std::string &  filename)
virtualinherited

Write the contents of the matrix to a file in PETSc's binary sparse matrix format.

Definition at line 493 of file sparse_matrix.C.

494 {
495  libmesh_not_implemented_msg
496  ("libMesh cannot write PETSc binary-format files from non-PETSc matrices");
497 }

◆ print_petsc_hdf5() [1/2]

void libMesh::SparseMatrix< Number >::print_petsc_hdf5 ( const std::string &  filename)
virtualinherited

Write the contents of the matrix to a file in PETSc's HDF5 sparse matrix format.

Definition at line 502 of file sparse_matrix.C.

503 {
504  libmesh_not_implemented_msg
505  ("libMesh cannot write PETSc HDF5-format files from non-PETSc matrices");
506 }

◆ print_petsc_hdf5() [2/2]

template<typename T >
void libMesh::SparseMatrix< T >::print_petsc_hdf5 ( const std::string &  filename)
virtualinherited

Write the contents of the matrix to a file in PETSc's HDF5 sparse matrix format.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 502 of file sparse_matrix.C.

503 {
504  libmesh_not_implemented_msg
505  ("libMesh cannot write PETSc HDF5-format files from non-PETSc matrices");
506 }

◆ processor_id() [1/2]

processor_id_type libMesh::ParallelObject::processor_id ( ) const
inlineinherited
Returns
The rank of this processor in the group.

Definition at line 114 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, and TIMPI::Communicator::rank().

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::BoundaryInfo::add_elements(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::MeshTools::Modification::all_tri(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::Partitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::MeshFunction::check_found_elem(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::ExodusII_IO_Helper::close(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::compute_communication_map_parameters(), libMesh::Nemesis_IO_Helper::compute_internal_and_border_elems_and_internal_nodes(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_node_communication_maps(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::ExodusII_IO_Helper::create(), libMesh::DistributedMesh::delete_elem(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DofMapBase::end_dof(), libMesh::DofMapBase::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::find_dofs_to_send(), libMesh::UnstructuredMesh::find_neighbors(), libMesh::DofMapBase::first_dof(), libMesh::DofMapBase::first_old_dof(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::Nemesis_IO_Helper::get_cmap_params(), libMesh::Nemesis_IO_Helper::get_eb_info_global(), libMesh::Nemesis_IO_Helper::get_elem_cmap(), libMesh::Nemesis_IO_Helper::get_elem_map(), libMesh::MeshBase::get_info(), libMesh::DofMap::get_info(), libMesh::Nemesis_IO_Helper::get_init_global(), libMesh::Nemesis_IO_Helper::get_init_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::Nemesis_IO_Helper::get_loadbal_param(), libMesh::DofMap::get_local_constraints(), libMesh::MeshBase::get_local_constraints(), libMesh::Nemesis_IO_Helper::get_node_cmap(), libMesh::Nemesis_IO_Helper::get_node_map(), libMesh::Nemesis_IO_Helper::get_ns_param_global(), libMesh::Nemesis_IO_Helper::get_ss_param_global(), libMesh::SparsityPattern::Build::handle_vi_vj(), libMesh::LaplaceMeshSmoother::init(), libMesh::SystemSubsetBySubdomain::init(), HeatSystem::init_data(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), libMesh::ExodusII_IO_Helper::initialize_global_variables(), libMesh::ExodusII_IO_Helper::initialize_nodal_variables(), libMesh::DistributedMesh::insert_elem(), libMesh::DofMap::is_evaluable(), libMesh::SparsityPattern::Build::join(), libMesh::TransientRBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBSCMEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEvaluation::legacy_write_offline_data_to_files(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DofMap::local_variable_indices(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::MeshBase::n_active_local_elem(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::MeshBase::n_constraint_rows(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::DofMapBase::n_local_dofs(), libMesh::MeshBase::n_local_elem(), libMesh::MeshBase::n_local_nodes(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::DistributedMesh::own_node(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Nemesis_IO_Helper::put_cmap_params(), libMesh::Nemesis_IO_Helper::put_elem_cmap(), libMesh::Nemesis_IO_Helper::put_elem_map(), libMesh::Nemesis_IO_Helper::put_loadbal_param(), libMesh::Nemesis_IO_Helper::put_node_cmap(), libMesh::Nemesis_IO_Helper::put_node_map(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::ExodusII_IO_Helper::read_global_values(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::System::read_legacy_data(), libMesh::DynaIO::read_mesh(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::System::read_serialized_data(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::System::read_serialized_vectors(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::RBEIMEvaluation::side_gather_bfs(), ExodusTest< elem_type >::test_read_gold(), ExodusTest< elem_type >::test_write(), MeshInputTest::testAbaqusRead(), MeshInputTest::testBadGmsh(), MeshInputTest::testCopyElementSolutionImpl(), MeshInputTest::testCopyElementVectorImpl(), MeshInputTest::testCopyNodalSolutionImpl(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), MeshInputTest::testDynaFileMappings(), MeshInputTest::testDynaNoSplines(), MeshInputTest::testDynaReadElem(), MeshInputTest::testDynaReadPatch(), MeshInputTest::testExodusFileMappings(), MeshInputTest::testExodusIGASidesets(), MeshInputTest::testExodusWriteElementDataFromDiscontinuousNodalData(), MeshInputTest::testGmshBCIDOverlap(), MeshInputTest::testGoodGmsh(), MeshInputTest::testGoodSTL(), MeshInputTest::testGoodSTLBinary(), MeshInputTest::testLowOrderEdgeBlocks(), SystemsTest::testProjectMatrix3D(), BoundaryInfoTest::testShellFaceConstraints(), MeshInputTest::testSingleElementImpl(), WriteVecAndScalar::testSolution(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), libMesh::MeshTools::total_weight(), libMesh::NetGenMeshInterface::triangulate(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::DTKAdapter::update_variable_values(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::ExodusII_IO_Helper::write_elements(), libMesh::ExodusII_IO_Helper::write_elemset_data(), libMesh::ExodusII_IO_Helper::write_elemsets(), libMesh::ExodusII_IO::write_global_data(), libMesh::ExodusII_IO_Helper::write_global_values(), libMesh::System::write_header(), libMesh::ExodusII_IO::write_information_records(), libMesh::ExodusII_IO_Helper::write_information_records(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::UCDIO::write_nodal_data(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data_common(), libMesh::ExodusII_IO::write_nodal_data_discontinuous(), libMesh::ExodusII_IO_Helper::write_nodal_values(), libMesh::ExodusII_IO_Helper::write_nodeset_data(), libMesh::Nemesis_IO_Helper::write_nodesets(), libMesh::ExodusII_IO_Helper::write_nodesets(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), write_output_solvedata(), libMesh::System::write_parallel_data(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bc_names(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::System::write_serialized_data(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::XdrIO::write_serialized_subdomain_names(), libMesh::System::write_serialized_vector(), libMesh::System::write_serialized_vectors(), libMesh::ExodusII_IO_Helper::write_sideset_data(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

115  { return cast_int<processor_id_type>(_communicator.rank()); }
processor_id_type rank() const
const Parallel::Communicator & _communicator

◆ processor_id() [2/2]

processor_id_type libMesh::ParallelObject::processor_id ( ) const
inlineinherited
Returns
The rank of this processor in the group.

Definition at line 114 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, and TIMPI::Communicator::rank().

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::BoundaryInfo::add_elements(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::MeshTools::Modification::all_tri(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::Partitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::MeshFunction::check_found_elem(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::ExodusII_IO_Helper::close(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::compute_communication_map_parameters(), libMesh::Nemesis_IO_Helper::compute_internal_and_border_elems_and_internal_nodes(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_node_communication_maps(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::ExodusII_IO_Helper::create(), libMesh::DistributedMesh::delete_elem(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DofMapBase::end_dof(), libMesh::DofMapBase::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::find_dofs_to_send(), libMesh::UnstructuredMesh::find_neighbors(), libMesh::DofMapBase::first_dof(), libMesh::DofMapBase::first_old_dof(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::Nemesis_IO_Helper::get_cmap_params(), libMesh::Nemesis_IO_Helper::get_eb_info_global(), libMesh::Nemesis_IO_Helper::get_elem_cmap(), libMesh::Nemesis_IO_Helper::get_elem_map(), libMesh::MeshBase::get_info(), libMesh::DofMap::get_info(), libMesh::Nemesis_IO_Helper::get_init_global(), libMesh::Nemesis_IO_Helper::get_init_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::Nemesis_IO_Helper::get_loadbal_param(), libMesh::DofMap::get_local_constraints(), libMesh::MeshBase::get_local_constraints(), libMesh::Nemesis_IO_Helper::get_node_cmap(), libMesh::Nemesis_IO_Helper::get_node_map(), libMesh::Nemesis_IO_Helper::get_ns_param_global(), libMesh::Nemesis_IO_Helper::get_ss_param_global(), libMesh::SparsityPattern::Build::handle_vi_vj(), libMesh::LaplaceMeshSmoother::init(), libMesh::SystemSubsetBySubdomain::init(), HeatSystem::init_data(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), libMesh::ExodusII_IO_Helper::initialize_global_variables(), libMesh::ExodusII_IO_Helper::initialize_nodal_variables(), libMesh::DistributedMesh::insert_elem(), libMesh::DofMap::is_evaluable(), libMesh::SparsityPattern::Build::join(), libMesh::TransientRBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBSCMEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEvaluation::legacy_write_offline_data_to_files(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DofMap::local_variable_indices(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::MeshBase::n_active_local_elem(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::MeshBase::n_constraint_rows(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::DofMapBase::n_local_dofs(), libMesh::MeshBase::n_local_elem(), libMesh::MeshBase::n_local_nodes(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::DistributedMesh::own_node(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Nemesis_IO_Helper::put_cmap_params(), libMesh::Nemesis_IO_Helper::put_elem_cmap(), libMesh::Nemesis_IO_Helper::put_elem_map(), libMesh::Nemesis_IO_Helper::put_loadbal_param(), libMesh::Nemesis_IO_Helper::put_node_cmap(), libMesh::Nemesis_IO_Helper::put_node_map(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::ExodusII_IO_Helper::read_global_values(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::System::read_legacy_data(), libMesh::DynaIO::read_mesh(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::System::read_serialized_data(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::System::read_serialized_vectors(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::RBEIMEvaluation::side_gather_bfs(), ExodusTest< elem_type >::test_read_gold(), ExodusTest< elem_type >::test_write(), MeshInputTest::testAbaqusRead(), MeshInputTest::testBadGmsh(), MeshInputTest::testCopyElementSolutionImpl(), MeshInputTest::testCopyElementVectorImpl(), MeshInputTest::testCopyNodalSolutionImpl(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), MeshInputTest::testDynaFileMappings(), MeshInputTest::testDynaNoSplines(), MeshInputTest::testDynaReadElem(), MeshInputTest::testDynaReadPatch(), MeshInputTest::testExodusFileMappings(), MeshInputTest::testExodusIGASidesets(), MeshInputTest::testExodusWriteElementDataFromDiscontinuousNodalData(), MeshInputTest::testGmshBCIDOverlap(), MeshInputTest::testGoodGmsh(), MeshInputTest::testGoodSTL(), MeshInputTest::testGoodSTLBinary(), MeshInputTest::testLowOrderEdgeBlocks(), SystemsTest::testProjectMatrix3D(), BoundaryInfoTest::testShellFaceConstraints(), MeshInputTest::testSingleElementImpl(), WriteVecAndScalar::testSolution(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), libMesh::MeshTools::total_weight(), libMesh::NetGenMeshInterface::triangulate(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::DTKAdapter::update_variable_values(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::ExodusII_IO_Helper::write_elements(), libMesh::ExodusII_IO_Helper::write_elemset_data(), libMesh::ExodusII_IO_Helper::write_elemsets(), libMesh::ExodusII_IO::write_global_data(), libMesh::ExodusII_IO_Helper::write_global_values(), libMesh::System::write_header(), libMesh::ExodusII_IO::write_information_records(), libMesh::ExodusII_IO_Helper::write_information_records(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::UCDIO::write_nodal_data(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data_common(), libMesh::ExodusII_IO::write_nodal_data_discontinuous(), libMesh::ExodusII_IO_Helper::write_nodal_values(), libMesh::ExodusII_IO_Helper::write_nodeset_data(), libMesh::Nemesis_IO_Helper::write_nodesets(), libMesh::ExodusII_IO_Helper::write_nodesets(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), write_output_solvedata(), libMesh::System::write_parallel_data(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bc_names(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::System::write_serialized_data(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::XdrIO::write_serialized_subdomain_names(), libMesh::System::write_serialized_vector(), libMesh::System::write_serialized_vectors(), libMesh::ExodusII_IO_Helper::write_sideset_data(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

115  { return cast_int<processor_id_type>(_communicator.rank()); }
processor_id_type rank() const
const Parallel::Communicator & _communicator

◆ read() [1/2]

template<typename T >
void libMesh::SparseMatrix< T >::read ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file, with the file format inferred from the extension of filename.

Definition at line 511 of file sparse_matrix.C.

512 {
513  {
514  std::ifstream in (filename.c_str());
515  libmesh_error_msg_if
516  (!in.good(), "ERROR: cannot read file:\n\t" <<
517  filename);
518  }
519 
520  std::string_view basename = Utility::basename_of(filename);
521 
522  const bool gzipped_file = (basename.rfind(".gz") == basename.size() - 3);
523 
524  if (gzipped_file)
525  basename.remove_suffix(3);
526 
527  if (basename.rfind(".matlab") == basename.size() - 7 ||
528  basename.rfind(".m") == basename.size() - 2)
529  this->read_matlab(filename);
530  else if (basename.rfind(".petsc64") == basename.size() - 8)
531  {
532 #ifndef LIBMESH_HAVE_PETSC
533  libmesh_error_msg("Cannot load PETSc matrix file " <<
534  filename << " without PETSc-enabled libMesh.");
535 #endif
536 #if LIBMESH_DOF_ID_BYTES != 8
537  libmesh_error_msg("Cannot load 64-bit PETSc matrix file " <<
538  filename << " with non-64-bit libMesh.");
539 #endif
540  this->read_petsc_binary(filename);
541  }
542  else if (basename.rfind(".petsc32") == basename.size() - 8)
543  {
544 #ifndef LIBMESH_HAVE_PETSC
545  libmesh_error_msg("Cannot load PETSc matrix file " <<
546  filename << " without PETSc-enabled libMesh.");
547 #endif
548 #if LIBMESH_DOF_ID_BYTES != 4
549  libmesh_error_msg("Cannot load 32-bit PETSc matrix file " <<
550  filename << " with non-32-bit libMesh.");
551 #endif
552  this->read_petsc_binary(filename);
553  }
554  else
555  libmesh_error_msg(" ERROR: Unrecognized matrix file extension on: "
556  << basename
557  << "\n I understand the following:\n\n"
558  << " *.matlab -- Matlab sparse matrix format\n"
559  << " *.m -- Matlab sparse matrix format\n"
560  << " *.petsc32 -- PETSc binary format, 32-bit\n"
561  << " *.petsc64 -- PETSc binary format, 64-bit\n"
562  );
563 }
virtual void read_matlab(const std::string &filename)
Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc...
virtual void read_petsc_binary(const std::string &filename)
Read the contents of the matrix from a file in PETSc&#39;s binary sparse matrix format.
std::string_view basename_of(const std::string &fullname)
Definition: utility.C:108

◆ read() [2/2]

void libMesh::SparseMatrix< Number >::read ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file, with the file format inferred from the extension of filename.

Definition at line 511 of file sparse_matrix.C.

512 {
513  {
514  std::ifstream in (filename.c_str());
515  libmesh_error_msg_if
516  (!in.good(), "ERROR: cannot read file:\n\t" <<
517  filename);
518  }
519 
520  std::string_view basename = Utility::basename_of(filename);
521 
522  const bool gzipped_file = (basename.rfind(".gz") == basename.size() - 3);
523 
524  if (gzipped_file)
525  basename.remove_suffix(3);
526 
527  if (basename.rfind(".matlab") == basename.size() - 7 ||
528  basename.rfind(".m") == basename.size() - 2)
529  this->read_matlab(filename);
530  else if (basename.rfind(".petsc64") == basename.size() - 8)
531  {
532 #ifndef LIBMESH_HAVE_PETSC
533  libmesh_error_msg("Cannot load PETSc matrix file " <<
534  filename << " without PETSc-enabled libMesh.");
535 #endif
536 #if LIBMESH_DOF_ID_BYTES != 8
537  libmesh_error_msg("Cannot load 64-bit PETSc matrix file " <<
538  filename << " with non-64-bit libMesh.");
539 #endif
540  this->read_petsc_binary(filename);
541  }
542  else if (basename.rfind(".petsc32") == basename.size() - 8)
543  {
544 #ifndef LIBMESH_HAVE_PETSC
545  libmesh_error_msg("Cannot load PETSc matrix file " <<
546  filename << " without PETSc-enabled libMesh.");
547 #endif
548 #if LIBMESH_DOF_ID_BYTES != 4
549  libmesh_error_msg("Cannot load 32-bit PETSc matrix file " <<
550  filename << " with non-32-bit libMesh.");
551 #endif
552  this->read_petsc_binary(filename);
553  }
554  else
555  libmesh_error_msg(" ERROR: Unrecognized matrix file extension on: "
556  << basename
557  << "\n I understand the following:\n\n"
558  << " *.matlab -- Matlab sparse matrix format\n"
559  << " *.m -- Matlab sparse matrix format\n"
560  << " *.petsc32 -- PETSc binary format, 32-bit\n"
561  << " *.petsc64 -- PETSc binary format, 64-bit\n"
562  );
563 }
virtual void read_matlab(const std::string &filename)
Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc...
virtual void read_petsc_binary(const std::string &filename)
Read the contents of the matrix from a file in PETSc&#39;s binary sparse matrix format.
std::string_view basename_of(const std::string &fullname)
Definition: utility.C:108

◆ read_matlab() [1/2]

void libMesh::SparseMatrix< Number >::read_matlab ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc.

If the size and sparsity of the matrix in filename appears consistent with the existing sparsity of this then the existing parallel decomposition and sparsity will be retained. If not, then this will be initialized with the sparsity from the file, linearly partitioned onto the number of processors available.

Definition at line 567 of file sparse_matrix.C.

568 {
569  LOG_SCOPE("read_matlab()", "SparseMatrix");
570 
571 #ifndef LIBMESH_HAVE_CXX11_REGEX
572  libmesh_not_implemented(); // What is your compiler?!? Email us!
573  libmesh_ignore(filename);
574 #else
575  parallel_object_only();
576 
577  const bool gzipped_file = (filename.rfind(".gz") == filename.size() - 3);
578 
579  // The sizes we get from the file
580  std::size_t m = 0,
581  n = 0;
582 
583  // If we don't already have this size, we'll need to reinit, and
584  // determine which rows+columns each processor is in charge of.
585  std::vector<numeric_index_type> new_row_starts, new_row_stops,
586  new_col_starts, new_col_stops;
587 
588  numeric_index_type new_row_start, new_row_stop,
589  new_col_start, new_col_stop;
590 
591  // We'll read through the file three times: once to get a reliable
592  // value for the matrix size (so we can divvy it up among
593  // processors), then again to get the sparsity to send to each
594  // processor, then a final time to get the entries to send to each
595  // processor.
596  //
597  // We'll use an istream here; it might be an ifstream if we're
598  // opening a raw ASCII file or a gzstream if we're opening a
599  // compressed one.
600  std::unique_ptr<std::istream> file;
601 
602  // We'll need a temporary structure to cache matrix entries, because
603  // we need to read through the whole file before we know the size
604  // and sparsity structure with which we can init().
605  //
606  // Reading through the file three times via `seekg` doesn't work
607  // with our gzstream wrapper, and seems to take three times as long
608  // even with a plain ifstream. What happened to disk caching!?
609  std::vector<std::tuple<numeric_index_type, numeric_index_type, T>> entries;
610 
611  // First read through the file, saving size and entry data
612  {
613  // We'll read the matrix on processor 0 rather than try to juggle
614  // parallel I/O.
615  if (this->processor_id() == 0)
616  {
617  // We'll be using regular expressions to make ourselves slightly
618  // more robust to formatting.
619  const std::regex start_regex // assignment like "zzz = ["
620  ("\\s*\\w+\\s*=\\s*\\[");
621  const std::regex end_regex // end of assignment
622  ("^[^%]*\\]");
623 
624  if (gzipped_file)
625  {
626 #ifdef LIBMESH_HAVE_GZSTREAM
627  auto inf = std::make_unique<igzstream>();
628  libmesh_assert(inf);
629  inf->open(filename.c_str(), std::ios::in);
630  file = std::move(inf);
631 #else
632  libmesh_error_msg("ERROR: need gzstream to handle .gz files!!!");
633 #endif
634  }
635  else
636  {
637  auto inf = std::make_unique<std::ifstream>();
638  libmesh_assert(inf);
639 
640  std::string new_name = Utility::unzip_file(filename);
641 
642  inf->open(new_name.c_str(), std::ios::in);
643  file = std::move(inf);
644  }
645 
646  // If we have a matrix with all-zero trailing rows, the only
647  // way to get the size is if it ended up in a comment
648  const std::regex size_regex // comment like "% size = 8 8"
649  ("%\\s*[Ss][Ii][Zz][Ee]\\s*=\\s*(\\d+)\\s+(\\d+)");
650  const std::string whitespace = " \t";
651 
652  bool have_started = false;
653  bool have_ended = false;
654  std::size_t largest_i_seen = 0, largest_j_seen = 0;
655 
656  // Data for the row we're working on
657  // Use 1-based indexing for current_row, as in the file
658  std::size_t current_row = 1;
659 
660  for (std::string line; std::getline(*file, line);)
661  {
662  std::smatch sm;
663 
664  // First, try to match an entry. This is the most common
665  // case so we won't rely on slow std::regex for it.
666  // stringstream is at least an improvement over that.
667 
668  // Look for row/col/val like "1 1 -2.0e-4"
669 
670  std::istringstream l(line);
671 
672  std::size_t i, j;
673  T value;
674 
675  l >> i >> j >> value;
676 
677  if (!l.fail())
678  {
679  libmesh_error_msg_if
680  (!have_started, "Confused by premature entries in matrix file " << filename);
681 
682  entries.emplace_back(cast_int<numeric_index_type>(i),
683  cast_int<numeric_index_type>(j),
684  value);
685 
686  libmesh_error_msg_if
687  (!i || !j, "Expected 1-based indexing in matrix file "
688  << filename);
689 
690  current_row = std::max(current_row, i);
691 
692  libmesh_error_msg_if
693  (i < current_row,
694  "Can't handle out-of-order entries in matrix file "
695  << filename);
696 
697  largest_i_seen = std::max(i, largest_i_seen);
698  largest_j_seen = std::max(j, largest_j_seen);
699  }
700 
701  else if (std::regex_search(line, sm, size_regex))
702  {
703  const std::string msize = sm[1];
704  const std::string nsize = sm[2];
705  m = std::stoull(msize);
706  n = std::stoull(nsize);
707  }
708 
709  else if (std::regex_search(line, start_regex))
710  have_started = true;
711 
712  else if (std::regex_search(line, end_regex))
713  {
714  have_ended = true;
715  break;
716  }
717  }
718 
719  libmesh_error_msg_if
720  (!have_started, "Confused by missing assignment beginning in matrix file " << filename);
721 
722  libmesh_error_msg_if
723  (!have_ended, "Confused by missing assignment ending in matrix file " << filename);
724 
725  libmesh_error_msg_if
726  (m > largest_i_seen, "Confused by missing final row(s) in matrix file " << filename);
727 
728  libmesh_error_msg_if
729  (m > 0 && m < largest_i_seen, "Confused by extra final row(s) in matrix file " << filename);
730 
731  if (!m)
732  m = largest_i_seen;
733 
734  libmesh_error_msg_if
735  (n > largest_j_seen, "Confused by missing final column(s) in matrix file " << filename);
736 
737  libmesh_error_msg_if
738  (n > 0 && n < largest_j_seen, "Confused by extra final column(s) in matrix file " << filename);
739 
740  if (!n)
741  n = largest_j_seen;
742 
743  this->comm().broadcast(m);
744  this->comm().broadcast(n);
745  }
746  else
747  {
748  this->comm().broadcast(m);
749  this->comm().broadcast(n);
750  }
751 
752  if (this->initialized() &&
753  m == this->m() &&
754  n == this->n())
755  {
756  new_row_start = this->row_start(),
757  new_row_stop = this->row_stop();
758 
759  new_col_start = this->col_start(),
760  new_col_stop = this->col_stop();
761  }
762  else
763  {
764  // Determine which rows/columns each processor will be in charge of
765  new_row_start = this->processor_id() * m / this->n_processors(),
766  new_row_stop = (this->processor_id()+1) * m / this->n_processors();
767 
768  new_col_start = this->processor_id() * n / this->n_processors(),
769  new_col_stop = (this->processor_id()+1) * n / this->n_processors();
770  }
771 
772  this->comm().gather(0, new_row_start, new_row_starts);
773  this->comm().gather(0, new_row_stop, new_row_stops);
774  this->comm().gather(0, new_col_start, new_col_starts);
775  this->comm().gather(0, new_col_stop, new_col_stops);
776 
777  } // Done reading entry data and broadcasting matrix size
778 
779  // Calculate the matrix sparsity and initialize it second
780  {
781  // Deduce the sparsity pattern, or at least the maximum number of
782  // on- and off- diagonal non-zeros per row.
783  numeric_index_type on_diagonal_nonzeros =0,
784  off_diagonal_nonzeros =0;
785 
786  if (this->processor_id() == 0)
787  {
788  // Data for the row we're working on
789  // Use 1-based indexing for current_row, as in the file
790  numeric_index_type current_row = 1;
791  processor_id_type current_proc = 0;
792  numeric_index_type current_on_diagonal_nonzeros = 0;
793  numeric_index_type current_off_diagonal_nonzeros = 0;
794 
795  for (auto [i, j, value] : entries)
796  {
797  if (i > current_row)
798  {
799  current_row = i;
800  // +1 for 1-based indexing in file
801  while (current_row >= (new_row_stops[current_proc]+1))
802  ++current_proc;
803  current_on_diagonal_nonzeros = 0;
804  current_off_diagonal_nonzeros = 0;
805  }
806 
807  // +1 for 1-based indexing in file
808  if (j >= (new_col_starts[current_proc]+1) &&
809  j < (new_col_stops[current_proc]+1))
810  {
811  ++current_on_diagonal_nonzeros;
812  on_diagonal_nonzeros =
813  std::max(on_diagonal_nonzeros,
814  current_on_diagonal_nonzeros);
815  }
816  else
817  {
818  ++current_off_diagonal_nonzeros;
819  off_diagonal_nonzeros =
820  std::max(off_diagonal_nonzeros,
821  current_off_diagonal_nonzeros);
822  }
823  }
824  }
825 
826  this->comm().broadcast(on_diagonal_nonzeros);
827  this->comm().broadcast(off_diagonal_nonzeros);
828 
829  this->init(m, n,
830  new_row_stop-new_row_start,
831  new_col_stop-new_col_start,
832  on_diagonal_nonzeros,
833  off_diagonal_nonzeros);
834  }
835 
836  // Set the matrix values last.
837  // Convert from 1-based to 0-based indexing
838  if (this->processor_id() == 0)
839  for (auto [i, j, value] : entries)
840  this->set(i-1, j-1, value);
841 
842  this->close();
843 #endif
844 }
virtual bool initialized() const
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const=0
uint8_t processor_id_type
processor_id_type n_processors() const
void libmesh_ignore(const Args &...)
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const=0
std::string unzip_file(std::string_view name)
Create an unzipped copy of a bz2 or xz file, returning the name of the now-unzipped file that can be ...
Definition: utility.C:164
libmesh_assert(ctx)
virtual numeric_index_type col_stop() const=0
virtual numeric_index_type col_start() const=0
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
virtual void close()=0
Calls the SparseMatrix&#39;s internal assembly routines, ensuring that the values are consistent across p...
virtual numeric_index_type row_start() const=0
static const bool value
Definition: xdr_io.C:54
processor_id_type processor_id() const
virtual numeric_index_type n() const=0
virtual void init(const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type nnz=30, const numeric_index_type noz=10, const numeric_index_type blocksize=1)=0
Initialize SparseMatrix with the specified sizes.

◆ read_matlab() [2/2]

template<typename T >
void libMesh::SparseMatrix< T >::read_matlab ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from the Matlab-script sparse matrix format used by PETSc.

If the size and sparsity of the matrix in filename appears consistent with the existing sparsity of this then the existing parallel decomposition and sparsity will be retained. If not, then this will be initialized with the sparsity from the file, linearly partitioned onto the number of processors available.

Definition at line 567 of file sparse_matrix.C.

Referenced by ConstraintOperatorTest::test1DCoarseningNewNodes().

568 {
569  LOG_SCOPE("read_matlab()", "SparseMatrix");
570 
571 #ifndef LIBMESH_HAVE_CXX11_REGEX
572  libmesh_not_implemented(); // What is your compiler?!? Email us!
573  libmesh_ignore(filename);
574 #else
575  parallel_object_only();
576 
577  const bool gzipped_file = (filename.rfind(".gz") == filename.size() - 3);
578 
579  // The sizes we get from the file
580  std::size_t m = 0,
581  n = 0;
582 
583  // If we don't already have this size, we'll need to reinit, and
584  // determine which rows+columns each processor is in charge of.
585  std::vector<numeric_index_type> new_row_starts, new_row_stops,
586  new_col_starts, new_col_stops;
587 
588  numeric_index_type new_row_start, new_row_stop,
589  new_col_start, new_col_stop;
590 
591  // We'll read through the file three times: once to get a reliable
592  // value for the matrix size (so we can divvy it up among
593  // processors), then again to get the sparsity to send to each
594  // processor, then a final time to get the entries to send to each
595  // processor.
596  //
597  // We'll use an istream here; it might be an ifstream if we're
598  // opening a raw ASCII file or a gzstream if we're opening a
599  // compressed one.
600  std::unique_ptr<std::istream> file;
601 
602  // We'll need a temporary structure to cache matrix entries, because
603  // we need to read through the whole file before we know the size
604  // and sparsity structure with which we can init().
605  //
606  // Reading through the file three times via `seekg` doesn't work
607  // with our gzstream wrapper, and seems to take three times as long
608  // even with a plain ifstream. What happened to disk caching!?
609  std::vector<std::tuple<numeric_index_type, numeric_index_type, T>> entries;
610 
611  // First read through the file, saving size and entry data
612  {
613  // We'll read the matrix on processor 0 rather than try to juggle
614  // parallel I/O.
615  if (this->processor_id() == 0)
616  {
617  // We'll be using regular expressions to make ourselves slightly
618  // more robust to formatting.
619  const std::regex start_regex // assignment like "zzz = ["
620  ("\\s*\\w+\\s*=\\s*\\[");
621  const std::regex end_regex // end of assignment
622  ("^[^%]*\\]");
623 
624  if (gzipped_file)
625  {
626 #ifdef LIBMESH_HAVE_GZSTREAM
627  auto inf = std::make_unique<igzstream>();
628  libmesh_assert(inf);
629  inf->open(filename.c_str(), std::ios::in);
630  file = std::move(inf);
631 #else
632  libmesh_error_msg("ERROR: need gzstream to handle .gz files!!!");
633 #endif
634  }
635  else
636  {
637  auto inf = std::make_unique<std::ifstream>();
638  libmesh_assert(inf);
639 
640  std::string new_name = Utility::unzip_file(filename);
641 
642  inf->open(new_name.c_str(), std::ios::in);
643  file = std::move(inf);
644  }
645 
646  // If we have a matrix with all-zero trailing rows, the only
647  // way to get the size is if it ended up in a comment
648  const std::regex size_regex // comment like "% size = 8 8"
649  ("%\\s*[Ss][Ii][Zz][Ee]\\s*=\\s*(\\d+)\\s+(\\d+)");
650  const std::string whitespace = " \t";
651 
652  bool have_started = false;
653  bool have_ended = false;
654  std::size_t largest_i_seen = 0, largest_j_seen = 0;
655 
656  // Data for the row we're working on
657  // Use 1-based indexing for current_row, as in the file
658  std::size_t current_row = 1;
659 
660  for (std::string line; std::getline(*file, line);)
661  {
662  std::smatch sm;
663 
664  // First, try to match an entry. This is the most common
665  // case so we won't rely on slow std::regex for it.
666  // stringstream is at least an improvement over that.
667 
668  // Look for row/col/val like "1 1 -2.0e-4"
669 
670  std::istringstream l(line);
671 
672  std::size_t i, j;
673  T value;
674 
675  l >> i >> j >> value;
676 
677  if (!l.fail())
678  {
679  libmesh_error_msg_if
680  (!have_started, "Confused by premature entries in matrix file " << filename);
681 
682  entries.emplace_back(cast_int<numeric_index_type>(i),
683  cast_int<numeric_index_type>(j),
684  value);
685 
686  libmesh_error_msg_if
687  (!i || !j, "Expected 1-based indexing in matrix file "
688  << filename);
689 
690  current_row = std::max(current_row, i);
691 
692  libmesh_error_msg_if
693  (i < current_row,
694  "Can't handle out-of-order entries in matrix file "
695  << filename);
696 
697  largest_i_seen = std::max(i, largest_i_seen);
698  largest_j_seen = std::max(j, largest_j_seen);
699  }
700 
701  else if (std::regex_search(line, sm, size_regex))
702  {
703  const std::string msize = sm[1];
704  const std::string nsize = sm[2];
705  m = std::stoull(msize);
706  n = std::stoull(nsize);
707  }
708 
709  else if (std::regex_search(line, start_regex))
710  have_started = true;
711 
712  else if (std::regex_search(line, end_regex))
713  {
714  have_ended = true;
715  break;
716  }
717  }
718 
719  libmesh_error_msg_if
720  (!have_started, "Confused by missing assignment beginning in matrix file " << filename);
721 
722  libmesh_error_msg_if
723  (!have_ended, "Confused by missing assignment ending in matrix file " << filename);
724 
725  libmesh_error_msg_if
726  (m > largest_i_seen, "Confused by missing final row(s) in matrix file " << filename);
727 
728  libmesh_error_msg_if
729  (m > 0 && m < largest_i_seen, "Confused by extra final row(s) in matrix file " << filename);
730 
731  if (!m)
732  m = largest_i_seen;
733 
734  libmesh_error_msg_if
735  (n > largest_j_seen, "Confused by missing final column(s) in matrix file " << filename);
736 
737  libmesh_error_msg_if
738  (n > 0 && n < largest_j_seen, "Confused by extra final column(s) in matrix file " << filename);
739 
740  if (!n)
741  n = largest_j_seen;
742 
743  this->comm().broadcast(m);
744  this->comm().broadcast(n);
745  }
746  else
747  {
748  this->comm().broadcast(m);
749  this->comm().broadcast(n);
750  }
751 
752  if (this->initialized() &&
753  m == this->m() &&
754  n == this->n())
755  {
756  new_row_start = this->row_start(),
757  new_row_stop = this->row_stop();
758 
759  new_col_start = this->col_start(),
760  new_col_stop = this->col_stop();
761  }
762  else
763  {
764  // Determine which rows/columns each processor will be in charge of
765  new_row_start = this->processor_id() * m / this->n_processors(),
766  new_row_stop = (this->processor_id()+1) * m / this->n_processors();
767 
768  new_col_start = this->processor_id() * n / this->n_processors(),
769  new_col_stop = (this->processor_id()+1) * n / this->n_processors();
770  }
771 
772  this->comm().gather(0, new_row_start, new_row_starts);
773  this->comm().gather(0, new_row_stop, new_row_stops);
774  this->comm().gather(0, new_col_start, new_col_starts);
775  this->comm().gather(0, new_col_stop, new_col_stops);
776 
777  } // Done reading entry data and broadcasting matrix size
778 
779  // Calculate the matrix sparsity and initialize it second
780  {
781  // Deduce the sparsity pattern, or at least the maximum number of
782  // on- and off- diagonal non-zeros per row.
783  numeric_index_type on_diagonal_nonzeros =0,
784  off_diagonal_nonzeros =0;
785 
786  if (this->processor_id() == 0)
787  {
788  // Data for the row we're working on
789  // Use 1-based indexing for current_row, as in the file
790  numeric_index_type current_row = 1;
791  processor_id_type current_proc = 0;
792  numeric_index_type current_on_diagonal_nonzeros = 0;
793  numeric_index_type current_off_diagonal_nonzeros = 0;
794 
795  for (auto [i, j, value] : entries)
796  {
797  if (i > current_row)
798  {
799  current_row = i;
800  // +1 for 1-based indexing in file
801  while (current_row >= (new_row_stops[current_proc]+1))
802  ++current_proc;
803  current_on_diagonal_nonzeros = 0;
804  current_off_diagonal_nonzeros = 0;
805  }
806 
807  // +1 for 1-based indexing in file
808  if (j >= (new_col_starts[current_proc]+1) &&
809  j < (new_col_stops[current_proc]+1))
810  {
811  ++current_on_diagonal_nonzeros;
812  on_diagonal_nonzeros =
813  std::max(on_diagonal_nonzeros,
814  current_on_diagonal_nonzeros);
815  }
816  else
817  {
818  ++current_off_diagonal_nonzeros;
819  off_diagonal_nonzeros =
820  std::max(off_diagonal_nonzeros,
821  current_off_diagonal_nonzeros);
822  }
823  }
824  }
825 
826  this->comm().broadcast(on_diagonal_nonzeros);
827  this->comm().broadcast(off_diagonal_nonzeros);
828 
829  this->init(m, n,
830  new_row_stop-new_row_start,
831  new_col_stop-new_col_start,
832  on_diagonal_nonzeros,
833  off_diagonal_nonzeros);
834  }
835 
836  // Set the matrix values last.
837  // Convert from 1-based to 0-based indexing
838  if (this->processor_id() == 0)
839  for (auto [i, j, value] : entries)
840  this->set(i-1, j-1, value);
841 
842  this->close();
843 #endif
844 }
virtual bool initialized() const
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
const Parallel::Communicator & comm() const
virtual numeric_index_type row_stop() const =0
uint8_t processor_id_type
processor_id_type n_processors() const
void libmesh_ignore(const Args &...)
dof_id_type numeric_index_type
Definition: id_types.h:99
virtual numeric_index_type m() const =0
std::string unzip_file(std::string_view name)
Create an unzipped copy of a bz2 or xz file, returning the name of the now-unzipped file that can be ...
Definition: utility.C:164
libmesh_assert(ctx)
virtual numeric_index_type col_stop() const =0
virtual numeric_index_type col_start() const =0
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
virtual void close()=0
Calls the SparseMatrix&#39;s internal assembly routines, ensuring that the values are consistent across p...
virtual numeric_index_type row_start() const =0
static const bool value
Definition: xdr_io.C:54
processor_id_type processor_id() const
virtual numeric_index_type n() const =0
virtual void init(const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type nnz=30, const numeric_index_type noz=10, const numeric_index_type blocksize=1)=0
Initialize SparseMatrix with the specified sizes.

◆ read_petsc_binary() [1/2]

void libMesh::SparseMatrix< Number >::read_petsc_binary ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file in PETSc's binary sparse matrix format.

Definition at line 849 of file sparse_matrix.C.

850 {
851  libmesh_not_implemented_msg
852  ("libMesh cannot read PETSc binary-format files into non-PETSc matrices");
853 }

◆ read_petsc_binary() [2/2]

template<typename T >
void libMesh::SparseMatrix< T >::read_petsc_binary ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file in PETSc's binary sparse matrix format.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 849 of file sparse_matrix.C.

850 {
851  libmesh_not_implemented_msg
852  ("libMesh cannot read PETSc binary-format files into non-PETSc matrices");
853 }

◆ read_petsc_hdf5() [1/2]

void libMesh::SparseMatrix< Number >::read_petsc_hdf5 ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file in PETSc's HDF5 sparse matrix format.

Definition at line 858 of file sparse_matrix.C.

859 {
860  libmesh_not_implemented_msg
861  ("libMesh cannot read PETSc HDF5-format files into non-PETSc matrices");
862 }

◆ read_petsc_hdf5() [2/2]

template<typename T >
void libMesh::SparseMatrix< T >::read_petsc_hdf5 ( const std::string &  filename)
virtualinherited

Read the contents of the matrix from a file in PETSc's HDF5 sparse matrix format.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 858 of file sparse_matrix.C.

859 {
860  libmesh_not_implemented_msg
861  ("libMesh cannot read PETSc HDF5-format files into non-PETSc matrices");
862 }

◆ reduced_system_solver()

LinearSolver< Number > & libMesh::StaticCondensation::reduced_system_solver ( )
inline
Returns
The reduced system linear solver

Definition at line 296 of file static_condensation.h.

References _reduced_solver.

297 {
298  libmesh_assert_msg(_reduced_solver, "Reduced system solver not built yet");
299  return *_reduced_solver;
300 }
std::unique_ptr< LinearSolver< Number > > _reduced_solver
The solver for the uncondensed degrees of freedom.

◆ reinit_submatrix() [1/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::reinit_submatrix ( SparseMatrix< T > &  submatrix,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
) const
inlinevirtualinherited

This function is similar to the one above, but it allows you to reuse the existing sparsity pattern of "submatrix" instead of reallocating it again.

This should hopefully be more efficient if you are frequently extracting submatrices of the same size.

Definition at line 540 of file sparse_matrix.h.

543  {
544  this->_get_submatrix(submatrix,
545  rows,
546  cols,
547  true); // true means REUSE submatrix
548  }
virtual void _get_submatrix(SparseMatrix< T > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
Protected implementation of the create_submatrix and reinit_submatrix routines.

◆ reinit_submatrix() [2/2]

virtual void libMesh::SparseMatrix< Number >::reinit_submatrix ( SparseMatrix< Number > &  submatrix,
const std::vector< numeric_index_type > &  rows,
const std::vector< numeric_index_type > &  cols 
) const
inlinevirtualinherited

This function is similar to the one above, but it allows you to reuse the existing sparsity pattern of "submatrix" instead of reallocating it again.

This should hopefully be more efficient if you are frequently extracting submatrices of the same size.

Definition at line 540 of file sparse_matrix.h.

543  {
544  this->_get_submatrix(submatrix,
545  rows,
546  cols,
547  true); // true means REUSE submatrix
548  }
virtual void _get_submatrix(SparseMatrix< Number > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const
Protected implementation of the create_submatrix and reinit_submatrix routines.

◆ require_sparsity_pattern()

virtual bool libMesh::StaticCondensation::require_sparsity_pattern ( ) const
inlineoverridevirtual
Returns
Whether this matrix needs the sparsity pattern computed by the DofMap

Reimplemented from libMesh::PetscMatrixShellMatrix< T >.

Definition at line 182 of file static_condensation.h.

182 { return false; }

◆ restore_original_nonzero_pattern() [1/2]

virtual void libMesh::SparseMatrix< Number >::restore_original_nonzero_pattern ( )
inlinevirtualinherited

Reset the memory storage of the matrix.

Unlike clear(), this does not destroy the matrix but rather will reset the matrix to use the original preallocation or when using hash table matrix assembly (see use_hash_table()) will reset (clear) the hash table used for assembly. In the words of the MatResetPreallocation documentation in PETSc, 'current values in the matrix are lost in this call', so a user can expect to have back their original sparsity pattern in a zeroed state

Definition at line 619 of file sparse_matrix.h.

619 { libmesh_not_implemented(); }

◆ restore_original_nonzero_pattern() [2/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::restore_original_nonzero_pattern ( )
inlinevirtualinherited

Reset the memory storage of the matrix.

Unlike clear(), this does not destroy the matrix but rather will reset the matrix to use the original preallocation or when using hash table matrix assembly (see use_hash_table()) will reset (clear) the hash table used for assembly. In the words of the MatResetPreallocation documentation in PETSc, 'current values in the matrix are lost in this call', so a user can expect to have back their original sparsity pattern in a zeroed state

Reimplemented in libMesh::PetscMatrix< T >, and libMesh::DiagonalMatrix< T >.

Definition at line 619 of file sparse_matrix.h.

619 { libmesh_not_implemented(); }

◆ row_start() [1/2]

numeric_index_type libMesh::StaticCondensation::row_start ( ) const
overridevirtual
Returns
The index of the first matrix row stored on this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 251 of file static_condensation.C.

References _full_dof_map, and libMesh::DofMapBase::first_dof().

Referenced by col_start().

251 { return _full_dof_map.first_dof(); }
dof_id_type first_dof(const processor_id_type proc) const
Definition: dof_map_base.h:185

◆ row_start() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::row_start ( ) const
inlineoverridevirtual
Returns
The index of the first matrix row stored on this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 356 of file static_condensation.h.

356 { libmesh_not_implemented(); }

◆ row_stop() [1/2]

numeric_index_type libMesh::StaticCondensation::row_stop ( ) const
overridevirtual
Returns
The index of the last matrix row (+1) stored on this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 253 of file static_condensation.C.

References _full_dof_map, and libMesh::DofMapBase::end_dof().

Referenced by col_stop().

253 { return _full_dof_map.end_dof(); }
dof_id_type end_dof(const processor_id_type proc) const
Definition: dof_map_base.h:191

◆ row_stop() [2/2]

virtual numeric_index_type libMesh::StaticCondensation::row_stop ( ) const
inlineoverridevirtual
Returns
The index of the last matrix row (+1) stored on this processor.

Implements libMesh::SparseMatrix< Number >.

Definition at line 357 of file static_condensation.h.

357 { libmesh_not_implemented(); }

◆ scale() [1/2]

void libMesh::SparseMatrix< Number >::scale ( const Number  scale)
virtualinherited

Scales all elements of this matrix by scale.

Definition at line 867 of file sparse_matrix.C.

868 {
869  libmesh_assert(this->closed());
870 
871  for (const auto i : make_range(this->row_start(), this->row_stop()))
872  for (const auto j : make_range(this->col_start(), this->col_stop()))
873  this->set(i, j, (*this)(i, j) * scale);
874 }
virtual numeric_index_type row_stop() const=0
libmesh_assert(ctx)
virtual numeric_index_type col_stop() const=0
virtual numeric_index_type col_start() const=0
virtual bool closed() const=0
virtual numeric_index_type row_start() const=0
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
virtual void scale(const Number scale)
Scales all elements of this matrix by scale.

◆ scale() [2/2]

template<typename T>
void libMesh::SparseMatrix< T >::scale ( const T  scale)
virtualinherited

Scales all elements of this matrix by scale.

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 867 of file sparse_matrix.C.

868 {
869  libmesh_assert(this->closed());
870 
871  for (const auto i : make_range(this->row_start(), this->row_stop()))
872  for (const auto j : make_range(this->col_start(), this->col_stop()))
873  this->set(i, j, (*this)(i, j) * scale);
874 }
virtual numeric_index_type row_stop() const =0
libmesh_assert(ctx)
virtual numeric_index_type col_stop() const =0
virtual numeric_index_type col_start() const =0
virtual bool closed() const =0
virtual numeric_index_type row_start() const =0
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
virtual void scale(const T scale)
Scales all elements of this matrix by scale.

◆ set() [1/3]

void libMesh::StaticCondensation::set ( const numeric_index_type  i,
const numeric_index_type  j,
const Number  value 
)
overridevirtual

Set the element (i,j) to value.

Throws an error if the entry does not exist. Zero values can be "stored" in non-existent fields.

Implements libMesh::SparseMatrix< Number >.

Definition at line 255 of file static_condensation.C.

References _reduced_dof_map, _reduced_sys_mat, and libMesh::StaticCondensationDofMap::get_reduced_from_global_constraint_dof().

258 {
259  const auto reduced_i = _reduced_dof_map.get_reduced_from_global_constraint_dof(full_i);
260  const auto reduced_j = _reduced_dof_map.get_reduced_from_global_constraint_dof(full_j);
261  _reduced_sys_mat->set(reduced_i, reduced_j, val);
262 }
StaticCondensationDofMap & _reduced_dof_map
dof_id_type get_reduced_from_global_constraint_dof(dof_id_type full_dof) const
Retrieve the dof index in the reduced system corresponding to the provided dof index in the full syst...
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom

◆ set() [2/3]

template<typename T>
virtual void libMesh::SparseMatrix< T >::set ( const numeric_index_type  i,
const numeric_index_type  j,
const T  value 
)
pure virtualinherited

◆ set() [3/3]

virtual void libMesh::StaticCondensation::set ( const numeric_index_type  i,
const numeric_index_type  j,
const Number  value 
)
inlineoverridevirtual

Set the element (i,j) to value.

Throws an error if the entry does not exist. Zero values can be "stored" in non-existent fields.

Implements libMesh::SparseMatrix< Number >.

Definition at line 360 of file static_condensation.h.

361  {
362  libmesh_not_implemented();
363  }

◆ set_context()

template<typename T >
void libMesh::PetscMatrixBase< T >::set_context ( )
inherited

Set the context (ourself) for _mat.

Definition at line 105 of file petsc_matrix_base.C.

106 {
107  libmesh_assert(this->_mat);
108  PetscContainer container;
109  LibmeshPetscCall(PetscContainerCreate(this->comm().get(), &container));
110  LibmeshPetscCall(PetscContainerSetPointer(container, this));
111  LibmeshPetscCall(PetscObjectCompose((PetscObject)(Mat)this->_mat, "PetscMatrixCtx", (PetscObject)container));
112  LibmeshPetscCall(PetscContainerDestroy(&container));
113 }
const Parallel::Communicator & comm() const
libmesh_assert(ctx)
Mat _mat
PETSc matrix datatype to store values.

◆ set_current_elem()

void libMesh::StaticCondensation::set_current_elem ( const Elem elem)

Set the current element.

This enables fast lookups of local indices from global indices

Definition at line 264 of file static_condensation.C.

References _current_elem_id, libMesh::DofObject::id(), libMesh::Threads::in_threads, libMesh::libmesh_assert(), and libMesh::n_threads().

Referenced by libMesh::HDGProblem::jacobian().

265 {
267  _current_elem_id = elem.id();
268 }
unsigned int n_threads()
Definition: libmesh_base.h:96
dof_id_type _current_elem_id
The current element ID.
bool in_threads
A boolean which is true iff we are in a Threads:: function It may be useful to assert(!Threadsin_thre...
Definition: threads.C:32
libmesh_assert(ctx)

◆ set_destroy_mat_on_exit()

template<typename T >
void libMesh::PetscMatrixBase< T >::set_destroy_mat_on_exit ( bool  destroy = true)
inherited

If set to false, we don't delete the Mat on destruction and allow instead for PETSc to manage it.

Definition at line 91 of file petsc_matrix_base.C.

92 {
94 }
bool _destroy_mat_on_exit
This boolean value should only be set to false for the constructor which takes a PETSc Mat object...
void destroy(triangulateio &t, IO_Type)
Frees any memory which has been dynamically allocated by Triangle.

◆ set_local_vectors()

void libMesh::StaticCondensation::set_local_vectors ( const NumericVector< Number > &  global_vector,
const std::vector< dof_id_type > &  elem_dof_indices,
std::vector< Number > &  elem_dof_values_vec,
EigenVector elem_dof_values 
)
staticprivate

Retrieves the degree of freedom values from global_vector corresponding to elem_dof_indices, filling both elem_dof_values_vec and elem_dof_values.

Definition at line 372 of file static_condensation.C.

References libMesh::NumericVector< T >::get(), and libMesh::index_range().

Referenced by backwards_substitution(), and forward_elimination().

376 {
377  global_vector.get(elem_dof_indices, elem_dof_values_vec);
378  elem_dof_values.resize(elem_dof_indices.size());
379  for (const auto i : index_range(elem_dof_indices))
380  elem_dof_values(i) = elem_dof_values_vec[i];
381 }
virtual void get(const std::vector< numeric_index_type > &index, T *values) const
Access multiple components at once.
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117

◆ setup() [1/2]

void libMesh::StaticCondensation::setup ( )

A no-op to be consistent with shimming from the StaticCondenstionPreconditioner.

"setup" should take place at the end of matrix assembly, e.g. during a call to close()

Definition at line 247 of file static_condensation.C.

References closed(), and libMesh::libmesh_assert().

Referenced by libMesh::StaticCondensationPreconditioner::setup().

247 { libmesh_assert(this->closed()); }
libmesh_assert(ctx)
virtual bool closed() const override

◆ setup() [2/2]

void libMesh::StaticCondensation::setup ( )
inline

Definition at line 403 of file static_condensation.h.

403 { libmesh_not_implemented(); }

◆ solver_package() [1/2]

SolverPackage libMesh::StaticCondensation::solver_package ( )
overridevirtual

Implements libMesh::SparseMatrix< Number >.

Definition at line 475 of file static_condensation.C.

References libMesh::default_solver_package().

SolverPackage default_solver_package()
Definition: libmesh.C:1117

◆ solver_package() [2/2]

virtual SolverPackage libMesh::StaticCondensation::solver_package ( )
inlineoverridevirtual

Implements libMesh::SparseMatrix< Number >.

Definition at line 331 of file static_condensation.h.

331 { libmesh_not_implemented(); }

◆ supports_hash_table() [1/2]

virtual bool libMesh::SparseMatrix< Number >::supports_hash_table ( ) const
inlinevirtualinherited
Returns
Whether the matrix supports hash table assembly

Definition at line 594 of file sparse_matrix.h.

594 { return false; }

◆ supports_hash_table() [2/2]

template<typename T>
virtual bool libMesh::SparseMatrix< T >::supports_hash_table ( ) const
inlinevirtualinherited
Returns
Whether the matrix supports hash table assembly

Reimplemented in libMesh::PetscMatrix< T >.

Definition at line 594 of file sparse_matrix.h.

594 { return false; }

◆ swap()

template<typename T>
void libMesh::PetscMatrixBase< T >::swap ( PetscMatrixBase< T > &  m_in)
inherited

Swaps the internal data pointers of two PetscMatrices, no actual values are swapped.

Definition at line 98 of file petsc_matrix_base.C.

Referenced by DMlibMeshJacobian().

99 {
100  std::swap(_mat, m_in._mat);
101  std::swap(_destroy_mat_on_exit, m_in._destroy_mat_on_exit);
102 }
bool _destroy_mat_on_exit
This boolean value should only be set to false for the constructor which takes a PETSc Mat object...
Mat _mat
PETSc matrix datatype to store values.

◆ uncondensed_dofs_only()

void libMesh::StaticCondensation::uncondensed_dofs_only ( )
inline

Sets whether this matrix represents uncondensed dofs only.

In that case when building the Schur complement we won't attempt to invert zero element matrices corresponding to the condensed dofs

Definition at line 188 of file static_condensation.h.

References _uncondensed_dofs_only.

188 { _uncondensed_dofs_only = true; }
bool _uncondensed_dofs_only
whether this matrix represents uncondensed dofs only.

◆ uncondensed_vars()

const std::unordered_set<unsigned int>& libMesh::StaticCondensation::uncondensed_vars ( ) const
inline

Definition at line 325 of file static_condensation.h.

325 { libmesh_not_implemented(); }

◆ update_sparsity_pattern() [1/2]

virtual void libMesh::SparseMatrix< Number >::update_sparsity_pattern ( const SparsityPattern::Graph )
inlinevirtualinherited

Updates the matrix sparsity pattern.

When your SparseMatrix<T> implementation does not need this data, simply do not override this method.

Definition at line 175 of file sparse_matrix.h.

175 {}

◆ update_sparsity_pattern() [2/2]

template<typename T>
virtual void libMesh::SparseMatrix< T >::update_sparsity_pattern ( const SparsityPattern::Graph )
inlinevirtualinherited

Updates the matrix sparsity pattern.

When your SparseMatrix<T> implementation does not need this data, simply do not override this method.

Reimplemented in libMesh::EpetraMatrix< T >, and libMesh::LaspackMatrix< T >.

Definition at line 175 of file sparse_matrix.h.

Referenced by libMesh::DofMap::update_sparsity_pattern().

175 {}

◆ use_hash_table() [1/4]

template<typename T >
void libMesh::SparseMatrix< T >::use_hash_table ( bool  use_hash)
inherited

Sets whether to use hash table assembly.

This will error if the passed-in value is true and the matrix type does not support hash tables. Hash table or hash map assembly means storing maps from i-j locations in the matrix to values. Because it is a hash map as opposed to a contiguous array of data, no preallocation is required to use it

Definition at line 667 of file sparse_matrix.h.

Referenced by PetscMatrixTest::testPetscCopyFromHash().

668 {
669  libmesh_error_msg_if(use_hash && !this->supports_hash_table(),
670  "This matrix class does not support hash table assembly");
671  this->_use_hash_table = use_hash;
672 }
bool _use_hash_table
Flag indicating whether the matrix is assembled using a hash table.
virtual bool supports_hash_table() const

◆ use_hash_table() [2/4]

void libMesh::SparseMatrix< Number >::use_hash_table ( bool  use_hash)
inherited

Sets whether to use hash table assembly.

This will error if the passed-in value is true and the matrix type does not support hash tables. Hash table or hash map assembly means storing maps from i-j locations in the matrix to values. Because it is a hash map as opposed to a contiguous array of data, no preallocation is required to use it

Definition at line 667 of file sparse_matrix.h.

668 {
669  libmesh_error_msg_if(use_hash && !this->supports_hash_table(),
670  "This matrix class does not support hash table assembly");
671  this->_use_hash_table = use_hash;
672 }
bool _use_hash_table
Flag indicating whether the matrix is assembled using a hash table.
virtual bool supports_hash_table() const

◆ use_hash_table() [3/4]

bool libMesh::SparseMatrix< Number >::use_hash_table ( ) const
inlineinherited
Returns
Whether this matrix is using hash table assembly. Hash table or hash map assembly means storing maps from i-j locations in the matrix to values. Because it is a hash map as opposed to a contiguous array of data, no preallocation is required to use it

Definition at line 609 of file sparse_matrix.h.

609 { return _use_hash_table; }
bool _use_hash_table
Flag indicating whether the matrix is assembled using a hash table.

◆ use_hash_table() [4/4]

template<typename T>
bool libMesh::SparseMatrix< T >::use_hash_table ( ) const
inlineinherited
Returns
Whether this matrix is using hash table assembly. Hash table or hash map assembly means storing maps from i-j locations in the matrix to values. Because it is a hash map as opposed to a contiguous array of data, no preallocation is required to use it

Definition at line 609 of file sparse_matrix.h.

Referenced by libMesh::SparseMatrix< ValOut >::require_sparsity_pattern().

609 { return _use_hash_table; }
bool _use_hash_table
Flag indicating whether the matrix is assembled using a hash table.

◆ vector_mult() [1/2]

void libMesh::SparseMatrix< Number >::vector_mult ( NumericVector< Number > &  dest,
const NumericVector< Number > &  arg 
) const
inherited

Multiplies the matrix by the NumericVector arg and stores the result in NumericVector dest.

Definition at line 209 of file sparse_matrix.C.

211 {
212  dest.zero();
213  this->vector_mult_add(dest,arg);
214 }
virtual void zero()=0
Set all entries to zero.
void vector_mult_add(NumericVector< Number > &dest, const NumericVector< Number > &arg) const
Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest...

◆ vector_mult() [2/2]

template<typename T>
void libMesh::SparseMatrix< T >::vector_mult ( NumericVector< T > &  dest,
const NumericVector< T > &  arg 
) const
inherited

Multiplies the matrix by the NumericVector arg and stores the result in NumericVector dest.

Definition at line 209 of file sparse_matrix.C.

Referenced by libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::RBSCMConstruction::Aq_inner_product(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::RBSCMConstruction::B_inner_product(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::RBConstruction::enrich_RB_space(), AssembleOptimization::gradient(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), AssembleOptimization::objective(), libMesh::RBConstruction::print_basis_function_orthogonality(), libMesh::ImplicitSystem::qoi_parameter_hessian(), libMesh::ImplicitSystem::qoi_parameter_hessian_vector_product(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_solve(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), and libMesh::RBConstruction::update_residual_terms().

211 {
212  dest.zero();
213  this->vector_mult_add(dest,arg);
214 }
void vector_mult_add(NumericVector< T > &dest, const NumericVector< T > &arg) const
Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest...

◆ vector_mult_add() [1/2]

template<typename T>
void libMesh::SparseMatrix< T >::vector_mult_add ( NumericVector< T > &  dest,
const NumericVector< T > &  arg 
) const
inherited

Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest.

Definition at line 219 of file sparse_matrix.C.

Referenced by libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().

221 {
222  /* This functionality is actually implemented in the \p
223  NumericVector class. */
224  dest.add_vector(arg,*this);
225 }

◆ vector_mult_add() [2/2]

void libMesh::SparseMatrix< Number >::vector_mult_add ( NumericVector< Number > &  dest,
const NumericVector< Number > &  arg 
) const
inherited

Multiplies the matrix by the NumericVector arg and adds the result to the NumericVector dest.

Definition at line 219 of file sparse_matrix.C.

221 {
222  /* This functionality is actually implemented in the \p
223  NumericVector class. */
224  dest.add_vector(arg,*this);
225 }
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)
Computes , where v is a pointer and each dof_indices[i] specifies where to add value v[i]...

◆ zero() [1/2]

void libMesh::StaticCondensation::zero ( )
overridevirtual

Set all entries to 0.

Implements libMesh::SparseMatrix< Number >.

Definition at line 234 of file static_condensation.C.

References _elem_to_matrix_data, _reduced_sys_mat, and libMesh::libmesh_ignore().

Referenced by libMesh::StaticCondensationPreconditioner::zero().

235 {
236  _reduced_sys_mat->zero();
237  for (auto & [elem_id, matrix_data] : _elem_to_matrix_data)
238  {
239  libmesh_ignore(elem_id);
240  matrix_data.Acc.setZero();
241  matrix_data.Acu.setZero();
242  matrix_data.Auc.setZero();
243  matrix_data.Auu.setZero();
244  }
245 }
void libmesh_ignore(const Args &...)
std::unordered_map< dof_id_type, MatrixData > _elem_to_matrix_data
A map from element ID to Schur complement data.
std::unique_ptr< SparseMatrix< Number > > _reduced_sys_mat
global sparse matrix for the uncondensed degrees of freedom

◆ zero() [2/2]

virtual void libMesh::StaticCondensation::zero ( )
inlineoverridevirtual

Set all entries to 0.

Implements libMesh::SparseMatrix< Number >.

Definition at line 344 of file static_condensation.h.

344 { libmesh_not_implemented(); }

◆ zero_clone() [1/2]

std::unique_ptr< SparseMatrix< Number > > libMesh::StaticCondensation::zero_clone ( ) const
overridevirtual
Returns
A smart pointer to a copy of this matrix with the same type, size, and partitioning, but with all zero entries.
Note
This must be overridden in the derived classes.

Implements libMesh::SparseMatrix< Number >.

Definition at line 65 of file static_condensation.C.

66 {
67  libmesh_not_implemented();
68 }

◆ zero_clone() [2/2]

virtual std::unique_ptr<SparseMatrix<Number> > libMesh::StaticCondensation::zero_clone ( ) const
inlineoverridevirtual
Returns
A smart pointer to a copy of this matrix with the same type, size, and partitioning, but with all zero entries.
Note
This must be overridden in the derived classes.

Implements libMesh::SparseMatrix< Number >.

Definition at line 345 of file static_condensation.h.

346  {
347  libmesh_not_implemented();
348  }

◆ zero_rows() [1/2]

void libMesh::SparseMatrix< Number >::zero_rows ( std::vector< numeric_index_type > &  rows,
Number  diag_value = 0.0 
)
virtualinherited

Sets all row entries to 0 then puts diag_value in the diagonal entry.

Definition at line 230 of file sparse_matrix.C.

231 {
232  /* This functionality isn't implemented or stubbed in every subclass yet */
233  libmesh_not_implemented();
234 }

◆ zero_rows() [2/2]

template<typename T>
void libMesh::SparseMatrix< T >::zero_rows ( std::vector< numeric_index_type > &  rows,
diag_value = 0.0 
)
virtualinherited

Sets all row entries to 0 then puts diag_value in the diagonal entry.

Reimplemented in libMesh::DiagonalMatrix< T >, and libMesh::PetscMatrix< T >.

Definition at line 230 of file sparse_matrix.C.

231 {
232  /* This functionality isn't implemented or stubbed in every subclass yet */
233  libmesh_not_implemented();
234 }

Member Data Documentation

◆ _communicator [1/2]

const Parallel::Communicator& libMesh::ParallelObject::_communicator
protectedinherited

◆ _communicator [2/2]

const Parallel::Communicator& libMesh::ParallelObject::_communicator
protectedinherited

◆ _counts [1/2]

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited

Actually holds the data.

Definition at line 124 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::get_info().

◆ _counts [2/2]

ReferenceCounter::Counts libMesh::ReferenceCounter::_counts
staticprotectedinherited

Actually holds the data.

Definition at line 124 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::get_info().

◆ _current_elem_id

dof_id_type libMesh::StaticCondensation::_current_elem_id
private

The current element ID.

This is one half of a key, along with the global index, that maps to a local index

Definition at line 267 of file static_condensation.h.

Referenced by add_matrix(), clear(), and set_current_elem().

◆ _destroy_mat_on_exit

template<typename T>
bool libMesh::PetscMatrixBase< T >::_destroy_mat_on_exit
protectedinherited

This boolean value should only be set to false for the constructor which takes a PETSc Mat object.

Definition at line 186 of file petsc_matrix_base.h.

Referenced by libMesh::PetscMatrixBase< Number >::swap().

◆ _dof_map [1/2]

DofMap const* libMesh::SparseMatrix< Number >::_dof_map
protectedinherited

The DofMap object associated with this object.

May be queried for degree-of-freedom counts on processors.

Definition at line 641 of file sparse_matrix.h.

◆ _dof_map [2/2]

template<typename T>
DofMap const* libMesh::SparseMatrix< T >::_dof_map
protectedinherited

The DofMap object associated with this object.

May be queried for degree-of-freedom counts on processors.

Definition at line 641 of file sparse_matrix.h.

◆ _elem_to_matrix_data

std::unordered_map<dof_id_type, MatrixData> libMesh::StaticCondensation::_elem_to_matrix_data
private

A map from element ID to Schur complement data.

Definition at line 243 of file static_condensation.h.

Referenced by add_matrix(), backwards_substitution(), clear(), close(), forward_elimination(), init(), and zero().

◆ _enable_print_counter [1/2]

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

Flag to control whether reference count information is printed when print_info is called.

Definition at line 143 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().

◆ _enable_print_counter [2/2]

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

Flag to control whether reference count information is printed when print_info is called.

Definition at line 143 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().

◆ _full_dof_map

const DofMap& libMesh::StaticCondensation::_full_dof_map
private

Definition at line 247 of file static_condensation.h.

Referenced by m(), row_start(), and row_stop().

◆ _ghosted_full_sol

std::unique_ptr<NumericVector<Number> > libMesh::StaticCondensation::_ghosted_full_sol
private

This is a ghosted representation of the full (uncondensed + condensed) solution. Note that.

Definition at line 263 of file static_condensation.h.

Referenced by apply(), backwards_substitution(), and init().

◆ _have_cached_values

bool libMesh::StaticCondensation::_have_cached_values
private

Whether we have cached values via add_XXX()

Definition at line 279 of file static_condensation.h.

Referenced by add_matrix(), clear(), close(), and closed().

◆ _is_initialized [1/2]

bool libMesh::SparseMatrix< Number >::_is_initialized
protectedinherited

Flag indicating whether or not the matrix has been initialized.

Definition at line 653 of file sparse_matrix.h.

◆ _is_initialized [2/2]

template<typename T>
bool libMesh::SparseMatrix< T >::_is_initialized
protectedinherited

◆ _mat

template<typename T>
Mat libMesh::PetscMatrixBase< T >::_mat
protectedinherited

◆ _mesh

const MeshBase& libMesh::StaticCondensation::_mesh
private

Definition at line 245 of file static_condensation.h.

Referenced by backwards_substitution(), and forward_elimination().

◆ _mutex [1/2]

Threads::spin_mutex libMesh::ReferenceCounter::_mutex
staticprotectedinherited

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 137 of file reference_counter.h.

◆ _mutex [2/2]

Threads::spin_mutex libMesh::ReferenceCounter::_mutex
staticprotectedinherited

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 137 of file reference_counter.h.

◆ _n_objects [1/2]

Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects
staticprotectedinherited

The number of objects.

Print the reference count information when the number returns to 0.

Definition at line 132 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().

◆ _n_objects [2/2]

Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects
staticprotectedinherited

The number of objects.

Print the reference count information when the number returns to 0.

Definition at line 132 of file reference_counter.h.

Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().

◆ _parallel_type

ParallelType libMesh::StaticCondensation::_parallel_type
private

The parallel type to use for the reduced matrix.

Definition at line 282 of file static_condensation.h.

Referenced by init().

◆ _reduced_dof_map

StaticCondensationDofMap& libMesh::StaticCondensation::_reduced_dof_map
private

◆ _reduced_rhs

std::unique_ptr<NumericVector<Number> > libMesh::StaticCondensation::_reduced_rhs
private

RHS corresponding to the uncondensed degrees of freedom.

This is constructed by applying the element Schur complements to an incoming RHS which contains both condensed and uncondensed degrees of freedom

Definition at line 257 of file static_condensation.h.

Referenced by apply(), clear(), forward_elimination(), and init().

◆ _reduced_sol

std::unique_ptr<NumericVector<Number> > libMesh::StaticCondensation::_reduced_sol
private

solution for the uncondensed degrees of freedom

Definition at line 253 of file static_condensation.h.

Referenced by apply(), and clear().

◆ _reduced_solver

std::unique_ptr<LinearSolver<Number> > libMesh::StaticCondensation::_reduced_solver
private

The solver for the uncondensed degrees of freedom.

Definition at line 259 of file static_condensation.h.

Referenced by apply(), clear(), init(), and reduced_system_solver().

◆ _reduced_sys_mat

std::unique_ptr<SparseMatrix<Number> > libMesh::StaticCondensation::_reduced_sys_mat
private

global sparse matrix for the uncondensed degrees of freedom

Definition at line 251 of file static_condensation.h.

Referenced by apply(), clear(), close(), closed(), get_condensed_mat(), init(), set(), and zero().

◆ _sc_is_initialized

bool libMesh::StaticCondensation::_sc_is_initialized
private

Whether our object has been initialized.

Definition at line 276 of file static_condensation.h.

Referenced by clear(), init(), and initialized().

◆ _scp

std::unique_ptr<StaticCondensationPreconditioner> libMesh::StaticCondensation::_scp
private

Preconditioner object which will call back to us for the preconditioning action.

Definition at line 273 of file static_condensation.h.

Referenced by get_preconditioner(), and StaticCondensation().

◆ _size_one_mat

DenseMatrix<Number> libMesh::StaticCondensation::_size_one_mat
private

Helper data member for adding individual matrix elements.

Definition at line 270 of file static_condensation.h.

Referenced by add(), and StaticCondensation().

◆ _sp [1/2]

template<typename T>
SparsityPattern::Build const* libMesh::SparseMatrix< T >::_sp
protectedinherited

The sparsity pattern associated with this object.

Should be queried for entry counts (or with need_full_sparsity_pattern, patterns) when needed.

Definition at line 648 of file sparse_matrix.h.

◆ _sp [2/2]

SparsityPattern::Build const* libMesh::SparseMatrix< Number >::_sp
protectedinherited

The sparsity pattern associated with this object.

Should be queried for entry counts (or with need_full_sparsity_pattern, patterns) when needed.

Definition at line 648 of file sparse_matrix.h.

Referenced by init().

◆ _system

System& libMesh::StaticCondensation::_system
private

Definition at line 246 of file static_condensation.h.

Referenced by init().

◆ _uncondensed_dofs_only

bool libMesh::StaticCondensation::_uncondensed_dofs_only
private

whether this matrix represents uncondensed dofs only.

In that case when building the Schur complement we won't attempt to invert zero element matrices corresponding to the condensed dofs

Definition at line 287 of file static_condensation.h.

Referenced by close(), and uncondensed_dofs_only().

◆ _use_hash_table [1/2]

bool libMesh::SparseMatrix< Number >::_use_hash_table
protectedinherited

Flag indicating whether the matrix is assembled using a hash table.

Definition at line 658 of file sparse_matrix.h.

◆ _use_hash_table [2/2]

template<typename T>
bool libMesh::SparseMatrix< T >::_use_hash_table
protectedinherited

Flag indicating whether the matrix is assembled using a hash table.

Definition at line 658 of file sparse_matrix.h.

Referenced by libMesh::SparseMatrix< ValOut >::use_hash_table().


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