libMesh
Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Private Attributes | List of all members
libMesh::EpetraVector< T > Class Template Referencefinal

This class provides a nice interface to the Trilinos Epetra_Vector object. More...

#include <trilinos_epetra_vector.h>

Inheritance diagram for libMesh::EpetraVector< T >:
[legend]

Public Member Functions

 EpetraVector (const Parallel::Communicator &comm, const ParallelType type=AUTOMATIC)
 Dummy-Constructor. More...
 
 EpetraVector (const Parallel::Communicator &comm, const numeric_index_type n, const ParallelType type=AUTOMATIC)
 Constructor. More...
 
 EpetraVector (const Parallel::Communicator &comm, const numeric_index_type n, const numeric_index_type n_local, const ParallelType type=AUTOMATIC)
 Constructor. More...
 
 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)
 Constructor. More...
 
 EpetraVector (Epetra_Vector &v, const Parallel::Communicator &comm)
 Constructor. More...
 
 EpetraVector (EpetraVector &&)=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. More...
 
 EpetraVector (const EpetraVector &)=delete
 
EpetraVectoroperator= (const EpetraVector &)=delete
 
EpetraVectoroperator= (EpetraVector &&)=delete
 
virtual ~EpetraVector ()
 
virtual void close () override
 Calls the NumericVector's internal assembly routines, ensuring that the values are consistent across processors. More...
 
virtual void clear () override
 Restores the NumericVector<T> to a pristine state. More...
 
virtual void zero () override
 Set all entries to zero. More...
 
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
 Change the dimension of the vector to n. More...
 
virtual void init (const numeric_index_type N, const bool fast=false, const ParallelType type=AUTOMATIC) override
 Call init() with n_local = N. More...
 
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
 Create a vector that holds tha local indices plus those specified in the ghost argument. More...
 
virtual void init (const NumericVector< T > &other, const bool fast=false) override
 Creates a vector that has the same dimension and storage type as other, including ghost dofs. More...
 
virtual NumericVector< T > & operator= (const T s) override
 Sets all entries of the vector to the value s. More...
 
virtual NumericVector< T > & operator= (const NumericVector< T > &v) override
 This looks like a copy assignment operator, but note that, unlike normal copy assignment operators, it is pure virtual. More...
 
virtual NumericVector< T > & operator= (const std::vector< T > &v) override
 Sets (*this)(i) = v(i) for each entry of the vector. More...
 
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
 Adds v to *this, \( \vec{u} \leftarrow \vec{u} + \vec{v} \). More...
 
virtual NumericVector< T > & operator-= (const NumericVector< T > &v) override
 Subtracts v from *this, \( \vec{u} \leftarrow \vec{u} - \vec{v} \). More...
 
virtual NumericVector< T > & operator*= (const NumericVector< T > &v) override
 Computes the component-wise multiplication of this vector's entries by another's, \( u_i \leftarrow u_i v_i \, \forall i\). More...
 
virtual NumericVector< T > & operator/= (const NumericVector< T > &v) override
 Computes the component-wise division of this vector's entries by another's, \( u_i \leftarrow \frac{u_i}{v_i} \, \forall i\). More...
 
virtual void reciprocal () override
 Computes the component-wise reciprocal, \( u_i \leftarrow \frac{1}{u_i} \, \forall i\). More...
 
virtual void conjugate () override
 Negates the imaginary component of each entry in the vector. More...
 
virtual void set (const numeric_index_type i, const T value) override
 Sets v(i) = value. More...
 
virtual void add (const numeric_index_type i, const T value) override
 Adds value to each entry of the vector. More...
 
virtual void add (const T s) override
 Adds s to each entry of the vector, \( u_i \leftarrow u_i + s \). More...
 
virtual void add (const NumericVector< T > &v) override
 Adds v to this, \( \vec{u} \leftarrow \vec{u} + \vec{v} \). More...
 
virtual void add (const T a, const NumericVector< T > &v) override
 Vector addition with a scalar multiple, \( \vec{u} \leftarrow \vec{u} + a\vec{v} \). More...
 
virtual void add_vector (const T *v, const std::vector< numeric_index_type > &dof_indices) override
 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]. More...
 
virtual void add_vector (const NumericVector< T > &v, const SparseMatrix< T > &A) override
 Computes \( \vec{u} \leftarrow \vec{u} + A \vec{v} \), i.e. More...
 
virtual void add_vector_transpose (const NumericVector< T > &v, const SparseMatrix< T > &A) override
 Computes \( \vec{u} \leftarrow \vec{u} + A^T \vec{v} \), i.e. More...
 
virtual void insert (const T *v, const std::vector< numeric_index_type > &dof_indices) override
 Inserts the entries of v in *this at the locations specified by v. More...
 
virtual void scale (const T factor) override
 Scale each element of the vector by the given factor. More...
 
virtual void abs () override
 Sets \( u_i \leftarrow |u_i| \) for each entry in the vector. More...
 
virtual T dot (const NumericVector< T > &v) const override
 
virtual void localize (std::vector< T > &v_local) const override
 Creates a copy of the global vector in the local vector v_local. More...
 
virtual void localize (NumericVector< T > &v_local) const override
 Same, but fills a NumericVector<T> instead of a std::vector. More...
 
virtual void localize (NumericVector< T > &v_local, const std::vector< numeric_index_type > &send_list) const override
 Creates a local vector v_local containing only information relevant to this processor, as defined by the send_list. More...
 
virtual void localize (std::vector< T > &v_local, const std::vector< numeric_index_type > &indices) const override
 Fill in the local std::vector "v_local" with the global indices given in "indices". More...
 
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
 Updates a local vector with selected values from neighboring processors, as defined by send_list. More...
 
virtual void localize_to_one (std::vector< T > &v_local, const processor_id_type proc_id=0) const override
 Creates a local copy of the global vector in v_local only on processor proc_id. More...
 
virtual void pointwise_mult (const NumericVector< T > &vec1, const NumericVector< T > &vec2) override
 Computes \( u_i \leftarrow u_i v_i \) (summation not implied) i.e. More...
 
virtual void create_subvector (NumericVector< T > &subvector, const std::vector< numeric_index_type > &rows) const override
 Fills in subvector from this vector using the indices in rows. More...
 
virtual void swap (NumericVector< T > &v) override
 Swaps the contents of this with v. More...
 
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
 Access multiple components at once. More...
 
void get (const std::vector< numeric_index_type > &index, std::vector< T > &values) const
 Access multiple components at once. More...
 
NumericVector< T > & operator*= (const T a)
 Scales the vector by a, \( \vec{u} \leftarrow a\vec{u} \). More...
 
NumericVector< T > & operator/= (const T a)
 Scales the vector by 1/a, \( \vec{u} \leftarrow \frac{1}{a}\vec{u} \). More...
 
void add_vector (const std::vector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 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]. More...
 
virtual void add_vector (const NumericVector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 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). More...
 
void add_vector (const DenseVector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 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). More...
 
void add_vector (const NumericVector< T > &v, const ShellMatrix< T > &A)
 Computes \( \vec{u} \leftarrow \vec{u} + A \vec{v} \), i.e. More...
 
void insert (const std::vector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 Inserts the entries of v in *this at the locations specified by v. More...
 
virtual void insert (const NumericVector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 Inserts the entries of v in *this at the locations specified by v. More...
 
void insert (const DenseVector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 Inserts the entries of v in *this at the locations specified by v. More...
 
void insert (const DenseSubVector< T > &v, const std::vector< numeric_index_type > &dof_indices)
 Inserts the entries of v in *this at the locations specified by v. More...
 
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
 Prints the local contents of the vector, by default to libMesh::out. More...
 
template<>
void print (std::ostream &os) const
 
virtual void print_global (std::ostream &os=libMesh::out) const
 Prints the global contents of the vector, by default to libMesh::out. More...
 
template<>
void print_global (std::ostream &os) const
 
virtual void print_matlab (const std::string &="") const
 Print the contents of the vector in Matlab's sparse matrix format. More...
 
const Parallel::Communicator & comm () 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())
 Builds a NumericVector on the processors in communicator comm using the linear solver package specified by solver_package. More...
 
static std::string get_info ()
 Gets a string containing the reference information. More...
 
static void print_info (std::ostream &out=libMesh::out)
 Prints the reference information, by default to libMesh::out. More...
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects. More...
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info() More...
 
static void disable_print_counter_info ()
 

Protected Types

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

Protected Member Functions

void increment_constructor_count (const std::string &name)
 Increments the construction counter. More...
 
void increment_destructor_count (const std::string &name)
 Increments the destruction counter. More...
 

Protected Attributes

bool _is_closed
 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. More...
 
bool _is_initialized
 true once init() has been called. More...
 
ParallelType _type
 Type of vector. More...
 
const Parallel::Communicator & _communicator
 

Static Protected Attributes

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

Private Member Functions

int SumIntoGlobalValues (int numIDs, const int *GIDs, const double *values)
 Accumulate values into the vector, adding them to any values that already exist for the specified indices. More...
 
int SumIntoGlobalValues (const Epetra_IntSerialDenseVector &GIDs, const Epetra_SerialDenseVector &values)
 Accumulate values into the vector, adding them to any values that already exist for the specified GIDs. More...
 
int ReplaceGlobalValues (int numIDs, const int *GIDs, const double *values)
 Copy values into the vector overwriting any values that already exist for the specified indices. More...
 
int ReplaceGlobalValues (const Epetra_IntSerialDenseVector &GIDs, const Epetra_SerialDenseVector &values)
 Copy values into the vector, replacing any values that already exist for the specified GIDs. More...
 
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)
 Gather any overlapping/shared data into the non-overlapping partitioning defined by the Map that was passed to this vector at construction time. More...
 
void setIgnoreNonLocalEntries (bool flag)
 Set whether or not non-local data values should be ignored. More...
 
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
 Actual Epetra vector datatype to hold vector entries. More...
 
std::unique_ptr< Epetra_Map > _map
 Holds the distributed Map. More...
 
bool _destroy_vec_on_exit
 This boolean value should only be set to false for the constructor which takes a Epetra Vec object. More...
 
int myFirstID_
 
int myNumIDs_
 
double * myCoefs_
 
intnonlocalIDs_
 
intnonlocalElementSize_
 
int numNonlocalIDs_
 
int allocatedNonlocalLength_
 
double ** nonlocalCoefs_
 
unsigned char last_edit
 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() More...
 
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 63 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 409 of file trilinos_epetra_vector.h.

410  :
411  NumericVector<T>(comm, type),
412  _destroy_vec_on_exit(true),
413  myFirstID_(0),
414  myNumIDs_(0),
415  myCoefs_(nullptr),
416  nonlocalIDs_(nullptr),
417  nonlocalElementSize_(nullptr),
418  numNonlocalIDs_(0),
420  nonlocalCoefs_(nullptr),
421  last_edit(0),
423 {
424  this->_type = type;
425 }

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

◆ 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 431 of file trilinos_epetra_vector.h.

433  :
434  NumericVector<T>(comm, type),
435  _destroy_vec_on_exit(true),
436  myFirstID_(0),
437  myNumIDs_(0),
438  myCoefs_(nullptr),
439  nonlocalIDs_(nullptr),
440  nonlocalElementSize_(nullptr),
441  numNonlocalIDs_(0),
443  nonlocalCoefs_(nullptr),
444  last_edit(0),
446 
447 {
448  this->init(n, n, false, type);
449 }

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

◆ 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 455 of file trilinos_epetra_vector.h.

458  :
459  NumericVector<T>(comm, type),
460  _destroy_vec_on_exit(true),
461  myFirstID_(0),
462  myNumIDs_(0),
463  myCoefs_(nullptr),
464  nonlocalIDs_(nullptr),
465  nonlocalElementSize_(nullptr),
466  numNonlocalIDs_(0),
468  nonlocalCoefs_(nullptr),
469  last_edit(0),
471 {
472  this->init(n, n_local, false, type);
473 }

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

◆ 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 521 of file trilinos_epetra_vector.h.

525  :
526  NumericVector<T>(comm, AUTOMATIC),
527  _destroy_vec_on_exit(true),
528  myFirstID_(0),
529  myNumIDs_(0),
530  myCoefs_(nullptr),
531  nonlocalIDs_(nullptr),
532  nonlocalElementSize_(nullptr),
533  numNonlocalIDs_(0),
535  nonlocalCoefs_(nullptr),
536  last_edit(0),
538 {
539  this->init(n, n_local, ghost, false, type);
540 }

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

◆ 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 480 of file trilinos_epetra_vector.h.

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

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::NumericVector< T >::get(), libMesh::EpetraVector< T >::myCoefs_, libMesh::EpetraVector< T >::myFirstID_, libMesh::EpetraVector< T >::myNumIDs_, and libMesh::PARALLEL.

◆ 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 557 of file trilinos_epetra_vector.h.

558 {
559  this->clear ();
560 }

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

321 {
322  _vec->Abs(*_vec);
323 }

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

214 {
215  int i = static_cast<int> (i_in);
216  T value = value_in;
217 
218  libmesh_assert_less (i_in, this->size());
219 
220  SumIntoGlobalValues(1, &i, &value);
221 
222  this->_is_closed = false;
223 }

References value.

◆ add() [2/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 282 of file trilinos_epetra_vector.C.

283 {
284  this->add (1., v);
285 }

◆ add() [3/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 289 of file trilinos_epetra_vector.C.

290 {
291  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
292 
293  libmesh_assert_equal_to (this->size(), v->size());
294 
295  _vec->Update(a_in,*v->_vec, 1.);
296 }

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

◆ add() [4/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 268 of file trilinos_epetra_vector.C.

269 {
270  const unsigned int nl = _vec->MyLength();
271 
272  T * values = _vec->Values();
273 
274  for (unsigned int i=0; i<nl; i++)
275  values[i]+=v_in;
276 
277  this->_is_closed = false;
278 }

◆ add_vector() [1/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 862 of file numeric_vector.h.

864 {
865  libmesh_assert(v.size() == dof_indices.size());
866  if (!v.empty())
867  this->add_vector(&v(0), dof_indices);
868 }

◆ add_vector() [2/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 385 of file numeric_vector.C.

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

◆ add_vector() [3/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 242 of file trilinos_epetra_vector.C.

244 {
245  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
246  const EpetraMatrix<T> * A = cast_ptr<const EpetraMatrix<T> *>(&A_in);
247 
248  // FIXME - does Trilinos let us do this *without* memory allocation?
249  std::unique_ptr<NumericVector<T>> temp = v->zero_clone();
250  EpetraVector<T> * temp_v = cast_ptr<EpetraVector<T> *>(temp.get());
251  A->mat()->Multiply(false, *v->_vec, *temp_v->_vec);
252  *this += *temp;
253 }

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

◆ 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 373 of file numeric_vector.C.

375 {
376  const std::size_t n = dof_indices.size();
377  libmesh_assert_equal_to(v.size(), n);
378  for (numeric_index_type i=0; i != n; i++)
379  this->add (dof_indices[i], v(i));
380 }

◆ add_vector() [5/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 850 of file numeric_vector.h.

852 {
853  libmesh_assert(v.size() == dof_indices.size());
854  if (!v.empty())
855  this->add_vector(v.data(), dof_indices);
856 }

◆ add_vector() [6/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 228 of file trilinos_epetra_vector.C.

230 {
231  libmesh_assert_equal_to (sizeof(numeric_index_type), sizeof(int));
232 
233  SumIntoGlobalValues (cast_int<numeric_index_type>(dof_indices.size()),
234  numeric_trilinos_cast(dof_indices.data()),
235  const_cast<T *>(v));
236 }

References libMesh::numeric_trilinos_cast().

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

261 {
262  libmesh_not_implemented();
263 }

◆ 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 49 of file numeric_vector.C.

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

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::System::add_vector(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::System::calculate_norm(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::DiagonalMatrix< T >::DiagonalMatrix(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::RBConstruction::enrich_RB_space(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBEIMConstruction::initialize_rb_construction(), main(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::RBEIMConstruction::set_explicit_sys_subvector(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), DiagonalMatrixTest::testNumerics(), SystemsTest::testProjectCubeWithMeshFunction(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::RBEIMConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), and libMesh::RBConstruction::update_residual_terms().

◆ 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 671 of file trilinos_epetra_vector.h.

672 {
673  if (this->initialized())
674  {
675  // We might just be an interface to a user-provided _vec
676  if (this->_destroy_vec_on_exit)
677  {
678  delete _vec;
679  _vec = nullptr;
680  }
681 
682  // But we currently always own our own _map
683  _map.reset();
684  }
685 
686  this->_is_closed = this->_is_initialized = false;
687 }

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

◆ 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 716 of file trilinos_epetra_vector.h.

717 {
718  NumericVector<T> * cloned_vector = new EpetraVector<T>(this->comm(), AUTOMATIC);
719  cloned_vector->init(*this, true);
720  *cloned_vector = *this;
721  return std::unique_ptr<NumericVector<T>>(cloned_vector);
722 }

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

◆ 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 647 of file trilinos_epetra_vector.h.

648 {
649  libmesh_assert (this->initialized());
650 
651  // Are we adding or inserting?
652  unsigned char global_last_edit = last_edit;
653  this->comm().max(global_last_edit);
654  libmesh_assert(!last_edit || last_edit == global_last_edit);
655 
656  if (global_last_edit == 1)
657  this->GlobalAssemble(Insert);
658  else if (global_last_edit == 2)
659  this->GlobalAssemble(Add);
660  else
661  libmesh_assert(!global_last_edit);
662 
663  this->_is_closed = true;
664  this->last_edit = 0;
665 }

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

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

◆ closed()

template<typename T>
virtual bool libMesh::NumericVector< T >::closed ( ) const
inlinevirtualinherited
Returns
true if the vector is closed and ready for computation, false otherwise.

Definition at line 171 of file numeric_vector.h.

171 { return _is_closed; }

Referenced by libMesh::DofMap::max_constraint_error(), libMesh::EigenSparseVector< T >::operator=(), libMesh::LaspackVector< T >::operator=(), and libMesh::PetscVector< libMesh::Number >::operator=().

◆ comm()

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

Definition at line 94 of file parallel_object.h.

95  { return _communicator; }

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::PetscLinearSolver< Number >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult_add(), libMesh::EquationSystems::_read_impl(), libMesh::MeshRefinement::_refine_elements(), libMesh::MeshRefinement::_smooth_flags(), libMesh::DofMap::add_constraints_to_send_list(), add_cube_convex_hull_to_mesh(), libMesh::PetscDMWrapper::add_dofs_helper(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::ImplicitSystem::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::DynaIO::add_spline_constraints(), libMesh::System::add_vector(), libMesh::UnstructuredMesh::all_second_order(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::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::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::RBSCMConstruction::compute_SCM_bounds_on_training_set(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::DofMap::create_dof_constraints(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::DTKSolutionTransfer::DTKSolutionTransfer(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_RB_space(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::RBConstruction::enrich_RB_space(), libMesh::EpetraVector< T >::EpetraVector(), AssembleOptimization::equality_constraints(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::RBEIMConstruction::evaluate_mesh_function(), libMesh::MeshRefinement::flag_elements_by_elem_fraction(), libMesh::MeshRefinement::flag_elements_by_error_fraction(), libMesh::MeshRefinement::flag_elements_by_error_tolerance(), libMesh::MeshRefinement::flag_elements_by_mean_stddev(), libMesh::MeshRefinement::flag_elements_by_nelem_target(), libMesh::DofMap::gather_constraints(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::DofMap::get_info(), libMesh::ImplicitSystem::get_linear_solver(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::EigenSystem::init_matrices(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_rb_construction(), integrate_function(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_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_preconditioner_apply(), 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(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::DofMap::n_constrained_dofs(), 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::DofMap::print_dof_constraints(), FEMParameters::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::System::read_legacy_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::DistributedMesh::renumber_dof_objects(), LinearElasticityWithContact::residual_and_jacobian(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::RBEIMConstruction::set_explicit_sys_subvector(), 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::BoundaryInfo::sync(), libMesh::MeshRefinement::test_level_one(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), libMesh::MeshRefinement::test_unflagged(), SystemsTest::testBlockRestrictedVarNDofs(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), SystemsTest::testProjectCubeWithMeshFunction(), CheckpointIOTest::testSplitter(), libMesh::MeshTools::total_weight(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::RBEIMConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::VTKIO::write_nodal_data(), libMesh::RBEvaluation::write_out_vectors(), libMesh::TransientRBConstruction::write_riesz_representors_to_files(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::RBDataSerialization::RBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::TransientRBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::RBEIMEvaluationSerialization::write_to_file(), and libMesh::RBDataSerialization::RBSCMEvaluationSerialization::write_to_file().

◆ 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 105 of file numeric_vector.C.

107 {
108  libmesh_assert (this->initialized());
109  libmesh_assert (other_vector.initialized());
110  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
111  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
112 
113  int first_different_i = std::numeric_limits<int>::max();
115 
116  do
117  {
118  if (std::abs((*this)(i) - other_vector(i)) > threshold)
119  first_different_i = i;
120  else
121  i++;
122  }
123  while (first_different_i==std::numeric_limits<int>::max()
124  && i<last_local_index());
125 
126  // Find the correct first differing index in parallel
127  this->comm().min(first_different_i);
128 
129  if (first_different_i == std::numeric_limits<int>::max())
130  return -1;
131 
132  return first_different_i;
133 }

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

206 {
207  // EPetra is real, rendering this a no-op.
208 }

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

578 {
579  libmesh_not_implemented();
580 }

◆ destroyNonlocalData()

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

Definition at line 909 of file trilinos_epetra_vector.C.

911 {
912  if (allocatedNonlocalLength_ > 0) {
913  delete [] nonlocalIDs_;
914  delete [] nonlocalElementSize_;
915  nonlocalIDs_ = nullptr;
916  nonlocalElementSize_ = nullptr;
917  for (int i=0; i<numNonlocalIDs_; ++i) {
918  delete [] nonlocalCoefs_[i];
919  }
920  delete [] nonlocalCoefs_;
921  nonlocalCoefs_ = nullptr;
922  numNonlocalIDs_ = 0;
924  }
925  return;

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 106 of file reference_counter.C.

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

References libMesh::ReferenceCounter::_enable_print_counter.

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

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

328 {
329  const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
330 
331  T result=0.0;
332 
333  _vec->Dot(*v->_vec, &result);
334 
335  return result;
336 }

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

◆ el()

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

Definition at line 352 of file numeric_vector.h.

352 { 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.

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

References libMesh::ReferenceCounter::_enable_print_counter.

◆ FEoperatorequals()

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

Definition at line 881 of file trilinos_epetra_vector.C.

883 {
884  (*_vec) = *(source._vec);
885 
887 
888  if (source.allocatedNonlocalLength_ > 0) {
889  allocatedNonlocalLength_ = source.allocatedNonlocalLength_;
890  numNonlocalIDs_ = source.numNonlocalIDs_;
894  for (int i=0; i<numNonlocalIDs_; ++i) {
895  int elemSize = source.nonlocalElementSize_[i];
896  nonlocalCoefs_[i] = new double[elemSize];
897  nonlocalIDs_[i] = source.nonlocalIDs_[i];
898  nonlocalElementSize_[i] = elemSize;
899  for (int j=0; j<elemSize; ++j) {
900  nonlocalCoefs_[i][j] = source.nonlocalCoefs_[i][j];
901  }
902  }
903  }

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_.

◆ 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 748 of file trilinos_epetra_vector.h.

749 {
750  libmesh_assert (this->initialized());
751 
752  return _vec->Map().MinMyGID();
753 }

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

◆ get() [1/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 835 of file numeric_vector.h.

837 {
838  const std::size_t num = index.size();
839  values.resize(num);
840  if (!num)
841  return;
842 
843  this->get(index, values.data());
844 }

◆ get() [2/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 >, and libMesh::PetscVector< libMesh::Number >.

Definition at line 821 of file numeric_vector.h.

823 {
824  const std::size_t num = index.size();
825  for (std::size_t i=0; i<num; i++)
826  {
827  values[i] = (*this)(index[i]);
828  }
829 }

Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), compute_residual(), libMesh::EpetraVector< T >::EpetraVector(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::RBConstructionBase< CondensedEigenSystem >::generate_training_parameters_deterministic(), libMesh::RBConstructionBase< CondensedEigenSystem >::generate_training_parameters_random(), libMesh::RBConstructionBase< CondensedEigenSystem >::initialize_training_parameters(), libMesh::RBConstructionBase< CondensedEigenSystem >::load_training_set(), libMesh::FEMContext::pre_fe_reinit(), and libMesh::System::project_vector().

◆ 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.

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 }

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

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

◆ 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 170 of file numeric_vector.C.

172 {
173  libmesh_assert (this->initialized());
174  libmesh_assert (other_vector.initialized());
175  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
176  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
177 
178  int first_different_i = std::numeric_limits<int>::max();
180 
181  const Real my_norm = this->linfty_norm();
182  const Real other_norm = other_vector.linfty_norm();
183  const Real abs_threshold = std::max(my_norm, other_norm) * threshold;
184 
185  do
186  {
187  if (std::abs((*this)(i) - other_vector(i) ) > abs_threshold)
188  first_different_i = i;
189  else
190  i++;
191  }
192  while (first_different_i==std::numeric_limits<int>::max()
193  && i<last_local_index());
194 
195  // Find the correct first differing index in parallel
196  this->comm().min(first_different_i);
197 
198  if (first_different_i == std::numeric_limits<int>::max())
199  return -1;
200 
201  return first_different_i;
202 }

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

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

◆ 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.

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 }

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

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

◆ 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.

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 }

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

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

◆ init() [1/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 636 of file trilinos_epetra_vector.h.

639 {
640  this->init(n,n,fast,type);
641 }

References libMesh::TriangleWrapper::init().

◆ init() [2/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 566 of file trilinos_epetra_vector.h.

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

References libMesh::libMeshPrivateData::_is_initialized, libMesh::AUTOMATIC, libMesh::ReferenceElem::get(), libMesh::GHOSTED, libMesh::libmesh_assert(), libMesh::PARALLEL, libMesh::SERIAL, and libMesh::zero.

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

◆ 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  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 622 of file trilinos_epetra_vector.h.

627 {
628  // TODO: we shouldn't ignore the ghost sparsity pattern
629  this->init(n, n_local, fast, type);
630 }

References libMesh::TriangleWrapper::init().

◆ 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 547 of file trilinos_epetra_vector.h.

549 {
550  this->init(other.size(),other.local_size(),fast,other.type());
551 }

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

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

735 {
736  int insertPoint = -1;
737 
738  //find offset of GID in nonlocalIDs_
739  int offset = Epetra_Util_binary_search(GID, nonlocalIDs_, numNonlocalIDs_,
740  insertPoint);
741  if (offset >= 0) {
742  //if offset >= 0
743  // put value in nonlocalCoefs_[offset][0]
744 
745  if (accumulate) {
746  nonlocalCoefs_[offset][0] += value;
747  }
748  else {
749  nonlocalCoefs_[offset][0] = value;
750  }
751  }
752  else {
753  //else
754  // insert GID in nonlocalIDs_
755  // insert 1 in nonlocalElementSize_
756  // insert value in nonlocalCoefs_
757 
758  int tmp1 = numNonlocalIDs_;
759  int tmp2 = allocatedNonlocalLength_;
760  int tmp3 = allocatedNonlocalLength_;
761  EPETRA_CHK_ERR( Epetra_Util_insert(GID, insertPoint, nonlocalIDs_,
762  tmp1, tmp2) );
763  --tmp1;
764  EPETRA_CHK_ERR( Epetra_Util_insert(1, insertPoint, nonlocalElementSize_,
765  tmp1, tmp3) );
766  double * values = new double[1];
767  values[0] = value;
768  EPETRA_CHK_ERR( Epetra_Util_insert(values, insertPoint, nonlocalCoefs_,
770  }
771 
772  return(0);

References value.

◆ inputNonlocalValues()

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

Definition at line 776 of file trilinos_epetra_vector.C.

781 {
782  int insertPoint = -1;
783 
784  //find offset of GID in nonlocalIDs_
785  int offset = Epetra_Util_binary_search(GID, nonlocalIDs_, numNonlocalIDs_,
786  insertPoint);
787  if (offset >= 0) {
788  //if offset >= 0
789  // put value in nonlocalCoefs_[offset][0]
790 
791  if (numValues != nonlocalElementSize_[offset]) {
792  libMesh::err << "Epetra_FEVector ERROR: block-size for GID " << GID << " is "
793  << numValues<<" which doesn't match previously set block-size of "
794  << nonlocalElementSize_[offset] << std::endl;
795  return(-1);
796  }
797 
798  if (accumulate) {
799  for (int j=0; j<numValues; ++j) {
800  nonlocalCoefs_[offset][j] += values[j];
801  }
802  }
803  else {
804  for (int j=0; j<numValues; ++j) {
805  nonlocalCoefs_[offset][j] = values[j];
806  }
807  }
808  }
809  else {
810  //else
811  // insert GID in nonlocalIDs_
812  // insert numValues in nonlocalElementSize_
813  // insert values in nonlocalCoefs_
814 
815  int tmp1 = numNonlocalIDs_;
816  int tmp2 = allocatedNonlocalLength_;
817  int tmp3 = allocatedNonlocalLength_;
818  EPETRA_CHK_ERR( Epetra_Util_insert(GID, insertPoint, nonlocalIDs_,
819  tmp1, tmp2) );
820  --tmp1;
821  EPETRA_CHK_ERR( Epetra_Util_insert(numValues, insertPoint, nonlocalElementSize_,
822  tmp1, tmp3) );
823  double * newvalues = new double[numValues];
824  for (int j=0; j<numValues; ++j) {
825  newvalues[j] = values[j];
826  }
827  EPETRA_CHK_ERR( Epetra_Util_insert(newvalues, insertPoint, nonlocalCoefs_,
829  }
830 
831  return(0);

References libMesh::err.

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

658 {
659  if (accumulate) {
660  libmesh_assert(last_edit == 0 || last_edit == 2);
661  last_edit = 2;
662  } else {
663  libmesh_assert(last_edit == 0 || last_edit == 1);
664  last_edit = 1;
665  }
666 
667  //Important note!! This method assumes that there is only 1 point
668  //associated with each element.
669 
670  for (int i=0; i<numIDs; ++i) {
671  if (_vec->Map().MyGID(GIDs[i])) {
672  if (accumulate) {
673  _vec->SumIntoGlobalValue(GIDs[i], 0, 0, values[i]);
674  }
675  else {
676  _vec->ReplaceGlobalValue(GIDs[i], 0, 0, values[i]);
677  }
678  }
679  else {
680  if (!ignoreNonLocalEntries_) {
681  EPETRA_CHK_ERR( inputNonlocalValue(GIDs[i], values[i], accumulate) );
682  }
683  }
684  }
685 
686  return(0);

References libMesh::libmesh_assert().

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

696 {
697  if (accumulate) {
698  libmesh_assert(last_edit == 0 || last_edit == 2);
699  last_edit = 2;
700  } else {
701  libmesh_assert(last_edit == 0 || last_edit == 1);
702  last_edit = 1;
703  }
704 
705  int offset=0;
706  for (int i=0; i<numIDs; ++i) {
707  int numValues = numValuesPerID[i];
708  if (_vec->Map().MyGID(GIDs[i])) {
709  if (accumulate) {
710  for (int j=0; j<numValues; ++j) {
711  _vec->SumIntoGlobalValue(GIDs[i], j, 0, values[offset+j]);
712  }
713  }
714  else {
715  for (int j=0; j<numValues; ++j) {
716  _vec->ReplaceGlobalValue(GIDs[i], j, 0, values[offset+j]);
717  }
718  }
719  }
720  else {
721  if (!ignoreNonLocalEntries_) {
722  EPETRA_CHK_ERR( inputNonlocalValues(GIDs[i], numValues,
723  &(values[offset]), accumulate) );
724  }
725  }
726  offset += numValues;
727  }
728 
729  return(0);

References libMesh::libmesh_assert().

◆ insert() [1/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 898 of file numeric_vector.h.

900 {
901  libmesh_assert(v.size() == dof_indices.size());
902  if (!v.empty())
903  this->insert(&v(0), dof_indices);
904 }

◆ insert() [2/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 886 of file numeric_vector.h.

888 {
889  libmesh_assert(v.size() == dof_indices.size());
890  if (!v.empty())
891  this->insert(&v(0), dof_indices);
892 }

◆ 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 93 of file numeric_vector.C.

95 {
96  libmesh_assert_equal_to (V.size(), dof_indices.size());
97 
98  for (auto i : index_range(dof_indices))
99  this->set (dof_indices[i], V(i));
100 }

◆ insert() [4/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 874 of file numeric_vector.h.

876 {
877  libmesh_assert(v.size() == dof_indices.size());
878  if (!v.empty())
879  this->insert(v.data(), dof_indices);
880 }

◆ insert() [5/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 301 of file trilinos_epetra_vector.C.

303 {
304  libmesh_assert_equal_to (sizeof(numeric_index_type), sizeof(int));
305 
306  ReplaceGlobalValues (cast_int<numeric_index_type>(dof_indices.size()),
307  numeric_trilinos_cast(dof_indices.data()),
308  const_cast<T *>(v));
309 }

References libMesh::numeric_trilinos_cast().

◆ 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.

70 {
71  libmesh_assert(this->closed());
72 
73  Real value;
74 
75  _vec->Norm1(&value);
76 
77  return value;
78 }

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

◆ 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.

82 {
83  libmesh_assert(this->closed());
84 
85  Real value;
86 
87  _vec->Norm2(&value);
88 
89  return value;
90 }

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

◆ 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 759 of file trilinos_epetra_vector.h.

760 {
761  libmesh_assert (this->initialized());
762 
763  return _vec->Map().MaxMyGID()+1;
764 }

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

◆ 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.

94 {
95  libmesh_assert(this->closed());
96 
97  Real value;
98 
99  _vec->NormInf(&value);
100 
101  return value;
102 }

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

◆ 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 137 of file numeric_vector.C.

139 {
140  libmesh_assert (this->initialized());
141  libmesh_assert (other_vector.initialized());
142  libmesh_assert_equal_to (this->first_local_index(), other_vector.first_local_index());
143  libmesh_assert_equal_to (this->last_local_index(), other_vector.last_local_index());
144 
145  int first_different_i = std::numeric_limits<int>::max();
147 
148  do
149  {
150  if (std::abs((*this)(i) - other_vector(i)) > threshold *
151  std::max(std::abs((*this)(i)), std::abs(other_vector(i))))
152  first_different_i = i;
153  else
154  i++;
155  }
156  while (first_different_i==std::numeric_limits<int>::max()
157  && i<last_local_index());
158 
159  // Find the correct first differing index in parallel
160  this->comm().min(first_different_i);
161 
162  if (first_different_i == std::numeric_limits<int>::max())
163  return -1;
164 
165  return first_different_i;
166 }

◆ 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 739 of file trilinos_epetra_vector.h.

740 {
741  libmesh_assert (this->initialized());
742 
743  return _vec->MyLength();
744 }

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

◆ localize() [1/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 490 of file trilinos_epetra_vector.C.

493 {
494  // Only good for serial vectors.
495  libmesh_assert_equal_to (this->size(), this->local_size());
496  libmesh_assert_greater (last_local_idx, first_local_idx);
497  libmesh_assert_less_equal (send_list.size(), this->size());
498  libmesh_assert_less (last_local_idx, this->size());
499 
500  const unsigned int my_size = this->size();
501  const unsigned int my_local_size = (last_local_idx - first_local_idx + 1);
502 
503  // Don't bother for serial cases
504  if ((first_local_idx == 0) &&
505  (my_local_size == my_size))
506  return;
507 
508  // Build a parallel vector, initialize it with the local
509  // parts of (*this)
510  EpetraVector<T> parallel_vec(this->comm(), PARALLEL);
511 
512  parallel_vec.init (my_size, my_local_size, true, PARALLEL);
513 
514  // Copy part of *this into the parallel_vec
515  for (numeric_index_type i=first_local_idx; i<=last_local_idx; i++)
516  parallel_vec.set(i,this->el(i));
517 
518  // localize like normal
519  parallel_vec.close();
520  parallel_vec.localize (*this, send_list);
521  this->close();
522 }

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

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

416 {
417  EpetraVector<T> * v_local = cast_ptr<EpetraVector<T> *>(&v_local_in);
418 
419  Epetra_Map rootMap = Epetra_Util::Create_Root_Map( *_map, -1);
420  v_local->_vec->ReplaceMap(rootMap);
421 
422  Epetra_Import importer(v_local->_vec->Map(), *_map);
423  v_local->_vec->Import(*_vec, importer, Insert);
424 }

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

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

431 {
432  // TODO: optimize to sync only the send list values
433  this->localize(v_local_in);
434 
435  // EpetraVector<T> * v_local =
436  // cast_ptr<EpetraVector<T> *>(&v_local_in);
437 
438  // libmesh_assert(this->_map.get());
439  // libmesh_assert(v_local->_map.get());
440  // libmesh_assert_equal_to (v_local->local_size(), this->size());
441  // libmesh_assert_less_equal (send_list.size(), v_local->size());
442 
443  // Epetra_Import importer (*v_local->_map, *this->_map);
444 
445  // v_local->_vec->Import (*this->_vec, importer, Insert);
446 }

◆ localize() [4/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 527 of file trilinos_epetra_vector.C.

528 {
529  // This function must be run on all processors at once
530  parallel_object_only();
531 
532  const unsigned int n = this->size();
533  const unsigned int nl = this->local_size();
534 
535  libmesh_assert(this->_vec);
536 
537  v_local.clear();
538  v_local.reserve(n);
539 
540  // build up my local part
541  for (unsigned int i=0; i<nl; i++)
542  v_local.push_back((*this->_vec)[i]);
543 
544  this->comm().allgather (v_local);
545 }

References libMesh::libmesh_assert().

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

◆ localize() [5/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 451 of file trilinos_epetra_vector.C.

453 {
454  // Create a "replicated" map for importing values. This is
455  // equivalent to creating a general Epetra_Map with
456  // NumGlobalElements == NumMyElements.
457  Epetra_LocalMap import_map(static_cast<int>(indices.size()),
458  /*IndexBase=*/0,
459  _map->Comm());
460 
461  // Get a pointer to the list of global elements for the map, and set
462  // all the values from indices.
463  int * import_map_global_elements = import_map.MyGlobalElements();
464  for (auto i : index_range(indices))
465  import_map_global_elements[i] = indices[i];
466 
467  // Create a new EpetraVector to import values into.
468  Epetra_Vector import_vector(import_map);
469 
470  // Set up an "Import" object which associates the two maps.
471  Epetra_Import import_object(import_map, *_map);
472 
473  // Import the values
474  import_vector.Import(*_vec, import_object, Insert);
475 
476  // Get a pointer to the imported values array and the length of the
477  // array.
478  T * values = import_vector.Values();
479  int import_vector_length = import_vector.MyLength();
480 
481  // Copy the imported values into v_local
482  v_local.resize(import_vector_length);
483  for (int i=0; i<import_vector_length; ++i)
484  v_local[i] = values[i];
485 }

References libMesh::index_range().

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

552 {
553  // This function must be run on all processors at once
554  parallel_object_only();
555 
556  const unsigned int n = this->size();
557  const unsigned int nl = this->local_size();
558 
559  libmesh_assert_less (pid, this->n_processors());
560  libmesh_assert(this->_vec);
561 
562  v_local.clear();
563  v_local.reserve(n);
564 
565 
566  // build up my local part
567  for (unsigned int i=0; i<nl; i++)
568  v_local.push_back((*this->_vec)[i]);
569 
570  this->comm().gather (pid, v_local);
571 }

References libMesh::libmesh_assert().

◆ 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 797 of file trilinos_epetra_vector.h.

798 {
799  libmesh_assert (this->initialized());
800 
801  T value;
802 
803  _vec->MaxValue(&value);
804 
805  return value;
806 }

References libMesh::initialized(), libMesh::libmesh_assert(), and value.

◆ 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 782 of file trilinos_epetra_vector.h.

783 {
784  libmesh_assert (this->initialized());
785 
786  T value;
787 
788  _vec->MinValue(&value);
789 
790  return value;
791 }

References libMesh::initialized(), libMesh::libmesh_assert(), and value.

◆ 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.

84  { return _n_objects; }

References libMesh::ReferenceCounter::_n_objects.

◆ n_processors()

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

Definition at line 100 of file parallel_object.h.

101  { return cast_int<processor_id_type>(_communicator.size()); }

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::DofMap::add_constraints_to_send_list(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), 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::ExodusII_IO::copy_scalar_solution(), 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::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::partition(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::DofMap::prepare_send_list(), libMesh::DofMap::print_dof_constraints(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), OverlappingFunctorTest::run_partitioner_test(), libMesh::DofMap::scatter_constraints(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), CheckpointIOTest::testSplitter(), WriteVecAndScalar::testWrite(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::VTKIO::write_nodal_data(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

◆ 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 769 of file trilinos_epetra_vector.h.

770 {
771  libmesh_assert (this->initialized());
772  libmesh_assert ( ((i >= this->first_local_index()) &&
773  (i < this->last_local_index())) );
774 
775  return (*_vec)[i-this->first_local_index()];
776 }

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

◆ operator*=() [1/2]

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

Computes the component-wise multiplication of this vector's entries by another's, \( u_i \leftarrow 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.

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->Multiply(1.0, *v_vec._vec, *_vec, 0.0);
139 
140  return *this;
141 }

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

◆ operator*=() [2/2]

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

397 { this->scale(a); return *this; }

◆ 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.

107 {
108  libmesh_assert(this->closed());
109 
110  this->add(1., v);
111 
112  return *this;
113 }

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

◆ 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.

120 {
121  libmesh_assert(this->closed());
122 
123  this->add(-1., v);
124 
125  return *this;
126 }

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

◆ operator/=() [1/2]

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

Computes the component-wise 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 146 of file trilinos_epetra_vector.C.

147 {
148  libmesh_assert(this->closed());
149  libmesh_assert_equal_to(size(), v.size());
150 
151  const EpetraVector<T> & v_vec = cast_ref<const EpetraVector<T> &>(v);
152 
153  _vec->ReciprocalMultiply(1.0, *v_vec._vec, *_vec, 0.0);
154 
155  return *this;
156 }

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

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

415 { this->scale(1./a); return *this; }

◆ operator=() [1/5]

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

◆ operator=() [2/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 363 of file trilinos_epetra_vector.C.

364 {
365  // This function could be implemented in terms of the copy
366  // assignment operator (see other NumericVector subclasses) but that
367  // function is currently deleted so calling this function is an error.
368  // const EpetraVector<T> * v = cast_ptr<const EpetraVector<T> *>(&v_in);
369  // *this = *v;
370  libmesh_not_implemented();
371  return *this;
372 }

◆ operator=() [3/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 378 of file trilinos_epetra_vector.C.

379 {
380  T * values = _vec->Values();
381 
386  if (this->size() == v.size())
387  {
388  const unsigned int nl=this->local_size();
389  const unsigned int fli=this->first_local_index();
390 
391  for (unsigned int i=0;i<nl;i++)
392  values[i]=v[fli+i];
393  }
394 
399  else
400  {
401  libmesh_assert_equal_to (v.size(), this->local_size());
402 
403  const unsigned int nl=this->local_size();
404 
405  for (unsigned int i=0;i<nl;i++)
406  values[i]=v[i];
407  }
408 
409  return *this;
410 }

◆ operator=() [4/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 352 of file trilinos_epetra_vector.C.

353 {
354  _vec->PutScalar(s_in);
355 
356  return *this;
357 }

◆ operator=() [5/5]

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

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

342 {
343  const EpetraVector<T> * v1 = cast_ptr<const EpetraVector<T> *>(&vec1);
344  const EpetraVector<T> * v2 = cast_ptr<const EpetraVector<T> *>(&vec2);
345 
346  _vec->Multiply(1.0, *v1->_vec, *v2->_vec, 0.0);
347 }

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

◆ print() [1/2]

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

Definition at line 913 of file numeric_vector.h.

914 {
915  libmesh_assert (this->initialized());
916  os << "Size\tglobal = " << this->size()
917  << "\t\tlocal = " << this->local_size() << std::endl;
918 
919  // std::complex<>::operator<<() is defined, but use this form
920  os << "#\tReal part\t\tImaginary part" << std::endl;
921  for (auto i : index_range(*this))
922  os << i << "\t"
923  << (*this)(i).real() << "\t\t"
924  << (*this)(i).imag() << std::endl;
925 }

◆ print() [2/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 931 of file numeric_vector.h.

932 {
933  libmesh_assert (this->initialized());
934  os << "Size\tglobal = " << this->size()
935  << "\t\tlocal = " << this->local_size() << std::endl;
936 
937  os << "#\tValue" << std::endl;
938  for (auto i : index_range(*this))
939  os << i << "\t" << (*this)(i) << std::endl;
940 }

◆ print_global() [1/2]

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

Definition at line 946 of file numeric_vector.h.

947 {
948  libmesh_assert (this->initialized());
949 
950  std::vector<Complex> v(this->size());
951  this->localize(v);
952 
953  // Right now we only want one copy of the output
954  if (this->processor_id())
955  return;
956 
957  os << "Size\tglobal = " << this->size() << std::endl;
958  os << "#\tReal part\t\tImaginary part" << std::endl;
959  for (auto i : IntRange<numeric_index_type>(0, v.size()))
960  os << i << "\t"
961  << v[i].real() << "\t\t"
962  << v[i].imag() << std::endl;
963 }

◆ print_global() [2/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 968 of file numeric_vector.h.

969 {
970  libmesh_assert (this->initialized());
971 
972  std::vector<T> v(this->size());
973  this->localize(v);
974 
975  // Right now we only want one copy of the output
976  if (this->processor_id())
977  return;
978 
979  os << "Size\tglobal = " << this->size() << std::endl;
980  os << "#\tValue" << std::endl;
981  for (auto i : IntRange<numeric_index_type>(0, v.size()))
982  os << i << "\t" << v[i] << std::endl;
983 }

◆ 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.

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

References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::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 >, and libMesh::PetscVector< libMesh::Number >.

Definition at line 696 of file numeric_vector.h.

697  {
698  libmesh_not_implemented();
699  }

◆ processor_id()

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

Definition at line 106 of file parallel_object.h.

107  { return cast_int<processor_id_type>(_communicator.rank()); }

References libMesh::ParallelObject::_communicator.

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::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), 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::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_node_communication_maps(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::ExodusII_IO::copy_scalar_solution(), 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::RBEIMConstruction::evaluate_mesh_function(), 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::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::DofMap::get_local_constraints(), libMesh::Nemesis_IO_Helper::get_node_cmap(), libMesh::Nemesis_IO_Helper::get_node_map(), libMesh::Nemesis_IO_Helper::get_ns_param_global(), libMesh::Nemesis_IO_Helper::get_ss_param_global(), libMesh::SparsityPattern::Build::handle_vi_vj(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), HeatSystem::init_data(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), libMesh::ExodusII_IO_Helper::initialize_global_variables(), libMesh::ExodusII_IO_Helper::initialize_nodal_variables(), libMesh::DistributedMesh::insert_elem(), libMesh::DofMap::is_evaluable(), libMesh::SparsityPattern::Build::join(), libMesh::DofMap::last_dof(), libMesh::TransientRBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEIMEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBSCMEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEIMEvaluation::legacy_write_out_interpolation_points_elem(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DofMap::local_variable_indices(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::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::DofMap::print_dof_constraints(), 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::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::System::read_legacy_data(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::System::read_serialized_data(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::System::read_serialized_vectors(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::LaplaceMeshSmoother::smooth(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), MeshInputTest::testDynaReadElem(), MeshInputTest::testDynaReadPatch(), MeshInputTest::testExodusCopyElementSolution(), MeshInputTest::testExodusWriteElementDataFromDiscontinuousNodalData(), SystemsTest::testProjectMatrix1D(), SystemsTest::testProjectMatrix2D(), SystemsTest::testProjectMatrix3D(), BoundaryInfoTest::testShellFaceConstraints(), CheckpointIOTest::testSplitter(), WriteVecAndScalar::testWrite(), libMesh::MeshTools::total_weight(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::Parallel::Packing< Node * >::unpack(), libMesh::Parallel::Packing< Elem * >::unpack(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::DTKAdapter::update_variable_values(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::ExodusII_IO_Helper::write_elements(), libMesh::ExodusII_IO::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::VTKIO::write_nodal_data(), 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::RBEvaluation::write_out_vectors(), write_output_solvedata(), libMesh::System::write_parallel_data(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bc_names(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::System::write_serialized_data(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::XdrIO::write_serialized_subdomain_names(), libMesh::System::write_serialized_vector(), libMesh::System::write_serialized_vectors(), libMesh::ExodusII_IO_Helper::write_sideset_data(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

◆ reciprocal()

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

Computes the component-wise reciprocal, \( u_i \leftarrow \frac{1}{u_i} \, \forall i\).

Implements libMesh::NumericVector< T >.

Definition at line 177 of file trilinos_epetra_vector.C.

178 {
179  // The Epetra::reciprocal() function takes a constant reference to *another* vector,
180  // and fills _vec with its reciprocal. Does that mean we can't pass *_vec as the
181  // argument?
182  // _vec->reciprocal( *_vec );
183 
184  // Alternatively, compute the reciprocal by hand... see also the add(T) member that does this...
185  const unsigned int nl = _vec->MyLength();
186 
187  T * values = _vec->Values();
188 
189  for (unsigned int i=0; i<nl; i++)
190  {
191  // Don't divide by zero (maybe only check this in debug mode?)
192  if (std::abs(values[i]) < std::numeric_limits<T>::min())
193  libmesh_error_msg("Error, divide by zero in DistributedVector<T>::reciprocal()!");
194 
195  values[i] = 1. / values[i];
196  }
197 
198  // Leave the vector in a closed state...
199  this->close();
200 }

References std::abs().

◆ ReplaceGlobalValues() [1/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 631 of file trilinos_epetra_vector.C.

634 {
635  if (GIDs.Length() != values.Length()) {
636  return(-1);
637  }
638 
639  return( inputValues( GIDs.Length(), GIDs.Values(), values.Values(), false) );

◆ ReplaceGlobalValues() [2/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 622 of file trilinos_epetra_vector.C.

626 {
627  return( inputValues( numIDs, GIDs, values, false) );

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

648 {
649  return( inputValues( numIDs, GIDs, numValuesPerID, values, false) );

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

315 {
316  _vec->Scale(factor_in);
317 }

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

163 {
164  int i = static_cast<int> (i_in);
165  T value = value_in;
166 
167  libmesh_assert_less (i_in, this->size());
168 
169  ReplaceGlobalValues(1, &i, &value);
170 
171  this->_is_closed = false;
172 }

References value.

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

◆ 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 354 of file trilinos_epetra_vector.h.

354  {
355  ignoreNonLocalEntries_ = flag;
356  }

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

◆ 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 728 of file trilinos_epetra_vector.h.

729 {
730  libmesh_assert (this->initialized());
731 
732  return _vec->GlobalLength();
733 }

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

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

◆ 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 312 of file numeric_vector.C.

313 {
314  const NumericVector<T> & v = *this;
315 
316  Real norm = 0;
317 
318  for (const auto & index : indices)
319  norm += std::abs(v(index));
320 
321  this->comm().sum(norm);
322 
323  return norm;
324 }

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

◆ 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 327 of file numeric_vector.C.

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

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

◆ 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 342 of file numeric_vector.C.

343 {
344  const NumericVector<T> & v = *this;
345 
346  Real norm = 0;
347 
348  for (const auto & index : indices)
349  {
350  Real value = std::abs(v(index));
351  if (value > norm)
352  norm = value;
353  }
354 
355  this->comm().max(norm);
356 
357  return norm;
358 }

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

◆ 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.

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 }

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

◆ SumIntoGlobalValues() [1/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 600 of file trilinos_epetra_vector.C.

603 {
604  if (GIDs.Length() != values.Length()) {
605  return(-1);
606  }
607 
608  return( inputValues( GIDs.Length(), GIDs.Values(), values.Values(), true) );

◆ SumIntoGlobalValues() [2/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 591 of file trilinos_epetra_vector.C.

595 {
596  return( inputValues( numIDs, GIDs, values, true) );

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

617 {
618  return( inputValues( numIDs, GIDs, numValuesPerID, values, true) );

◆ 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 812 of file trilinos_epetra_vector.h.

813 {
814  NumericVector<T>::swap(other);
815 
816  EpetraVector<T> & v = cast_ref<EpetraVector<T> &>(other);
817 
818  std::swap(_vec, v._vec);
819  _map.swap(v._map);
820  std::swap(_destroy_vec_on_exit, v._destroy_vec_on_exit);
821  std::swap(myFirstID_, v.myFirstID_);
822  std::swap(myNumIDs_, v.myNumIDs_);
823  std::swap(myCoefs_, v.myCoefs_);
824  std::swap(nonlocalIDs_, v.nonlocalIDs_);
825  std::swap(nonlocalElementSize_, v.nonlocalElementSize_);
826  std::swap(numNonlocalIDs_, v.numNonlocalIDs_);
827  std::swap(allocatedNonlocalLength_, v.allocatedNonlocalLength_);
828  std::swap(nonlocalCoefs_, v.nonlocalCoefs_);
829  std::swap(last_edit, v.last_edit);
830  std::swap(ignoreNonLocalEntries_, v.ignoreNonLocalEntries_);
831 }

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().

◆ type() [1/2]

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

Definition at line 165 of file numeric_vector.h.

165 { return _type; }

◆ type() [2/2]

template<typename T>
ParallelType libMesh::NumericVector< T >::type ( ) const
inlineinherited

◆ 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 264 of file trilinos_epetra_vector.h.

264 { libmesh_assert(_vec); return _vec; }

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

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

◆ 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 693 of file trilinos_epetra_vector.h.

694 {
695  libmesh_assert (this->initialized());
696  libmesh_assert (this->closed());
697 
698  _vec->PutScalar(0.0);
699 }

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

◆ 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 705 of file trilinos_epetra_vector.h.

706 {
707  NumericVector<T> * cloned_vector = new EpetraVector<T>(this->comm(), AUTOMATIC);
708  cloned_vector->init(*this);
709  return std::unique_ptr<NumericVector<T>>(cloned_vector);
710 }

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

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

Member Data Documentation

◆ _communicator

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

◆ _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 282 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 727 of file numeric_vector.h.

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

◆ _is_initialized

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

◆ _map

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

Holds the distributed Map.

Definition at line 276 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

template<typename T>
ParallelType libMesh::NumericVector< T >::_type
protectedinherited

◆ _vec

template<typename T>
Epetra_Vector* libMesh::EpetraVector< T >::_vec
private

◆ 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 397 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:
libMesh::EpetraVector::last_local_index
virtual numeric_index_type last_local_index() const override
Definition: trilinos_epetra_vector.h:759
libMesh::NumericVector::add
virtual void add(const numeric_index_type i, const T value)=0
Adds value to each entry of the vector.
libMesh::EpetraVector::allocatedNonlocalLength_
int allocatedNonlocalLength_
Definition: trilinos_epetra_vector.h:389
libMesh::EpetraVector::nonlocalElementSize_
int * nonlocalElementSize_
Definition: trilinos_epetra_vector.h:387
libMesh::EpetraVector::destroyNonlocalData
void destroyNonlocalData()
Definition: trilinos_epetra_vector.C:909
libMesh::EpetraVector::inputValues
int inputValues(int numIDs, const int *GIDs, const double *values, bool accumulate)
Definition: trilinos_epetra_vector.C:653
libMesh::PETSC_SOLVERS
Definition: enum_solver_package.h:36
libMesh::PARALLEL
Definition: enum_parallel_type.h:36
libMesh::EpetraVector::SumIntoGlobalValues
int SumIntoGlobalValues(int numIDs, const int *GIDs, const double *values)
Accumulate values into the vector, adding them to any values that already exist for the specified ind...
Definition: trilinos_epetra_vector.C:591
libMesh::NumericVector::swap
virtual void swap(NumericVector< T > &v)
Swaps the contents of this with v.
Definition: numeric_vector.h:989
libMesh::SERIAL
Definition: enum_parallel_type.h:35
libMesh::NumericVector::last_local_index
virtual numeric_index_type last_local_index() const =0
libMesh::index_range
IntRange< std::size_t > index_range(const std::vector< T > &vec)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:106
libMesh::EpetraVector::zero
virtual void zero() override
Set all entries to zero.
Definition: trilinos_epetra_vector.h:693
libMesh::EpetraVector::myFirstID_
int myFirstID_
Definition: trilinos_epetra_vector.h:382
libMesh::ReferenceCounter::_counts
static Counts _counts
Actually holds the data.
Definition: reference_counter.h:122
std::sqrt
MetaPhysicL::DualNumber< T, D > sqrt(const MetaPhysicL::DualNumber< T, D > &in)
libMesh::ParallelObject::comm
const Parallel::Communicator & comm() const
Definition: parallel_object.h:94
libMesh::GHOSTED
Definition: enum_parallel_type.h:37
libMesh::ReferenceCounter::_n_objects
static Threads::atomic< unsigned int > _n_objects
The number of objects.
Definition: reference_counter.h:130
libMesh::EpetraVector::ReplaceGlobalValues
int ReplaceGlobalValues(int numIDs, const int *GIDs, const double *values)
Copy values into the vector overwriting any values that already exist for the specified indices.
Definition: trilinos_epetra_vector.C:622
libMesh::NumericVector::_is_initialized
bool _is_initialized
true once init() has been called.
Definition: numeric_vector.h:732
libMesh::EpetraVector::localize
virtual void localize(std::vector< T > &v_local) const override
Creates a copy of the global vector in the local vector v_local.
Definition: trilinos_epetra_vector.C:527
libMesh::NumericVector::_is_closed
bool _is_closed
Flag which tracks whether the vector's values are consistent on all processors after insertion or add...
Definition: numeric_vector.h:727
libMesh::EpetraVector::GlobalAssemble
int GlobalAssemble(Epetra_CombineMode mode=Add)
Gather any overlapping/shared data into the non-overlapping partitioning defined by the Map that was ...
Definition: trilinos_epetra_vector.C:835
libMesh::ReferenceCounter::get_info
static std::string get_info()
Gets a string containing the reference information.
Definition: reference_counter.C:47
libMesh::NumericVector::insert
virtual void insert(const T *v, const std::vector< numeric_index_type > &dof_indices)
Inserts the entries of v in *this at the locations specified by v.
Definition: numeric_vector.C:83
libMesh::NumericVector::closed
virtual bool closed() const
Definition: numeric_vector.h:171
libMesh::NumericVector::size
virtual numeric_index_type size() const =0
libMesh::EpetraVector::init
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType type=AUTOMATIC) override
Change the dimension of the vector to n.
Definition: trilinos_epetra_vector.h:566
libMesh::NumericVector::_type
ParallelType _type
Type of vector.
Definition: numeric_vector.h:737
libMesh::EpetraVector::last_edit
unsigned char last_edit
Keep track of whether the last write operation on this vector was nothing (0) or a sum (1) or an add ...
Definition: trilinos_epetra_vector.h:397
libMesh::EpetraVector::clear
virtual void clear() override
Restores the NumericVector<T> to a pristine state.
Definition: trilinos_epetra_vector.h:671
libMesh::libmesh_assert
libmesh_assert(ctx)
libMesh::EpetraVector::inputNonlocalValues
int inputNonlocalValues(int GID, int numValues, const double *values, bool accumulate)
Definition: trilinos_epetra_vector.C:776
libMesh::NumericVector::add_vector
virtual void add_vector(const T *v, const std::vector< numeric_index_type > &dof_indices)
Computes , where v is a pointer and each dof_indices[i] specifies where to add value v[i].
Definition: numeric_vector.C:363
libMesh::EpetraVector::ignoreNonLocalEntries_
bool ignoreNonLocalEntries_
Definition: trilinos_epetra_vector.h:399
std::abs
MetaPhysicL::DualNumber< T, D > abs(const MetaPhysicL::DualNumber< T, D > &in)
libMesh::NumericVector::localize
virtual void localize(std::vector< T > &v_local) const =0
Creates a copy of the global vector in the local vector v_local.
libMesh::ParallelObject::n_processors
processor_id_type n_processors() const
Definition: parallel_object.h:100
libMesh::EpetraVector::close
virtual void close() override
Calls the NumericVector's internal assembly routines, ensuring that the values are consistent across ...
Definition: trilinos_epetra_vector.h:647
libMesh::NumericVector::initialized
virtual bool initialized() const
Definition: numeric_vector.h:155
libMesh::Threads::spin_mtx
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition: threads.C:29
libMesh::ParallelObject::processor_id
processor_id_type processor_id() const
Definition: parallel_object.h:106
libMesh::EpetraVector::inputNonlocalValue
int inputNonlocalValue(int GID, double value, bool accumulate)
Definition: trilinos_epetra_vector.C:733
libMesh::EpetraVector::myNumIDs_
int myNumIDs_
Definition: trilinos_epetra_vector.h:383
libMesh::ParallelObject::_communicator
const Parallel::Communicator & _communicator
Definition: parallel_object.h:112
libMesh::EpetraVector::_vec
Epetra_Vector * _vec
Actual Epetra vector datatype to hold vector entries.
Definition: trilinos_epetra_vector.h:271
libMesh::NumericVector::local_size
virtual numeric_index_type local_size() const =0
libMesh::EpetraVector::local_size
virtual numeric_index_type local_size() const override
Definition: trilinos_epetra_vector.h:739
A
static PetscErrorCode Mat * A
Definition: petscdmlibmeshimpl.C:1026
libMesh::LASPACK_SOLVERS
Definition: enum_solver_package.h:38
libMesh::EpetraVector::size
virtual numeric_index_type size() const override
Definition: trilinos_epetra_vector.h:728
libMesh::numeric_index_type
dof_id_type numeric_index_type
Definition: id_types.h:99
libMesh::NumericVector::linfty_norm
virtual Real linfty_norm() const =0
libMesh::TRILINOS_SOLVERS
Definition: enum_solver_package.h:37
swap
void swap(Iterator &lhs, Iterator &rhs)
swap, used to implement op=
Definition: variant_filter_iterator.h:478
libMesh::TensorTools::norm_sq
T norm_sq(std::complex< T > a)
Definition: tensor_tools.h:85
libMesh::NumericVector::set
virtual void set(const numeric_index_type i, const T value)=0
Sets v(i) = value.
value
static const bool value
Definition: xdr_io.C:56
libMesh::EpetraVector::nonlocalIDs_
int * nonlocalIDs_
Definition: trilinos_epetra_vector.h:386
libMesh::numeric_trilinos_cast
int * numeric_trilinos_cast(const numeric_index_type *p)
Definition: trilinos_epetra_vector.h:836
libMesh::EpetraVector::_destroy_vec_on_exit
bool _destroy_vec_on_exit
This boolean value should only be set to false for the constructor which takes a Epetra Vec object.
Definition: trilinos_epetra_vector.h:282
libMesh::EpetraVector::myCoefs_
double * myCoefs_
Definition: trilinos_epetra_vector.h:384
libMesh::NumericVector::scale
virtual void scale(const T factor)=0
Scale each element of the vector by the given factor.
std::norm
MetaPhysicL::DualNumber< T, D > norm(const MetaPhysicL::DualNumber< T, D > &in)
libMesh::EpetraVector::nonlocalCoefs_
double ** nonlocalCoefs_
Definition: trilinos_epetra_vector.h:390
libMesh::AUTOMATIC
Definition: enum_parallel_type.h:34
libMesh::NumericVector::get
virtual void get(const std::vector< numeric_index_type > &index, T *values) const
Access multiple components at once.
Definition: numeric_vector.h:821
libMesh::err
OStreamProxy err
libMesh::EpetraVector::add
virtual void add(const numeric_index_type i, const T value) override
Adds value to each entry of the vector.
Definition: trilinos_epetra_vector.C:213
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition: libmesh_common.h:121
libMesh::ReferenceCounter::_enable_print_counter
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called.
Definition: reference_counter.h:141
libMesh::EpetraVector::first_local_index
virtual numeric_index_type first_local_index() const override
Definition: trilinos_epetra_vector.h:748
libMesh::EpetraVector::_map
std::unique_ptr< Epetra_Map > _map
Holds the distributed Map.
Definition: trilinos_epetra_vector.h:276
libMesh::EpetraVector::sum
virtual T sum() const override
Definition: trilinos_epetra_vector.C:50
libMesh::NumericVector::type
ParallelType type() const
Definition: numeric_vector.h:160
libMesh::EIGEN_SOLVERS
Definition: enum_solver_package.h:40
libMesh::EpetraVector::numNonlocalIDs_
int numNonlocalIDs_
Definition: trilinos_epetra_vector.h:388
std::imag
boost::multiprecision::float128 imag(const boost::multiprecision::float128)
Definition: float128_shims.h:83
libMesh::Quality::name
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
libMesh::NumericVector::first_local_index
virtual numeric_index_type first_local_index() const =0
std::real
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
Definition: float128_shims.h:77