$extrastylesheet
#include <laspack_matrix.h>

Public Member Functions | |
| LaspackMatrix (const Parallel::Communicator &comm LIBMESH_CAN_DEFAULT_TO_COMMWORLD) | |
| ~LaspackMatrix () | |
| bool | need_full_sparsity_pattern () const |
| void | update_sparsity_pattern (const SparsityPattern::Graph &) |
| 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) |
| void | init () |
| void | clear () |
| void | zero () |
| void | close () const |
| numeric_index_type | m () const |
| numeric_index_type | n () const |
| numeric_index_type | row_start () const |
| numeric_index_type | row_stop () const |
| void | set (const numeric_index_type i, const numeric_index_type j, const T value) |
| void | add (const numeric_index_type i, const numeric_index_type j, const T value) |
| void | add_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) |
| void | add_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &dof_indices) |
| void | add (const T a, SparseMatrix< T > &X) |
| T | operator() (const numeric_index_type i, const numeric_index_type j) const |
| Real | l1_norm () const |
| Real | linfty_norm () const |
| bool | closed () const |
| void | print_personal (std::ostream &os=libMesh::out) const |
| virtual void | get_diagonal (NumericVector< T > &dest) const |
| virtual void | get_transpose (SparseMatrix< T > &dest) const |
| virtual bool | initialized () const |
| void | attach_dof_map (const DofMap &dof_map) |
| virtual void | zero_rows (std::vector< numeric_index_type > &rows, T diag_value=0.0) |
| virtual void | add_block_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &brows, const std::vector< numeric_index_type > &bcols) |
| virtual void | add_block_matrix (const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &dof_indices) |
| void | print (std::ostream &os=libMesh::out, const bool sparse=false) const |
| template<> | |
| void | print (std::ostream &os, const bool sparse) const |
| virtual void | print_matlab (const std::string &="") const |
| virtual void | create_submatrix (SparseMatrix< T > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const |
| virtual void | reinit_submatrix (SparseMatrix< T > &submatrix, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) const |
| void | vector_mult (NumericVector< T > &dest, const NumericVector< T > &arg) const |
| void | vector_mult_add (NumericVector< T > &dest, const NumericVector< T > &arg) const |
| const Parallel::Communicator & | comm () const |
| processor_id_type | n_processors () const |
| processor_id_type | processor_id () const |
Static Public Member Functions | |
| static UniquePtr< SparseMatrix < T > > | build (const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package()) |
| static std::string | get_info () |
| static void | print_info (std::ostream &out=libMesh::out) |
| static unsigned int | n_objects () |
| static void | enable_print_counter_info () |
| static void | disable_print_counter_info () |
Protected Types | |
| typedef std::map< std::string, std::pair< unsigned int, unsigned int > > | Counts |
Protected Member Functions | |
| virtual void | _get_submatrix (SparseMatrix< T > &, const std::vector< numeric_index_type > &, const std::vector< numeric_index_type > &, const bool) const |
| void | increment_constructor_count (const std::string &name) |
| void | increment_destructor_count (const std::string &name) |
Protected Attributes | |
| DofMap const * | _dof_map |
| bool | _is_initialized |
| const Parallel::Communicator & | _communicator |
Static Protected Attributes | |
| static Counts | _counts |
| static Threads::atomic < unsigned int > | _n_objects |
| static Threads::spin_mutex | _mutex |
| static bool | _enable_print_counter = true |
Private Member Functions | |
| numeric_index_type | pos (const numeric_index_type i, const numeric_index_type j) const |
Private Attributes | |
| QMatrix | _QMat |
| std::vector< numeric_index_type > | _csr |
| std::vector< std::vector < numeric_index_type > ::const_iterator > | _row_start |
| bool | _closed |
Friends | |
| class | LaspackVector< T > |
| class | LaspackLinearSolver< T > |
| std::ostream & | operator<< (std::ostream &os, const SparseMatrix< T > &m) |
The LaspackMatrix class wraps a QMatrix object from the Laspack library. Currently Laspack only supports real datatypes, so this class is a full specialization of SparseMatrix<T> with T = Real.
Definition at line 59 of file laspack_matrix.h.
typedef std::map<std::string, std::pair<unsigned int, unsigned int> > libMesh::ReferenceCounter::Counts [protected, inherited] |
Data structure to log the information. The log is identified by the class name.
Definition at line 113 of file reference_counter.h.
| libMesh::LaspackMatrix< T >::LaspackMatrix | ( | const Parallel::Communicator &comm | LIBMESH_CAN_DEFAULT_TO_COMMWORLD | ) |
Constructor; initializes the matrix to be empty, without any structure, i.e. the matrix is not usable at all. This constructor is therefore only useful for matrices which are members of a class. All other matrices should be created at a point in the data flow where all necessary information is available.
You have to initialize the matrix before usage with init(...).
Definition at line 236 of file laspack_matrix.C.
| libMesh::LaspackMatrix< T >::~LaspackMatrix | ( | ) |
Destructor. Free all memory, but do not release the memory of the sparsity structure.
Definition at line 245 of file laspack_matrix.C.
{
this->clear ();
}
| virtual void libMesh::SparseMatrix< T >::_get_submatrix | ( | SparseMatrix< T > & | , |
| const std::vector< numeric_index_type > & | , | ||
| const std::vector< numeric_index_type > & | , | ||
| const bool | |||
| ) | const [inline, protected, virtual, inherited] |
Protected implementation of the create_submatrix and reinit_submatrix routines. Note that this function must be redefined in derived classes for it to work properly!
Reimplemented in libMesh::PetscMatrix< T >.
Definition at line 423 of file sparse_matrix.h.
Referenced by libMesh::SparseMatrix< Number >::create_submatrix(), and libMesh::SparseMatrix< Number >::reinit_submatrix().
{
libmesh_not_implemented();
}
| void libMesh::LaspackMatrix< T >::add | ( | const numeric_index_type | i, |
| const numeric_index_type | j, | ||
| const T | value | ||
| ) | [virtual] |
Add value to the element (i,j). Throws an error if the entry does not exist. Still, it is allowed to store zero values in non-existent fields.
Implements libMesh::SparseMatrix< T >.
Definition at line 354 of file laspack_matrix.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_less (i, this->m());
libmesh_assert_less (j, this->n());
const numeric_index_type position = this->pos(i,j);
// Sanity check
libmesh_assert_equal_to (*(_row_start[i]+position), j);
Q_AddVal (&_QMat, i+1, position, value);
}
| void libMesh::LaspackMatrix< T >::add | ( | const T | a, |
| SparseMatrix< T > & | X | ||
| ) | [virtual] |
Add a Sparse matrix X, scaled with a, to this, stores the result in this:
. LASPACK does not provide a true axpy for matrices, so a hand-coded version with hopefully acceptable performance is provided.
Implements libMesh::SparseMatrix< T >.
Definition at line 382 of file laspack_matrix.C.
References libMesh::initialized(), libMesh::libmesh_assert(), libMesh::SparseMatrix< T >::m(), and libMesh::SparseMatrix< T >::n().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (this->m(), X_in.m());
libmesh_assert_equal_to (this->n(), X_in.n());
LaspackMatrix<T>* X = cast_ptr<LaspackMatrix<T>*> (&X_in);
_LPNumber a = static_cast<_LPNumber> (a_in);
libmesh_assert(X);
// loops taken from LaspackMatrix<T>::zero ()
const numeric_index_type n_rows = this->m();
for (numeric_index_type row=0; row<n_rows; row++)
{
const std::vector<numeric_index_type>::const_iterator
r_start = _row_start[row];
const numeric_index_type len = (_row_start[row+1] - _row_start[row]);
// Make sure we agree on the row length
libmesh_assert_equal_to (len, Q_GetLen(&_QMat, row+1));
// compare matrix sparsity structures
libmesh_assert_equal_to (len, Q_GetLen(&(X->_QMat), row+1));
for (numeric_index_type l=0; l<len; l++)
{
const numeric_index_type j = *(r_start + l);
// Make sure the data structures are working
libmesh_assert_equal_to ((j+1), Q_GetPos (&_QMat, row+1, l));
const _LPNumber value = a * Q_GetEl(const_cast<QMatrix*>(&(X->_QMat)), row+1, j+1);
Q_AddVal (&_QMat, row+1, l, value);
}
}
}
| 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 | ||
| ) | [virtual, inherited] |
Add the full matrix dm to the Sparse matrix. This is useful for adding an element matrix at assembly time. The matrix is assumed blocked, and brow, bcol correspond to the *block* row, columm indices.
Reimplemented in libMesh::PetscMatrix< T >.
Definition at line 61 of file sparse_matrix.C.
References libMesh::DenseMatrixBase< T >::m(), and libMesh::DenseMatrixBase< T >::n().
{
libmesh_assert_equal_to (dm.m() / brows.size(), dm.n() / bcols.size());
const numeric_index_type blocksize = cast_int<numeric_index_type>
(dm.m() / brows.size());
libmesh_assert_equal_to (dm.m()%blocksize, 0);
libmesh_assert_equal_to (dm.n()%blocksize, 0);
std::vector<numeric_index_type> rows, cols;
rows.reserve(blocksize*brows.size());
cols.reserve(blocksize*bcols.size());
for (unsigned int ib=0; ib<brows.size(); ib++)
{
numeric_index_type i=brows[ib]*blocksize;
for (unsigned int v=0; v<blocksize; v++)
rows.push_back(i++);
}
for (unsigned int jb=0; jb<bcols.size(); jb++)
{
numeric_index_type j=bcols[jb]*blocksize;
for (unsigned int v=0; v<blocksize; v++)
cols.push_back(j++);
}
this->add_matrix (dm, rows, cols);
}
| virtual void libMesh::SparseMatrix< T >::add_block_matrix | ( | const DenseMatrix< T > & | dm, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, virtual, inherited] |
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 258 of file sparse_matrix.h.
Referenced by libMesh::SparseMatrix< Number >::add_block_matrix().
{ this->add_block_matrix (dm, dof_indices, dof_indices); }
| void libMesh::LaspackMatrix< T >::add_matrix | ( | const DenseMatrix< T > & | dm, |
| const std::vector< numeric_index_type > & | rows, | ||
| const std::vector< numeric_index_type > & | cols | ||
| ) | [virtual] |
Add the full matrix to the Laspack matrix. This is useful for adding an element matrix at assembly time
Implements libMesh::SparseMatrix< T >.
Definition at line 200 of file laspack_matrix.C.
References libMesh::initialized(), libMesh::libmesh_assert(), libMesh::DenseMatrixBase< T >::m(), and libMesh::DenseMatrixBase< T >::n().
{
libmesh_assert (this->initialized());
unsigned int n_rows = cast_int<unsigned int>(rows.size());
unsigned int n_cols = cast_int<unsigned int>(cols.size());
libmesh_assert_equal_to (dm.m(), n_rows);
libmesh_assert_equal_to (dm.n(), n_cols);
for (unsigned int i=0; i<n_rows; i++)
for (unsigned int j=0; j<n_cols; j++)
this->add(rows[i],cols[j],dm(i,j));
}
| void libMesh::LaspackMatrix< T >::add_matrix | ( | const DenseMatrix< T > & | dm, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [virtual] |
Same, but assumes the row and column maps are the same. Thus the matrix dm must be square.
Implements libMesh::SparseMatrix< T >.
Definition at line 373 of file laspack_matrix.C.
{
this->add_matrix (dm, dof_indices, dof_indices);
}
| void libMesh::SparseMatrix< T >::attach_dof_map | ( | const DofMap & | dof_map | ) | [inline, inherited] |
Get a pointer to the DofMap to use.
Definition at line 112 of file sparse_matrix.h.
Referenced by libMesh::DofMap::attach_matrix().
{ _dof_map = &dof_map; }
| UniquePtr< SparseMatrix< T > > libMesh::SparseMatrix< T >::build | ( | const Parallel::Communicator & | comm, |
| const SolverPackage | solver_package = libMesh::default_solver_package() |
||
| ) | [static, inherited] |
Builds a SparseMatrix<T> using the linear solver package specified by solver_package
Definition at line 135 of file sparse_matrix.C.
References libMesh::EIGEN_SOLVERS, libMesh::LASPACK_SOLVERS, libMesh::PETSC_SOLVERS, and libMesh::TRILINOS_SOLVERS.
{
// Build the appropriate vector
switch (solver_package)
{
#ifdef LIBMESH_HAVE_LASPACK
case LASPACK_SOLVERS:
return UniquePtr<SparseMatrix<T> >(new LaspackMatrix<T>(comm));
#endif
#ifdef LIBMESH_HAVE_PETSC
case PETSC_SOLVERS:
return UniquePtr<SparseMatrix<T> >(new PetscMatrix<T>(comm));
#endif
#ifdef LIBMESH_HAVE_TRILINOS
case TRILINOS_SOLVERS:
return UniquePtr<SparseMatrix<T> >(new EpetraMatrix<T>(comm));
#endif
#ifdef LIBMESH_HAVE_EIGEN
case EIGEN_SOLVERS:
return UniquePtr<SparseMatrix<T> >(new EigenSparseMatrix<T>(comm));
#endif
default:
libmesh_error_msg("ERROR: Unrecognized solver package: " << solver_package);
}
libmesh_error_msg("We'll never get here!");
return UniquePtr<SparseMatrix<T> >();
}
| void libMesh::LaspackMatrix< T >::clear | ( | ) | [virtual] |
Release all memory and return to a state just like after having called the default constructor.
Implements libMesh::SparseMatrix< T >.
Definition at line 253 of file laspack_matrix.C.
References libMesh::libMeshPrivateData::_is_initialized, and libMesh::initialized().
{
if (this->initialized())
{
Q_Destr(&_QMat);
}
_csr.clear();
_row_start.clear();
_closed = false;
this->_is_initialized = false;
}
| void libMesh::LaspackMatrix< T >::close | ( | ) | const [inline, virtual] |
Close the matrix. Dummy routine. After calling this method closed() is true and the matrix can be used in computations.
Implements libMesh::SparseMatrix< T >.
Definition at line 142 of file laspack_matrix.h.
References libMesh::LaspackMatrix< T >::_closed.
Referenced by libMesh::LaspackLinearSolver< T >::adjoint_solve(), and libMesh::LaspackLinearSolver< T >::solve().
{ const_cast<LaspackMatrix<T>*>(this)->_closed = true; }
| bool libMesh::LaspackMatrix< T >::closed | ( | ) | const [inline, virtual] |
see if Laspack matrix has been closed and fully assembled yet
Implements libMesh::SparseMatrix< T >.
Definition at line 256 of file laspack_matrix.h.
References libMesh::LaspackMatrix< T >::_closed.
{ return _closed; }
| const Parallel::Communicator& libMesh::ParallelObject::comm | ( | ) | const [inline, inherited] |
Parallel::Communicator object used by this mesh. Definition at line 86 of file parallel_object.h.
References libMesh::ParallelObject::_communicator.
Referenced by libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_petsc_snes_residual(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::MetisPartitioner::_do_partition(), libMesh::ParmetisPartitioner::_do_repartition(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult_add(), libMesh::EquationSystems::_read_impl(), libMesh::MeshRefinement::_refine_elements(), libMesh::ImplicitSystem::add_matrix(), libMesh::System::add_vector(), libMesh::UnstructuredMesh::all_second_order(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::FEMSystem::assemble_qoi(), libMesh::MeshCommunication::assign_global_indices(), libMesh::ParmetisPartitioner::assign_partitioning(), libMesh::DofMap::attach_matrix(), libMesh::MeshTools::bounding_box(), libMesh::MeshBase::cache_elem_dims(), libMesh::System::calculate_norm(), libMesh::MeshRefinement::coarsen_elements(), 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::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), DMlibMeshFunction(), DMlibMeshSetSystem_libMesh(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::JumpErrorEstimator::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_nelem_target(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::EigenSystem::init_data(), libMesh::EigenSystem::init_matrices(), libMesh::ParmetisPartitioner::initialize(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::ParallelMesh::libmesh_assert_valid_parallel_flags(), libMesh::MeshTools::libmesh_assert_valid_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::FEMSystem::mesh_position_set(), libMesh::MeshSerializer::MeshSerializer(), libMesh::ParallelMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::MeshTools::n_p_levels(), libMesh::ParallelMesh::parallel_max_elem_id(), libMesh::ParallelMesh::parallel_max_node_id(), libMesh::ParallelMesh::parallel_n_elem(), libMesh::ParallelMesh::parallel_n_nodes(), 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::System::project_vector(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::System::read_header(), libMesh::System::read_legacy_data(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs(), 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::MeshBase::recalculate_n_partitions(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::MeshRefinement::refine_elements(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), libMesh::Parallel::sync_element_data_by_parent_id(), libMesh::Parallel::sync_node_data_by_element_id(), libMesh::MeshRefinement::test_level_one(), libMesh::MeshRefinement::test_unflagged(), libMesh::MeshTools::total_weight(), libMesh::NameBasedIO::write(), libMesh::CheckpointIO::write(), libMesh::XdrIO::write(), libMesh::LegacyXdrIO::write_mesh(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), and libMesh::DivaIO::write_stream().
{ return _communicator; }
| 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 [inline, virtual, inherited] |
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 PetscMatrix type.
Definition at line 366 of file sparse_matrix.h.
Referenced by libMesh::CondensedEigenSystem::solve().
{
this->_get_submatrix(submatrix,
rows,
cols,
false); // false means DO NOT REUSE submatrix
}
| void libMesh::ReferenceCounter::disable_print_counter_info | ( | ) | [static, inherited] |
Definition at line 106 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
Referenced by libMesh::LibMeshInit::LibMeshInit().
{
_enable_print_counter = false;
return;
}
| void libMesh::ReferenceCounter::enable_print_counter_info | ( | ) | [static, inherited] |
Methods to enable/disable the reference counter output from print_info()
Definition at line 100 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
{
_enable_print_counter = true;
return;
}
| void libMesh::LaspackMatrix< T >::get_diagonal | ( | NumericVector< T > & | dest | ) | const [virtual] |
Copies the diagonal part of the matrix into dest.
Implements libMesh::SparseMatrix< T >.
Definition at line 220 of file laspack_matrix.C.
{
libmesh_not_implemented();
}
| std::string libMesh::ReferenceCounter::get_info | ( | ) | [static, inherited] |
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().
{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
std::ostringstream oss;
oss << '\n'
<< " ---------------------------------------------------------------------------- \n"
<< "| Reference count information |\n"
<< " ---------------------------------------------------------------------------- \n";
for (Counts::iterator it = _counts.begin();
it != _counts.end(); ++it)
{
const std::string name(it->first);
const unsigned int creations = it->second.first;
const unsigned int destructions = it->second.second;
oss << "| " << name << " reference count information:\n"
<< "| Creations: " << creations << '\n'
<< "| Destructions: " << destructions << '\n';
}
oss << " ---------------------------------------------------------------------------- \n";
return oss.str();
#else
return "";
#endif
}
| void libMesh::LaspackMatrix< T >::get_transpose | ( | SparseMatrix< T > & | dest | ) | const [virtual] |
Copies the transpose of the matrix into dest, which may be *this.
Implements libMesh::SparseMatrix< T >.
Definition at line 228 of file laspack_matrix.C.
{
libmesh_not_implemented();
}
| void libMesh::ReferenceCounter::increment_constructor_count | ( | const std::string & | name | ) | [inline, protected, inherited] |
Increments the construction counter. Should be called in the constructor of any derived class that will be reference counted.
Definition at line 163 of file reference_counter.h.
References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.first++;
}
| void libMesh::ReferenceCounter::increment_destructor_count | ( | const std::string & | name | ) | [inline, protected, inherited] |
Increments the destruction counter. Should be called in the destructor of any derived class that will be reference counted.
Definition at line 176 of file reference_counter.h.
References libMesh::ReferenceCounter::_counts, libMesh::Quality::name(), and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.second++;
}
| void libMesh::LaspackMatrix< T >::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 |
||
| ) | [virtual] |
Initialize a Laspack matrix that is of global dimension
with local dimensions
. nnz is the number of on-processor nonzeros per row (defaults to 30). noz is the number of on-processor nonzeros per row (defaults to 30). Optionally supports a block size, which indicates dense coupled blocks for systems with multiple variables all of the same type.
Implements libMesh::SparseMatrix< T >.
| void libMesh::LaspackMatrix< T >::init | ( | ) | [virtual] |
Initialize using sparsity structure computed by dof_map.
Implements libMesh::SparseMatrix< T >.
Definition at line 149 of file laspack_matrix.C.
References libMesh::libMeshPrivateData::_is_initialized, libMesh::initialized(), and libMesh::libmesh_assert().
{
// Ignore calls on initialized objects
if (this->initialized())
return;
// We need the DofMap for this!
libmesh_assert(this->_dof_map);
// Clear intialized matrices
if (this->initialized())
this->clear();
const numeric_index_type n_rows = this->_dof_map->n_dofs();
#ifndef NDEBUG
// The following variables are only used for assertions,
// so avoid declaring them when asserts are inactive.
const numeric_index_type n_cols = n_rows;
const numeric_index_type n_l = this->_dof_map->n_dofs_on_processor(0);
const numeric_index_type m_l = n_l;
#endif
// Laspack Matrices only work for uniprocessor cases
libmesh_assert_equal_to (n_rows, n_cols);
libmesh_assert_equal_to (m_l, n_rows);
libmesh_assert_equal_to (n_l, n_cols);
#ifndef NDEBUG
// The following variables are only used for assertions,
// so avoid declaring them when asserts are inactive.
const std::vector<numeric_index_type>& n_nz = this->_dof_map->get_n_nz();
const std::vector<numeric_index_type>& n_oz = this->_dof_map->get_n_oz();
#endif
// Make sure the sparsity pattern isn't empty
libmesh_assert_equal_to (n_nz.size(), n_l);
libmesh_assert_equal_to (n_oz.size(), n_l);
if (n_rows==0)
return;
Q_Constr(&_QMat, const_cast<char*>("Mat"), n_rows, _LPFalse, Rowws, Normal, _LPTrue);
this->_is_initialized = true;
libmesh_assert_equal_to (n_rows, this->m());
}
| virtual bool libMesh::SparseMatrix< T >::initialized | ( | ) | const [inline, virtual, inherited] |
Definition at line 107 of file sparse_matrix.h.
Referenced by libMesh::PetscMatrix< T >::_get_submatrix(), libMesh::ImplicitSystem::assemble(), and libMesh::ImplicitSystem::init_matrices().
{ return _is_initialized; }
| Real libMesh::LaspackMatrix< T >::l1_norm | ( | ) | const [inline, virtual] |
Return the l1-norm of the matrix, that is
, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e.
.
Implements libMesh::SparseMatrix< T >.
Definition at line 237 of file laspack_matrix.h.
{ libmesh_not_implemented(); return 0.; }
| Real libMesh::LaspackMatrix< T >::linfty_norm | ( | ) | const [inline, virtual] |
Return the linfty-norm of the matrix, that is
, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e.
.
Implements libMesh::SparseMatrix< T >.
Definition at line 250 of file laspack_matrix.h.
{ libmesh_not_implemented(); return 0.; }
| numeric_index_type libMesh::LaspackMatrix< T >::m | ( | ) | const [virtual] |
m, the row-dimension of the matrix where the marix is
. Implements libMesh::SparseMatrix< T >.
Definition at line 298 of file laspack_matrix.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
return static_cast<numeric_index_type>(Q_GetDim(const_cast<QMatrix*>(&_QMat)));
}
| numeric_index_type libMesh::LaspackMatrix< T >::n | ( | ) | const [virtual] |
n, the column-dimension of the matrix where the marix is
. Implements libMesh::SparseMatrix< T >.
Definition at line 308 of file laspack_matrix.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
return static_cast<numeric_index_type>(Q_GetDim(const_cast<QMatrix*>(&_QMat)));
}
| static unsigned int libMesh::ReferenceCounter::n_objects | ( | ) | [inline, static, inherited] |
Prints the number of outstanding (created, but not yet destroyed) objects.
Definition at line 79 of file reference_counter.h.
References libMesh::ReferenceCounter::_n_objects.
Referenced by libMesh::LibMeshInit::~LibMeshInit().
{ return _n_objects; }
| processor_id_type libMesh::ParallelObject::n_processors | ( | ) | const [inline, inherited] |
Definition at line 92 of file parallel_object.h.
References libMesh::ParallelObject::_communicator, and libMesh::Parallel::Communicator::size().
Referenced by libMesh::ParmetisPartitioner::_do_repartition(), libMesh::ParallelMesh::add_elem(), libMesh::ParallelMesh::add_node(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::FEMSystem::assembly(), libMesh::ParmetisPartitioner::assign_partitioning(), libMesh::ParallelMesh::assign_unique_ids(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::ParallelMesh::clear(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::EnsightIO::EnsightIO(), libMesh::MeshBase::get_info(), libMesh::EquationSystems::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::ParmetisPartitioner::initialize(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::DofMap::local_variable_indices(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::Partitioner::partition(), libMesh::MeshBase::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::PetscLinearSolver< T >::PetscLinearSolver(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshTools::processor_bounding_box(), libMesh::System::project_vector(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::XdrIO::read(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::Partitioner::repartition(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::BoundaryInfo::sync(), libMesh::ParallelMesh::update_parallel_id_counts(), libMesh::CheckpointIO::write(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().
{ return cast_int<processor_id_type>(_communicator.size()); }
| bool libMesh::LaspackMatrix< T >::need_full_sparsity_pattern | ( | ) | const [inline, virtual] |
The LaspackMatrix needs the full sparsity pattern.
Reimplemented from libMesh::SparseMatrix< T >.
Definition at line 91 of file laspack_matrix.h.
{ return true; }
| T libMesh::LaspackMatrix< T >::operator() | ( | const numeric_index_type | i, |
| const numeric_index_type | j | ||
| ) | const [virtual] |
Return the value of the entry (i,j). This may be an expensive operation, and you should always be careful where you call this function.
Implements libMesh::SparseMatrix< T >.
Definition at line 427 of file laspack_matrix.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_less (i, this->m());
libmesh_assert_less (j, this->n());
return Q_GetEl (const_cast<QMatrix*>(&_QMat), i+1, j+1);
}
| numeric_index_type libMesh::LaspackMatrix< T >::pos | ( | const numeric_index_type | i, |
| const numeric_index_type | j | ||
| ) | const [private] |
element. Definition at line 440 of file laspack_matrix.C.
References libMesh::libmesh_assert().
{
libmesh_assert_less (i, this->m());
libmesh_assert_less (j, this->n());
libmesh_assert_less (i+1, _row_start.size());
libmesh_assert (_row_start.back() == _csr.end());
// note this requires the _csr to be
std::pair<std::vector<numeric_index_type>::const_iterator,
std::vector<numeric_index_type>::const_iterator> p =
std::equal_range (_row_start[i],
_row_start[i+1],
j);
// Make sure the row contains the element j
libmesh_assert (p.first != p.second);
// Make sure the values match
libmesh_assert (*p.first == j);
// Return the position in the compressed row
return std::distance (_row_start[i], p.first);
}
| void libMesh::SparseMatrix< Complex >::print | ( | std::ostream & | os, |
| const bool | sparse | ||
| ) | const [inherited] |
Definition at line 101 of file sparse_matrix.C.
{
// std::complex<>::operator<<() is defined, but use this form
if(sparse)
{
libmesh_not_implemented();
}
os << "Real part:" << std::endl;
for (numeric_index_type i=0; i<this->m(); i++)
{
for (numeric_index_type j=0; j<this->n(); j++)
os << std::setw(8) << (*this)(i,j).real() << " ";
os << std::endl;
}
os << std::endl << "Imaginary part:" << std::endl;
for (numeric_index_type i=0; i<this->m(); i++)
{
for (numeric_index_type j=0; j<this->n(); j++)
os << std::setw(8) << (*this)(i,j).imag() << " ";
os << std::endl;
}
}
| 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 205 of file sparse_matrix.C.
References libMesh::initialized(), libMesh::libmesh_assert(), libMesh::n_processors(), and libMesh::processor_id().
Referenced by libMesh::EigenSparseMatrix< T >::print_personal(), and libMesh::LaspackMatrix< T >::print_personal().
{
parallel_object_only();
libmesh_assert (this->initialized());
if(!this->_dof_map)
libmesh_error_msg("Error! Trying to print a matrix with no dof_map set!");
// We'll print the matrix from processor 0 to make sure
// it's serialized properly
if (this->processor_id() == 0)
{
libmesh_assert_equal_to (this->_dof_map->first_dof(), 0);
for (numeric_index_type i=this->_dof_map->first_dof();
i!=this->_dof_map->end_dof(); ++i)
{
if(sparse)
{
for (numeric_index_type j=0; j<this->n(); j++)
{
T c = (*this)(i,j);
if (c != static_cast<T>(0.0))
{
os << i << " " << j << " " << c << std::endl;
}
}
}
else
{
for (numeric_index_type j=0; j<this->n(); j++)
os << (*this)(i,j) << " ";
os << std::endl;
}
}
std::vector<numeric_index_type> ibuf, jbuf;
std::vector<T> cbuf;
numeric_index_type currenti = this->_dof_map->end_dof();
for (processor_id_type p=1; p < this->n_processors(); ++p)
{
this->comm().receive(p, ibuf);
this->comm().receive(p, jbuf);
this->comm().receive(p, cbuf);
libmesh_assert_equal_to (ibuf.size(), jbuf.size());
libmesh_assert_equal_to (ibuf.size(), cbuf.size());
if (ibuf.empty())
continue;
libmesh_assert_greater_equal (ibuf.front(), currenti);
libmesh_assert_greater_equal (ibuf.back(), ibuf.front());
std::size_t currentb = 0;
for (;currenti <= ibuf.back(); ++currenti)
{
if(sparse)
{
for (numeric_index_type j=0; j<this->n(); j++)
{
if (currentb < ibuf.size() &&
ibuf[currentb] == currenti &&
jbuf[currentb] == j)
{
os << currenti << " " << j << " " << cbuf[currentb] << std::endl;
currentb++;
}
}
}
else
{
for (numeric_index_type j=0; j<this->n(); j++)
{
if (currentb < ibuf.size() &&
ibuf[currentb] == currenti &&
jbuf[currentb] == j)
{
os << cbuf[currentb] << " ";
currentb++;
}
else
os << static_cast<T>(0.0) << " ";
}
os << std::endl;
}
}
}
if(!sparse)
{
for (; currenti != this->m(); ++currenti)
{
for (numeric_index_type j=0; j<this->n(); j++)
os << static_cast<T>(0.0) << " ";
os << std::endl;
}
}
}
else
{
std::vector<numeric_index_type> ibuf, jbuf;
std::vector<T> cbuf;
// We'll assume each processor has access to entire
// matrix rows, so (*this)(i,j) is valid if i is a local index.
for (numeric_index_type i=this->_dof_map->first_dof();
i!=this->_dof_map->end_dof(); ++i)
{
for (numeric_index_type j=0; j<this->n(); j++)
{
T c = (*this)(i,j);
if (c != static_cast<T>(0.0))
{
ibuf.push_back(i);
jbuf.push_back(j);
cbuf.push_back(c);
}
}
}
this->comm().send(0,ibuf);
this->comm().send(0,jbuf);
this->comm().send(0,cbuf);
}
}
| void libMesh::ReferenceCounter::print_info | ( | std::ostream & | out = libMesh::out | ) | [static, inherited] |
Prints the reference information, by default to libMesh::out.
Definition at line 88 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().
Referenced by libMesh::LibMeshInit::~LibMeshInit().
{
if( _enable_print_counter ) out_stream << ReferenceCounter::get_info();
}
| virtual void libMesh::SparseMatrix< T >::print_matlab | ( | const std::string & | = "" | ) | const [inline, virtual, inherited] |
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 356 of file sparse_matrix.h.
{
libmesh_not_implemented();
}
| void libMesh::LaspackMatrix< T >::print_personal | ( | std::ostream & | os = libMesh::out | ) | const [inline, virtual] |
Print the contents of the matrix, by default to libMesh::out. Currently identical to print().
Implements libMesh::SparseMatrix< T >.
Definition at line 262 of file laspack_matrix.h.
References libMesh::SparseMatrix< T >::print().
{ this->print(os); }
| processor_id_type libMesh::ParallelObject::processor_id | ( | ) | const [inline, inherited] |
Definition at line 98 of file parallel_object.h.
References libMesh::ParallelObject::_communicator, and libMesh::Parallel::Communicator::rank().
Referenced by libMesh::MetisPartitioner::_do_partition(), libMesh::EquationSystems::_read_impl(), libMesh::SerialMesh::active_local_elements_begin(), libMesh::ParallelMesh::active_local_elements_begin(), libMesh::SerialMesh::active_local_elements_end(), libMesh::ParallelMesh::active_local_elements_end(), libMesh::SerialMesh::active_local_subdomain_elements_begin(), libMesh::ParallelMesh::active_local_subdomain_elements_begin(), libMesh::SerialMesh::active_local_subdomain_elements_end(), libMesh::ParallelMesh::active_local_subdomain_elements_end(), libMesh::SerialMesh::active_not_local_elements_begin(), libMesh::ParallelMesh::active_not_local_elements_begin(), libMesh::SerialMesh::active_not_local_elements_end(), libMesh::ParallelMesh::active_not_local_elements_end(), libMesh::ParallelMesh::add_elem(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::ParallelMesh::add_node(), libMesh::UnstructuredMesh::all_second_order(), libMesh::FEMSystem::assembly(), libMesh::ParmetisPartitioner::assign_partitioning(), libMesh::ParallelMesh::assign_unique_ids(), libMesh::EquationSystems::build_discontinuous_solution_vector(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::ParmetisPartitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::DofMap::build_sparsity(), libMesh::ParallelMesh::clear(), 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::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_Helper::create(), libMesh::ParallelMesh::delete_elem(), libMesh::ParallelMesh::delete_node(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::DofMap::end_dof(), libMesh::DofMap::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::SerialMesh::facelocal_elements_begin(), libMesh::ParallelMesh::facelocal_elements_begin(), libMesh::SerialMesh::facelocal_elements_end(), libMesh::ParallelMesh::facelocal_elements_end(), libMesh::MeshFunction::find_element(), libMesh::UnstructuredMesh::find_neighbors(), libMesh::DofMap::first_dof(), libMesh::DofMap::first_old_dof(), 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::Nemesis_IO_Helper::get_init_global(), libMesh::Nemesis_IO_Helper::get_init_info(), libMesh::Nemesis_IO_Helper::get_loadbal_param(), 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::SystemSubsetBySubdomain::init(), libMesh::ParmetisPartitioner::initialize(), 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::ParallelMesh::insert_elem(), libMesh::SparsityPattern::Build::join(), libMesh::DofMap::last_dof(), libMesh::MeshTools::libmesh_assert_valid_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_procids< Node >(), libMesh::SerialMesh::local_elements_begin(), libMesh::ParallelMesh::local_elements_begin(), libMesh::SerialMesh::local_elements_end(), libMesh::ParallelMesh::local_elements_end(), libMesh::SerialMesh::local_level_elements_begin(), libMesh::ParallelMesh::local_level_elements_begin(), libMesh::SerialMesh::local_level_elements_end(), libMesh::ParallelMesh::local_level_elements_end(), libMesh::SerialMesh::local_nodes_begin(), libMesh::ParallelMesh::local_nodes_begin(), libMesh::SerialMesh::local_nodes_end(), libMesh::ParallelMesh::local_nodes_end(), libMesh::SerialMesh::local_not_level_elements_begin(), libMesh::ParallelMesh::local_not_level_elements_begin(), libMesh::SerialMesh::local_not_level_elements_end(), libMesh::ParallelMesh::local_not_level_elements_end(), libMesh::DofMap::local_variable_indices(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshBase::n_active_local_elem(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::DofMap::n_local_dofs(), libMesh::System::n_local_dofs(), libMesh::MeshBase::n_local_elem(), libMesh::MeshBase::n_local_nodes(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::SerialMesh::not_local_elements_begin(), libMesh::ParallelMesh::not_local_elements_begin(), libMesh::SerialMesh::not_local_elements_end(), libMesh::ParallelMesh::not_local_elements_end(), libMesh::WeightedPatchRecoveryErrorEstimator::EstimateError::operator()(), libMesh::SparsityPattern::Build::operator()(), libMesh::PatchRecoveryErrorEstimator::EstimateError::operator()(), libMesh::ParallelMesh::ParallelMesh(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::System::project_vector(), 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::CheckpointIO::read(), libMesh::XdrIO::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::System::read_header(), libMesh::System::read_legacy_data(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs(), 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::MeshData::read_xdr(), libMesh::SerialMesh::semilocal_elements_begin(), libMesh::ParallelMesh::semilocal_elements_begin(), libMesh::SerialMesh::semilocal_elements_end(), libMesh::ParallelMesh::semilocal_elements_end(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::BoundaryInfo::sync(), libMesh::MeshTools::total_weight(), libMesh::ParallelMesh::update_parallel_id_counts(), libMesh::MeshTools::weight(), libMesh::NameBasedIO::write(), libMesh::ExodusII_IO::write(), libMesh::CheckpointIO::write(), libMesh::XdrIO::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_elements(), 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::ExodusII_IO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data_discontinuous(), libMesh::ExodusII_IO_Helper::write_nodal_values(), libMesh::ExodusII_IO_Helper::write_nodesets(), libMesh::Nemesis_IO_Helper::write_nodesets(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bc_names(), libMesh::XdrIO::write_serialized_bcs(), 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_sidesets(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), and libMesh::ExodusII_IO_Helper::write_timestep().
{ return cast_int<processor_id_type>(_communicator.rank()); }
| 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 [inline, virtual, inherited] |
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 382 of file sparse_matrix.h.
{
this->_get_submatrix(submatrix,
rows,
cols,
true); // true means REUSE submatrix
}
| numeric_index_type libMesh::LaspackMatrix< T >::row_start | ( | ) | const [virtual] |
return row_start, the index of the first matrix row stored on this processor
Implements libMesh::SparseMatrix< T >.
Definition at line 318 of file laspack_matrix.C.
{
return 0;
}
| numeric_index_type libMesh::LaspackMatrix< T >::row_stop | ( | ) | const [virtual] |
return row_stop, the index of the last matrix row (+1) stored on this processor
Implements libMesh::SparseMatrix< T >.
Definition at line 326 of file laspack_matrix.C.
{
return this->m();
}
| void libMesh::LaspackMatrix< T >::set | ( | const numeric_index_type | i, |
| const numeric_index_type | j, | ||
| const T | value | ||
| ) | [virtual] |
Set the element (i,j) to value. Throws an error if the entry does not exist. Still, it is allowed to store zero values in non-existent fields.
Implements libMesh::SparseMatrix< T >.
Definition at line 334 of file laspack_matrix.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_less (i, this->m());
libmesh_assert_less (j, this->n());
const numeric_index_type position = this->pos(i,j);
// Sanity check
libmesh_assert_equal_to (*(_row_start[i]+position), j);
libmesh_assert_equal_to ((j+1), Q_GetPos (&_QMat, i+1, position));
Q_SetEntry (&_QMat, i+1, position, j+1, value);
}
| void libMesh::LaspackMatrix< T >::update_sparsity_pattern | ( | const SparsityPattern::Graph & | sparsity_pattern | ) | [virtual] |
Updates the matrix sparsity pattern. This will tell the underlying matrix storage scheme how to map the
elements.
Reimplemented from libMesh::SparseMatrix< T >.
Definition at line 39 of file laspack_matrix.C.
References libMesh::TriangleWrapper::init(), libMesh::initialized(), and libMesh::libmesh_assert().
{
// clear data, start over
this->clear ();
// big trouble if this fails!
libmesh_assert(this->_dof_map);
const numeric_index_type n_rows = sparsity_pattern.size();
// Initialize the _row_start data structure,
// allocate storage for the _csr array
{
std::size_t size = 0;
for (numeric_index_type row=0; row<n_rows; row++)
size += sparsity_pattern[row].size();
_csr.resize (size);
_row_start.reserve(n_rows + 1);
}
// Initize the _csr data structure.
{
std::vector<numeric_index_type>::iterator position = _csr.begin();
_row_start.push_back (position);
for (numeric_index_type row=0; row<n_rows; row++)
{
// insert the row indices
for (SparsityPattern::Row::const_iterator col = sparsity_pattern[row].begin();
col != sparsity_pattern[row].end(); ++col)
{
libmesh_assert (position != _csr.end());
*position = *col;
++position;
}
_row_start.push_back (position);
}
}
// Initialize the matrix
libmesh_assert (!this->initialized());
this->init ();
libmesh_assert (this->initialized());
//libMesh::out << "n_rows=" << n_rows << std::endl;
//libMesh::out << "m()=" << m() << std::endl;
libmesh_assert_equal_to (n_rows, this->m());
// Tell the matrix about its structure. Initialize it
// to zero.
for (numeric_index_type i=0; i<n_rows; i++)
{
const std::vector<numeric_index_type>::const_iterator
rs = _row_start[i];
const numeric_index_type length = _row_start[i+1] - rs;
Q_SetLen (&_QMat, i+1, length);
for (numeric_index_type l=0; l<length; l++)
{
const numeric_index_type j = *(rs+l);
// sanity check
//libMesh::out << "m()=" << m() << std::endl;
//libMesh::out << "(i,j,l) = (" << i
// << "," << j
// << "," << l
// << ")" << std::endl;
//libMesh::out << "pos(i,j)=" << pos(i,j)
// << std::endl;
libmesh_assert_equal_to (this->pos(i,j), l);
Q_SetEntry (&_QMat, i+1, l, j+1, 0.);
}
}
// That's it!
//libmesh_here();
}
| void libMesh::SparseMatrix< T >::vector_mult | ( | NumericVector< T > & | dest, |
| const NumericVector< T > & | arg | ||
| ) | const [inherited] |
Multiplies the matrix with arg and stores the result in dest.
Definition at line 175 of file sparse_matrix.C.
References libMesh::NumericVector< T >::zero().
{
dest.zero();
this->vector_mult_add(dest,arg);
}
| void libMesh::SparseMatrix< T >::vector_mult_add | ( | NumericVector< T > & | dest, |
| const NumericVector< T > & | arg | ||
| ) | const [inherited] |
Multiplies the matrix with arg and adds the result to dest.
Definition at line 185 of file sparse_matrix.C.
References libMesh::NumericVector< T >::add_vector().
Referenced by libMesh::ImplicitSystem::weighted_sensitivity_adjoint_solve().
{
/* This functionality is actually implemented in the \p
NumericVector class. */
dest.add_vector(arg,*this);
}
| void libMesh::LaspackMatrix< T >::zero | ( | ) | [virtual] |
Set all entries to 0.
Implements libMesh::SparseMatrix< T >.
Definition at line 269 of file laspack_matrix.C.
{
const numeric_index_type n_rows = this->m();
for (numeric_index_type row=0; row<n_rows; row++)
{
const std::vector<numeric_index_type>::const_iterator
r_start = _row_start[row];
const numeric_index_type len = (_row_start[row+1] - _row_start[row]);
// Make sure we agree on the row length
libmesh_assert_equal_to (len, Q_GetLen(&_QMat, row+1));
for (numeric_index_type l=0; l<len; l++)
{
const numeric_index_type j = *(r_start + l);
// Make sure the data structures are working
libmesh_assert_equal_to ((j+1), Q_GetPos (&_QMat, row+1, l));
Q_SetEntry (&_QMat, row+1, l, j+1, 0.);
}
}
}
| void libMesh::SparseMatrix< T >::zero_rows | ( | std::vector< numeric_index_type > & | rows, |
| T | diag_value = 0.0 |
||
| ) | [virtual, inherited] |
Set all row entries to 0 then puts diag_value in the diagonal entry
Reimplemented in libMesh::PetscMatrix< T >.
Definition at line 196 of file sparse_matrix.C.
{
/* This functionality isn't implemented or stubbed in every subclass yet */
libmesh_not_implemented();
}
friend class LaspackLinearSolver< T > [friend] |
Definition at line 309 of file laspack_matrix.h.
friend class LaspackVector< T > [friend] |
Make other Laspack datatypes friends
Definition at line 308 of file laspack_matrix.h.
| std::ostream& operator<< | ( | std::ostream & | os, |
| const SparseMatrix< T > & | m | ||
| ) | [friend, inherited] |
Same as the print method above, but allows you to print to a stream in the standard syntax.
template <typename u>=""> friend std::ostream& operator << (std::ostream& os, const SparseMatrix<U>& m);
Obscure C++ note 1: the above syntax, which does not require any prior declaration of operator<<, declares *any* instantiation of SparseMatrix<X> is friend to *any* instantiation of operator<<(ostream&, SparseMatrix<Y>&). It would not happen in practice, but in principle it means that SparseMatrix<Complex> would be friend to operator<<(ostream&, SparseMatrix<Real>).
Obscure C++ note 2: The form below, which requires a previous declaration of the operator<<(stream&, SparseMatrix<T>&) function (see top of this file), means that any instantiation of SparseMatrix<T> is friend to the specialization operator<<(ostream&, SparseMatrix<T>&), but e.g. SparseMatrix<U> is *not* friend to the same function. So this is slightly different to the form above...
This method seems to be the "preferred" technique, see http://www.parashift.com/c++-faq-lite/template-friends.html
bool libMesh::LaspackMatrix< T >::_closed [private] |
Flag indicating if the matrix has been closed yet.
Definition at line 303 of file laspack_matrix.h.
Referenced by libMesh::LaspackMatrix< T >::close(), and libMesh::LaspackMatrix< T >::closed().
const Parallel::Communicator& libMesh::ParallelObject::_communicator [protected, inherited] |
Definition at line 104 of file parallel_object.h.
Referenced by libMesh::EquationSystems::build_solution_vector(), libMesh::ParallelObject::comm(), libMesh::EquationSystems::get_solution(), libMesh::ParallelObject::n_processors(), libMesh::ParallelObject::operator=(), and libMesh::ParallelObject::processor_id().
ReferenceCounter::Counts libMesh::ReferenceCounter::_counts [static, protected, inherited] |
Actually holds the data.
Definition at line 118 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::get_info(), libMesh::ReferenceCounter::increment_constructor_count(), and libMesh::ReferenceCounter::increment_destructor_count().
std::vector<numeric_index_type> libMesh::LaspackMatrix< T >::_csr [private] |
The compressed row indices.
Definition at line 292 of file laspack_matrix.h.
DofMap const* libMesh::SparseMatrix< T >::_dof_map [protected, inherited] |
The DofMap object associated with this object.
Definition at line 434 of file sparse_matrix.h.
Referenced by libMesh::SparseMatrix< Number >::attach_dof_map().
bool libMesh::ReferenceCounter::_enable_print_counter = true [static, protected, inherited] |
Flag to control whether reference count information is printed when print_info is called.
Definition at line 137 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().
bool libMesh::SparseMatrix< T >::_is_initialized [protected, inherited] |
Flag indicating whether or not the matrix has been initialized.
Definition at line 440 of file sparse_matrix.h.
Referenced by libMesh::PetscMatrix< T >::_get_submatrix(), libMesh::PetscMatrix< T >::get_transpose(), and libMesh::SparseMatrix< Number >::initialized().
Threads::spin_mutex libMesh::ReferenceCounter::_mutex [static, protected, inherited] |
Mutual exclusion object to enable thread-safe reference counting.
Definition at line 131 of file reference_counter.h.
Threads::atomic< unsigned int > libMesh::ReferenceCounter::_n_objects [static, protected, inherited] |
The number of objects. Print the reference count information when the number returns to 0.
Definition at line 126 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().
QMatrix libMesh::LaspackMatrix< T >::_QMat [private] |
The Laspack sparse matrix pointer.
Definition at line 287 of file laspack_matrix.h.
Referenced by libMesh::LaspackLinearSolver< T >::adjoint_solve(), and libMesh::LaspackLinearSolver< T >::solve().
std::vector<std::vector<numeric_index_type>::const_iterator> libMesh::LaspackMatrix< T >::_row_start [private] |
The start of each row in the compressed row index data structure.
Definition at line 298 of file laspack_matrix.h.