libMesh::EpetraVector< T > Class Template Referencefinal

#include <trilinos_epetra_vector.h>

Inheritance diagram for libMesh::EpetraVector< T >:

Public Member Functions

 EpetraVector (const Parallel::Communicator &comm, const ParallelType type=AUTOMATIC)
 
 EpetraVector (const Parallel::Communicator &comm, const numeric_index_type n, const ParallelType type=AUTOMATIC)
 
 EpetraVector (const Parallel::Communicator &comm, const numeric_index_type n, const numeric_index_type n_local, const ParallelType type=AUTOMATIC)
 
 EpetraVector (const Parallel::Communicator &comm, const numeric_index_type N, const numeric_index_type n_local, const std::vector< numeric_index_type > &ghost, const ParallelType type=AUTOMATIC)
 
 EpetraVector (Epetra_Vector &v, const Parallel::Communicator &comm)
 
 EpetraVector (EpetraVector &&)=delete
 
 EpetraVector (const EpetraVector &)=delete
 
EpetraVectoroperator= (const EpetraVector &)=delete
 
EpetraVectoroperator= (EpetraVector &&)=delete
 
virtual ~EpetraVector ()
 
virtual void close () override
 
virtual void clear () override
 
virtual void zero () override
 
virtual std::unique_ptr< NumericVector< T > > zero_clone () const override
 
virtual std::unique_ptr< NumericVector< T > > clone () const override
 
virtual void init (const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
 
virtual void init (const numeric_index_type N, const bool fast=false, const ParallelType type=AUTOMATIC) override
 
virtual void init (const numeric_index_type N, const numeric_index_type n_local, const std::vector< numeric_index_type > &ghost, const bool fast=false, const ParallelType=AUTOMATIC) override
 
virtual void init (const NumericVector< T > &other, const bool fast=false) override
 
virtual NumericVector< T > & operator= (const T s) override
 
virtual NumericVector< T > & operator= (const NumericVector< T > &v) override
 
virtual NumericVector< T > & operator= (const std::vector< T > &v) override
 
virtual Real min () const override
 
virtual Real max () const override
 
virtual T sum () const override
 
virtual Real l1_norm () const override
 
virtual Real l2_norm () const override
 
virtual Real linfty_norm () const override
 
virtual numeric_index_type size () const override
 
virtual numeric_index_type local_size () const override
 
virtual numeric_index_type first_local_index () const override
 
virtual numeric_index_type last_local_index () const override
 
virtual T operator() (const numeric_index_type i) const override
 
virtual NumericVector< T > & operator+= (const NumericVector< T > &v) override
 
virtual NumericVector< T > & operator-= (const NumericVector< T > &v) override
 
virtual NumericVector< T > & operator/= (const NumericVector< T > &v) override
 
virtual void reciprocal () override
 
virtual void conjugate () override
 
virtual void set (const numeric_index_type i, const T value) override
 
virtual void add (const numeric_index_type i, const T value) override
 
virtual void add (const T s) override
 
virtual void add (const NumericVector< T > &v) override
 
virtual void add (const T a, const NumericVector< T > &v) override
 
virtual void add_vector (const T *v, const std::vector< numeric_index_type > &dof_indices) override
 
virtual void add_vector (const NumericVector< T > &v, const SparseMatrix< T > &A) override
 
virtual void add_vector_transpose (const NumericVector< T > &v, const SparseMatrix< T > &A) override
 
virtual void insert (const T *v, const std::vector< numeric_index_type > &dof_indices) override
 
virtual void scale (const T factor) override
 
virtual void abs () override
 
virtual T dot (const NumericVector< T > &v) const override
 
virtual void localize (std::vector< T > &v_local) const override
 
virtual void localize (NumericVector< T > &v_local) const override
 
virtual void localize (NumericVector< T > &v_local, const std::vector< numeric_index_type > &send_list) const override
 
virtual void localize (std::vector< T > &v_local, const std::vector< numeric_index_type > &indices) const override
 
virtual void localize (const numeric_index_type first_local_idx, const numeric_index_type last_local_idx, const std::vector< numeric_index_type > &send_list) override
 
virtual void localize_to_one (std::vector< T > &v_local, const processor_id_type proc_id=0) const override
 
virtual void pointwise_mult (const NumericVector< T > &vec1, const NumericVector< T > &vec2) override
 
virtual void create_subvector (NumericVector< T > &subvector, const std::vector< numeric_index_type > &rows) const override
 
virtual void swap (NumericVector< T > &v) override
 
Epetra_Vector * vec ()
 
virtual bool initialized () const
 
ParallelType type () const
 
ParallelTypetype ()
 
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)
 
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)
 
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
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static std::unique_ptr< NumericVector< T > > build (const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
 
static std::string get_info ()
 
static void print_info (std::ostream &out=libMesh::out)
 
static unsigned int n_objects ()
 
static void enable_print_counter_info ()
 
static void disable_print_counter_info ()
 

Protected Types

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

Protected Member Functions

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 Member Functions

int SumIntoGlobalValues (int numIDs, const int *GIDs, const double *values)
 
int SumIntoGlobalValues (const Epetra_IntSerialDenseVector &GIDs, const Epetra_SerialDenseVector &values)
 
int ReplaceGlobalValues (int numIDs, const int *GIDs, const double *values)
 
int ReplaceGlobalValues (const Epetra_IntSerialDenseVector &GIDs, const Epetra_SerialDenseVector &values)
 
int SumIntoGlobalValues (int numIDs, const int *GIDs, const int *numValuesPerID, const double *values)
 
int ReplaceGlobalValues (int numIDs, const int *GIDs, const int *numValuesPerID, const double *values)
 
int GlobalAssemble (Epetra_CombineMode mode=Add)
 
void setIgnoreNonLocalEntries (bool flag)
 
void FEoperatorequals (const EpetraVector &source)
 
int inputValues (int numIDs, const int *GIDs, const double *values, bool accumulate)
 
int inputValues (int numIDs, const int *GIDs, const int *numValuesPerID, const double *values, bool accumulate)
 
int inputNonlocalValue (int GID, double value, bool accumulate)
 
int inputNonlocalValues (int GID, int numValues, const double *values, bool accumulate)
 
void destroyNonlocalData ()
 

Private Attributes

Epetra_Vector * _vec
 
std::unique_ptr< Epetra_Map > _map
 
bool _destroy_vec_on_exit
 
int myFirstID_
 
int myNumIDs_
 
double * myCoefs_
 
int * nonlocalIDs_
 
int * nonlocalElementSize_
 
int numNonlocalIDs_
 
int allocatedNonlocalLength_
 
double ** nonlocalCoefs_
 
unsigned char last_edit
 
bool ignoreNonLocalEntries_
 

Detailed Description

template<typename T>
class libMesh::EpetraVector< T >

This class provides a nice interface to the Trilinos Epetra_Vector object. All overridden virtual functions are documented in numeric_vector.h.

Author
Derek R. Gaston
Date
2008

Definition at line 62 of file trilinos_epetra_vector.h.

Member Typedef Documentation

◆ Counts

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

Data structure to log the information. The log is identified by the class name.

Definition at line 117 of file reference_counter.h.

Constructor & Destructor Documentation

◆ EpetraVector() [1/7]

template<typename T >
libMesh::EpetraVector< T >::EpetraVector ( const Parallel::Communicator comm,
const ParallelType  type = AUTOMATIC 
)
inlineexplicit

Dummy-Constructor. Dimension=0

Definition at line 406 of file trilinos_epetra_vector.h.

References libMesh::NumericVector< T >::_type, and libMesh::NumericVector< T >::type().

407  :
408  NumericVector<T>(comm, type),
409  _destroy_vec_on_exit(true),
410  myFirstID_(0),
411  myNumIDs_(0),
412  myCoefs_(nullptr),
413  nonlocalIDs_(nullptr),
414  nonlocalElementSize_(nullptr),
415  numNonlocalIDs_(0),
417  nonlocalCoefs_(nullptr),
418  last_edit(0),
420 {
421  this->_type = type;
422 }
const Parallel::Communicator & comm() const
ParallelType type() const

◆ EpetraVector() [2/7]

template<typename T >
libMesh::EpetraVector< T >::EpetraVector ( const Parallel::Communicator comm,
const numeric_index_type  n,
const ParallelType  type = AUTOMATIC 
)
inlineexplicit

Constructor. Set dimension to n and initialize all elements with zero.

Definition at line 428 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::init(), and libMesh::NumericVector< T >::type().

430  :
431  NumericVector<T>(comm, type),
432  _destroy_vec_on_exit(true),
433  myFirstID_(0),
434  myNumIDs_(0),
435  myCoefs_(nullptr),
436  nonlocalIDs_(nullptr),
437  nonlocalElementSize_(nullptr),
438  numNonlocalIDs_(0),
440  nonlocalCoefs_(nullptr),
441  last_edit(0),
443 
444 {
445  this->init(n, n, false, type);
446 }
const Parallel::Communicator & comm() const
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
ParallelType type() const

◆ EpetraVector() [3/7]

template<typename T >
libMesh::EpetraVector< T >::EpetraVector ( const Parallel::Communicator comm,
const numeric_index_type  n,
const numeric_index_type  n_local,
const ParallelType  type = AUTOMATIC 
)
inline

Constructor. Set local dimension to n_local, the global dimension to n, and initialize all elements with zero.

Definition at line 452 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::init(), and libMesh::NumericVector< T >::type().

455  :
456  NumericVector<T>(comm, type),
457  _destroy_vec_on_exit(true),
458  myFirstID_(0),
459  myNumIDs_(0),
460  myCoefs_(nullptr),
461  nonlocalIDs_(nullptr),
462  nonlocalElementSize_(nullptr),
463  numNonlocalIDs_(0),
465  nonlocalCoefs_(nullptr),
466  last_edit(0),
468 {
469  this->init(n, n_local, false, type);
470 }
const Parallel::Communicator & comm() const
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
ParallelType type() const

◆ EpetraVector() [4/7]

template<typename T >
libMesh::EpetraVector< T >::EpetraVector ( const Parallel::Communicator comm,
const numeric_index_type  N,
const numeric_index_type  n_local,
const std::vector< numeric_index_type > &  ghost,
const ParallelType  type = 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 517 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::init(), and libMesh::NumericVector< T >::type().

521  :
522  NumericVector<T>(comm, AUTOMATIC),
523  _destroy_vec_on_exit(true),
524  myFirstID_(0),
525  myNumIDs_(0),
526  myCoefs_(nullptr),
527  nonlocalIDs_(nullptr),
528  nonlocalElementSize_(nullptr),
529  numNonlocalIDs_(0),
531  nonlocalCoefs_(nullptr),
532  last_edit(0),
534 {
535  this->init(n, n_local, ghost, false, type);
536 }
const Parallel::Communicator & comm() const
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
ParallelType type() const

◆ EpetraVector() [5/7]

template<typename T >
libMesh::EpetraVector< T >::EpetraVector ( Epetra_Vector &  v,
const Parallel::Communicator comm 
)
inline

Constructor. Creates a EpetraVector assuming you already have a valid Epetra Vec object. In this case, v is NOT destroyed by the EpetraVector constructor when this object goes out of scope. This allows ownership of v to remain with the original creator, and to simply provide additional functionality with the EpetraVector.

Definition at line 477 of file trilinos_epetra_vector.h.

References libMesh::NumericVector< T >::_is_closed, libMesh::NumericVector< T >::_is_initialized, libMesh::EpetraVector< T >::_map, libMesh::NumericVector< T >::_type, libMesh::EpetraVector< T >::_vec, libMesh::ParallelObject::comm(), libMesh::EpetraVector< T >::myCoefs_, libMesh::EpetraVector< T >::myFirstID_, libMesh::EpetraVector< T >::myNumIDs_, and libMesh::PARALLEL.

478  :
479  NumericVector<T>(comm, AUTOMATIC),
480  _destroy_vec_on_exit(false),
481  myFirstID_(0),
482  myNumIDs_(0),
483  myCoefs_(nullptr),
484  nonlocalIDs_(nullptr),
485  nonlocalElementSize_(nullptr),
486  numNonlocalIDs_(0),
488  nonlocalCoefs_(nullptr),
489  last_edit(0),
491 {
492  _vec = &v;
493 
494  this->_type = PARALLEL; // FIXME - need to determine this from v!
495 
496  myFirstID_ = _vec->Map().MinMyGID();
497  myNumIDs_ = _vec->Map().NumMyElements();
498 
499  _map.reset(new Epetra_Map(_vec->GlobalLength(),
500  _vec->MyLength(),
501  0, // IndexBase = 0 for C/C++, 1 for Fortran.
502  Epetra_MpiComm (this->comm().get())));
503 
504  //Currently we impose the restriction that NumVectors==1, so we won't
505  //need the LDA argument when calling ExtractView. Hence the "dummy" arg.
506  int dummy;
507  _vec->ExtractView(&myCoefs_, &dummy);
508 
509  this->_is_closed = true;
510  this->_is_initialized = true;
511 }
std::unique_ptr< Epetra_Map > _map
const Parallel::Communicator & comm() const

◆ EpetraVector() [6/7]

template<typename T>
libMesh::EpetraVector< T >::EpetraVector ( EpetraVector< T > &&  )
delete

This class manages the lifetime of an Epetra_Vector manually, so we don't want to allow any automatic copy/move functions to be generated, and we can't default the destructor.

◆ EpetraVector() [7/7]

template<typename T>
libMesh::EpetraVector< T >::EpetraVector ( const EpetraVector< T > &  )
delete

◆ ~EpetraVector()

template<typename T >
libMesh::EpetraVector< T >::~EpetraVector ( )
inlinevirtual

Definition at line 553 of file trilinos_epetra_vector.h.

554 {
555  this->clear ();
556 }
virtual void clear() override

Member Function Documentation

◆ abs()

template<typename T >
void libMesh::EpetraVector< T >::abs ( )
overridevirtual

Sets $ u_i \leftarrow |u_i| $ for each entry in the vector.

Implements libMesh::NumericVector< T >.

Definition at line 305 of file trilinos_epetra_vector.C.

306 {
307  _vec->Abs(*_vec);
308 }

◆ add() [1/4]

template<typename T >
void libMesh::EpetraVector< T >::add ( const numeric_index_type  i,
const T  value 
)
overridevirtual

Adds value to each entry of the vector.

Implements libMesh::NumericVector< T >.

Definition at line 198 of file trilinos_epetra_vector.C.

References value.

199 {
200  int i = static_cast<int> (i_in);
201  T value = value_in;
202 
203  libmesh_assert_less (i_in, this->size());
204 
205  SumIntoGlobalValues(1, &i, &value);
206 
207  this->_is_closed = false;
208 }
virtual numeric_index_type size() const override
int SumIntoGlobalValues(int numIDs, const int *GIDs, const double *values)
static const bool value
Definition: xdr_io.C:109

◆ add() [2/4]

template<typename T >
void libMesh::EpetraVector< T >::add ( const T  s)
overridevirtual

Adds s to each entry of the vector, $ u_i \leftarrow u_i + s $

Implements libMesh::NumericVector< T >.

Definition at line 253 of file trilinos_epetra_vector.C.

254 {
255  const unsigned int nl = _vec->MyLength();
256 
257  T * values = _vec->Values();
258 
259  for (unsigned int i=0; i<nl; i++)
260  values[i]+=v_in;
261 
262  this->_is_closed = false;
263 }

◆ add() [3/4]

template<typename T >
void libMesh::EpetraVector< T >::add ( const NumericVector< T > &  v)
overridevirtual

Adds v to this, $ \vec{u} \leftarrow \vec{u} + \vec{v} $. Equivalent to calling operator+=().

Implements libMesh::NumericVector< T >.

Definition at line 267 of file trilinos_epetra_vector.C.

268 {
269  this->add (1., v);
270 }
virtual void add(const numeric_index_type i, const T value) override

◆ add() [4/4]

template<typename T >
void libMesh::EpetraVector< T >::add ( const T  a,
const NumericVector< T > &  v 
)
overridevirtual

Vector addition with a scalar multiple, $ \vec{u} \leftarrow \vec{u} + a\vec{v} $. Equivalent to calling operator+=().

Implements libMesh::NumericVector< T >.

Definition at line 274 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec, and libMesh::EpetraVector< T >::size().

275 {
276  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
277 
278  libmesh_assert_equal_to (this->size(), v->size());
279 
280  _vec->Update(a_in,*v->_vec, 1.);
281 }
virtual numeric_index_type size() const override

◆ add_vector() [1/6]

template<typename T >
void libMesh::EpetraVector< T >::add_vector ( const T *  v,
const std::vector< numeric_index_type > &  dof_indices 
)
overridevirtual

Computes $ \vec{u} \leftarrow \vec{u} + \vec{v} $, 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 from libMesh::NumericVector< T >.

Definition at line 213 of file trilinos_epetra_vector.C.

References libMesh::numeric_trilinos_cast().

215 {
216  libmesh_assert_equal_to (sizeof(numeric_index_type), sizeof(int));
217 
218  SumIntoGlobalValues (cast_int<numeric_index_type>(dof_indices.size()),
219  numeric_trilinos_cast(dof_indices.data()),
220  const_cast<T *>(v));
221 }
dof_id_type numeric_index_type
Definition: id_types.h:92
int SumIntoGlobalValues(int numIDs, const int *GIDs, const double *values)
int * numeric_trilinos_cast(const numeric_index_type *p)

◆ add_vector() [2/6]

template<typename T >
void libMesh::EpetraVector< T >::add_vector ( const NumericVector< T > &  v,
const SparseMatrix< T > &  A 
)
overridevirtual

Computes $ \vec{u} \leftarrow \vec{u} + A \vec{v} $, i.e. adds the product of a SparseMatrix A and a NumericVector v to this.

Implements libMesh::NumericVector< T >.

Definition at line 227 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec, A, and libMesh::EpetraVector< T >::zero_clone().

229 {
230  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
231  const EpetraMatrix<T> * A = cast_ptr<const EpetraMatrix<T> *>(&A_in);
232 
233  // FIXME - does Trilinos let us do this *without* memory allocation?
234  std::unique_ptr<NumericVector<T>> temp = v->zero_clone();
235  EpetraVector<T> * temp_v = cast_ptr<EpetraVector<T> *>(temp.get());
236  A->mat()->Multiply(false, *v->_vec, *temp_v->_vec);
237  *this += *temp;
238 }
static PetscErrorCode Mat * A

◆ add_vector() [3/6]

template<typename T>
void libMesh::NumericVector< T >::add_vector ( const std::vector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineinherited

Computes $ \vec{u} \leftarrow \vec{u} + \vec{v} $, where v is a std::vector and each dof_indices[i] specifies where to add value v[i].

Definition at line 835 of file numeric_vector.h.

837 {
838  libmesh_assert(v.size() == dof_indices.size());
839  if (!v.empty())
840  this->add_vector(v.data(), dof_indices);
841 }
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)

◆ add_vector() [4/6]

template<typename T>
void libMesh::NumericVector< T >::add_vector ( const NumericVector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
virtualinherited

Computes $ \vec{u} \leftarrow \vec{u} + \vec{v} $, where v is a NumericVector and each dof_indices[i] specifies where to add value v(i).

Definition at line 372 of file numeric_vector.C.

374 {
375  const std::size_t n = dof_indices.size();
376  libmesh_assert_equal_to(v.size(), n);
377  for (numeric_index_type i=0; i != n; i++)
378  this->add (dof_indices[i], v(i));
379 }
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual void add(const numeric_index_type i, const T value)=0

◆ add_vector() [5/6]

template<typename T>
void libMesh::NumericVector< T >::add_vector ( const DenseVector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineinherited

Computes $ \vec{u} \leftarrow \vec{u} + \vec{v} $, where v is a DenseVector and each dof_indices[i] specifies where to add value v(i).

Definition at line 847 of file numeric_vector.h.

849 {
850  libmesh_assert(v.size() == dof_indices.size());
851  if (!v.empty())
852  this->add_vector(&v(0), dof_indices);
853 }
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)

◆ add_vector() [6/6]

template<typename T>
void libMesh::NumericVector< T >::add_vector ( const NumericVector< T > &  v,
const ShellMatrix< T > &  A 
)
inherited

Computes $ \vec{u} \leftarrow \vec{u} + A \vec{v} $, i.e. adds the product of a ShellMatrix A and a NumericVector v to this.

Definition at line 384 of file numeric_vector.C.

386 {
387  a.vector_mult_add(*this,v);
388 }

◆ add_vector_transpose()

template<typename T >
void libMesh::EpetraVector< T >::add_vector_transpose ( const NumericVector< T > &  v,
const SparseMatrix< T > &  A 
)
overridevirtual

Computes $ \vec{u} \leftarrow \vec{u} + A^T \vec{v} $, i.e. adds the product of the transpose of a SparseMatrix A and a NumericVector v to this.

Implements libMesh::NumericVector< T >.

Definition at line 244 of file trilinos_epetra_vector.C.

246 {
247  libmesh_not_implemented();
248 }

◆ build()

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

Builds a NumericVector on the processors in communicator comm using the linear solver package specified by solver_package

Definition at line 48 of file numeric_vector.C.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::System::add_vector(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::System::calculate_norm(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), and libMesh::CondensedEigenSystem::get_eigenpair().

49 {
50  // Build the appropriate vector
51  switch (solver_package)
52  {
53 
54 #ifdef LIBMESH_HAVE_LASPACK
55  case LASPACK_SOLVERS:
56  return libmesh_make_unique<LaspackVector<T>>(comm, AUTOMATIC);
57 #endif
58 
59 #ifdef LIBMESH_HAVE_PETSC
60  case PETSC_SOLVERS:
61  return libmesh_make_unique<PetscVector<T>>(comm, AUTOMATIC);
62 #endif
63 
64 #ifdef LIBMESH_TRILINOS_HAVE_EPETRA
65  case TRILINOS_SOLVERS:
66  return libmesh_make_unique<EpetraVector<T>>(comm, AUTOMATIC);
67 #endif
68 
69 #ifdef LIBMESH_HAVE_EIGEN
70  case EIGEN_SOLVERS:
71  return libmesh_make_unique<EigenSparseVector<T>>(comm, AUTOMATIC);
72 #endif
73 
74  default:
75  return libmesh_make_unique<DistributedVector<T>>(comm, AUTOMATIC);
76  }
77 }
EIGEN_SOLVERS
Definition: libmesh.C:246
TRILINOS_SOLVERS
Definition: libmesh.C:244
const Parallel::Communicator & comm() const
LASPACK_SOLVERS
Definition: libmesh.C:248

◆ clear()

template<typename T >
void libMesh::EpetraVector< T >::clear ( )
inlineoverridevirtual

Restores the NumericVector<T> to a pristine state.

Reimplemented from libMesh::NumericVector< T >.

Definition at line 666 of file trilinos_epetra_vector.h.

References libMesh::libMeshPrivateData::_is_initialized, and libMesh::initialized().

667 {
668  if (this->initialized())
669  {
670  // We might just be an interface to a user-provided _vec
671  if (this->_destroy_vec_on_exit)
672  {
673  delete _vec;
674  _vec = nullptr;
675  }
676 
677  // But we currently always own our own _map
678  _map.reset();
679  }
680 
681  this->_is_closed = this->_is_initialized = false;
682 }
std::unique_ptr< Epetra_Map > _map
virtual bool initialized() const

◆ clone()

template<typename T >
std::unique_ptr< NumericVector< T > > libMesh::EpetraVector< T >::clone ( ) const
inlineoverridevirtual
Returns
A copy of this vector wrapped in a smart pointer.
Note
This must be overridden in the derived classes.

Implements libMesh::NumericVector< T >.

Definition at line 711 of file trilinos_epetra_vector.h.

References libMesh::AUTOMATIC, and libMesh::NumericVector< T >::init().

712 {
713  NumericVector<T> * cloned_vector = new EpetraVector<T>(this->comm(), AUTOMATIC);
714  cloned_vector->init(*this, true);
715  *cloned_vector = *this;
716  return std::unique_ptr<NumericVector<T>>(cloned_vector);
717 }
const Parallel::Communicator & comm() const

◆ close()

template<typename T >
void libMesh::EpetraVector< T >::close ( )
inlineoverridevirtual

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

Implements libMesh::NumericVector< T >.

Definition at line 642 of file trilinos_epetra_vector.h.

References libMesh::initialized().

Referenced by libMesh::EpetraVector< T >::localize().

643 {
644  libmesh_assert (this->initialized());
645 
646  // Are we adding or inserting?
647  unsigned char global_last_edit = last_edit;
648  this->comm().max(global_last_edit);
649  libmesh_assert(!last_edit || last_edit == global_last_edit);
650 
651  if (global_last_edit == 1)
652  this->GlobalAssemble(Insert);
653  else if (global_last_edit == 2)
654  this->GlobalAssemble(Add);
655  else
656  libmesh_assert(!global_last_edit);
657 
658  this->_is_closed = true;
659  this->last_edit = 0;
660 }
virtual bool initialized() const
const Parallel::Communicator & comm() const
int GlobalAssemble(Epetra_CombineMode mode=Add)

◆ closed()

template<typename T>
virtual bool libMesh::NumericVector< T >::closed ( ) const
inlinevirtualinherited

◆ comm()

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

Definition at line 89 of file parallel_object.h.

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::__libmesh_petsc_diff_solver_jacobian(), libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_tao_equality_constraints(), libMesh::__libmesh_tao_equality_constraints_jacobian(), libMesh::__libmesh_tao_gradient(), libMesh::__libmesh_tao_hessian(), libMesh::__libmesh_tao_inequality_constraints(), libMesh::__libmesh_tao_inequality_constraints_jacobian(), libMesh::__libmesh_tao_objective(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::BoundaryInfo::_find_id_maps(), 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::MeshRefinement::_smooth_flags(), libMesh::PetscDMWrapper::add_dofs_helper(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::ImplicitSystem::add_matrix(), libMesh::System::add_vector(), libMesh::UnstructuredMesh::all_second_order(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::FEMSystem::assemble_qoi(), libMesh::MeshCommunication::assign_global_indices(), libMesh::DofMap::attach_matrix(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::PetscDMWrapper::build_section(), libMesh::PetscDMWrapper::build_sf(), libMesh::MeshBase::cache_elem_dims(), libMesh::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::PetscDMWrapper::check_section_n_dofs(), 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::ExodusII_IO::copy_elemental_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::EpetraVector< T >::EpetraVector(), 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::DofMap::get_info(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::EigenSystem::init_data(), libMesh::EigenSystem::init_matrices(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshTools::libmesh_assert_valid_unique_ids(), libMesh::libmesh_petsc_snes_fd_residual(), libMesh::libmesh_petsc_snes_jacobian(), libMesh::libmesh_petsc_snes_mffd_residual(), libMesh::libmesh_petsc_snes_postcheck(), libMesh::libmesh_petsc_snes_residual(), libMesh::libmesh_petsc_snes_residual_helper(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::FEMSystem::mesh_position_set(), libMesh::DistributedMesh::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::BoundaryInfo::n_shellface_conds(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::MeshTools::paranoid_n_levels(), libMesh::petsc_auto_fieldsplit(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::prepare_for_use(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), 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_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::CheckpointIO::select_split_config(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::PetscDiffSolver::setup_petsc_data(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::split_mesh(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), libMesh::MeshRefinement::test_level_one(), libMesh::MeshRefinement::test_unflagged(), libMesh::MeshTools::total_weight(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

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

◆ compare()

template<typename T>
int libMesh::NumericVector< T >::compare ( const NumericVector< T > &  other_vector,
const Real  threshold = TOLERANCE 
) const
virtualinherited
Returns
-1 when this is equivalent to other_vector (up to the given threshold), or the first index where abs(a[i]-b[i]) exceeds the threshold.

Definition at line 104 of file numeric_vector.C.

106 {
107  libmesh_assert (this->initialized());
108  libmesh_assert (other_vector.initialized());
109  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
110  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
111 
112  int first_different_i = std::numeric_limits<int>::max();
114 
115  do
116  {
117  if (std::abs((*this)(i) - other_vector(i)) > threshold)
118  first_different_i = i;
119  else
120  i++;
121  }
122  while (first_different_i==std::numeric_limits<int>::max()
123  && i<last_local_index());
124 
125  // Find the correct first differing index in parallel
126  this->comm().min(first_different_i);
127 
128  if (first_different_i == std::numeric_limits<int>::max())
129  return -1;
130 
131  return first_different_i;
132 }
double abs(double a)
virtual bool initialized() const
const Parallel::Communicator & comm() const
long double max(long double a, double b)
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type first_local_index() const =0
virtual numeric_index_type last_local_index() const =0

◆ conjugate()

template<typename T >
void libMesh::EpetraVector< T >::conjugate ( )
overridevirtual

Negates the imaginary component of each entry in the vector.

Implements libMesh::NumericVector< T >.

Definition at line 190 of file trilinos_epetra_vector.C.

191 {
192  // EPetra is real, rendering this a no-op.
193 }

◆ create_subvector()

template<typename T >
void libMesh::EpetraVector< T >::create_subvector ( NumericVector< T > &  ,
const std::vector< numeric_index_type > &   
) const
overridevirtual

Fills in subvector from this vector using the indices in rows. Similar to the create_submatrix() routine for the SparseMatrix class, it is currently only implemented for PetscVectors.

Reimplemented from libMesh::NumericVector< T >.

Definition at line 561 of file trilinos_epetra_vector.C.

563 {
564  libmesh_not_implemented();
565 }

◆ destroyNonlocalData()

template<typename T >
void libMesh::EpetraVector< T >::destroyNonlocalData ( )
private

Definition at line 893 of file trilinos_epetra_vector.C.

894 {
895  if (allocatedNonlocalLength_ > 0) {
896  delete [] nonlocalIDs_;
897  delete [] nonlocalElementSize_;
898  nonlocalIDs_ = nullptr;
899  nonlocalElementSize_ = nullptr;
900  for (int i=0; i<numNonlocalIDs_; ++i) {
901  delete [] nonlocalCoefs_[i];
902  }
903  delete [] nonlocalCoefs_;
904  nonlocalCoefs_ = nullptr;
905  numNonlocalIDs_ = 0;
907  }
908  return;
909 }

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 106 of file reference_counter.C.

References libMesh::ReferenceCounter::_enable_print_counter.

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

107 {
108  _enable_print_counter = false;
109  return;
110 }

◆ dot()

template<typename T >
T libMesh::EpetraVector< T >::dot ( const NumericVector< T > &  v) const
overridevirtual
Returns
$ \vec{u} \cdot \vec{v} $, the dot product of (*this) with the vector v.

Uses the complex-conjugate of v in the complex-valued case.

Implements libMesh::NumericVector< T >.

Definition at line 312 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec.

313 {
314  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
315 
316  T result=0.0;
317 
318  _vec->Dot(*v->_vec, &result);
319 
320  return result;
321 }

◆ el()

template<typename T>
virtual T libMesh::NumericVector< T >::el ( const numeric_index_type  i) const
inlinevirtualinherited
Returns
(*this)(i).

Definition at line 346 of file numeric_vector.h.

346 { return (*this)(i); }

◆ enable_print_counter_info()

void libMesh::ReferenceCounter::enable_print_counter_info ( )
staticinherited

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.

101 {
102  _enable_print_counter = true;
103  return;
104 }

◆ FEoperatorequals()

template<typename T >
void libMesh::EpetraVector< T >::FEoperatorequals ( const EpetraVector< T > &  source)
private

Definition at line 866 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec, libMesh::EpetraVector< T >::allocatedNonlocalLength_, libMesh::EpetraVector< T >::nonlocalCoefs_, libMesh::EpetraVector< T >::nonlocalElementSize_, libMesh::EpetraVector< T >::nonlocalIDs_, and libMesh::EpetraVector< T >::numNonlocalIDs_.

867 {
868  (*_vec) = *(source._vec);
869 
871 
872  if (source.allocatedNonlocalLength_ > 0) {
873  allocatedNonlocalLength_ = source.allocatedNonlocalLength_;
874  numNonlocalIDs_ = source.numNonlocalIDs_;
878  for (int i=0; i<numNonlocalIDs_; ++i) {
879  int elemSize = source.nonlocalElementSize_[i];
880  nonlocalCoefs_[i] = new double[elemSize];
881  nonlocalIDs_[i] = source.nonlocalIDs_[i];
882  nonlocalElementSize_[i] = elemSize;
883  for (int j=0; j<elemSize; ++j) {
884  nonlocalCoefs_[i][j] = source.nonlocalCoefs_[i][j];
885  }
886  }
887  }
888 }

◆ first_local_index()

template<typename T >
numeric_index_type libMesh::EpetraVector< T >::first_local_index ( ) const
inlineoverridevirtual
Returns
The index of the first vector element actually stored on this processor.
Note
The minimum for this index is 0.

Implements libMesh::NumericVector< T >.

Definition at line 743 of file trilinos_epetra_vector.h.

References libMesh::initialized().

744 {
745  libmesh_assert (this->initialized());
746 
747  return _vec->Map().MinMyGID();
748 }
virtual bool initialized() const

◆ get() [1/2]

template<typename T>
void libMesh::NumericVector< T >::get ( const std::vector< numeric_index_type > &  index,
T *  values 
) const
inlinevirtualinherited

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 806 of file numeric_vector.h.

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::DofMap::enforce_adjoint_constraints_exactly(), libMesh::DofMap::enforce_constraints_exactly(), libMesh::AdjointRefinementEstimator::estimate_error(), and libMesh::FEMContext::pre_fe_reinit().

808 {
809  const std::size_t num = index.size();
810  for (std::size_t i=0; i<num; i++)
811  {
812  values[i] = (*this)(index[i]);
813  }
814 }

◆ get() [2/2]

template<typename T>
void libMesh::NumericVector< T >::get ( const std::vector< numeric_index_type > &  index,
std::vector< T > &  values 
) const
inlineinherited

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 820 of file numeric_vector.h.

822 {
823  const std::size_t num = index.size();
824  values.resize(num);
825  if (!num)
826  return;
827 
828  this->get(index, values.data());
829 }

◆ get_info()

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

Gets a string containing the reference information.

Definition at line 47 of file reference_counter.C.

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

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

48 {
49 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
50 
51  std::ostringstream oss;
52 
53  oss << '\n'
54  << " ---------------------------------------------------------------------------- \n"
55  << "| Reference count information |\n"
56  << " ---------------------------------------------------------------------------- \n";
57 
58  for (const auto & pr : _counts)
59  {
60  const std::string name(pr.first);
61  const unsigned int creations = pr.second.first;
62  const unsigned int destructions = pr.second.second;
63 
64  oss << "| " << name << " reference count information:\n"
65  << "| Creations: " << creations << '\n'
66  << "| Destructions: " << destructions << '\n';
67  }
68 
69  oss << " ---------------------------------------------------------------------------- \n";
70 
71  return oss.str();
72 
73 #else
74 
75  return "";
76 
77 #endif
78 }
std::string name(const ElemQuality q)
Definition: elem_quality.C:42

◆ global_relative_compare()

template<typename T>
int libMesh::NumericVector< T >::global_relative_compare ( const NumericVector< T > &  other_vector,
const Real  threshold = TOLERANCE 
) const
virtualinherited
Returns
-1 when this is equivalent to other_vector (up to the given global relative threshold), or the first index where abs(a[i]-b[i])/max_j(a[j],b[j]) exceeds the threshold.

Definition at line 169 of file numeric_vector.C.

171 {
172  libmesh_assert (this->initialized());
173  libmesh_assert (other_vector.initialized());
174  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
175  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
176 
177  int first_different_i = std::numeric_limits<int>::max();
179 
180  const Real my_norm = this->linfty_norm();
181  const Real other_norm = other_vector.linfty_norm();
182  const Real abs_threshold = std::max(my_norm, other_norm) * threshold;
183 
184  do
185  {
186  if (std::abs((*this)(i) - other_vector(i) ) > abs_threshold)
187  first_different_i = i;
188  else
189  i++;
190  }
191  while (first_different_i==std::numeric_limits<int>::max()
192  && i<last_local_index());
193 
194  // Find the correct first differing index in parallel
195  this->comm().min(first_different_i);
196 
197  if (first_different_i == std::numeric_limits<int>::max())
198  return -1;
199 
200  return first_different_i;
201 }
double abs(double a)
virtual bool initialized() const
const Parallel::Communicator & comm() const
long double max(long double a, double b)
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type first_local_index() const =0
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual numeric_index_type last_local_index() const =0
virtual Real linfty_norm() const =0

◆ GlobalAssemble()

template<typename T >
int libMesh::EpetraVector< T >::GlobalAssemble ( Epetra_CombineMode  mode = Add)
private

Gather any overlapping/shared data into the non-overlapping partitioning defined by the Map that was passed to this vector at construction time. Data imported from other processors is stored on the owning processor with a "sumInto" or accumulate operation. This is a collective method – every processor must enter it before any will complete it.

Definition at line 821 of file trilinos_epetra_vector.C.

822 {
823  //In this method we need to gather all the non-local (overlapping) data
824  //that's been input on each processor, into the (probably) non-overlapping
825  //distribution defined by the map that 'this' vector was constructed with.
826 
827  //We don't need to do anything if there's only one processor or if
828  //ignoreNonLocalEntries_ is true.
829  if (_vec->Map().Comm().NumProc() < 2 || ignoreNonLocalEntries_) {
830  return(0);
831  }
832 
833 
834 
835  //First build a map that describes the data in nonlocalIDs_/nonlocalCoefs_.
836  //We'll use the arbitrary distribution constructor of Map.
837 
838  Epetra_BlockMap sourceMap(-1, numNonlocalIDs_,
840  _vec->Map().IndexBase(), _vec->Map().Comm());
841 
842  //Now build a vector to hold our nonlocalCoefs_, and to act as the source-
843  //vector for our import operation.
844  Epetra_MultiVector nonlocalVector(sourceMap, 1);
845 
846  int i,j;
847  for (i=0; i<numNonlocalIDs_; ++i) {
848  for (j=0; j<nonlocalElementSize_[i]; ++j) {
849  nonlocalVector.ReplaceGlobalValue(nonlocalIDs_[i], j, 0,
850  nonlocalCoefs_[i][j]);
851  }
852  }
853 
854  Epetra_Export exporter(sourceMap, _vec->Map());
855 
856  EPETRA_CHK_ERR( _vec->Export(nonlocalVector, exporter, mode) );
857 
859 
860  return(0);
861 }

◆ increment_constructor_count()

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

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

Definition at line 181 of file reference_counter.h.

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

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

182 {
183  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
184  std::pair<unsigned int, unsigned int> & p = _counts[name];
185 
186  p.first++;
187 }
std::string name(const ElemQuality q)
Definition: elem_quality.C:42
spin_mutex spin_mtx
Definition: threads.C:29

◆ increment_destructor_count()

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

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

Definition at line 194 of file reference_counter.h.

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

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

195 {
196  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
197  std::pair<unsigned int, unsigned int> & p = _counts[name];
198 
199  p.second++;
200 }
std::string name(const ElemQuality q)
Definition: elem_quality.C:42
spin_mutex spin_mtx
Definition: threads.C:29

◆ init() [1/4]

template<typename T >
void libMesh::EpetraVector< T >::init ( const numeric_index_type  n,
const numeric_index_type  n_local,
const bool  fast = false,
const ParallelType  ptype = AUTOMATIC 
)
inlineoverridevirtual

Change the dimension of the vector to n. The reserved memory for this vector remains unchanged if possible. If n==0, all memory is freed. Therefore, 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 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 562 of file trilinos_epetra_vector.h.

References libMesh::libMeshPrivateData::_is_initialized, libMesh::AUTOMATIC, libMesh::GHOSTED, libMesh::PARALLEL, libMesh::SERIAL, and libMesh::zero.

Referenced by libMesh::EpetraVector< T >::EpetraVector(), and libMesh::EpetraVector< T >::localize().

566 {
567  // We default to allocating n_local local storage
568  numeric_index_type my_n_local = n_local;
569 
570  if (type == AUTOMATIC)
571  {
572  if (n == n_local)
573  this->_type = SERIAL;
574  else
575  this->_type = PARALLEL;
576  }
577  else if (type == GHOSTED)
578  {
579  // We don't yet support GHOSTED Epetra vectors, so to get the
580  // same functionality we need a SERIAL vector with local
581  // storage allocated for every entry.
582  this->_type = SERIAL;
583  my_n_local = n;
584  }
585  else
586  this->_type = type;
587 
588  libmesh_assert ((this->_type==SERIAL && n==my_n_local) ||
589  this->_type==PARALLEL);
590 
591  _map.reset(new Epetra_Map(static_cast<int>(n),
592  my_n_local,
593  0,
594  Epetra_MpiComm (this->comm().get())));
595 
596  _vec = new Epetra_Vector(*_map);
597 
598  myFirstID_ = _vec->Map().MinMyGID();
599  myNumIDs_ = _vec->Map().NumMyElements();
600 
601  // Currently we impose the restriction that NumVectors==1, so we won't
602  // need the LDA argument when calling ExtractView. Hence the "dummy" arg.
603  int dummy;
604  _vec->ExtractView(&myCoefs_, &dummy);
605 
606  this->_is_initialized = true;
607  this->_is_closed = true;
608  this->last_edit = 0;
609 
610  if (fast == false)
611  this->zero ();
612 }
std::unique_ptr< Epetra_Map > _map
const Parallel::Communicator & comm() const
virtual void zero() override
dof_id_type numeric_index_type
Definition: id_types.h:92
ParallelType type() const

◆ init() [2/4]

template<typename T >
void libMesh::EpetraVector< T >::init ( const numeric_index_type  n,
const bool  fast = false,
const ParallelType  ptype = AUTOMATIC 
)
inlineoverridevirtual

Call init() with n_local = N.

Implements libMesh::NumericVector< T >.

Definition at line 631 of file trilinos_epetra_vector.h.

References libMesh::TriangleWrapper::init().

634 {
635  this->init(n,n,fast,type);
636 }
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
ParallelType type() const

◆ init() [3/4]

template<typename T >
void libMesh::EpetraVector< T >::init ( const numeric_index_type  n,
const numeric_index_type  n_local,
const std::vector< numeric_index_type > &  ghost,
const bool  fast = false,
const ParallelType  ptype = AUTOMATIC 
)
inlineoverridevirtual

Create a vector that holds tha local indices plus those specified in the ghost argument.

Implements libMesh::NumericVector< T >.

Definition at line 617 of file trilinos_epetra_vector.h.

References libMesh::TriangleWrapper::init().

622 {
623  // TODO: we shouldn't ignore the ghost sparsity pattern
624  this->init(n, n_local, fast, type);
625 }
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
ParallelType type() const

◆ init() [4/4]

template<class T >
void libMesh::EpetraVector< T >::init ( const NumericVector< T > &  other,
const bool  fast = false 
)
overridevirtual

Creates a vector that has the same dimension and storage type as other, including ghost dofs.

Implements libMesh::NumericVector< T >.

Definition at line 543 of file trilinos_epetra_vector.h.

References libMesh::TriangleWrapper::init(), libMesh::NumericVector< T >::local_size(), libMesh::NumericVector< T >::size(), and libMesh::NumericVector< T >::type().

545 {
546  this->init(other.size(),other.local_size(),fast,other.type());
547 }
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override

◆ initialized()

template<typename T>
virtual bool libMesh::NumericVector< T >::initialized ( ) const
inlinevirtualinherited

◆ inputNonlocalValue()

template<typename T >
int libMesh::EpetraVector< T >::inputNonlocalValue ( int  GID,
double  value,
bool  accumulate 
)
private

Definition at line 719 of file trilinos_epetra_vector.C.

References value.

720 {
721  int insertPoint = -1;
722 
723  //find offset of GID in nonlocalIDs_
724  int offset = Epetra_Util_binary_search(GID, nonlocalIDs_, numNonlocalIDs_,
725  insertPoint);
726  if (offset >= 0) {
727  //if offset >= 0
728  // put value in nonlocalCoefs_[offset][0]
729 
730  if (accumulate) {
731  nonlocalCoefs_[offset][0] += value;
732  }
733  else {
734  nonlocalCoefs_[offset][0] = value;
735  }
736  }
737  else {
738  //else
739  // insert GID in nonlocalIDs_
740  // insert 1 in nonlocalElementSize_
741  // insert value in nonlocalCoefs_
742 
743  int tmp1 = numNonlocalIDs_;
744  int tmp2 = allocatedNonlocalLength_;
745  int tmp3 = allocatedNonlocalLength_;
746  EPETRA_CHK_ERR( Epetra_Util_insert(GID, insertPoint, nonlocalIDs_,
747  tmp1, tmp2) );
748  --tmp1;
749  EPETRA_CHK_ERR( Epetra_Util_insert(1, insertPoint, nonlocalElementSize_,
750  tmp1, tmp3) );
751  double * values = new double[1];
752  values[0] = value;
753  EPETRA_CHK_ERR( Epetra_Util_insert(values, insertPoint, nonlocalCoefs_,
755  }
756 
757  return(0);
758 }
static const bool value
Definition: xdr_io.C:109

◆ inputNonlocalValues()

template<typename T >
int libMesh::EpetraVector< T >::inputNonlocalValues ( int  GID,
int  numValues,
const double *  values,
bool  accumulate 
)
private

Definition at line 762 of file trilinos_epetra_vector.C.

References libMesh::err.

766 {
767  int insertPoint = -1;
768 
769  //find offset of GID in nonlocalIDs_
770  int offset = Epetra_Util_binary_search(GID, nonlocalIDs_, numNonlocalIDs_,
771  insertPoint);
772  if (offset >= 0) {
773  //if offset >= 0
774  // put value in nonlocalCoefs_[offset][0]
775 
776  if (numValues != nonlocalElementSize_[offset]) {
777  libMesh::err << "Epetra_FEVector ERROR: block-size for GID " << GID << " is "
778  << numValues<<" which doesn't match previously set block-size of "
779  << nonlocalElementSize_[offset] << std::endl;
780  return(-1);
781  }
782 
783  if (accumulate) {
784  for (int j=0; j<numValues; ++j) {
785  nonlocalCoefs_[offset][j] += values[j];
786  }
787  }
788  else {
789  for (int j=0; j<numValues; ++j) {
790  nonlocalCoefs_[offset][j] = values[j];
791  }
792  }
793  }
794  else {
795  //else
796  // insert GID in nonlocalIDs_
797  // insert numValues in nonlocalElementSize_
798  // insert values in nonlocalCoefs_
799 
800  int tmp1 = numNonlocalIDs_;
801  int tmp2 = allocatedNonlocalLength_;
802  int tmp3 = allocatedNonlocalLength_;
803  EPETRA_CHK_ERR( Epetra_Util_insert(GID, insertPoint, nonlocalIDs_,
804  tmp1, tmp2) );
805  --tmp1;
806  EPETRA_CHK_ERR( Epetra_Util_insert(numValues, insertPoint, nonlocalElementSize_,
807  tmp1, tmp3) );
808  double * newvalues = new double[numValues];
809  for (int j=0; j<numValues; ++j) {
810  newvalues[j] = values[j];
811  }
812  EPETRA_CHK_ERR( Epetra_Util_insert(newvalues, insertPoint, nonlocalCoefs_,
814  }
815 
816  return(0);
817 }
OStreamProxy err(std::cerr)

◆ inputValues() [1/2]

template<typename T >
int libMesh::EpetraVector< T >::inputValues ( int  numIDs,
const int *  GIDs,
const double *  values,
bool  accumulate 
)
private

Definition at line 639 of file trilinos_epetra_vector.C.

643 {
644  if (accumulate) {
645  libmesh_assert(last_edit == 0 || last_edit == 2);
646  last_edit = 2;
647  } else {
648  libmesh_assert(last_edit == 0 || last_edit == 1);
649  last_edit = 1;
650  }
651 
652  //Important note!! This method assumes that there is only 1 point
653  //associated with each element.
654 
655  for (int i=0; i<numIDs; ++i) {
656  if (_vec->Map().MyGID(GIDs[i])) {
657  if (accumulate) {
658  _vec->SumIntoGlobalValue(GIDs[i], 0, 0, values[i]);
659  }
660  else {
661  _vec->ReplaceGlobalValue(GIDs[i], 0, 0, values[i]);
662  }
663  }
664  else {
665  if (!ignoreNonLocalEntries_) {
666  EPETRA_CHK_ERR( inputNonlocalValue(GIDs[i], values[i], accumulate) );
667  }
668  }
669  }
670 
671  return(0);
672 }
int inputNonlocalValue(int GID, double value, bool accumulate)

◆ inputValues() [2/2]

template<typename T >
int libMesh::EpetraVector< T >::inputValues ( int  numIDs,
const int *  GIDs,
const int *  numValuesPerID,
const double *  values,
bool  accumulate 
)
private

Definition at line 676 of file trilinos_epetra_vector.C.

681 {
682  if (accumulate) {
683  libmesh_assert(last_edit == 0 || last_edit == 2);
684  last_edit = 2;
685  } else {
686  libmesh_assert(last_edit == 0 || last_edit == 1);
687  last_edit = 1;
688  }
689 
690  int offset=0;
691  for (int i=0; i<numIDs; ++i) {
692  int numValues = numValuesPerID[i];
693  if (_vec->Map().MyGID(GIDs[i])) {
694  if (accumulate) {
695  for (int j=0; j<numValues; ++j) {
696  _vec->SumIntoGlobalValue(GIDs[i], j, 0, values[offset+j]);
697  }
698  }
699  else {
700  for (int j=0; j<numValues; ++j) {
701  _vec->ReplaceGlobalValue(GIDs[i], j, 0, values[offset+j]);
702  }
703  }
704  }
705  else {
706  if (!ignoreNonLocalEntries_) {
707  EPETRA_CHK_ERR( inputNonlocalValues(GIDs[i], numValues,
708  &(values[offset]), accumulate) );
709  }
710  }
711  offset += numValues;
712  }
713 
714  return(0);
715 }
int inputNonlocalValues(int GID, int numValues, const double *values, bool accumulate)

◆ insert() [1/5]

template<typename T >
void libMesh::EpetraVector< T >::insert ( const T *  v,
const std::vector< numeric_index_type > &  dof_indices 
)
overridevirtual

Inserts the entries of v in *this at the locations specified by v.

Reimplemented from libMesh::NumericVector< T >.

Definition at line 286 of file trilinos_epetra_vector.C.

References libMesh::numeric_trilinos_cast().

288 {
289  libmesh_assert_equal_to (sizeof(numeric_index_type), sizeof(int));
290 
291  ReplaceGlobalValues (cast_int<numeric_index_type>(dof_indices.size()),
292  numeric_trilinos_cast(dof_indices.data()),
293  const_cast<T *>(v));
294 }
int ReplaceGlobalValues(int numIDs, const int *GIDs, const double *values)
dof_id_type numeric_index_type
Definition: id_types.h:92
int * numeric_trilinos_cast(const numeric_index_type *p)

◆ insert() [2/5]

template<typename T>
void libMesh::NumericVector< T >::insert ( const std::vector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineinherited

Inserts the entries of v in *this at the locations specified by v.

Definition at line 859 of file numeric_vector.h.

861 {
862  libmesh_assert(v.size() == dof_indices.size());
863  if (!v.empty())
864  this->insert(v.data(), dof_indices);
865 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)

◆ insert() [3/5]

template<typename T>
void libMesh::NumericVector< T >::insert ( const NumericVector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
virtualinherited

Inserts the entries of v in *this at the locations specified by v.

Definition at line 92 of file numeric_vector.C.

94 {
95  libmesh_assert_equal_to (V.size(), dof_indices.size());
96 
97  for (numeric_index_type i=0; i<dof_indices.size(); i++)
98  this->set (dof_indices[i], V(i));
99 }
dof_id_type numeric_index_type
Definition: id_types.h:92

◆ insert() [4/5]

template<typename T>
void libMesh::NumericVector< T >::insert ( const DenseVector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineinherited

Inserts the entries of v in *this at the locations specified by v.

Definition at line 871 of file numeric_vector.h.

873 {
874  libmesh_assert(v.size() == dof_indices.size());
875  if (!v.empty())
876  this->insert(&v(0), dof_indices);
877 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)

◆ insert() [5/5]

template<typename T>
void libMesh::NumericVector< T >::insert ( const DenseSubVector< T > &  v,
const std::vector< numeric_index_type > &  dof_indices 
)
inlineinherited

Inserts the entries of v in *this at the locations specified by v.

Definition at line 883 of file numeric_vector.h.

885 {
886  libmesh_assert(v.size() == dof_indices.size());
887  if (!v.empty())
888  this->insert(&v(0), dof_indices);
889 }
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)

◆ l1_norm()

template<typename T >
Real libMesh::EpetraVector< T >::l1_norm ( ) const
overridevirtual
Returns
The $ \ell_1 $-norm of the vector, i.e. the sum of the absolute values of the entries.

Implements libMesh::NumericVector< T >.

Definition at line 69 of file trilinos_epetra_vector.C.

References libMesh::closed(), libMesh::Real, and value.

70 {
71  libmesh_assert(this->closed());
72 
73  Real value;
74 
75  _vec->Norm1(&value);
76 
77  return value;
78 }
virtual bool closed() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:109

◆ l2_norm()

template<typename T >
Real libMesh::EpetraVector< T >::l2_norm ( ) const
overridevirtual
Returns
The $ \ell_2 $-norm of the vector, i.e. the square root of the sum of the squares of the entries.

Implements libMesh::NumericVector< T >.

Definition at line 81 of file trilinos_epetra_vector.C.

References libMesh::closed(), libMesh::Real, and value.

82 {
83  libmesh_assert(this->closed());
84 
85  Real value;
86 
87  _vec->Norm2(&value);
88 
89  return value;
90 }
virtual bool closed() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:109

◆ last_local_index()

template<typename T >
numeric_index_type libMesh::EpetraVector< T >::last_local_index ( ) const
inlineoverridevirtual
Returns
The index+1 of the last vector element actually stored on this processor.
Note
The maximum for this index is size().

Implements libMesh::NumericVector< T >.

Definition at line 754 of file trilinos_epetra_vector.h.

References libMesh::initialized().

755 {
756  libmesh_assert (this->initialized());
757 
758  return _vec->Map().MaxMyGID()+1;
759 }
virtual bool initialized() const

◆ linfty_norm()

template<typename T >
Real libMesh::EpetraVector< T >::linfty_norm ( ) const
overridevirtual
Returns
The $ \ell_{\infty} $-norm of the vector, i.e. the maximum absolute value of the entries of the vector.

Implements libMesh::NumericVector< T >.

Definition at line 93 of file trilinos_epetra_vector.C.

References libMesh::closed(), libMesh::Real, and value.

94 {
95  libmesh_assert(this->closed());
96 
97  Real value;
98 
99  _vec->NormInf(&value);
100 
101  return value;
102 }
virtual bool closed() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:109

◆ local_relative_compare()

template<typename T>
int libMesh::NumericVector< T >::local_relative_compare ( const NumericVector< T > &  other_vector,
const Real  threshold = TOLERANCE 
) const
virtualinherited
Returns
-1 when this is equivalent to other_vector, (up to the given local relative threshold), or the first index where abs(a[i]-b[i])/max(a[i],b[i]) exceeds the threshold.

Definition at line 136 of file numeric_vector.C.

138 {
139  libmesh_assert (this->initialized());
140  libmesh_assert (other_vector.initialized());
141  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
142  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
143 
144  int first_different_i = std::numeric_limits<int>::max();
146 
147  do
148  {
149  if (std::abs((*this)(i) - other_vector(i)) > threshold *
150  std::max(std::abs((*this)(i)), std::abs(other_vector(i))))
151  first_different_i = i;
152  else
153  i++;
154  }
155  while (first_different_i==std::numeric_limits<int>::max()
156  && i<last_local_index());
157 
158  // Find the correct first differing index in parallel
159  this->comm().min(first_different_i);
160 
161  if (first_different_i == std::numeric_limits<int>::max())
162  return -1;
163 
164  return first_different_i;
165 }
double abs(double a)
virtual bool initialized() const
const Parallel::Communicator & comm() const
long double max(long double a, double b)
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type first_local_index() const =0
virtual numeric_index_type last_local_index() const =0

◆ local_size()

template<typename T >
numeric_index_type libMesh::EpetraVector< T >::local_size ( ) const
inlineoverridevirtual
Returns
The local size of the vector, i.e. index_stop - index_start.

Implements libMesh::NumericVector< T >.

Definition at line 734 of file trilinos_epetra_vector.h.

References libMesh::initialized().

735 {
736  libmesh_assert (this->initialized());
737 
738  return _vec->MyLength();
739 }
virtual bool initialized() const

◆ localize() [1/5]

template<typename T >
void libMesh::EpetraVector< T >::localize ( std::vector< T > &  v_local) const
overridevirtual

Creates a copy of the global vector in the local vector v_local.

Implements libMesh::NumericVector< T >.

Definition at line 512 of file trilinos_epetra_vector.C.

Referenced by libMesh::EpetraVector< T >::localize().

513 {
514  // This function must be run on all processors at once
515  parallel_object_only();
516 
517  const unsigned int n = this->size();
518  const unsigned int nl = this->local_size();
519 
520  libmesh_assert(this->_vec);
521 
522  v_local.clear();
523  v_local.reserve(n);
524 
525  // build up my local part
526  for (unsigned int i=0; i<nl; i++)
527  v_local.push_back((*this->_vec)[i]);
528 
529  this->comm().allgather (v_local);
530 }
void allgather(const T &send, std::vector< T, A > &recv) const
const Parallel::Communicator & comm() const
virtual numeric_index_type size() const override
virtual numeric_index_type local_size() const override

◆ localize() [2/5]

template<typename T >
void libMesh::EpetraVector< T >::localize ( NumericVector< T > &  v_local) const
overridevirtual

Same, but fills a NumericVector<T> instead of a std::vector.

Implements libMesh::NumericVector< T >.

Definition at line 400 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec.

401 {
402  EpetraVector<T> * v_local = cast_ptr<EpetraVector<T> *>(&v_local_in);
403 
404  Epetra_Map rootMap = Epetra_Util::Create_Root_Map( *_map, -1);
405  v_local->_vec->ReplaceMap(rootMap);
406 
407  Epetra_Import importer(v_local->_vec->Map(), *_map);
408  v_local->_vec->Import(*_vec, importer, Insert);
409 }
std::unique_ptr< Epetra_Map > _map

◆ localize() [3/5]

template<typename T >
void libMesh::EpetraVector< T >::localize ( NumericVector< T > &  v_local,
const std::vector< numeric_index_type > &  send_list 
) const
overridevirtual

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 414 of file trilinos_epetra_vector.C.

416 {
417  // TODO: optimize to sync only the send list values
418  this->localize(v_local_in);
419 
420  // EpetraVector<T> * v_local =
421  // cast_ptr<EpetraVector<T> *>(&v_local_in);
422 
423  // libmesh_assert(this->_map.get());
424  // libmesh_assert(v_local->_map.get());
425  // libmesh_assert_equal_to (v_local->local_size(), this->size());
426  // libmesh_assert_less_equal (send_list.size(), v_local->size());
427 
428  // Epetra_Import importer (*v_local->_map, *this->_map);
429 
430  // v_local->_vec->Import (*this->_vec, importer, Insert);
431 }
virtual void localize(std::vector< T > &v_local) const override

◆ localize() [4/5]

template<typename T >
void libMesh::EpetraVector< T >::localize ( std::vector< T > &  v_local,
const std::vector< numeric_index_type > &  indices 
) const
overridevirtual

Fill in the local std::vector "v_local" with the global indices given in "indices".

Note
The indices can be different on every processor, and the same index can be localized to more than one processor. The resulting v_local can be shorter than the original, and the entries will be in the order specified by indices.

Example:

*   On 4 procs *this = {a, b, c, d, e, f, g, h, i} is a parallel vector.
*   On each proc, the indices arrays are set up as:
*   proc0, indices = {1,2,4,5}
*   proc1, indices = {2,5,6,8}
*   proc2, indices = {2,3,6,7}
*   proc3, indices = {0,1,2,3}
*
*   After calling this version of localize, the v_local vectors are:
*   proc0, v_local = {b,c,e,f}
*   proc1, v_local = {c,f,g,i}
*   proc2, v_local = {c,d,g,h}
*   proc3, v_local = {a,b,c,d}
* 

This function is useful in parallel I/O routines, when you have a parallel vector of solution values which you want to write a subset of.

Implements libMesh::NumericVector< T >.

Definition at line 436 of file trilinos_epetra_vector.C.

438 {
439  // Create a "replicated" map for importing values. This is
440  // equivalent to creating a general Epetra_Map with
441  // NumGlobalElements == NumMyElements.
442  Epetra_LocalMap import_map(static_cast<int>(indices.size()),
443  /*IndexBase=*/0,
444  _map->Comm());
445 
446  // Get a pointer to the list of global elements for the map, and set
447  // all the values from indices.
448  int * import_map_global_elements = import_map.MyGlobalElements();
449  for (int i=0; i<import_map.NumMyElements(); ++i)
450  import_map_global_elements[i] = indices[i];
451 
452  // Create a new EpetraVector to import values into.
453  Epetra_Vector import_vector(import_map);
454 
455  // Set up an "Import" object which associates the two maps.
456  Epetra_Import import_object(import_map, *_map);
457 
458  // Import the values
459  import_vector.Import(*_vec, import_object, Insert);
460 
461  // Get a pointer to the imported values array and the length of the
462  // array.
463  T * values = import_vector.Values();
464  int import_vector_length = import_vector.MyLength();
465 
466  // Copy the imported values into v_local
467  v_local.resize(import_vector_length);
468  for (int i=0; i<import_vector_length; ++i)
469  v_local[i] = values[i];
470 }
std::unique_ptr< Epetra_Map > _map

◆ localize() [5/5]

template<typename T >
void libMesh::EpetraVector< T >::localize ( const numeric_index_type  first_local_idx,
const numeric_index_type  last_local_idx,
const std::vector< numeric_index_type > &  send_list 
)
overridevirtual

Updates a local vector with selected values from neighboring processors, as defined by send_list.

Implements libMesh::NumericVector< T >.

Definition at line 475 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::close(), libMesh::EpetraVector< T >::init(), libMesh::EpetraVector< T >::localize(), libMesh::PARALLEL, and libMesh::EpetraVector< T >::set().

478 {
479  // Only good for serial vectors.
480  libmesh_assert_equal_to (this->size(), this->local_size());
481  libmesh_assert_greater (last_local_idx, first_local_idx);
482  libmesh_assert_less_equal (send_list.size(), this->size());
483  libmesh_assert_less (last_local_idx, this->size());
484 
485  const unsigned int my_size = this->size();
486  const unsigned int my_local_size = (last_local_idx - first_local_idx + 1);
487 
488  // Don't bother for serial cases
489  if ((first_local_idx == 0) &&
490  (my_local_size == my_size))
491  return;
492 
493  // Build a parallel vector, initialize it with the local
494  // parts of (*this)
495  EpetraVector<T> parallel_vec(this->comm(), PARALLEL);
496 
497  parallel_vec.init (my_size, my_local_size, true, PARALLEL);
498 
499  // Copy part of *this into the parallel_vec
500  for (numeric_index_type i=first_local_idx; i<=last_local_idx; i++)
501  parallel_vec.set(i,this->el(i));
502 
503  // localize like normal
504  parallel_vec.close();
505  parallel_vec.localize (*this, send_list);
506  this->close();
507 }
virtual void close() override
const Parallel::Communicator & comm() const
virtual numeric_index_type size() const override
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type local_size() const override

◆ localize_to_one()

template<typename T >
void libMesh::EpetraVector< T >::localize_to_one ( std::vector< T > &  v_local,
const processor_id_type  proc_id = 0 
) const
overridevirtual

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 535 of file trilinos_epetra_vector.C.

537 {
538  // This function must be run on all processors at once
539  parallel_object_only();
540 
541  const unsigned int n = this->size();
542  const unsigned int nl = this->local_size();
543 
544  libmesh_assert_less (pid, this->n_processors());
545  libmesh_assert(this->_vec);
546 
547  v_local.clear();
548  v_local.reserve(n);
549 
550 
551  // build up my local part
552  for (unsigned int i=0; i<nl; i++)
553  v_local.push_back((*this->_vec)[i]);
554 
555  this->comm().gather (pid, v_local);
556 }
void gather(const unsigned int root_id, const T &send, std::vector< T, A > &recv) const
const Parallel::Communicator & comm() const
virtual numeric_index_type size() const override
processor_id_type n_processors() const
virtual numeric_index_type local_size() const override

◆ max()

template<typename T >
Real libMesh::EpetraVector< T >::max ( ) const
inlineoverridevirtual
Returns
The maximum entry in the vector, or the maximum real part in the case of complex numbers.

Implements libMesh::NumericVector< T >.

Definition at line 792 of file trilinos_epetra_vector.h.

References libMesh::initialized(), and value.

793 {
794  libmesh_assert (this->initialized());
795 
796  T value;
797 
798  _vec->MaxValue(&value);
799 
800  return value;
801 }
virtual bool initialized() const
static const bool value
Definition: xdr_io.C:109

◆ min()

template<typename T >
Real libMesh::EpetraVector< T >::min ( ) const
inlineoverridevirtual
Returns
The minimum entry in the vector, or the minimum real part in the case of complex numbers.

Implements libMesh::NumericVector< T >.

Definition at line 777 of file trilinos_epetra_vector.h.

References libMesh::initialized(), and value.

778 {
779  libmesh_assert (this->initialized());
780 
781  T value;
782 
783  _vec->MinValue(&value);
784 
785  return value;
786 }
virtual bool initialized() const
static const bool value
Definition: xdr_io.C:109

◆ n_objects()

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

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

Definition at line 83 of file reference_counter.h.

References libMesh::ReferenceCounter::_n_objects.

84  { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects

◆ n_processors()

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

Definition at line 95 of file parallel_object.h.

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

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DistributedMesh::add_node(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::FEMSystem::assembly(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::clear(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::MeshTools::create_processor_bounding_box(), 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::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::DistributedMesh::insert_elem(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::DofMap::local_variable_indices(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::MeshBase::partition(), libMesh::PetscLinearSolver< T >::PetscLinearSolver(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

96  { return cast_int<processor_id_type>(_communicator.size()); }
processor_id_type size() const
Definition: communicator.h:175
const Parallel::Communicator & _communicator

◆ operator()()

template<typename T >
T libMesh::EpetraVector< T >::operator() ( const numeric_index_type  i) const
inlineoverridevirtual
Returns
A copy of the ith entry of the vector.

Implements libMesh::NumericVector< T >.

Definition at line 764 of file trilinos_epetra_vector.h.

References libMesh::initialized().

765 {
766  libmesh_assert (this->initialized());
767  libmesh_assert ( ((i >= this->first_local_index()) &&
768  (i < this->last_local_index())) );
769 
770  return (*_vec)[i-this->first_local_index()];
771 }
virtual numeric_index_type last_local_index() const override
virtual bool initialized() const
virtual numeric_index_type first_local_index() const override

◆ operator*=()

template<typename T>
NumericVector<T>& libMesh::NumericVector< T >::operator*= ( const T  a)
inlineinherited

Scales the vector by a, $ \vec{u} \leftarrow a\vec{u} $. Equivalent to u.scale(a)

Returns
A reference to *this.

Definition at line 391 of file numeric_vector.h.

391 { this->scale(a); return *this; }
virtual void scale(const T factor)=0

◆ operator+=()

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator+= ( const NumericVector< T > &  v)
overridevirtual

Adds v to *this, $ \vec{u} \leftarrow \vec{u} + \vec{v} $. Equivalent to u.add(1, v).

Returns
A reference to *this.

Implements libMesh::NumericVector< T >.

Definition at line 106 of file trilinos_epetra_vector.C.

References libMesh::closed().

107 {
108  libmesh_assert(this->closed());
109 
110  this->add(1., v);
111 
112  return *this;
113 }
virtual void add(const numeric_index_type i, const T value) override
virtual bool closed() const

◆ operator-=()

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator-= ( const NumericVector< T > &  v)
overridevirtual

Subtracts v from *this, $ \vec{u} \leftarrow \vec{u} - \vec{v} $. Equivalent to u.add(-1, v).

Returns
A reference to *this.

Implements libMesh::NumericVector< T >.

Definition at line 119 of file trilinos_epetra_vector.C.

References libMesh::closed().

120 {
121  libmesh_assert(this->closed());
122 
123  this->add(-1., v);
124 
125  return *this;
126 }
virtual void add(const numeric_index_type i, const T value) override
virtual bool closed() const

◆ operator/=() [1/2]

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator/= ( const NumericVector< T > &  )
overridevirtual

Computes the pointwise division of this vector's entries by another's, $ u_i \leftarrow \frac{u_i}{v_i} \, \forall i$

Returns
A reference to *this.

Implements libMesh::NumericVector< T >.

Definition at line 131 of file trilinos_epetra_vector.C.

References libMesh::closed(), and libMesh::NumericVector< T >::size().

132 {
133  libmesh_assert(this->closed());
134  libmesh_assert_equal_to(size(), v.size());
135 
136  const EpetraVector<T> & v_vec = cast_ref<const EpetraVector<T> &>(v);
137 
138  _vec->ReciprocalMultiply(1.0, *v_vec._vec, *_vec, 0.0);
139 
140  return *this;
141 }
virtual numeric_index_type size() const override
virtual bool closed() const

◆ operator/=() [2/2]

template<typename T>
NumericVector<T>& libMesh::NumericVector< T >::operator/= ( const T  a)
inlineinherited

Scales the vector by 1/a, $ \vec{u} \leftarrow \frac{1}{a}\vec{u} $. Equivalent to u.scale(1./a)

Returns
A reference to *this.

Definition at line 400 of file numeric_vector.h.

400 { this->scale(1./a); return *this; }
virtual void scale(const T factor)=0

◆ operator=() [1/5]

template<typename T>
EpetraVector& libMesh::EpetraVector< T >::operator= ( const EpetraVector< T > &  )
delete

◆ operator=() [2/5]

template<typename T>
EpetraVector& libMesh::EpetraVector< T >::operator= ( EpetraVector< T > &&  )
delete

◆ operator=() [3/5]

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator= ( const T  s)
overridevirtual

Sets all entries of the vector to the value s.

Returns
A reference to *this.

Implements libMesh::NumericVector< T >.

Definition at line 337 of file trilinos_epetra_vector.C.

338 {
339  _vec->PutScalar(s_in);
340 
341  return *this;
342 }

◆ operator=() [4/5]

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator= ( const NumericVector< T > &  v)
overridevirtual

This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual. This function should be overridden in derived classes so that they can be copied correctly via references to the base class. This design usually isn't a good idea in general, but in this context it works because we usually don't have a mix of different kinds of NumericVectors active in the library at a single time.

Returns
A reference to *this as the base type.

Implements libMesh::NumericVector< T >.

Definition at line 348 of file trilinos_epetra_vector.C.

349 {
350  // This function could be implemented in terms of the copy
351  // assignment operator (see other NumericVector subclasses) but that
352  // function is currently deleted so calling this function is an error.
353  // const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
354  // *this = *v;
355  libmesh_not_implemented();
356  return *this;
357 }

◆ operator=() [5/5]

template<typename T >
NumericVector< T > & libMesh::EpetraVector< T >::operator= ( const std::vector< T > &  v)
overridevirtual

Sets (*this)(i) = v(i) for each entry of the vector.

Returns
A reference to *this as the base type.

Case 1: The vector is the same size of The global vector. Only add the local components.

Case 2: The vector is the same size as our local piece. Insert directly to the local piece.

Implements libMesh::NumericVector< T >.

Definition at line 363 of file trilinos_epetra_vector.C.

364 {
365  T * values = _vec->Values();
366 
371  if (this->size() == v.size())
372  {
373  const unsigned int nl=this->local_size();
374  const unsigned int fli=this->first_local_index();
375 
376  for (unsigned int i=0;i<nl;i++)
377  values[i]=v[fli+i];
378  }
379 
384  else
385  {
386  libmesh_assert_equal_to (v.size(), this->local_size());
387 
388  const unsigned int nl=this->local_size();
389 
390  for (unsigned int i=0;i<nl;i++)
391  values[i]=v[i];
392  }
393 
394  return *this;
395 }
virtual numeric_index_type size() const override
virtual numeric_index_type first_local_index() const override
virtual numeric_index_type local_size() const override

◆ pointwise_mult()

template<typename T >
void libMesh::EpetraVector< T >::pointwise_mult ( const NumericVector< T > &  vec1,
const NumericVector< T > &  vec2 
)
overridevirtual

Computes $ u_i \leftarrow u_i v_i $ (summation not implied) i.e. the pointwise (component-wise) product of vec1 and vec2, and stores the result in *this.

Implements libMesh::NumericVector< T >.

Definition at line 325 of file trilinos_epetra_vector.C.

References libMesh::EpetraVector< T >::_vec.

327 {
328  const EpetraVector<T> * v1 = cast_ptr<const EpetraVector<T> *>(&vec1);
329  const EpetraVector<T> * v2 = cast_ptr<const EpetraVector<T> *>(&vec2);
330 
331  _vec->Multiply(1.0, *v1->_vec, *v2->_vec, 0.0);
332 }

◆ print() [1/2]

template<typename T >
void libMesh::NumericVector< T >::print ( std::ostream &  os = libMesh::out) const
inlinevirtualinherited

Prints the local contents of the vector, by default to libMesh::out

Definition at line 916 of file numeric_vector.h.

917 {
918  libmesh_assert (this->initialized());
919  os << "Size\tglobal = " << this->size()
920  << "\t\tlocal = " << this->local_size() << std::endl;
921 
922  os << "#\tValue" << std::endl;
923  for (numeric_index_type i=this->first_local_index(); i<this->last_local_index(); i++)
924  os << i << "\t" << (*this)(i) << std::endl;
925 }
virtual bool initialized() const
virtual numeric_index_type size() const =0
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type first_local_index() const =0
virtual numeric_index_type local_size() const =0
virtual numeric_index_type last_local_index() const =0

◆ print() [2/2]

template<>
void libMesh::NumericVector< Complex >::print ( std::ostream &  os) const
inlineinherited

Definition at line 898 of file numeric_vector.h.

899 {
900  libmesh_assert (this->initialized());
901  os << "Size\tglobal = " << this->size()
902  << "\t\tlocal = " << this->local_size() << std::endl;
903 
904  // std::complex<>::operator<<() is defined, but use this form
905  os << "#\tReal part\t\tImaginary part" << std::endl;
906  for (numeric_index_type i=this->first_local_index(); i<this->last_local_index(); i++)
907  os << i << "\t"
908  << (*this)(i).real() << "\t\t"
909  << (*this)(i).imag() << std::endl;
910 }
virtual bool initialized() const
virtual numeric_index_type size() const =0
dof_id_type numeric_index_type
Definition: id_types.h:92
virtual numeric_index_type first_local_index() const =0
virtual numeric_index_type local_size() const =0
virtual numeric_index_type last_local_index() const =0

◆ print_global() [1/2]

template<typename T >
void libMesh::NumericVector< T >::print_global ( std::ostream &  os = libMesh::out) const
inlinevirtualinherited

Prints the global contents of the vector, by default to libMesh::out

Definition at line 953 of file numeric_vector.h.

954 {
955  libmesh_assert (this->initialized());
956 
957  std::vector<T> v(this->size());
958  this->localize(v);
959 
960  // Right now we only want one copy of the output
961  if (this->processor_id())
962  return;
963 
964  os << "Size\tglobal = " << this->size() << std::endl;
965  os << "#\tValue" << std::endl;
966  for (numeric_index_type i=0; i!=v.size(); i++)
967  os << i << "\t" << v[i] << std::endl;
968 }
virtual bool initialized() const
virtual numeric_index_type size() const =0
dof_id_type numeric_index_type
Definition: id_types.h:92
processor_id_type processor_id() const
virtual void localize(std::vector< T > &v_local) const =0

◆ print_global() [2/2]

template<>
void libMesh::NumericVector< Complex >::print_global ( std::ostream &  os) const
inlineinherited

Definition at line 931 of file numeric_vector.h.

932 {
933  libmesh_assert (this->initialized());
934 
935  std::vector<Complex> v(this->size());
936  this->localize(v);
937 
938  // Right now we only want one copy of the output
939  if (this->processor_id())
940  return;
941 
942  os << "Size\tglobal = " << this->size() << std::endl;
943  os << "#\tReal part\t\tImaginary part" << std::endl;
944  for (numeric_index_type i=0; i!=v.size(); i++)
945  os << i << "\t"
946  << v[i].real() << "\t\t"
947  << v[i].imag() << std::endl;
948 }
virtual bool initialized() const
virtual numeric_index_type size() const =0
dof_id_type numeric_index_type
Definition: id_types.h:92
processor_id_type processor_id() const
virtual void localize(std::vector< T > &v_local) const =0

◆ print_info()

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

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

Definition at line 87 of file reference_counter.C.

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

88 {
90  out_stream << ReferenceCounter::get_info();
91 }
static std::string get_info()

◆ print_matlab()

template<typename T>
virtual void libMesh::NumericVector< T >::print_matlab ( const std::string &  = "") const
inlinevirtualinherited

Print the contents of the vector in Matlab's sparse matrix format. Optionally prints the vector to the file named name. If name is not specified it is dumped to the screen.

Reimplemented in libMesh::PetscVector< T >.

Definition at line 681 of file numeric_vector.h.

682  {
683  libmesh_not_implemented();
684  }

◆ processor_id()

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

Definition at line 101 of file parallel_object.h.

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

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::EquationSystems::_read_impl(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::BoundaryInfo::add_elements(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::UnstructuredMesh::all_second_order(), libMesh::MeshTools::Modification::all_tri(), libMesh::FEMSystem::assembly(), libMesh::EquationSystems::build_discontinuous_solution_vector(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::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::MeshTools::correct_node_proc_ids(), libMesh::ExodusII_IO_Helper::create(), libMesh::DistributedMesh::delete_elem(), libMesh::DistributedMesh::delete_node(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_local_dofs_node_major(), libMesh::DofMap::distribute_local_dofs_var_major(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DofMap::end_dof(), libMesh::DofMap::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::MeshFunction::find_element(), libMesh::MeshFunction::find_elements(), 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::DofMap::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::SparsityPattern::Build::handle_vi_vj(), libMesh::SystemSubsetBySubdomain::init(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), libMesh::ExodusII_IO_Helper::initialize_global_variables(), libMesh::ExodusII_IO_Helper::initialize_nodal_variables(), libMesh::DistributedMesh::insert_elem(), libMesh::DofMap::is_evaluable(), libMesh::SparsityPattern::Build::join(), libMesh::DofMap::last_dof(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DofMap::local_variable_indices(), 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::BoundaryInfo::n_shellface_conds(), libMesh::SparsityPattern::Build::operator()(), libMesh::DistributedMesh::own_node(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::Nemesis_IO_Helper::put_cmap_params(), libMesh::Nemesis_IO_Helper::put_elem_cmap(), libMesh::Nemesis_IO_Helper::put_elem_map(), libMesh::Nemesis_IO_Helper::put_loadbal_param(), libMesh::Nemesis_IO_Helper::put_node_cmap(), libMesh::Nemesis_IO_Helper::put_node_map(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::ExodusII_IO_Helper::read_global_values(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), 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_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::System::read_serialized_data(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::System::read_serialized_vectors(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::CheckpointIO::select_split_config(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::MeshTools::total_weight(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::Parallel::Packing< T >::unpack(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_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::Nemesis_IO_Helper::write_nodesets(), libMesh::ExodusII_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_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::System::write_serialized_data(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::XdrIO::write_serialized_subdomain_names(), libMesh::System::write_serialized_vector(), libMesh::System::write_serialized_vectors(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

102  { return cast_int<processor_id_type>(_communicator.rank()); }
const Parallel::Communicator & _communicator
processor_id_type rank() const
Definition: communicator.h:173

◆ reciprocal()

template<typename T >
void libMesh::EpetraVector< T >::reciprocal ( )
overridevirtual

Computes the pointwise reciprocal, $ u_i \leftarrow \frac{1}{u_i} \, \forall i$

Implements libMesh::NumericVector< T >.

Definition at line 162 of file trilinos_epetra_vector.C.

References std::abs(), and std::min().

163 {
164  // The Epetra::reciprocal() function takes a constant reference to *another* vector,
165  // and fills _vec with its reciprocal. Does that mean we can't pass *_vec as the
166  // argument?
167  // _vec->reciprocal( *_vec );
168 
169  // Alternatively, compute the reciprocal by hand... see also the add(T) member that does this...
170  const unsigned int nl = _vec->MyLength();
171 
172  T * values = _vec->Values();
173 
174  for (unsigned int i=0; i<nl; i++)
175  {
176  // Don't divide by zero (maybe only check this in debug mode?)
177  if (std::abs(values[i]) < std::numeric_limits<T>::min())
178  libmesh_error_msg("Error, divide by zero in DistributedVector<T>::reciprocal()!");
179 
180  values[i] = 1. / values[i];
181  }
182 
183  // Leave the vector in a closed state...
184  this->close();
185 }
double abs(double a)
virtual void close() override
long double min(long double a, double b)

◆ ReplaceGlobalValues() [1/3]

template<typename T >
int libMesh::EpetraVector< T >::ReplaceGlobalValues ( int  numIDs,
const int *  GIDs,
const double *  values 
)
private

Copy values into the vector overwriting any values that already exist for the specified indices.

Definition at line 608 of file trilinos_epetra_vector.C.

611 {
612  return( inputValues( numIDs, GIDs, values, false) );
613 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ ReplaceGlobalValues() [2/3]

template<typename T >
int libMesh::EpetraVector< T >::ReplaceGlobalValues ( const Epetra_IntSerialDenseVector &  GIDs,
const Epetra_SerialDenseVector &  values 
)
private

Copy values into the vector, replacing any values that already exist for the specified GIDs.

Parameters
GIDsList of global ids. Must be the same length as the accompanying list of values.
valuesList of coefficient values. Must be the same length as the accompanying list of GIDs.

Definition at line 617 of file trilinos_epetra_vector.C.

619 {
620  if (GIDs.Length() != values.Length()) {
621  return(-1);
622  }
623 
624  return( inputValues( GIDs.Length(), GIDs.Values(), values.Values(), false) );
625 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ ReplaceGlobalValues() [3/3]

template<typename T >
int libMesh::EpetraVector< T >::ReplaceGlobalValues ( int  numIDs,
const int *  GIDs,
const int *  numValuesPerID,
const double *  values 
)
private

Definition at line 629 of file trilinos_epetra_vector.C.

633 {
634  return( inputValues( numIDs, GIDs, numValuesPerID, values, false) );
635 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ scale()

template<typename T >
void libMesh::EpetraVector< T >::scale ( const T  factor)
overridevirtual

Scale each element of the vector by the given factor.

Implements libMesh::NumericVector< T >.

Definition at line 299 of file trilinos_epetra_vector.C.

300 {
301  _vec->Scale(factor_in);
302 }

◆ set()

template<typename T >
void libMesh::EpetraVector< T >::set ( const numeric_index_type  i,
const T  value 
)
overridevirtual

Sets v(i) = value.

Implements libMesh::NumericVector< T >.

Definition at line 147 of file trilinos_epetra_vector.C.

References value.

Referenced by libMesh::EpetraVector< T >::localize().

148 {
149  int i = static_cast<int> (i_in);
150  T value = value_in;
151 
152  libmesh_assert_less (i_in, this->size());
153 
154  ReplaceGlobalValues(1, &i, &value);
155 
156  this->_is_closed = false;
157 }
virtual numeric_index_type size() const override
int ReplaceGlobalValues(int numIDs, const int *GIDs, const double *values)
static const bool value
Definition: xdr_io.C:109

◆ setIgnoreNonLocalEntries()

template<typename T>
void libMesh::EpetraVector< T >::setIgnoreNonLocalEntries ( bool  flag)
inlineprivate

Set whether or not non-local data values should be ignored.

Definition at line 351 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::ignoreNonLocalEntries_.

351  {
352  ignoreNonLocalEntries_ = flag;
353  }

◆ size()

template<typename T >
numeric_index_type libMesh::EpetraVector< T >::size ( ) const
inlineoverridevirtual
Returns
The size of the vector.

Implements libMesh::NumericVector< T >.

Definition at line 723 of file trilinos_epetra_vector.h.

References libMesh::initialized().

Referenced by libMesh::EpetraVector< T >::add().

724 {
725  libmesh_assert (this->initialized());
726 
727  return _vec->GlobalLength();
728 }
virtual bool initialized() const

◆ subset_l1_norm()

template<class T >
Real libMesh::NumericVector< T >::subset_l1_norm ( const std::set< numeric_index_type > &  indices) const
virtualinherited
Returns
The $ \ell_1 $-norm of the vector, i.e. the sum of the absolute values for the specified entries in the vector.
Note
The indices must necessarily live on this processor.

Definition at line 311 of file numeric_vector.C.

Referenced by libMesh::System::discrete_var_norm().

312 {
313  const NumericVector<T> & v = *this;
314 
315  Real norm = 0;
316 
317  for (const auto & index : indices)
318  norm += std::abs(v(index));
319 
320  this->comm().sum(norm);
321 
322  return norm;
323 }
double abs(double a)
const Parallel::Communicator & comm() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ subset_l2_norm()

template<class T >
Real libMesh::NumericVector< T >::subset_l2_norm ( const std::set< numeric_index_type > &  indices) const
virtualinherited
Returns
The $ \ell_2 $-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
The indices must necessarily live on this processor.

Definition at line 326 of file numeric_vector.C.

Referenced by libMesh::System::discrete_var_norm().

327 {
328  const NumericVector<T> & v = *this;
329 
330  Real norm = 0;
331 
332  for (const auto & index : indices)
333  norm += TensorTools::norm_sq(v(index));
334 
335  this->comm().sum(norm);
336 
337  return std::sqrt(norm);
338 }
const Parallel::Communicator & comm() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ subset_linfty_norm()

template<class T >
Real libMesh::NumericVector< T >::subset_linfty_norm ( const std::set< numeric_index_type > &  indices) const
virtualinherited
Returns
The maximum absolute value of the specified entries of this vector, which is the $ \ell_{\infty} $-norm of a vector.
Note
The indices must necessarily live on this processor.

Definition at line 341 of file numeric_vector.C.

Referenced by libMesh::System::discrete_var_norm().

342 {
343  const NumericVector<T> & v = *this;
344 
345  Real norm = 0;
346 
347  for (const auto & index : indices)
348  {
349  Real value = std::abs(v(index));
350  if (value > norm)
351  norm = value;
352  }
353 
354  this->comm().max(norm);
355 
356  return norm;
357 }
double abs(double a)
const Parallel::Communicator & comm() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition: xdr_io.C:109

◆ sum()

template<typename T >
T libMesh::EpetraVector< T >::sum ( ) const
overridevirtual
Returns
The sum of all values in the vector.

Implements libMesh::NumericVector< T >.

Definition at line 50 of file trilinos_epetra_vector.C.

References libMesh::closed().

51 {
52  libmesh_assert(this->closed());
53 
54  const unsigned int nl = _vec->MyLength();
55 
56  T sum=0.0;
57 
58  T * values = _vec->Values();
59 
60  for (unsigned int i=0; i<nl; i++)
61  sum += values[i];
62 
63  this->comm().sum(sum);
64 
65  return sum;
66 }
const Parallel::Communicator & comm() const
virtual T sum() const override
virtual bool closed() const

◆ SumIntoGlobalValues() [1/3]

template<typename T >
int libMesh::EpetraVector< T >::SumIntoGlobalValues ( int  numIDs,
const int *  GIDs,
const double *  values 
)
private

Accumulate values into the vector, adding them to any values that already exist for the specified indices.

Definition at line 577 of file trilinos_epetra_vector.C.

580 {
581  return( inputValues( numIDs, GIDs, values, true) );
582 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ SumIntoGlobalValues() [2/3]

template<typename T >
int libMesh::EpetraVector< T >::SumIntoGlobalValues ( const Epetra_IntSerialDenseVector &  GIDs,
const Epetra_SerialDenseVector &  values 
)
private

Accumulate values into the vector, adding them to any values that already exist for the specified GIDs.

Parameters
GIDsList of global ids. Must be the same length as the accompanying list of values.
valuesList of coefficient values. Must be the same length as the accompanying list of GIDs.

Definition at line 586 of file trilinos_epetra_vector.C.

588 {
589  if (GIDs.Length() != values.Length()) {
590  return(-1);
591  }
592 
593  return( inputValues( GIDs.Length(), GIDs.Values(), values.Values(), true) );
594 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ SumIntoGlobalValues() [3/3]

template<typename T >
int libMesh::EpetraVector< T >::SumIntoGlobalValues ( int  numIDs,
const int *  GIDs,
const int *  numValuesPerID,
const double *  values 
)
private

Definition at line 598 of file trilinos_epetra_vector.C.

602 {
603  return( inputValues( numIDs, GIDs, numValuesPerID, values, true) );
604 }
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)

◆ swap()

template<typename T >
void libMesh::EpetraVector< T >::swap ( NumericVector< T > &  v)
inlineoverridevirtual

Swaps the contents of this with v. There should be enough indirection in subclasses to make this an O(1) header-swap operation.

Reimplemented from libMesh::NumericVector< T >.

Definition at line 807 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::_destroy_vec_on_exit, libMesh::EpetraVector< T >::_map, libMesh::EpetraVector< T >::_vec, libMesh::EpetraVector< T >::allocatedNonlocalLength_, libMesh::EpetraVector< T >::ignoreNonLocalEntries_, libMesh::EpetraVector< T >::last_edit, libMesh::EpetraVector< T >::myCoefs_, libMesh::EpetraVector< T >::myFirstID_, libMesh::EpetraVector< T >::myNumIDs_, libMesh::EpetraVector< T >::nonlocalCoefs_, libMesh::EpetraVector< T >::nonlocalElementSize_, libMesh::EpetraVector< T >::nonlocalIDs_, libMesh::EpetraVector< T >::numNonlocalIDs_, swap(), and libMesh::NumericVector< T >::swap().

Referenced by libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), and libMesh::Problem_Interface::computePreconditioner().

808 {
809  NumericVector<T>::swap(other);
810 
811  EpetraVector<T> & v = cast_ref<EpetraVector<T> &>(other);
812 
813  std::swap(_vec, v._vec);
814  _map.swap(v._map);
815  std::swap(_destroy_vec_on_exit, v._destroy_vec_on_exit);
816  std::swap(myFirstID_, v.myFirstID_);
817  std::swap(myNumIDs_, v.myNumIDs_);
818  std::swap(myCoefs_, v.myCoefs_);
819  std::swap(nonlocalIDs_, v.nonlocalIDs_);
820  std::swap(nonlocalElementSize_, v.nonlocalElementSize_);
821  std::swap(numNonlocalIDs_, v.numNonlocalIDs_);
822  std::swap(allocatedNonlocalLength_, v.allocatedNonlocalLength_);
823  std::swap(nonlocalCoefs_, v.nonlocalCoefs_);
824  std::swap(last_edit, v.last_edit);
825  std::swap(ignoreNonLocalEntries_, v.ignoreNonLocalEntries_);
826 }
std::unique_ptr< Epetra_Map > _map
virtual void swap(NumericVector< T > &v)
void swap(Iterator &lhs, Iterator &rhs)

◆ type() [1/2]

◆ type() [2/2]

template<typename T>
ParallelType& libMesh::NumericVector< T >::type ( )
inlineinherited
Returns
The type (SERIAL, PARALLEL, GHOSTED) of the vector.

Definition at line 159 of file numeric_vector.h.

159 { return _type; }

◆ vec()

template<typename T>
Epetra_Vector* libMesh::EpetraVector< T >::vec ( )
inline
Returns
The raw Epetra_Vector pointer.
Note
This is generally not required in user-level code.
Don't do anything crazy like deleting the pointer, or very bad things will likely happen!

Definition at line 261 of file trilinos_epetra_vector.h.

References libMesh::EpetraVector< T >::_vec.

Referenced by libMesh::EpetraMatrix< T >::get_diagonal(), and libMesh::NoxNonlinearSolver< Number >::solve().

261 { libmesh_assert(_vec); return _vec; }

◆ zero()

template<typename T >
void libMesh::EpetraVector< T >::zero ( )
inlineoverridevirtual

Set all entries to zero. Equivalent to v = 0, but more obvious and faster.

Implements libMesh::NumericVector< T >.

Definition at line 688 of file trilinos_epetra_vector.h.

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

689 {
690  libmesh_assert (this->initialized());
691  libmesh_assert (this->closed());
692 
693  _vec->PutScalar(0.0);
694 }
virtual bool initialized() const
virtual bool closed() const

◆ zero_clone()

template<typename T >
std::unique_ptr< NumericVector< T > > libMesh::EpetraVector< T >::zero_clone ( ) const
inlineoverridevirtual
Returns
A smart pointer to a copy of this vector with the same type, size, and partitioning, but with all zero entries.
Note
This must be overridden in the derived classes.

Implements libMesh::NumericVector< T >.

Definition at line 700 of file trilinos_epetra_vector.h.

References libMesh::AUTOMATIC, and libMesh::NumericVector< T >::init().

Referenced by libMesh::EpetraVector< T >::add_vector().

701 {
702  NumericVector<T> * cloned_vector = new EpetraVector<T>(this->comm(), AUTOMATIC);
703  cloned_vector->init(*this);
704  return std::unique_ptr<NumericVector<T>>(cloned_vector);
705 }
const Parallel::Communicator & comm() const

Member Data Documentation

◆ _communicator

◆ _counts

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

◆ _destroy_vec_on_exit

template<typename T>
bool libMesh::EpetraVector< T >::_destroy_vec_on_exit
private

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

Definition at line 279 of file trilinos_epetra_vector.h.

Referenced by libMesh::EpetraVector< T >::swap().

◆ _enable_print_counter

bool libMesh::ReferenceCounter::_enable_print_counter = true
staticprotectedinherited

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

Definition at line 141 of file reference_counter.h.

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

◆ _is_closed

template<typename T>
bool libMesh::NumericVector< T >::_is_closed
protectedinherited

Flag which tracks whether the vector's values are consistent on all processors after insertion or addition of values has occurred on some or all processors.

Definition at line 712 of file numeric_vector.h.

Referenced by libMesh::NumericVector< Number >::closed(), libMesh::EpetraVector< T >::EpetraVector(), libMesh::DistributedVector< T >::localize(), libMesh::DistributedVector< T >::operator=(), and libMesh::PetscVector< T >::PetscVector().

◆ _is_initialized

◆ _map

template<typename T>
std::unique_ptr<Epetra_Map> libMesh::EpetraVector< T >::_map
private

Holds the distributed Map.

Definition at line 273 of file trilinos_epetra_vector.h.

Referenced by libMesh::EpetraVector< T >::EpetraVector(), and libMesh::EpetraVector< T >::swap().

◆ _mutex

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

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 135 of file reference_counter.h.

◆ _n_objects

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

The number of objects. Print the reference count information when the number returns to 0.

Definition at line 130 of file reference_counter.h.

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

◆ _type

◆ _vec

◆ allocatedNonlocalLength_

template<typename T>
int libMesh::EpetraVector< T >::allocatedNonlocalLength_
private

◆ ignoreNonLocalEntries_

template<typename T>
bool libMesh::EpetraVector< T >::ignoreNonLocalEntries_
private

◆ last_edit

template<typename T>
unsigned char libMesh::EpetraVector< T >::last_edit
private

Keep track of whether the last write operation on this vector was nothing (0) or a sum (1) or an add (2), so we can decide how to do the GlobalAssemble()

Definition at line 394 of file trilinos_epetra_vector.h.

Referenced by libMesh::EpetraVector< T >::swap().

◆ myCoefs_

template<typename T>
double* libMesh::EpetraVector< T >::myCoefs_
private

◆ myFirstID_

template<typename T>
int libMesh::EpetraVector< T >::myFirstID_
private

◆ myNumIDs_

template<typename T>
int libMesh::EpetraVector< T >::myNumIDs_
private

◆ nonlocalCoefs_

template<typename T>
double** libMesh::EpetraVector< T >::nonlocalCoefs_
private

◆ nonlocalElementSize_

template<typename T>
int* libMesh::EpetraVector< T >::nonlocalElementSize_
private

◆ nonlocalIDs_

template<typename T>
int* libMesh::EpetraVector< T >::nonlocalIDs_
private

◆ numNonlocalIDs_

template<typename T>
int libMesh::EpetraVector< T >::numNonlocalIDs_
private

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