#include <distributed_vector.h>
DistributedVector (const ParallelType=AUTOMATIC)
DistributedVector (const unsigned int n, const ParallelType type=AUTOMATIC)
DistributedVector (const unsigned int n, const unsigned int n_local, const ParallelType type=AUTOMATIC)
DistributedVector (const unsigned int N, const unsigned int n_local, const std::vector< unsigned int > &ghost, const ParallelType type=AUTOMATIC)
~DistributedVector ()
void close ()
void clear ()
void zero ()
AutoPtr< NumericVector< T > > clone () const
void init (const unsigned int N, const unsigned int n_local, const bool fast=false, const ParallelType type=AUTOMATIC)
void init (const unsigned int N, const bool fast=false, const ParallelType type=AUTOMATIC)
virtual void init (const unsigned int, const unsigned int, const std::vector< unsigned int > &, 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
unsigned int size () const
unsigned int local_size () const
unsigned int first_local_index () const
unsigned int last_local_index () const
T operator() (const unsigned int i) const
NumericVector< T > & operator+= (const NumericVector< T > &V)
NumericVector< T > & operator-= (const NumericVector< T > &V)
void set (const unsigned int i, const T value)
void add (const unsigned int 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 std::vector< T > &v, const std::vector< unsigned int > &dof_indices)
void add_vector (const NumericVector< T > &V, const std::vector< unsigned int > &dof_indices)
void add_vector (const NumericVector< T > &, const SparseMatrix< T > &)
void add_vector (const DenseVector< T > &V, const std::vector< unsigned int > &dof_indices)
virtual void insert (const std::vector< T > &v, const std::vector< unsigned int > &dof_indices)
virtual void insert (const NumericVector< T > &V, const std::vector< unsigned int > &dof_indices)
virtual void insert (const DenseVector< T > &V, const std::vector< unsigned int > &dof_indices)
virtual void insert (const DenseSubVector< T > &V, const std::vector< unsigned int > &dof_indices)
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< unsigned int > &send_list) const
void localize (const unsigned int first_local_idx, const unsigned int last_local_idx, const std::vector< unsigned int > &send_list)
void localize_to_one (std::vector< T > &v_local, const unsigned int 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< unsigned int > &indices)
virtual Real subset_l2_norm (const std::set< unsigned int > &indices)
virtual Real subset_linfty_norm (const std::set< unsigned int > &indices)
virtual T el (const unsigned int i) const
virtual void get (const std::vector< unsigned int > &index, std::vector< T > &values) const
NumericVector< T > & operator*= (const T a)
NumericVector< T > & operator/= (const T a)
void add_vector (const NumericVector< T > &v, const ShellMatrix< T > &a)
virtual int compare (const NumericVector< T > &other_vector, const Real threshold=TOLERANCE) const
template<> int compare (const NumericVector< float > &other_vector, const Real threshold) const
template<> int compare (const NumericVector< double > &other_vector, const Real threshold) const
template<> int compare (const NumericVector< long double > &other_vector, const Real threshold) const
template<> int compare (const NumericVector< Complex > &other_vector, const Real threshold) const
virtual void print (std::ostream &os=std::cout) const
template<> void print (std::ostream &os) const
virtual void print_global (std::ostream &os=std::cout) const
template<> void print_global (std::ostream &os) const
virtual void print_matlab (const std::string name='NULL') const
virtual void create_subvector (NumericVector< T > &, const std::vector< unsigned int > &) const
static AutoPtr< NumericVector< T > > build (const SolverPackage solver_package=libMesh::default_solver_package())
static std::string get_info ()
static void print_info ()
static unsigned int n_objects ()
typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
void increment_constructor_count (const std::string &name)
void increment_destructor_count (const std::string &name)
bool _is_closed
bool _is_initialized
ParallelType _type
static Counts _counts
static Threads::atomic< unsigned int > _n_objects
static Threads::spin_mutex _mutex
std::vector< T > _values
unsigned int _global_size
unsigned int _local_size
unsigned int _first_local_index
unsigned int _last_local_index
std::ostream & operator<< (std::ostream &os, const NumericVector< T > &v)
Author:
Definition at line 55 of file distributed_vector.h.
Definition at line 105 of file reference_counter.h.
Definition at line 460 of file distributed_vector.h.
References NumericVector< T >::_type, and NumericVector< T >::type().
:
_global_size (0),
_local_size (0),
_first_local_index(0),
_last_local_index (0)
{
this->_type = type;
}
Definition at line 473 of file distributed_vector.h.
References libMesh::init().
{
this->init(n, n, false, type);
}
Definition at line 483 of file distributed_vector.h.
References libMesh::init().
{
this->init(n, n_local, false, type);
}
Definition at line 494 of file distributed_vector.h.
References libMesh::init().
{
this->init(n, n_local, ghost, false, type);
}
Definition at line 506 of file distributed_vector.h.
{
this->clear ();
}
Implements NumericVector< T >.
Definition at line 315 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<local_size(); i++)
this->set(i,std::abs(_values[i]));
}
Implements NumericVector< T >.
Definition at line 781 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
libmesh_assert (i<size());
libmesh_assert (i-first_local_index() < local_size());
_values[i - _first_local_index] += value;
}
Implements NumericVector< T >.
Definition at line 206 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<local_size(); i++)
_values[i] += v;
}
Implements NumericVector< T >.
Definition at line 219 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
add (1., v);
}
Implements NumericVector< T >.
Definition at line 231 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
add(a, v);
}
Implements NumericVector< T >.
Definition at line 315 of file distributed_vector.h.
{ libmesh_error(); }
Implements NumericVector< T >.
Definition at line 191 of file distributed_vector.C.
References libMesh::initialized(), and DenseVector< T >::size().
{
libmesh_assert (V.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<V.size(); i++)
add (dof_indices[i], V(i));
}
Implements NumericVector< T >.
Definition at line 176 of file distributed_vector.C.
References libMesh::initialized(), and NumericVector< T >::size().
{
libmesh_assert (V.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<V.size(); i++)
add (dof_indices[i], V(i));
}
Definition at line 253 of file numeric_vector.C.
References ShellMatrix< T >::vector_mult_add().
{
a.vector_mult_add(*this,v);
}
Implements NumericVector< T >.
Definition at line 160 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (!v.empty());
libmesh_assert (v.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<v.size(); i++)
add (dof_indices[i], v[i]);
}
Definition at line 41 of file numeric_vector.C.
References LASPACK_SOLVERS, libMeshEnums::PETSC_SOLVERS, and TRILINOS_SOLVERS.
Referenced by ExactErrorEstimator::estimate_error().
{
// Build the appropriate vector
switch (solver_package)
{
#ifdef LIBMESH_HAVE_LASPACK
case LASPACK_SOLVERS:
{
AutoPtr<NumericVector<T> > ap(new LaspackVector<T>);
return ap;
}
#endif
#ifdef LIBMESH_HAVE_PETSC
case PETSC_SOLVERS:
{
AutoPtr<NumericVector<T> > ap(new PetscVector<T>);
return ap;
}
#endif
#ifdef LIBMESH_HAVE_TRILINOS
case TRILINOS_SOLVERS:
{
AutoPtr<NumericVector<T> > ap(new EpetraVector<T>);
return ap;
}
#endif
default:
AutoPtr<NumericVector<T> > ap(new DistributedVector<T>);
return ap;
}
AutoPtr<NumericVector<T> > ap(NULL);
return ap;
}
Reimplemented from NumericVector< T >.
Definition at line 652 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;
}
Implements NumericVector< T >.
Definition at line 684 of file distributed_vector.h.
{
AutoPtr<NumericVector<T> > cloned_vector (new DistributedVector<T>);
cloned_vector->init(*this, true);
*cloned_vector = *this;
return cloned_vector;
}
Implements NumericVector< T >.
Definition at line 641 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
this->_is_closed = true;
}
Definition at line 125 of file numeric_vector.h.
Referenced by DofMap::enforce_constraints_exactly(), and DofMap::max_constraint_error().
{ return _is_closed; }
Definition at line 114 of file numeric_vector.C.
References NumericVector< T >::first_local_index(), NumericVector< T >::initialized(), libMesh::initialized(), and NumericVector< T >::last_local_index().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert (this->first_local_index() == other_vector.first_local_index());
libmesh_assert (this->last_local_index() == other_vector.last_local_index());
int rvalue = -1;
unsigned int i = first_local_index();
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > threshold )
rvalue = i;
else
i++;
}
while (rvalue==-1 && i<last_local_index());
return rvalue;
}
Definition at line 140 of file numeric_vector.C.
References NumericVector< T >::first_local_index(), NumericVector< T >::initialized(), libMesh::initialized(), and NumericVector< T >::last_local_index().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert (this->first_local_index() == other_vector.first_local_index());
libmesh_assert (this->last_local_index() == other_vector.last_local_index());
int rvalue = -1;
unsigned int i = first_local_index();
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > threshold )
rvalue = i;
else
i++;
}
while (rvalue==-1 && i<last_local_index());
return rvalue;
}
Definition at line 167 of file numeric_vector.C.
References NumericVector< T >::first_local_index(), NumericVector< T >::initialized(), libMesh::initialized(), and NumericVector< T >::last_local_index().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert (this->first_local_index() == other_vector.first_local_index());
libmesh_assert (this->last_local_index() == other_vector.last_local_index());
int rvalue = -1;
unsigned int i = first_local_index();
do
{
if (( std::abs( (*this)(i).real() - other_vector(i).real() ) > threshold ) ||
( std::abs( (*this)(i).imag() - other_vector(i).imag() ) > threshold ))
rvalue = i;
else
i++;
}
while (rvalue==-1 && i<this->last_local_index());
return rvalue;
}
Definition at line 89 of file numeric_vector.C.
References NumericVector< T >::first_local_index(), NumericVector< T >::initialized(), libMesh::initialized(), and NumericVector< T >::last_local_index().
{
libmesh_assert (this->initialized());
libmesh_assert (other_vector.initialized());
libmesh_assert (this->first_local_index() == other_vector.first_local_index());
libmesh_assert (this->last_local_index() == other_vector.last_local_index());
int rvalue = -1;
unsigned int i = first_local_index();
do
{
if ( std::abs( (*this)(i) - other_vector(i) ) > threshold )
rvalue = i;
else
i++;
}
while (rvalue==-1 && i<last_local_index());
return rvalue;
}
Reimplemented in PetscVector< T >, and EpetraVector< T >.
Definition at line 562 of file numeric_vector.h.
{
std::cerr << 'ERROR: Not Implemented in base class yet!' << std::endl;
libmesh_error();
}
Implements NumericVector< T >.
Definition at line 329 of file distributed_vector.C.
References DistributedVector< T >::_values, DistributedVector< T >::first_local_index(), and DistributedVector< T >::last_local_index().
{
// This function must be run on all processors at once
parallel_only();
// Make sure the NumericVector passed in is really a DistributedVector
const DistributedVector<T>* v = libmesh_cast_ptr<const DistributedVector<T>*>(&V);
// Make sure that the two vectors are distributed in the same way.
libmesh_assert ( this->first_local_index() == v->first_local_index() );
libmesh_assert ( this->last_local_index() == v->last_local_index() );
// The result of dotting together the local parts of the vector.
T local_dot = 0;
for (unsigned int i=0; i<this->local_size(); i++)
local_dot += this->_values[i] * v->_values[i];
// The local dot products are now summed via MPI
Parallel::sum(local_dot);
return local_dot;
}
Definition at line 314 of file numeric_vector.h.
{ return (*this)(i); }
Implements NumericVector< T >.
Definition at line 725 of file distributed_vector.h.
References libMesh::initialized().
Referenced by DistributedVector< T >::dot().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
return _first_local_index;
}
Reimplemented in PetscVector< T >.
Definition at line 714 of file numeric_vector.h.
{
const unsigned int num = index.size();
values.resize(num);
for(unsigned int i=0; i<num; i++)
{
values[i] = (*this)(index[i]);
}
}
Definition at line 45 of file reference_counter.C.
References ReferenceCounter::_counts, and Quality::name().
Referenced by ReferenceCounter::print_info().
{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
std::ostringstream out;
out << '
<< ' ----------------------------------------------------------------------------
<< '| Reference count information |
<< ' ---------------------------------------------------------------------------- ;
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;
out << '| ' << name << ' reference count information:
<< '| Creations: ' << creations << '
<< '| Destructions: ' << destructions << ';
}
out << ' ---------------------------------------------------------------------------- ;
return out.str();
#else
return '';
#endif
}
Definition at line 149 of file reference_counter.h.
References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.
Referenced by ReferenceCountedObject< Value >::ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.first++;
}
Definition at line 167 of file reference_counter.h.
References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.
Referenced by ReferenceCountedObject< Value >::~ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.second++;
}
Implements NumericVector< T >.
Definition at line 620 of file distributed_vector.h.
References libMesh::init(), NumericVector< T >::local_size(), NumericVector< T >::size(), and NumericVector< T >::type().
{
this->init(other.size(),other.local_size(),fast,other.type());
}
On fast==false, the vector is filled by zeros.
Implements NumericVector< T >.
Definition at line 515 of file distributed_vector.h.
References libMesh::libMeshPrivateData::_is_initialized, libMeshEnums::AUTOMATIC, libMesh::COMM_WORLD, libMesh::initialized(), libMeshEnums::PARALLEL, libMeshEnums::SERIAL, and libMesh::zero.
Referenced by DistributedVector< T >::localize().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (n_local <= n);
if (type == AUTOMATIC)
{
if (n == n_local)
this->_type = SERIAL;
else
this->_type = PARALLEL;
}
else
this->_type = type;
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
int n_proc=0, proc_id=0;
MPI_Comm_rank (libMesh::COMM_WORLD, &proc_id);
MPI_Comm_size (libMesh::COMM_WORLD, &n_proc);
std::vector<int> local_sizes (n_proc, 0);
local_sizes[proc_id] = n_local;
Parallel::sum(local_sizes);
// _first_local_index is the sum of _local_size
// for all processor ids less than ours
for (int p=0; p<proc_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!
int sum=0;
for (int p=0; p<n_proc; p++)
sum += local_sizes[p];
libmesh_assert (sum == static_cast<int>(n));
# endif
#else
// No other options without MPI!
if (n != n_local)
{
std::cerr << 'ERROR: MPI is required for n != n_local!'
<< std::endl;
libmesh_error();
}
#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();
}
Implements NumericVector< T >.
Definition at line 630 of file distributed_vector.h.
References libMesh::init().
{
this->init(n,n,fast,type);
}
Implements NumericVector< T >.
Definition at line 605 of file distributed_vector.h.
References libMesh::init().
{
// TODO: we shouldn't ignore the ghost sparsity pattern
this->init(n, n_local, fast, type);
}
Definition at line 109 of file numeric_vector.h.
Referenced by ImplicitSystem::assemble(), ExplicitSystem::assemble_qoi(), ExplicitSystem::assemble_qoi_derivative(), NumericVector< T >::compare(), PetscVector< T >::create_subvector(), and PetscVector< T >::init().
{ return _is_initialized; }
Implements NumericVector< T >.
Definition at line 274 of file distributed_vector.C.
References libMesh::initialized(), and DenseVector< T >::size().
{
libmesh_assert (V.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<V.size(); i++)
this->set (dof_indices[i], V(i));
}
Implements NumericVector< T >.
Definition at line 289 of file distributed_vector.C.
References libMesh::initialized(), and DenseVectorBase< T >::size().
{
libmesh_assert (V.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<V.size(); i++)
this->set (dof_indices[i], V(i));
}
Implements NumericVector< T >.
Definition at line 243 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (!v.empty());
libmesh_assert (v.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<v.size(); i++)
this->set (dof_indices[i], v[i]);
}
Implements NumericVector< T >.
Definition at line 259 of file distributed_vector.C.
References libMesh::initialized(), and NumericVector< T >::size().
{
libmesh_assert (V.size() == dof_indices.size());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<V.size(); i++)
this->set (dof_indices[i], V(i));
}
Implements NumericVector< T >.
Definition at line 60 of file distributed_vector.C.
References libMesh::initialized().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
double local_l1 = 0.;
for (unsigned int i=0; i<local_size(); i++)
local_l1 += std::abs(_values[i]);
Parallel::sum(local_l1);
return local_l1;
}
Implements NumericVector< T >.
Definition at line 82 of file distributed_vector.C.
References libMesh::initialized(), and libmesh_norm().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
double local_l2 = 0.;
for (unsigned int i=0; i<local_size(); i++)
local_l2 += libmesh_norm(_values[i]);
Parallel::sum(local_l2);
return std::sqrt(local_l2);
}
Implements NumericVector< T >.
Definition at line 738 of file distributed_vector.h.
References libMesh::initialized().
Referenced by DistributedVector< T >::dot().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
return _last_local_index;
}
Implements NumericVector< T >.
Definition at line 104 of file distributed_vector.C.
References libMesh::initialized(), and std::max().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
Real local_linfty = 0.;
for (unsigned int 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
Parallel::max(local_linfty);
return local_linfty;
}
Implements NumericVector< T >.
Definition at line 712 of file distributed_vector.h.
References libMesh::initialized().
Referenced by DistributedVector< T >::operator=().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
return _local_size;
}
Implements NumericVector< T >.
Definition at line 438 of file distributed_vector.C.
References DistributedVector< T >::_first_local_index, DistributedVector< T >::_global_size, NumericVector< T >::_is_closed, NumericVector< T >::_is_initialized, DistributedVector< T >::_last_local_index, DistributedVector< T >::_local_size, DistributedVector< T >::_values, and libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
DistributedVector<T>* v_local = libmesh_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 (local_size() == size());
#endif
}
Implements NumericVector< T >.
Definition at line 520 of file distributed_vector.C.
References libMesh::initialized().
Referenced by DistributedVector< T >::localize().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
v_local = this->_values;
Parallel::allgather (v_local);
#ifndef LIBMESH_HAVE_MPI
libmesh_assert (local_size() == size());
#endif
}
Implements NumericVector< T >.
Definition at line 470 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
// TODO: We don't yet support the send list; this is inefficient:
localize (v_local_in);
}
Implements NumericVector< T >.
Definition at line 484 of file distributed_vector.C.
References DistributedVector< T >::_values, DistributedVector< T >::init(), DistributedVector< T >::localize(), and libMeshEnums::PARALLEL.
{
// Only good for serial vectors
libmesh_assert (this->size() == this->local_size());
libmesh_assert (last_local_idx > first_local_idx);
libmesh_assert (send_list.size() <= this->size());
libmesh_assert (last_local_idx < this->size());
const unsigned int size = this->size();
const unsigned int local_size = (last_local_idx - first_local_idx + 1);
// Don't bother for serial cases
if ((first_local_idx == 0) &&
(local_size == size))
return;
// Build a parallel vector, initialize it with the local
// parts of (*this)
DistributedVector<T> parallel_vec;
parallel_vec.init (size, local_size, true, PARALLEL);
// Copy part of *this into the parallel_vec
for (unsigned int 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);
}
Implements NumericVector< T >.
Definition at line 541 of file distributed_vector.C.
References libMesh::initialized().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
v_local = this->_values;
Parallel::gather (pid, v_local);
#ifndef LIBMESH_HAVE_MPI
libmesh_assert (local_size() == size());
#endif
}
Implements NumericVector< T >.
Definition at line 819 of file distributed_vector.h.
References libMesh::initialized(), libmesh_real(), and std::max().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
Real local_max = _values.size() ?
libmesh_real(_values[0]) : -std::numeric_limits<Real>::max();
for (unsigned int i = 1; i < _values.size(); ++i)
local_max = std::max(libmesh_real(_values[i]), local_max);
Parallel::max(local_max);
return local_max;
}
Implements NumericVector< T >.
Definition at line 796 of file distributed_vector.h.
References libMesh::initialized(), libmesh_real(), std::max(), and std::min().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
Real local_min = _values.size() ?
libmesh_real(_values[0]) : std::numeric_limits<Real>::max();
for (unsigned int i = 1; i < _values.size(); ++i)
local_min = std::min(libmesh_real(_values[i]), local_min);
Parallel::min(local_min);
return local_min;
}
Definition at line 76 of file reference_counter.h.
References ReferenceCounter::_n_objects.
Referenced by System::read_serialized_blocked_dof_objects(), and System::write_serialized_blocked_dof_objects().
{ return _n_objects; }
Implements NumericVector< T >.
Definition at line 751 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
libmesh_assert ( ((i >= first_local_index()) &&
(i < last_local_index())) );
return _values[i - _first_local_index];
}
Definition at line 340 of file numeric_vector.h.
{ this->scale(a); return *this; }
Implements NumericVector< T >.
Definition at line 130 of file distributed_vector.C.
References libMesh::closed(), and libMesh::initialized().
{
libmesh_assert (this->closed());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
add(1., v);
return *this;
}
Implements NumericVector< T >.
Definition at line 145 of file distributed_vector.C.
References libMesh::closed(), and libMesh::initialized().
{
libmesh_assert (this->closed());
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
add(-1., v);
return *this;
}
Definition at line 346 of file numeric_vector.h.
{ this->scale(1./a); return *this; }
Definition at line 387 of file distributed_vector.C.
References DistributedVector< T >::_first_local_index, DistributedVector< T >::_global_size, NumericVector< T >::_is_closed, NumericVector< T >::_is_initialized, libMesh::libMeshPrivateData::_is_initialized, DistributedVector< T >::_last_local_index, DistributedVector< T >::_local_size, DistributedVector< T >::_values, and 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();
}
return *this;
}
Implements NumericVector< T >.
Definition at line 373 of file distributed_vector.C.
{
// Make sure the NumericVector passed in is really a DistributedVector
const DistributedVector<T>* v = libmesh_cast_ptr<const DistributedVector<T>*>(&v_in);
*this = *v;
return *this;
}
Implements NumericVector< T >.
Definition at line 413 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
if (v.size() == local_size())
_values = v;
else if (v.size() == size())
for (unsigned int i=first_local_index(); i<last_local_index(); i++)
_values[i-first_local_index()] = v[i];
else
{
libmesh_error();
}
return *this;
}
Implements NumericVector< T >.
Definition at line 357 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<local_size(); i++)
_values[i] = s;
return *this;
}
Implements NumericVector< T >.
Definition at line 563 of file distributed_vector.C.
{
libmesh_not_implemented();
}
Definition at line 749 of file numeric_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
os << 'Size global = ' << this->size()
<< ' local = ' << this->local_size() << std::endl;
os << '# Value' << std::endl;
for (unsigned int i=this->first_local_index(); i<this->last_local_index(); i++)
os << i << ' ' << (*this)(i) << std::endl;
}
Definition at line 731 of file numeric_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
os << 'Size global = ' << this->size()
<< ' local = ' << this->local_size() << std::endl;
// std::complex<>::operator<<() is defined, but use this form
os << '# Real part Imaginary part' << std::endl;
for (unsigned int i=this->first_local_index(); i<this->last_local_index(); i++)
os << i << ' '
<< (*this)(i).real() << ' '
<< (*this)(i).imag() << std::endl;
}
Definition at line 764 of file numeric_vector.h.
References libMesh::initialized(), 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 (libMesh::processor_id())
return;
os << 'Size global = ' << this->size() << std::endl;
os << '# Real part Imaginary part' << std::endl;
for (unsigned int i=0; i!=v.size(); i++)
os << i << ' '
<< v[i].real() << ' '
<< v[i].imag() << std::endl;
}
Definition at line 786 of file numeric_vector.h.
References libMesh::initialized(), 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 (libMesh::processor_id())
return;
os << 'Size global = ' << this->size() << std::endl;
os << '# Value' << std::endl;
for (unsigned int i=0; i!=v.size(); i++)
os << i << ' ' << v[i] << std::endl;
}
Definition at line 83 of file reference_counter.C.
References ReferenceCounter::get_info().
{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
std::cout << ReferenceCounter::get_info();
#endif
}
Reimplemented in PetscVector< T >, and EpetraVector< T >.
Definition at line 549 of file numeric_vector.h.
{
std::cerr << 'ERROR: Not Implemented in base class yet!' << std::endl;
std::cerr << 'ERROR writing MATLAB file ' << name << std::endl;
libmesh_error();
}
Implements NumericVector< T >.
Definition at line 304 of file distributed_vector.C.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
for (unsigned int i=0; i<local_size(); i++)
_values[i] *= factor;
}
Implements NumericVector< T >.
Definition at line 766 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
libmesh_assert (i<size());
libmesh_assert (i-first_local_index() < local_size());
_values[i - _first_local_index] = value;
}
Implements NumericVector< T >.
Definition at line 699 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
return _global_size;
}
Note that the indices must necessary live on this processor.
Definition at line 193 of file numeric_vector.C.
Referenced by System::discrete_var_norm().
{
NumericVector<T> & v = *this;
std::set<unsigned int>::iterator it = indices.begin();
const std::set<unsigned int>::iterator it_end = indices.end();
Real norm = 0;
for(; it!=it_end; ++it)
norm += std::abs(v(*it));
Parallel::sum(norm);
return norm;
}
Note that the indices must necessary live on this processor.
Definition at line 211 of file numeric_vector.C.
References libmesh_norm().
Referenced by System::discrete_var_norm().
{
NumericVector<T> & v = *this;
std::set<unsigned int>::iterator it = indices.begin();
const std::set<unsigned int>::iterator it_end = indices.end();
Real norm = 0;
for(; it!=it_end; ++it)
norm += libmesh_norm(v(*it));
Parallel::sum(norm);
return std::sqrt(norm);
}
Note that the indices must necessary live on this processor.
Definition at line 229 of file numeric_vector.C.
References std::max().
Referenced by System::discrete_var_norm().
{
NumericVector<T> & v = *this;
std::set<unsigned int>::iterator it = indices.begin();
const std::set<unsigned int>::iterator it_end = indices.end();
Real norm = 0;
for(; it!=it_end; ++it)
{
Real value = std::abs(v(*it));
if(value > norm)
norm = value;
}
Parallel::max(norm);
return norm;
}
Implements NumericVector< T >.
Definition at line 38 of file distributed_vector.C.
References libMesh::initialized().
{
// This function must be run on all processors at once
parallel_only();
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
T local_sum = 0.;
for (unsigned int i=0; i<local_size(); i++)
local_sum += _values[i];
Parallel::sum(local_sum);
return local_sum;
}
Reimplemented from NumericVector< T >.
Definition at line 841 of file distributed_vector.h.
References DistributedVector< T >::_first_local_index, DistributedVector< T >::_global_size, DistributedVector< T >::_last_local_index, DistributedVector< T >::_local_size, and DistributedVector< T >::_values.
{
DistributedVector<T>& v = libmesh_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);
}
Definition at line 119 of file numeric_vector.h.
{ return _type; }
Definition at line 114 of file numeric_vector.h.
Referenced by DistributedVector< T >::DistributedVector(), DofMap::enforce_constraints_exactly(), EpetraVector< T >::EpetraVector(), EpetraVector< T >::init(), LaspackVector< T >::init(), DistributedVector< T >::init(), PetscVector< T >::localize(), PetscVector< T >::PetscVector(), System::project_vector(), and System::read_serialized_vector().
{ return _type; }
Implements NumericVector< T >.
Definition at line 669 of file distributed_vector.h.
References libMesh::initialized().
{
libmesh_assert (this->initialized());
libmesh_assert (_values.size() == _local_size);
libmesh_assert ((_last_local_index - _first_local_index) == _local_size);
std::fill (_values.begin(),
_values.end(),
0.);
}
Definition at line 537 of file numeric_vector.h.
{
v.print_global(os);
return os;
}
Definition at line 110 of file reference_counter.h.
Referenced by ReferenceCounter::get_info(), ReferenceCounter::increment_constructor_count(), and ReferenceCounter::increment_destructor_count().
Definition at line 447 of file distributed_vector.h.
Referenced by DistributedVector< T >::localize(), DistributedVector< T >::operator=(), and DistributedVector< T >::swap().
Definition at line 437 of file distributed_vector.h.
Referenced by DistributedVector< T >::localize(), DistributedVector< T >::operator=(), and DistributedVector< T >::swap().
Definition at line 582 of file numeric_vector.h.
Referenced by NumericVector< Number >::closed(), PetscVector< T >::init(), DistributedVector< T >::localize(), LaspackVector< T >::operator=(), DistributedVector< T >::operator=(), PetscVector< T >::PetscVector(), and NumericVector< T >::swap().
Definition at line 588 of file numeric_vector.h.
Referenced by PetscVector< T >::create_subvector(), EpetraVector< T >::EpetraVector(), PetscVector< T >::init(), NumericVector< Number >::initialized(), DistributedVector< T >::localize(), DistributedVector< T >::operator=(), PetscVector< T >::PetscVector(), and NumericVector< T >::swap().
Definition at line 452 of file distributed_vector.h.
Referenced by DistributedVector< T >::localize(), DistributedVector< T >::operator=(), and DistributedVector< T >::swap().
Definition at line 442 of file distributed_vector.h.
Referenced by DistributedVector< T >::localize(), DistributedVector< T >::operator=(), and DistributedVector< T >::swap().
Definition at line 123 of file reference_counter.h.
Definition at line 118 of file reference_counter.h.
Referenced by ReferenceCounter::n_objects(), ReferenceCounter::ReferenceCounter(), and ReferenceCounter::~ReferenceCounter().
Definition at line 593 of file numeric_vector.h.
Referenced by DistributedVector< T >::DistributedVector(), EpetraVector< T >::EpetraVector(), PetscVector< T >::init(), PetscVector< T >::operator=(), PetscVector< T >::PetscVector(), NumericVector< T >::swap(), and NumericVector< Number >::type().
Definition at line 432 of file distributed_vector.h.
Referenced by DistributedVector< T >::dot(), DistributedVector< T >::localize(), DistributedVector< T >::operator=(), and DistributedVector< T >::swap().
Generated automatically by Doxygen for libMesh from the source code.