$extrastylesheet
#include <distributed_vector.h>

Public Member Functions | |
| DistributedVector (const Parallel::Communicator &comm, const ParallelType=AUTOMATIC) | |
| DistributedVector (const Parallel::Communicator &comm, const numeric_index_type n, const ParallelType ptype=AUTOMATIC) | |
| DistributedVector (const Parallel::Communicator &comm, const numeric_index_type n, const numeric_index_type n_local, const ParallelType ptype=AUTOMATIC) | |
| DistributedVector (const Parallel::Communicator &comm, const numeric_index_type N, const numeric_index_type n_local, const std::vector< numeric_index_type > &ghost, const ParallelType ptype=AUTOMATIC) | |
| ~DistributedVector () | |
| void | close () |
| void | clear () |
| void | zero () |
| virtual UniquePtr < NumericVector< T > > | zero_clone () const |
| UniquePtr< NumericVector< T > > | clone () const |
| void | init (const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType ptype=AUTOMATIC) |
| void | init (const numeric_index_type N, const bool fast=false, const ParallelType ptype=AUTOMATIC) |
| virtual void | init (const numeric_index_type, const numeric_index_type, const std::vector< numeric_index_type > &, const bool=false, const ParallelType=AUTOMATIC) |
| virtual void | init (const NumericVector< T > &other, const bool fast=false) |
| NumericVector< T > & | operator= (const T s) |
| NumericVector< T > & | operator= (const NumericVector< T > &V) |
| DistributedVector< T > & | operator= (const DistributedVector< T > &V) |
| NumericVector< T > & | operator= (const std::vector< T > &v) |
| Real | min () const |
| Real | max () const |
| T | sum () const |
| Real | l1_norm () const |
| Real | l2_norm () const |
| Real | linfty_norm () const |
| numeric_index_type | size () const |
| numeric_index_type | local_size () const |
| numeric_index_type | first_local_index () const |
| numeric_index_type | last_local_index () const |
| T | operator() (const numeric_index_type i) const |
| NumericVector< T > & | operator+= (const NumericVector< T > &V) |
| NumericVector< T > & | operator-= (const NumericVector< T > &V) |
| virtual NumericVector< T > & | operator/= (NumericVector< T > &v) |
| virtual void | reciprocal () |
| virtual void | conjugate () |
| void | set (const numeric_index_type i, const T value) |
| void | add (const numeric_index_type i, const T value) |
| void | add (const T s) |
| void | add (const NumericVector< T > &V) |
| void | add (const T a, const NumericVector< T > &v) |
| void | add_vector (const NumericVector< T > &, const SparseMatrix< T > &) |
| void | add_vector_transpose (const NumericVector< T > &, const SparseMatrix< T > &) |
| void | scale (const T factor) |
| virtual void | abs () |
| virtual T | dot (const NumericVector< T > &V) const |
| void | localize (std::vector< T > &v_local) const |
| void | localize (NumericVector< T > &v_local) const |
| void | localize (NumericVector< T > &v_local, const std::vector< numeric_index_type > &send_list) const |
| void | localize (const numeric_index_type first_local_idx, const numeric_index_type last_local_idx, const std::vector< numeric_index_type > &send_list) |
| void | localize_to_one (std::vector< T > &v_local, const processor_id_type proc_id=0) const |
| virtual void | pointwise_mult (const NumericVector< T > &vec1, const NumericVector< T > &vec2) |
| virtual void | swap (NumericVector< T > &v) |
| virtual bool | initialized () const |
| ParallelType | type () const |
| ParallelType & | type () |
| virtual bool | closed () const |
| virtual Real | subset_l1_norm (const std::set< numeric_index_type > &indices) const |
| virtual Real | subset_l2_norm (const std::set< numeric_index_type > &indices) const |
| virtual Real | subset_linfty_norm (const std::set< numeric_index_type > &indices) const |
| virtual T | el (const numeric_index_type i) const |
| virtual void | get (const std::vector< numeric_index_type > &index, T *values) const |
| void | get (const std::vector< numeric_index_type > &index, std::vector< T > &values) const |
| NumericVector< T > & | operator*= (const T a) |
| NumericVector< T > & | operator/= (const T a) |
| virtual void | add_vector (const T *v, const std::vector< numeric_index_type > &dof_indices) |
| void | add_vector (const std::vector< T > &v, const std::vector< numeric_index_type > &dof_indices) |
| virtual void | add_vector (const NumericVector< T > &V, const std::vector< numeric_index_type > &dof_indices) |
| void | add_vector (const DenseVector< T > &V, const std::vector< numeric_index_type > &dof_indices) |
| void | add_vector (const NumericVector< T > &v, const ShellMatrix< T > &a) |
| virtual void | insert (const T *v, const std::vector< numeric_index_type > &dof_indices) |
| void | insert (const std::vector< T > &v, const std::vector< numeric_index_type > &dof_indices) |
| virtual void | insert (const NumericVector< T > &V, const std::vector< numeric_index_type > &dof_indices) |
| void | insert (const DenseVector< T > &V, const std::vector< numeric_index_type > &dof_indices) |
| void | insert (const DenseSubVector< T > &V, const std::vector< numeric_index_type > &dof_indices) |
| virtual int | compare (const NumericVector< T > &other_vector, const Real threshold=TOLERANCE) const |
| virtual int | local_relative_compare (const NumericVector< T > &other_vector, const Real threshold=TOLERANCE) const |
| virtual int | global_relative_compare (const NumericVector< T > &other_vector, const Real threshold=TOLERANCE) const |
| virtual void | print (std::ostream &os=libMesh::out) const |
| template<> | |
| void | print (std::ostream &os) const |
| virtual void | print_global (std::ostream &os=libMesh::out) const |
| template<> | |
| void | print_global (std::ostream &os) const |
| virtual void | print_matlab (const std::string &="") const |
| virtual void | create_subvector (NumericVector< T > &, const std::vector< numeric_index_type > &) const |
| const Parallel::Communicator & | comm () const |
| processor_id_type | n_processors () const |
| processor_id_type | processor_id () const |
Static Public Member Functions | |
| static UniquePtr < NumericVector< T > > | build (const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package()) |
| static UniquePtr < NumericVector< T > > | build (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 | |
| void | increment_constructor_count (const std::string &name) |
| void | increment_destructor_count (const std::string &name) |
Protected Attributes | |
| bool | _is_closed |
| bool | _is_initialized |
| ParallelType | _type |
| 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 Attributes | |
| std::vector< T > | _values |
| numeric_index_type | _global_size |
| numeric_index_type | _local_size |
| numeric_index_type | _first_local_index |
| numeric_index_type | _last_local_index |
Friends | |
| std::ostream & | operator<< (std::ostream &os, const NumericVector< T > &v) |
Distributed vector. Provides an interface for simple parallel, distributed vectors. Offers some collective communication capabilities. Note that the class will sill function without MPI, but only on one processor. This lets us keep the parallel details behind the scenes.
Definition at line 52 of file distributed_vector.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::DistributedVector< T >::DistributedVector | ( | const Parallel::Communicator & | comm, |
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline, explicit] |
Dummy-Constructor. Dimension=0
Definition at line 442 of file distributed_vector.h.
References libMesh::NumericVector< T >::_type.
: NumericVector<T>(comm_in, ptype),
_global_size (0),
_local_size (0),
_first_local_index(0),
_last_local_index (0)
{
this->_type = ptype;
}
| libMesh::DistributedVector< T >::DistributedVector | ( | const Parallel::Communicator & | comm, |
| const numeric_index_type | n, | ||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline, explicit] |
Constructor. Set dimension to n and initialize all elements with zero.
Definition at line 457 of file distributed_vector.h.
References libMesh::DistributedVector< T >::init().
: NumericVector<T>(comm_in, ptype)
{
this->init(n, n, false, ptype);
}
| libMesh::DistributedVector< T >::DistributedVector | ( | const Parallel::Communicator & | comm, |
| const numeric_index_type | n, | ||
| const numeric_index_type | n_local, | ||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline] |
Constructor. Set local dimension to n_local, the global dimension to n, and initialize all elements with zero.
Definition at line 469 of file distributed_vector.h.
References libMesh::DistributedVector< T >::init().
: NumericVector<T>(comm_in, ptype)
{
this->init(n, n_local, false, ptype);
}
| libMesh::DistributedVector< T >::DistributedVector | ( | const Parallel::Communicator & | comm, |
| const numeric_index_type | N, | ||
| const numeric_index_type | n_local, | ||
| const std::vector< numeric_index_type > & | ghost, | ||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline] |
Constructor. Set local dimension to n_local, the global dimension to n, but additionally reserve memory for the indices specified by the ghost argument.
Definition at line 482 of file distributed_vector.h.
References libMesh::DistributedVector< T >::init().
: NumericVector<T>(comm_in, ptype)
{
this->init(n, n_local, ghost, false, ptype);
}
| libMesh::DistributedVector< T >::~DistributedVector | ( | ) | [inline] |
Destructor, deallocates memory. Made virtual to allow for derived classes to behave properly.
Definition at line 496 of file distributed_vector.h.
{
this->clear ();
}
| void libMesh::DistributedVector< T >::abs | ( | ) | [virtual] |
v = abs(v)... that is, each entry in v is replaced by its absolute value.
Implements libMesh::NumericVector< T >.
Definition at line 259 of file distributed_vector.C.
References std::abs(), libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
for (numeric_index_type i=0; i<local_size(); i++)
this->set(i,std::abs(_values[i]));
}
| void libMesh::DistributedVector< T >::add | ( | const numeric_index_type | i, |
| const T | value | ||
| ) | [inline, virtual] |
v(i) += value
Implements libMesh::NumericVector< T >.
Definition at line 770 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
libmesh_assert_less (i, size());
libmesh_assert_less (i-first_local_index(), local_size());
_values[i - _first_local_index] += value;
}
| void libMesh::DistributedVector< T >::add | ( | const T | s | ) | [virtual] |
. Addition of s to all components. Note that s is a scalar and not a vector.
Implements libMesh::NumericVector< T >.
Definition at line 211 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
for (numeric_index_type i=0; i<local_size(); i++)
_values[i] += v;
}
| void libMesh::DistributedVector< T >::add | ( | const NumericVector< T > & | V | ) | [virtual] |
. Simple vector addition, equal to the operator +=.
Implements libMesh::NumericVector< T >.
Definition at line 224 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
add (1., v);
}
| void libMesh::DistributedVector< T >::add | ( | const T | a, |
| const NumericVector< T > & | v | ||
| ) | [virtual] |
. Simple vector addition, equal to the operator +=.
Implements libMesh::NumericVector< T >.
Definition at line 236 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
add(a, v);
}
| void libMesh::DistributedVector< T >::add_vector | ( | const NumericVector< T > & | , |
| const SparseMatrix< T > & | |||
| ) | [inline, virtual] |
. Add the product of a Sparse matrix A and a Numeric vector V to this Numeric vector. Not implemented.
Implements libMesh::NumericVector< T >.
Definition at line 328 of file distributed_vector.h.
{ libmesh_not_implemented(); }
| void libMesh::NumericVector< T >::add_vector | ( | const T * | v, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [virtual, inherited] |
where v is a pointer and each dof_indices[i] specifies where to add value v[i]
This should be overridden in subclasses for efficiency
Reimplemented in libMesh::PetscVector< T >, and libMesh::EpetraVector< T >.
Definition at line 384 of file numeric_vector.C.
Referenced by libMesh::LinearImplicitSystem::assembly(), libMesh::NewmarkSystem::update_rhs(), and libMesh::SparseMatrix< T >::vector_mult_add().
{
int n = dof_indices.size();
for (int i=0; i<n; i++)
this->add (dof_indices[i], v[i]);
}
| void libMesh::NumericVector< T >::add_vector | ( | const std::vector< T > & | v, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, inherited] |
where v is a std::vector and each dof_indices[i] specifies where to add value v[i]
Definition at line 806 of file numeric_vector.h.
References libMesh::libmesh_assert().
{
libmesh_assert(v.size() == dof_indices.size());
if (!v.empty())
this->add_vector(&v[0], dof_indices);
}
| void libMesh::NumericVector< T >::add_vector | ( | const NumericVector< T > & | V, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [virtual, inherited] |
where v is a NumericVector and each dof_indices[i] specifies where to add value v(i)
Definition at line 395 of file numeric_vector.C.
References libMesh::NumericVector< T >::size().
{
int n = dof_indices.size();
libmesh_assert_equal_to(v.size(), static_cast<unsigned>(n));
for (int i=0; i<n; i++)
this->add (dof_indices[i], v(i));
}
| void libMesh::NumericVector< T >::add_vector | ( | const DenseVector< T > & | V, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, inherited] |
where v is a DenseVector and each dof_indices[i] specifies where to add value v(i)
Definition at line 818 of file numeric_vector.h.
References libMesh::DenseVector< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseVector< T >::size().
{
libmesh_assert(v.size() == dof_indices.size());
if (!v.empty())
this->add_vector(&v(0), dof_indices);
}
| void libMesh::NumericVector< T >::add_vector | ( | const NumericVector< T > & | v, |
| const ShellMatrix< T > & | a | ||
| ) | [inherited] |
, add the product of a ShellMatrix A and a NumericVector V to this, where this=U.
Definition at line 407 of file numeric_vector.C.
References libMesh::ShellMatrix< T >::vector_mult_add().
{
a.vector_mult_add(*this,v);
}
| void libMesh::DistributedVector< T >::add_vector_transpose | ( | const NumericVector< T > & | , |
| const SparseMatrix< T > & | |||
| ) | [inline, virtual] |
. Add the product of the transpose of a Sparse matrix A_trans and a Numeric vector V to this Numeric vector. Not implemented.
Implements libMesh::NumericVector< T >.
Definition at line 338 of file distributed_vector.h.
{ libmesh_not_implemented(); }
| UniquePtr< NumericVector< T > > libMesh::NumericVector< T >::build | ( | const Parallel::Communicator & | comm, |
| const SolverPackage | solver_package = libMesh::default_solver_package() |
||
| ) | [static, inherited] |
Builds a NumericVector on the processors in communicator comm using the linear solver package specified by solver_package
Definition at line 46 of file numeric_vector.C.
References libMesh::AUTOMATIC, libMesh::EIGEN_SOLVERS, libMesh::LASPACK_SOLVERS, libMesh::PETSC_SOLVERS, and libMesh::TRILINOS_SOLVERS.
Referenced by libMesh::NumericVector< T >::build(), and libMesh::ExactErrorEstimator::estimate_error().
{
// Build the appropriate vector
switch (solver_package)
{
#ifdef LIBMESH_HAVE_LASPACK
case LASPACK_SOLVERS:
return UniquePtr<NumericVector<T> >(new LaspackVector<T>(comm, AUTOMATIC));
#endif
#ifdef LIBMESH_HAVE_PETSC
case PETSC_SOLVERS:
return UniquePtr<NumericVector<T> >(new PetscVector<T>(comm, AUTOMATIC));
#endif
#ifdef LIBMESH_HAVE_TRILINOS
case TRILINOS_SOLVERS:
return UniquePtr<NumericVector<T> >(new EpetraVector<T>(comm, AUTOMATIC));
#endif
#ifdef LIBMESH_HAVE_EIGEN
case EIGEN_SOLVERS:
return UniquePtr<NumericVector<T> >(new EigenSparseVector<T>(comm, AUTOMATIC));
#endif
default:
return UniquePtr<NumericVector<T> >(new DistributedVector<T>(comm, AUTOMATIC));
}
libmesh_error_msg("We'll never get here!");
return UniquePtr<NumericVector<T> >();
}
| UniquePtr< NumericVector< T > > libMesh::NumericVector< T >::build | ( | const SolverPackage | solver_package = libMesh::default_solver_package() | ) | [static, inherited] |
Builds a NumericVector on the processors in communicator CommWorld using the linear solver package specified by solver_package. Deprecated.
Definition at line 84 of file numeric_vector.C.
References libMesh::NumericVector< T >::build(), and libMesh::CommWorld.
{
libmesh_deprecated();
return NumericVector<T>::build(CommWorld, solver_package);
}
| void libMesh::DistributedVector< T >::clear | ( | ) | [inline, virtual] |
DistributedVector to a pristine state. Reimplemented from libMesh::NumericVector< T >.
Definition at line 633 of file distributed_vector.h.
References libMesh::libMeshPrivateData::_is_initialized.
{
_values.clear();
_global_size =
_local_size =
_first_local_index =
_last_local_index = 0;
this->_is_closed = this->_is_initialized = false;
}
| UniquePtr< NumericVector< T > > libMesh::DistributedVector< T >::clone | ( | ) | const [inline, virtual] |
Creates a copy of this vector and returns it in an UniquePtr.
Implements libMesh::NumericVector< T >.
Definition at line 676 of file distributed_vector.h.
References libMesh::NumericVector< T >::init().
{
NumericVector<T>* cloned_vector = new DistributedVector<T>(this->comm());
cloned_vector->init(*this, true);
*cloned_vector = *this;
return UniquePtr<NumericVector<T> >(cloned_vector);
}
| void libMesh::DistributedVector< T >::close | ( | ) | [inline, virtual] |
Call the assemble functions
Implements libMesh::NumericVector< T >.
Definition at line 622 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
this->_is_closed = true;
}
| virtual bool libMesh::NumericVector< T >::closed | ( | ) | const [inline, virtual, inherited] |
Definition at line 147 of file numeric_vector.h.
Referenced by libMesh::DofMap::enforce_adjoint_constraints_exactly(), libMesh::DofMap::enforce_constraints_exactly(), libMesh::DofMap::max_constraint_error(), libMesh::LaspackVector< T >::operator=(), libMesh::EigenSparseVector< T >::operator=(), and libMesh::PetscVector< T >::operator=().
{ return _is_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; }
| int libMesh::NumericVector< T >::compare | ( | const NumericVector< T > & | other_vector, |
| const Real | threshold = TOLERANCE |
||
| ) | const [virtual, inherited] |
-1 when this is equivalent to other_vector, up to the given threshold. When differences occur, the return value contains the first index i where the difference (a[i]-b[i]) exceeded the threshold. When no threshold is given, the libMesh TOLERANCE is used. Definition at line 116 of file numeric_vector.C.
References std::abs(), libMesh::NumericVector< T >::first_local_index(), libMesh::NumericVector< T >::initialized(), libMesh::initialized(), libMesh::NumericVector< T >::last_local_index(), libMesh::libmesh_assert(), and std::max().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
int first_different_i = std::numeric_limits<int>::max();
numeric_index_type i = first_local_index();
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > threshold )
first_different_i = i;
else
i++;
}
while (first_different_i==std::numeric_limits<int>::max()
&& i<last_local_index());
// Find the correct first differing index in parallel
this->comm().min(first_different_i);
if (first_different_i == std::numeric_limits<int>::max())
return -1;
return first_different_i;
}
| void libMesh::DistributedVector< T >::conjugate | ( | ) | [virtual] |
Replace each entry v_i = real(v_i) + imag(v_i) of this vector by its complex conjugate, real(v_i) - imag(v_i)
Implements libMesh::NumericVector< T >.
Definition at line 197 of file distributed_vector.C.
References libMesh::libmesh_conj().
{
for (numeric_index_type i=0; i<local_size(); i++)
{
// Replace values by complex conjugate
_values[i] = libmesh_conj(_values[i]);
}
}
| virtual void libMesh::NumericVector< T >::create_subvector | ( | NumericVector< T > & | , |
| const std::vector< numeric_index_type > & | |||
| ) | const [inline, virtual, inherited] |
Creates the subvector "subvector" from the indices in the "rows" array. Similar to the create_submatrix routine for the SparseMatrix class, it is currently only implemented for PetscVectors.
Reimplemented in libMesh::PetscVector< T >, and libMesh::EpetraVector< T >.
Definition at line 656 of file numeric_vector.h.
{
libmesh_not_implemented();
}
| 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;
}
| T libMesh::DistributedVector< T >::dot | ( | const NumericVector< T > & | V | ) | const [virtual] |
Computes the dot product, p = U.V
Implements libMesh::NumericVector< T >.
Definition at line 273 of file distributed_vector.C.
References libMesh::DistributedVector< T >::_values, libMesh::DistributedVector< T >::first_local_index(), and libMesh::DistributedVector< T >::last_local_index().
{
// This function must be run on all processors at once
parallel_object_only();
// Make sure the NumericVector passed in is really a DistributedVector
const DistributedVector<T>* v = cast_ptr<const DistributedVector<T>*>(&V);
// Make sure that the two vectors are distributed in the same way.
libmesh_assert_equal_to ( this->first_local_index(), v->first_local_index() );
libmesh_assert_equal_to ( this->last_local_index(), v->last_local_index() );
// The result of dotting together the local parts of the vector.
T local_dot = 0;
for (std::size_t i=0; i<this->local_size(); i++)
local_dot += this->_values[i] * v->_values[i];
// The local dot products are now summed via MPI
this->comm().sum(local_dot);
return local_dot;
}
| virtual T libMesh::NumericVector< T >::el | ( | const numeric_index_type | i | ) | const [inline, virtual, inherited] |
| 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;
}
| numeric_index_type libMesh::DistributedVector< T >::first_local_index | ( | ) | const [inline, virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 714 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
Referenced by libMesh::DistributedVector< T >::dot().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
return _first_local_index;
}
| void libMesh::NumericVector< T >::get | ( | const std::vector< numeric_index_type > & | index, |
| T * | values | ||
| ) | const [inline, virtual, inherited] |
Access multiple components at once. values will *not* be reallocated; it should already have enough space. The default implementation calls operator() for each index, but some implementations may supply faster methods here.
Reimplemented in libMesh::PetscVector< T >.
Definition at line 779 of file numeric_vector.h.
Referenced by libMesh::DofMap::enforce_adjoint_constraints_exactly(), libMesh::DofMap::enforce_constraints_exactly(), libMesh::FEMContext::pre_fe_reinit(), and libMesh::System::project_vector().
{
const std::size_t num = index.size();
for(std::size_t i=0; i<num; i++)
{
values[i] = (*this)(index[i]);
}
}
| void libMesh::NumericVector< T >::get | ( | const std::vector< numeric_index_type > & | index, |
| std::vector< T > & | values | ||
| ) | const [inline, inherited] |
Access multiple components at once. values will be resized, if necessary, and filled. The default implementation calls operator() for each index, but some implementations may supply faster methods here.
Definition at line 792 of file numeric_vector.h.
{
const std::size_t num = index.size();
values.resize(num);
if (!num)
return;
this->get(index, &values[0]);
}
| 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
}
| int libMesh::NumericVector< T >::global_relative_compare | ( | const NumericVector< T > & | other_vector, |
| const Real | threshold = TOLERANCE |
||
| ) | const [virtual, inherited] |
-1 when this is equivalent to other_vector, up to the given local relative threshold. When differences occur, the return value contains the first index where the difference (a[i]-b[i])/max_j(a[j],b[j]) exceeded the threshold. When no threshold is given, the libMesh TOLERANCE is used. Definition at line 181 of file numeric_vector.C.
References std::abs(), libMesh::NumericVector< T >::first_local_index(), libMesh::NumericVector< T >::initialized(), libMesh::initialized(), libMesh::NumericVector< T >::last_local_index(), libMesh::libmesh_assert(), libMesh::NumericVector< T >::linfty_norm(), std::max(), and libMesh::Real.
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
int first_different_i = std::numeric_limits<int>::max();
numeric_index_type i = first_local_index();
const Real my_norm = this->linfty_norm();
const Real other_norm = other_vector.linfty_norm();
const Real abs_threshold = std::max(my_norm, other_norm) * threshold;
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > abs_threshold )
first_different_i = i;
else
i++;
}
while (first_different_i==std::numeric_limits<int>::max()
&& i<last_local_index());
// Find the correct first differing index in parallel
this->comm().min(first_different_i);
if (first_different_i == std::numeric_limits<int>::max())
return -1;
return first_different_i;
}
| 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::DistributedVector< T >::init | ( | const numeric_index_type | N, |
| const numeric_index_type | n_local, | ||
| const bool | fast = false, |
||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline, virtual] |
Change the dimension of the vector to N. The reserved memory for this vector remains unchanged if possible, to make things faster, but this may waste some memory, so take this in the back of your head. However, if N==0 all memory is freed, i.e. if you want to resize the vector and release the memory not needed, you have to first call init(0) and then init(N). This cited behaviour is analogous to that of the STL containers.
On fast==false, the vector is filled by zeros.
Implements libMesh::NumericVector< T >.
Definition at line 505 of file distributed_vector.h.
References libMesh::libMeshPrivateData::_is_initialized, libMesh::AUTOMATIC, libMesh::initialized(), libMesh::libmesh_assert(), libMesh::n_processors(), libMesh::PARALLEL, libMesh::processor_id(), libMesh::SERIAL, and libMesh::zero.
Referenced by libMesh::DistributedVector< T >::DistributedVector(), and libMesh::DistributedVector< T >::localize().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert_less_equal (n_local, n);
if (ptype == AUTOMATIC)
{
if (n == n_local)
this->_type = SERIAL;
else
this->_type = PARALLEL;
}
else
this->_type = ptype;
libmesh_assert ((this->_type==SERIAL && n==n_local) ||
this->_type==PARALLEL);
// Clear the data structures if already initialized
if (this->initialized())
this->clear();
// Initialize data structures
_values.resize(n_local);
_local_size = n_local;
_global_size = n;
_first_local_index = 0;
#ifdef LIBMESH_HAVE_MPI
std::vector<numeric_index_type> local_sizes (this->n_processors(), 0);
local_sizes[this->processor_id()] = n_local;
this->comm().sum(local_sizes);
// _first_local_index is the sum of _local_size
// for all processor ids less than ours
for (processor_id_type p=0; p!=this->processor_id(); p++)
_first_local_index += local_sizes[p];
# ifdef DEBUG
// Make sure all the local sizes sum up to the global
// size, otherwise there is big trouble!
numeric_index_type dbg_sum=0;
for (processor_id_type p=0; p!=this->n_processors(); p++)
dbg_sum += local_sizes[p];
libmesh_assert_equal_to (dbg_sum, n);
# endif
#else
// No other options without MPI!
if (n != n_local)
libmesh_error_msg("ERROR: MPI is required for n != n_local!");
#endif
_last_local_index = _first_local_index + n_local;
// Set the initialized flag
this->_is_initialized = true;
// Zero the components unless directed otherwise
if (!fast)
this->zero();
}
| void libMesh::DistributedVector< T >::init | ( | const numeric_index_type | N, |
| const bool | fast = false, |
||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline, virtual] |
call init with n_local = N,
Implements libMesh::NumericVector< T >.
Definition at line 611 of file distributed_vector.h.
References libMesh::TriangleWrapper::init().
{
this->init(n,n,fast,ptype);
}
| void libMesh::DistributedVector< T >::init | ( | const numeric_index_type | n, |
| const numeric_index_type | n_local, | ||
| const std::vector< numeric_index_type > & | , | ||
| const bool | fast = false, |
||
| const ParallelType | ptype = AUTOMATIC |
||
| ) | [inline, virtual] |
Create a vector that holds tha local indices plus those specified in the ghost argument.
Implements libMesh::NumericVector< T >.
Definition at line 586 of file distributed_vector.h.
References libMesh::TriangleWrapper::init().
{
// TODO: we shouldn't ignore the ghost sparsity pattern
this->init(n, n_local, fast, ptype);
}
| void libMesh::DistributedVector< T >::init | ( | const NumericVector< T > & | other, |
| const bool | fast = false |
||
| ) | [virtual] |
Creates a vector that has the same dimension and storage type as other, including ghost dofs.
Implements libMesh::NumericVector< T >.
Definition at line 601 of file distributed_vector.h.
References libMesh::TriangleWrapper::init(), libMesh::NumericVector< T >::local_size(), libMesh::NumericVector< T >::size(), and libMesh::NumericVector< T >::type().
{
this->init(other.size(),other.local_size(),fast,other.type());
}
| virtual bool libMesh::NumericVector< T >::initialized | ( | ) | const [inline, virtual, inherited] |
Definition at line 131 of file numeric_vector.h.
Referenced by libMesh::ImplicitSystem::assemble(), libMesh::NumericVector< T >::compare(), libMesh::PetscVector< T >::create_subvector(), libMesh::NumericVector< T >::global_relative_compare(), libMesh::PetscVector< T >::init(), and libMesh::NumericVector< T >::local_relative_compare().
{ return _is_initialized; }
| void libMesh::NumericVector< T >::insert | ( | const T * | v, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [virtual, inherited] |
where v is a T[] or T* and you want to specify WHERE to insert it
Reimplemented in libMesh::PetscVector< T >, and libMesh::EpetraVector< T >.
Definition at line 94 of file numeric_vector.C.
{
for (numeric_index_type i=0; i<dof_indices.size(); i++)
this->set (dof_indices[i], v[i]);
}
| void libMesh::NumericVector< T >::insert | ( | const std::vector< T > & | v, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, inherited] |
where v is a std::vector<T> and you want to specify WHERE to insert it
Definition at line 830 of file numeric_vector.h.
References libMesh::libmesh_assert().
{
libmesh_assert(v.size() == dof_indices.size());
if (!v.empty())
this->insert(&v[0], dof_indices);
}
| void libMesh::NumericVector< T >::insert | ( | const NumericVector< T > & | V, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [virtual, inherited] |
, where U and V are type NumericVector<T> and you want to specify WHERE to insert the NumericVector<T> V
Definition at line 104 of file numeric_vector.C.
References libMesh::NumericVector< T >::size().
{
libmesh_assert_equal_to (V.size(), dof_indices.size());
for (numeric_index_type i=0; i<dof_indices.size(); i++)
this->set (dof_indices[i], V(i));
}
| void libMesh::NumericVector< T >::insert | ( | const DenseVector< T > & | V, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, inherited] |
where U and V are type DenseVector<T> and you want to specify WHERE to insert the DenseVector<T> V
Definition at line 842 of file numeric_vector.h.
References libMesh::DenseVector< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseVector< T >::size().
{
libmesh_assert(v.size() == dof_indices.size());
if (!v.empty())
this->insert(&v(0), dof_indices);
}
| void libMesh::NumericVector< T >::insert | ( | const DenseSubVector< T > & | V, |
| const std::vector< numeric_index_type > & | dof_indices | ||
| ) | [inline, inherited] |
where V is a DenseSubVector<T> and you want to specify WHERE to insert it
Definition at line 854 of file numeric_vector.h.
References libMesh::DenseVectorBase< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseVectorBase< T >::size().
{
libmesh_assert(v.size() == dof_indices.size());
if (!v.empty())
this->insert(&v(0), dof_indices);
}
| Real libMesh::DistributedVector< T >::l1_norm | ( | ) | const [virtual] |
-norm of the vector, i.e. the sum of the absolute values. Implements libMesh::NumericVector< T >.
Definition at line 64 of file distributed_vector.C.
References std::abs(), libMesh::initialized(), and libMesh::libmesh_assert().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
double local_l1 = 0.;
for (numeric_index_type i=0; i<local_size(); i++)
local_l1 += std::abs(_values[i]);
this->comm().sum(local_l1);
return local_l1;
}
| Real libMesh::DistributedVector< T >::l2_norm | ( | ) | const [virtual] |
-norm of the vector, i.e. the square root of the sum of the squares of the elements. Implements libMesh::NumericVector< T >.
Definition at line 86 of file distributed_vector.C.
References libMesh::initialized(), libMesh::libmesh_assert(), and libMesh::TensorTools::norm_sq().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
double local_l2 = 0.;
for (numeric_index_type i=0; i<local_size(); i++)
local_l2 += TensorTools::norm_sq(_values[i]);
this->comm().sum(local_l2);
return std::sqrt(local_l2);
}
| numeric_index_type libMesh::DistributedVector< T >::last_local_index | ( | ) | const [inline, virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 727 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
Referenced by libMesh::DistributedVector< T >::dot().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
return _last_local_index;
}
| Real libMesh::DistributedVector< T >::linfty_norm | ( | ) | const [virtual] |
-norm of a vector. Implements libMesh::NumericVector< T >.
Definition at line 108 of file distributed_vector.C.
References std::abs(), libMesh::initialized(), libMesh::libmesh_assert(), std::max(), and libMesh::Real.
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
Real local_linfty = 0.;
for (numeric_index_type i=0; i<local_size(); i++)
local_linfty = std::max(local_linfty,
static_cast<Real>(std::abs(_values[i]))
); // Note we static_cast so that both
// types are the same, as required
// by std::max
this->comm().max(local_linfty);
return local_linfty;
}
| int libMesh::NumericVector< T >::local_relative_compare | ( | const NumericVector< T > & | other_vector, |
| const Real | threshold = TOLERANCE |
||
| ) | const [virtual, inherited] |
-1 when this is equivalent to other_vector, up to the given local relative threshold. When differences occur, the return value contains the first index where the difference (a[i]-b[i])/max(a[i],b[i]) exceeded the threshold. When no threshold is given, the libMesh TOLERANCE is used. Definition at line 148 of file numeric_vector.C.
References std::abs(), libMesh::NumericVector< T >::first_local_index(), libMesh::NumericVector< T >::initialized(), libMesh::initialized(), libMesh::NumericVector< T >::last_local_index(), libMesh::libmesh_assert(), and std::max().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
int first_different_i = std::numeric_limits<int>::max();
numeric_index_type i = first_local_index();
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > threshold *
std::max(std::abs((*this)(i)), std::abs(other_vector(i))))
first_different_i = i;
else
i++;
}
while (first_different_i==std::numeric_limits<int>::max()
&& i<last_local_index());
// Find the correct first differing index in parallel
this->comm().min(first_different_i);
if (first_different_i == std::numeric_limits<int>::max())
return -1;
return first_different_i;
}
| numeric_index_type libMesh::DistributedVector< T >::local_size | ( | ) | const [inline, virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 701 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
Referenced by libMesh::DistributedVector< T >::operator=().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
return _local_size;
}
| void libMesh::DistributedVector< T >::localize | ( | std::vector< T > & | v_local | ) | const [virtual] |
Creates a copy of the global vector in the local vector v_local.
Implements libMesh::NumericVector< T >.
Definition at line 458 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
Referenced by libMesh::DistributedVector< T >::localize().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
v_local = this->_values;
this->comm().allgather (v_local);
#ifndef LIBMESH_HAVE_MPI
libmesh_assert_equal_to (local_size(), size());
#endif
}
| void libMesh::DistributedVector< T >::localize | ( | NumericVector< T > & | v_local | ) | const [virtual] |
Same, but fills a NumericVector<T> instead of a std::vector.
Implements libMesh::NumericVector< T >.
Definition at line 376 of file distributed_vector.C.
References libMesh::DistributedVector< T >::_first_local_index, libMesh::DistributedVector< T >::_global_size, libMesh::NumericVector< T >::_is_closed, libMesh::NumericVector< T >::_is_initialized, libMesh::DistributedVector< T >::_last_local_index, libMesh::DistributedVector< T >::_local_size, libMesh::DistributedVector< T >::_values, libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
DistributedVector<T>* v_local = cast_ptr<DistributedVector<T>*>(&v_local_in);
v_local->_first_local_index = 0;
v_local->_global_size =
v_local->_local_size =
v_local->_last_local_index = size();
v_local->_is_initialized =
v_local->_is_closed = true;
// Call localize on the vector's values. This will help
// prevent code duplication
localize (v_local->_values);
#ifndef LIBMESH_HAVE_MPI
libmesh_assert_equal_to (local_size(), size());
#endif
}
| void libMesh::DistributedVector< T >::localize | ( | NumericVector< T > & | v_local, |
| const std::vector< numeric_index_type > & | send_list | ||
| ) | const [virtual] |
Creates a local vector v_local containing only information relevant to this processor, as defined by the send_list.
Implements libMesh::NumericVector< T >.
Definition at line 408 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
// TODO: We don't yet support the send list; this is inefficient:
localize (v_local_in);
}
| void libMesh::DistributedVector< T >::localize | ( | const numeric_index_type | first_local_idx, |
| const numeric_index_type | last_local_idx, | ||
| const std::vector< numeric_index_type > & | send_list | ||
| ) | [virtual] |
Updates a local vector with selected values from neighboring processors, as defined by send_list.
Implements libMesh::NumericVector< T >.
Definition at line 422 of file distributed_vector.C.
References libMesh::DistributedVector< T >::_values, libMesh::DistributedVector< T >::init(), libMesh::DistributedVector< T >::localize(), and libMesh::PARALLEL.
{
// Only good for serial vectors
libmesh_assert_equal_to (this->size(), this->local_size());
libmesh_assert_greater (last_local_idx, first_local_idx);
libmesh_assert_less_equal (send_list.size(), this->size());
libmesh_assert_less (last_local_idx, this->size());
const numeric_index_type my_size = this->size();
const numeric_index_type my_local_size = (last_local_idx - first_local_idx + 1);
// Don't bother for serial cases
if ((first_local_idx == 0) &&
(my_local_size == my_size))
return;
// Build a parallel vector, initialize it with the local
// parts of (*this)
DistributedVector<T> parallel_vec(this->comm());
parallel_vec.init (my_size, my_local_size, true, PARALLEL);
// Copy part of *this into the parallel_vec
for (numeric_index_type i=first_local_idx; i<=last_local_idx; i++)
parallel_vec._values[i-first_local_idx] = _values[i];
// localize like normal
parallel_vec.localize (*this, send_list);
}
| void libMesh::DistributedVector< T >::localize_to_one | ( | std::vector< T > & | v_local, |
| const processor_id_type | proc_id = 0 |
||
| ) | const [virtual] |
Creates a local copy of the global vector in v_local only on processor proc_id. By default the data is sent to processor 0. This method is useful for outputting data from one processor.
Implements libMesh::NumericVector< T >.
Definition at line 479 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
v_local = this->_values;
this->comm().gather (pid, v_local);
#ifndef LIBMESH_HAVE_MPI
libmesh_assert_equal_to (local_size(), size());
#endif
}
| Real libMesh::DistributedVector< T >::max | ( | ) | const [inline, virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 808 of file distributed_vector.h.
References libMesh::initialized(), libMesh::libmesh_assert(), libMesh::libmesh_real(), std::max(), and libMesh::Real.
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
Real local_max = _values.size() ?
libmesh_real(_values[0]) : -std::numeric_limits<Real>::max();
for (numeric_index_type i = 1; i < _values.size(); ++i)
local_max = std::max(libmesh_real(_values[i]), local_max);
this->comm().max(local_max);
return local_max;
}
| Real libMesh::DistributedVector< T >::min | ( | ) | const [inline, virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 785 of file distributed_vector.h.
References libMesh::initialized(), libMesh::libmesh_assert(), libMesh::libmesh_real(), std::max(), std::min(), and libMesh::Real.
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
Real local_min = _values.size() ?
libmesh_real(_values[0]) : std::numeric_limits<Real>::max();
for (numeric_index_type i = 1; i < _values.size(); ++i)
local_min = std::min(libmesh_real(_values[i]), local_min);
this->comm().min(local_min);
return local_min;
}
| 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()); }
| T libMesh::DistributedVector< T >::operator() | ( | const numeric_index_type | i | ) | const [inline, virtual] |
Access components, returns U(i).
Implements libMesh::NumericVector< T >.
Definition at line 740 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
libmesh_assert ( ((i >= first_local_index()) &&
(i < last_local_index())) );
return _values[i - _first_local_index];
}
| NumericVector<T>& libMesh::NumericVector< T >::operator*= | ( | const T | a | ) | [inline, inherited] |
Multiplication operator. Equivalent to U.scale(a)
Definition at line 378 of file numeric_vector.h.
{ this->scale(a); return *this; }
| NumericVector< T > & libMesh::DistributedVector< T >::operator+= | ( | const NumericVector< T > & | V | ) | [virtual] |
Addition operator. Fast equivalent to U.add(1, V).
Implements libMesh::NumericVector< T >.
Definition at line 134 of file distributed_vector.C.
References libMesh::closed(), libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->closed());
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
add(1., v);
return *this;
}
| NumericVector< T > & libMesh::DistributedVector< T >::operator-= | ( | const NumericVector< T > & | V | ) | [virtual] |
Subtraction operator. Fast equivalent to U.add(-1, V).
Implements libMesh::NumericVector< T >.
Definition at line 149 of file distributed_vector.C.
References libMesh::closed(), libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->closed());
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
add(-1., v);
return *this;
}
| NumericVector< T > & libMesh::DistributedVector< T >::operator/= | ( | NumericVector< T > & | v | ) | [virtual] |
Pointwise Division operator. ie divide every entry in this vector by the entry in v
Implements libMesh::NumericVector< T >.
Definition at line 164 of file distributed_vector.C.
References libMesh::DistributedVector< T >::size(), and libMesh::NumericVector< T >::size().
| NumericVector<T>& libMesh::NumericVector< T >::operator/= | ( | const T | a | ) | [inline, inherited] |
Division operator. Equivalent to U.scale(1./a)
Definition at line 384 of file numeric_vector.h.
{ this->scale(1./a); return *this; }
| NumericVector< T > & libMesh::DistributedVector< T >::operator= | ( | const T | s | ) | [virtual] |
: fill all components.
Implements libMesh::NumericVector< T >.
Definition at line 301 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
for (std::size_t i=0; i<local_size(); i++)
_values[i] = s;
return *this;
}
| NumericVector< T > & libMesh::DistributedVector< T >::operator= | ( | const NumericVector< T > & | V | ) | [virtual] |
: copy all components.
Implements libMesh::NumericVector< T >.
Definition at line 317 of file distributed_vector.C.
{
// Make sure the NumericVector passed in is really a DistributedVector
const DistributedVector<T>* v = cast_ptr<const DistributedVector<T>*>(&v_in);
*this = *v;
return *this;
}
| DistributedVector< T > & libMesh::DistributedVector< T >::operator= | ( | const DistributedVector< T > & | V | ) |
: copy all components.
Definition at line 331 of file distributed_vector.C.
References libMesh::DistributedVector< T >::_first_local_index, libMesh::DistributedVector< T >::_global_size, libMesh::NumericVector< T >::_is_closed, libMesh::libMeshPrivateData::_is_initialized, libMesh::NumericVector< T >::_is_initialized, libMesh::DistributedVector< T >::_last_local_index, libMesh::DistributedVector< T >::_local_size, libMesh::DistributedVector< T >::_values, and libMesh::DistributedVector< T >::local_size().
{
this->_is_initialized = v._is_initialized;
this->_is_closed = v._is_closed;
_global_size = v._global_size;
_local_size = v._local_size;
_first_local_index = v._first_local_index;
_last_local_index = v._last_local_index;
if (v.local_size() == this->local_size())
_values = v._values;
else
libmesh_error_msg("v.local_size() = " << v.local_size() << " must be equal to this->local_size() = " << this->local_size());
return *this;
}
| NumericVector< T > & libMesh::DistributedVector< T >::operator= | ( | const std::vector< T > & | v | ) | [virtual] |
: copy all components.
Implements libMesh::NumericVector< T >.
Definition at line 354 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
if (v.size() == local_size())
_values = v;
else if (v.size() == size())
for (std::size_t i=first_local_index(); i<last_local_index(); i++)
_values[i-first_local_index()] = v[i];
else
libmesh_error_msg("Incompatible sizes in DistributedVector::operator=");
return *this;
}
| void libMesh::DistributedVector< T >::pointwise_mult | ( | const NumericVector< T > & | vec1, |
| const NumericVector< T > & | vec2 | ||
| ) | [virtual] |
Computes the pointwise (i.e. component-wise) product of vec1 and vec2 and stores the result in *this.
Implements libMesh::NumericVector< T >.
Definition at line 501 of file distributed_vector.C.
{
libmesh_not_implemented();
}
| void libMesh::NumericVector< T >::print | ( | std::ostream & | os = libMesh::out | ) | const [inline, virtual, inherited] |
Prints the local contents of the vector, by default to libMesh::out
Definition at line 887 of file numeric_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
os << "Size\tglobal = " << this->size()
<< "\t\tlocal = " << this->local_size() << std::endl;
os << "#\tValue" << std::endl;
for (numeric_index_type i=this->first_local_index(); i<this->last_local_index(); i++)
os << i << "\t" << (*this)(i) << std::endl;
}
| void libMesh::NumericVector< Complex >::print | ( | std::ostream & | os | ) | const [inline, inherited] |
Definition at line 869 of file numeric_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
os << "Size\tglobal = " << this->size()
<< "\t\tlocal = " << this->local_size() << std::endl;
// std::complex<>::operator<<() is defined, but use this form
os << "#\tReal part\t\tImaginary part" << std::endl;
for (numeric_index_type i=this->first_local_index(); i<this->last_local_index(); i++)
os << i << "\t"
<< (*this)(i).real() << "\t\t"
<< (*this)(i).imag() << std::endl;
}
| void libMesh::NumericVector< T >::print_global | ( | std::ostream & | os = libMesh::out | ) | const [inline, virtual, inherited] |
Prints the global contents of the vector, by default to libMesh::out
Definition at line 924 of file numeric_vector.h.
References libMesh::initialized(), libMesh::libmesh_assert(), and libMesh::processor_id().
{
libmesh_assert (this->initialized());
std::vector<T> v(this->size());
this->localize(v);
// Right now we only want one copy of the output
if (this->processor_id())
return;
os << "Size\tglobal = " << this->size() << std::endl;
os << "#\tValue" << std::endl;
for (numeric_index_type i=0; i!=v.size(); i++)
os << i << "\t" << v[i] << std::endl;
}
| void libMesh::NumericVector< Complex >::print_global | ( | std::ostream & | os | ) | const [inline, inherited] |
Definition at line 902 of file numeric_vector.h.
References libMesh::initialized(), libMesh::libmesh_assert(), and libMesh::processor_id().
{
libmesh_assert (this->initialized());
std::vector<Complex> v(this->size());
this->localize(v);
// Right now we only want one copy of the output
if (this->processor_id())
return;
os << "Size\tglobal = " << this->size() << std::endl;
os << "#\tReal part\t\tImaginary part" << std::endl;
for (numeric_index_type i=0; i!=v.size(); i++)
os << i << "\t"
<< v[i].real() << "\t\t"
<< v[i].imag() << std::endl;
}
| 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::NumericVector< 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::PetscVector< T >.
Definition at line 645 of file numeric_vector.h.
{
libmesh_not_implemented();
}
| 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()); }
| void libMesh::DistributedVector< T >::reciprocal | ( | ) | [virtual] |
Replace each entry v_i of this vector by its reciprocal, 1/v_i.
Implements libMesh::NumericVector< T >.
Definition at line 182 of file distributed_vector.C.
{
for (numeric_index_type i=0; i<local_size(); i++)
{
// Don't divide by zero
libmesh_assert_not_equal_to (_values[i], T(0));
_values[i] = 1. / _values[i];
}
}
| void libMesh::DistributedVector< T >::scale | ( | const T | factor | ) | [virtual] |
Scale each element of the vector by the given factor.
Implements libMesh::NumericVector< T >.
Definition at line 248 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
for (std::size_t i=0; i<local_size(); i++)
_values[i] *= factor;
}
| void libMesh::DistributedVector< T >::set | ( | const numeric_index_type | i, |
| const T | value | ||
| ) | [inline, virtual] |
v(i) = value
Implements libMesh::NumericVector< T >.
Definition at line 755 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
libmesh_assert_less (i, size());
libmesh_assert_less (i-first_local_index(), local_size());
_values[i - _first_local_index] = value;
}
| numeric_index_type libMesh::DistributedVector< T >::size | ( | ) | const [inline, virtual] |
n(), but was renamed to get the DistributedVector class closer to the C++ standard library's std::vector container. Implements libMesh::NumericVector< T >.
Definition at line 688 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
Referenced by libMesh::DistributedVector< T >::operator/=().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
return _global_size;
}
| Real libMesh::NumericVector< T >::subset_l1_norm | ( | const std::set< numeric_index_type > & | indices | ) | const [virtual, inherited] |
-norm of the vector, i.e. the sum of the absolute values for the specified entries in the vector.Note that the indices must necessary live on this processor.
Definition at line 324 of file numeric_vector.C.
References std::abs(), and libMesh::Real.
Referenced by libMesh::System::discrete_var_norm().
| Real libMesh::NumericVector< T >::subset_l2_norm | ( | const std::set< numeric_index_type > & | indices | ) | const [virtual, inherited] |
-norm of the vector, i.e. the square root of the sum of the squares of the elements for the specified entries in the vector.Note that the indices must necessary live on this processor.
Definition at line 342 of file numeric_vector.C.
References libMesh::TensorTools::norm_sq(), and libMesh::Real.
Referenced by libMesh::System::discrete_var_norm().
{
const NumericVector<T> & v = *this;
std::set<numeric_index_type>::const_iterator it = indices.begin();
const std::set<numeric_index_type>::const_iterator it_end = indices.end();
Real norm = 0;
for(; it!=it_end; ++it)
norm += TensorTools::norm_sq(v(*it));
this->comm().sum(norm);
return std::sqrt(norm);
}
| Real libMesh::NumericVector< T >::subset_linfty_norm | ( | const std::set< numeric_index_type > & | indices | ) | const [virtual, inherited] |
-norm of a vector.Note that the indices must necessary live on this processor.
Definition at line 360 of file numeric_vector.C.
References std::abs(), and libMesh::Real.
Referenced by libMesh::System::discrete_var_norm().
{
const NumericVector<T> & v = *this;
std::set<numeric_index_type>::const_iterator it = indices.begin();
const std::set<numeric_index_type>::const_iterator it_end = indices.end();
Real norm = 0;
for(; it!=it_end; ++it)
{
Real value = std::abs(v(*it));
if(value > norm)
norm = value;
}
this->comm().max(norm);
return norm;
}
| T libMesh::DistributedVector< T >::sum | ( | ) | const [virtual] |
Implements libMesh::NumericVector< T >.
Definition at line 42 of file distributed_vector.C.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
// This function must be run on all processors at once
parallel_object_only();
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
T local_sum = 0.;
for (numeric_index_type i=0; i<local_size(); i++)
local_sum += _values[i];
this->comm().sum(local_sum);
return local_sum;
}
| void libMesh::DistributedVector< T >::swap | ( | NumericVector< T > & | v | ) | [inline, virtual] |
Swaps the vector data and metadata
Reimplemented from libMesh::NumericVector< T >.
Definition at line 830 of file distributed_vector.h.
References libMesh::DistributedVector< T >::_first_local_index, libMesh::DistributedVector< T >::_global_size, libMesh::DistributedVector< T >::_last_local_index, libMesh::DistributedVector< T >::_local_size, libMesh::DistributedVector< T >::_values, and libMesh::swap().
{
DistributedVector<T>& v = cast_ref<DistributedVector<T>&>(other);
std::swap(_global_size, v._global_size);
std::swap(_local_size, v._local_size);
std::swap(_first_local_index, v._first_local_index);
std::swap(_last_local_index, v._last_local_index);
// This should be O(1) with any reasonable STL implementation
std::swap(_values, v._values);
}
| ParallelType libMesh::NumericVector< T >::type | ( | ) | const [inline, inherited] |
Definition at line 136 of file numeric_vector.h.
Referenced by libMesh::DofMap::enforce_adjoint_constraints_exactly(), libMesh::DofMap::enforce_constraints_exactly(), libMesh::EpetraVector< T >::EpetraVector(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::MeshFunction::find_element(), libMesh::DistributedVector< T >::init(), libMesh::LaspackVector< T >::init(), libMesh::EigenSparseVector< T >::init(), libMesh::EpetraVector< T >::init(), libMesh::PetscVector< T >::localize(), libMesh::PetscVector< T >::operator=(), libMesh::System::project_vector(), and libMesh::System::read_serialized_vector().
{ return _type; }
| ParallelType& libMesh::NumericVector< T >::type | ( | ) | [inline, inherited] |
Definition at line 141 of file numeric_vector.h.
{ return _type; }
| void libMesh::DistributedVector< T >::zero | ( | ) | [inline, virtual] |
Set all entries to zero. Equivalent to v = 0, but more obvious and faster.
Implements libMesh::NumericVector< T >.
Definition at line 650 of file distributed_vector.h.
References libMesh::initialized(), and libMesh::libmesh_assert().
{
libmesh_assert (this->initialized());
libmesh_assert_equal_to (_values.size(), _local_size);
libmesh_assert_equal_to ((_last_local_index - _first_local_index), _local_size);
std::fill (_values.begin(),
_values.end(),
0.);
}
| UniquePtr< NumericVector< T > > libMesh::DistributedVector< T >::zero_clone | ( | ) | const [inline, virtual] |
Creates a vector which has the same type, size and partitioning as this vector, but whose data is all zero. Returns it in an UniquePtr.
Implements libMesh::NumericVector< T >.
Definition at line 665 of file distributed_vector.h.
References libMesh::NumericVector< T >::init().
{
NumericVector<T>* cloned_vector = new DistributedVector<T>(this->comm());
cloned_vector->init(*this);
return UniquePtr<NumericVector<T> >(cloned_vector);
}
| std::ostream& operator<< | ( | std::ostream & | os, |
| const NumericVector< T > & | v | ||
| ) | [friend, inherited] |
Same as above but allows you to use stream syntax.
Definition at line 633 of file numeric_vector.h.
{
v.print_global(os);
return os;
}
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().
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().
numeric_index_type libMesh::DistributedVector< T >::_first_local_index [private] |
The first component stored locally
Definition at line 429 of file distributed_vector.h.
Referenced by libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::DistributedVector< T >::swap().
numeric_index_type libMesh::DistributedVector< T >::_global_size [private] |
The global vector size
Definition at line 419 of file distributed_vector.h.
Referenced by libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::DistributedVector< T >::swap().
bool libMesh::NumericVector< T >::_is_closed [protected, inherited] |
Flag to see if the Numeric assemble routines have been called yet
Definition at line 675 of file numeric_vector.h.
Referenced by libMesh::NumericVector< Number >::closed(), libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), libMesh::EigenSparseVector< T >::swap(), and libMesh::NumericVector< T >::swap().
bool libMesh::NumericVector< T >::_is_initialized [protected, inherited] |
Flag to tell if init has been called yet
Definition at line 681 of file numeric_vector.h.
Referenced by libMesh::PetscVector< T >::create_subvector(), libMesh::NumericVector< Number >::initialized(), libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), libMesh::EigenSparseVector< T >::swap(), and libMesh::NumericVector< T >::swap().
numeric_index_type libMesh::DistributedVector< T >::_last_local_index [private] |
The last component (+1) stored locally
Definition at line 434 of file distributed_vector.h.
Referenced by libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::DistributedVector< T >::swap().
numeric_index_type libMesh::DistributedVector< T >::_local_size [private] |
The local vector size
Definition at line 424 of file distributed_vector.h.
Referenced by libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::DistributedVector< T >::swap().
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().
ParallelType libMesh::NumericVector< T >::_type [protected, inherited] |
Type of vector
Definition at line 686 of file numeric_vector.h.
Referenced by libMesh::DistributedVector< T >::DistributedVector(), libMesh::EigenSparseVector< T >::EigenSparseVector(), libMesh::EpetraVector< T >::EpetraVector(), libMesh::PetscVector< T >::init(), libMesh::LaspackVector< T >::LaspackVector(), libMesh::PetscVector< T >::operator=(), libMesh::PetscVector< T >::PetscVector(), libMesh::EigenSparseVector< T >::swap(), libMesh::NumericVector< T >::swap(), and libMesh::NumericVector< Number >::type().
std::vector<T> libMesh::DistributedVector< T >::_values [private] |
Actual vector datatype to hold vector entries
Definition at line 414 of file distributed_vector.h.
Referenced by libMesh::DistributedVector< T >::dot(), libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::DistributedVector< T >::swap().