libMesh
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Attributes | Friends | List of all members
libMesh::LaspackVector< T > Class Template Reference

This class provides a nice interface to the Laspack C-based data structures for serial vectors. More...

#include <laspack_vector.h>

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

Public Member Functions

 LaspackVector (const Parallel::Communicator &comm, const ParallelType=AUTOMATIC)
 Dummy-Constructor.
 
 LaspackVector (const Parallel::Communicator &comm, const numeric_index_type n, const ParallelType=AUTOMATIC)
 Constructor.
 
 LaspackVector (const Parallel::Communicator &comm, const numeric_index_type n, const numeric_index_type n_local, const ParallelType=AUTOMATIC)
 Constructor.
 
 LaspackVector (const Parallel::Communicator &comm, const numeric_index_type N, const numeric_index_type n_local, const std::vector< numeric_index_type > &ghost, const ParallelType=AUTOMATIC)
 Constructor.
 
LaspackVector< T > & operator= (const LaspackVector< T > &v)
 Copy assignment operator.
 
 LaspackVector (LaspackVector &&)=delete
 This class manages a C-style struct (QVector) manually, so we don't want to allow any automatic copy/move functions to be generated, and we can't default the destructor.
 
 LaspackVector (const LaspackVector &)=delete
 
LaspackVectoroperator= (LaspackVector &&)=delete
 
virtual ~LaspackVector ()
 
virtual void close () override
 Calls the NumericVector's internal assembly routines, ensuring that the values are consistent across processors.
 
virtual void clear () override
 Restores the NumericVector<T> to a pristine state.
 
virtual void zero () override
 Set all entries to zero.
 
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 ptype=AUTOMATIC) override
 Change the dimension of the vector to n.
 
virtual void init (const numeric_index_type N, const bool fast=false, const ParallelType ptype=AUTOMATIC) override
 Call init() with n_local = N.
 
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 the local indices plus those specified in the ghost argument.
 
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.
 
virtual NumericVector< T > & operator= (const T s) override
 Sets all entries of the vector to the value s.
 
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.
 
virtual NumericVector< T > & operator= (const std::vector< T > &v) override
 Sets (*this)(i) = v(i) for each entry of the vector.
 
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} \).
 
virtual NumericVector< T > & operator-= (const NumericVector< T > &v) override
 Subtracts v from *this, \( \vec{u} \leftarrow \vec{u} - \vec{v} \).
 
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\).
 
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\).
 
virtual void reciprocal () override
 Computes the component-wise reciprocal, \( u_i \leftarrow \frac{1}{u_i} \, \forall i\).
 
virtual void conjugate () override
 Negates the imaginary component of each entry in the vector.
 
virtual void set (const numeric_index_type i, const T value) override
 Sets v(i) = value.
 
virtual void add (const numeric_index_type i, const T value) override
 Adds value to the vector entry specified by i.
 
virtual void add (const T s) override
 Adds s to each entry of the vector, \( u_i \leftarrow u_i + s \).
 
virtual void add (const NumericVector< T > &v) override
 Adds v to this, \( \vec{u} \leftarrow \vec{u} + \vec{v} \).
 
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} \).
 
virtual void add_vector (const NumericVector< T > &v, const SparseMatrix< T > &A) override
 Computes \( \vec{u} \leftarrow \vec{u} + A \vec{v} \), i.e.
 
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.
 
virtual void scale (const T factor) override
 Scale each element of the vector by the given factor.
 
virtual void abs () override
 Sets \( u_i \leftarrow |u_i| \) for each entry in the vector.
 
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.
 
virtual void localize (NumericVector< T > &v_local) const override
 Same, but fills a NumericVector<T> instead of a std::vector.
 
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.
 
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".
 
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.
 
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.
 
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.
 
virtual void pointwise_divide (const NumericVector< T > &vec1, const NumericVector< T > &vec2) override
 Computes \( u_i \leftarrow \frac{v_{1,i}}{v_{2,i}} \) (summation not implied) i.e.
 
virtual void swap (NumericVector< T > &v) override
 Swaps the contents of this with v.
 
virtual std::size_t max_allowed_id () const override
 
virtual bool initialized () const
 
ParallelType type () const
 
ParallelTypetype ()
 
bool is_effectively_serial () const
 
bool is_effectively_ghosted () const
 
void set_type (ParallelType t)
 Allow the user to change the ParallelType of the NumericVector under some circumstances.
 
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
 
Real l2_norm_diff (const NumericVector< T > &other_vec) const
 
Real l1_norm_diff (const NumericVector< T > &other_vec) 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.
 
void get (const std::vector< numeric_index_type > &index, std::vector< T > &values) const
 Access multiple components at once.
 
NumericVector< T > & operator*= (const T a)
 Scales the vector by a, \( \vec{u} \leftarrow a\vec{u} \).
 
NumericVector< T > & operator/= (const T a)
 Scales the vector by 1/a, \( \vec{u} \leftarrow \frac{1}{a}\vec{u} \).
 
virtual void add_vector (const T *v, const std::vector< numeric_index_type > &dof_indices)
 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].
 
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].
 
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).
 
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).
 
void add_vector (const NumericVector< T > &v, const ShellMatrix< T > &A)
 Computes \( \vec{u} \leftarrow \vec{u} + A \vec{v} \), i.e.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
void print_global (std::ostream &os) const
 
virtual void print_matlab (const std::string &filename="") const
 Print the contents of the vector in Matlab's sparse matrix format.
 
virtual void read_matlab (const std::string &filename)
 Read the contents of the vector from the Matlab-script format used by PETSc.
 
virtual void create_subvector (NumericVector< T > &, const std::vector< numeric_index_type > &, bool=true) const
 Fills in subvector from this vector using the indices in rows.
 
virtual std::unique_ptr< NumericVector< T > > get_subvector (const std::vector< numeric_index_type > &)
 Creates a view into this vector using the indices in rows.
 
virtual void restore_subvector (std::unique_ptr< NumericVector< T > >, const std::vector< numeric_index_type > &)
 Restores a view into this vector using the indices in rows.
 
bool readable () const
 
bool compatible (const NumericVector< T > &v) const
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static std::unique_ptr< NumericVector< T > > build (const Parallel::Communicator &comm, SolverPackage solver_package=libMesh::default_solver_package(), ParallelType parallel_type=AUTOMATIC)
 Builds a NumericVector on the processors in communicator comm using the linear solver package specified by solver_package.
 
static std::string get_info ()
 Gets a string containing the reference information.
 
static void print_info (std::ostream &out_stream=libMesh::out)
 Prints the reference information, by default to libMesh::out.
 
static unsigned int n_objects ()
 Prints the number of outstanding (created, but not yet destroyed) objects.
 
static void enable_print_counter_info ()
 Methods to enable/disable the reference counter output from print_info().
 
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.
 

Protected Member Functions

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

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.
 
bool _is_initialized
 true once init() has been called.
 
ParallelType _type
 Type of vector.
 
std::mutex _numeric_vector_mutex
 Mutex for performing thread-safe operations.
 
const Parallel::Communicator_communicator
 

Static Protected Attributes

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

Private Attributes

QVector _vec
 Actual Laspack vector datatype to hold vector entries.
 

Friends

class LaspackLinearSolver< T >
 Make other Laspack datatypes friends.
 

Detailed Description

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

This class provides a nice interface to the Laspack C-based data structures for serial vectors.

All overridden virtual functions are documented in numeric_vector.h.

Author
Benjamin S. Kirk
Date
2002

Definition at line 57 of file laspack_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 119 of file reference_counter.h.

Constructor & Destructor Documentation

◆ LaspackVector() [1/6]

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

Dummy-Constructor.

Dimension=0

Definition at line 256 of file laspack_vector.h.

258 : NumericVector<T>(comm, ptype)
259{
260 this->_type = ptype;
261}
ParallelType _type
Type of vector.
const Parallel::Communicator & comm() const

References libMesh::NumericVector< T >::_type.

◆ LaspackVector() [2/6]

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

Constructor.

Set dimension to n and initialize all elements with zero.

Definition at line 267 of file laspack_vector.h.

270 : NumericVector<T>(comm, ptype)
271{
272 this->init(n, n, false, ptype);
273}
virtual void init(const numeric_index_type N, const numeric_index_type n_local, const bool fast=false, const ParallelType ptype=AUTOMATIC) override
Change the dimension of the vector to n.

References libMesh::LaspackVector< T >::init().

◆ LaspackVector() [3/6]

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

Constructor.

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

Definition at line 279 of file laspack_vector.h.

283 : NumericVector<T>(comm, ptype)
284{
285 this->init(n, n_local, false, ptype);
286}

References libMesh::LaspackVector< T >::init().

◆ LaspackVector() [4/6]

template<typename T >
libMesh::LaspackVector< T >::LaspackVector ( const Parallel::Communicator comm,
const numeric_index_type  N,
const numeric_index_type  n_local,
const std::vector< numeric_index_type > &  ghost,
const ParallelType  ptype = AUTOMATIC 
)
inline

Constructor.

Set local dimension to n_local, the global dimension to n, but additionally reserve memory for the indices specified by the ghost argument.

Definition at line 292 of file laspack_vector.h.

297 : NumericVector<T>(comm, ptype)
298{
299 this->init(N, n_local, ghost, false, ptype);
300}

References libMesh::LaspackVector< T >::init().

◆ LaspackVector() [5/6]

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

This class manages a C-style struct (QVector) manually, so we don't want to allow any automatic copy/move functions to be generated, and we can't default the destructor.

◆ LaspackVector() [6/6]

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

◆ ~LaspackVector()

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

Definition at line 306 of file laspack_vector.h.

307{
308 this->clear ();
309}
virtual void clear() override
Restores the NumericVector<T> to a pristine state.

Member Function Documentation

◆ abs()

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

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

Implements libMesh::NumericVector< T >.

Definition at line 298 of file laspack_vector.C.

299{
300 libmesh_assert (this->initialized());
301
302 const numeric_index_type n = this->size();
303
304 for (numeric_index_type i=0; i!=n; ++i)
305 this->set(i,std::abs((*this)(i)));
306}
virtual numeric_index_type size() const override
virtual void set(const numeric_index_type i, const T value) override
Sets v(i) = value.
virtual bool initialized() const
libmesh_assert(ctx)
dof_id_type numeric_index_type
Definition id_types.h:99

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

◆ add() [1/4]

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

Adds value to the vector entry specified by i.

Note that library implementations of this method are thread safe, e.g. we will lock _numeric_vector_mutex before writing to the vector

Implements libMesh::NumericVector< T >.

Definition at line 521 of file laspack_vector.h.

522{
523 libmesh_assert (this->initialized());
524 libmesh_assert_less (i, this->size());
525
526 std::scoped_lock lock(this->_numeric_vector_mutex);
527 V_AddCmp (&_vec, i+1, value);
528
529#ifndef NDEBUG
530 this->_is_closed = false;
531#endif
532}
QVector _vec
Actual Laspack vector datatype to hold vector entries.
std::mutex _numeric_vector_mutex
Mutex for performing thread-safe operations.
bool _is_closed
Flag which tracks whether the vector's values are consistent on all processors after insertion or add...
static const bool value
Definition xdr_io.C:55

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

◆ add() [2/4]

template<typename T >
void libMesh::LaspackVector< 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 233 of file laspack_vector.C.

234{
235 this->add (1., v);
236}
virtual void add(const numeric_index_type i, const T value) override
Adds value to the vector entry specified by i.

◆ add() [3/4]

template<typename T >
void libMesh::LaspackVector< 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 241 of file laspack_vector.C.

242{
243 // Make sure the vector passed in is really a LaspackVector
244 const LaspackVector * v = cast_ptr<const LaspackVector *>(&v_in);
245
246#ifndef NDEBUG
247 const bool was_closed = this->_is_closed;
248#endif
249
251 libmesh_assert_equal_to (this->size(), v->size());
252
253 for (auto i : make_range(v->size()))
254 this->add (i, a*(*v)(i));
255
256#ifndef NDEBUG
257 this->_is_closed = was_closed;
258#endif
259}
LaspackVector(const Parallel::Communicator &comm, const ParallelType=AUTOMATIC)
Dummy-Constructor.
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition int_range.h:176

References libMesh::libmesh_assert(), libMesh::make_range(), and libMesh::LaspackVector< T >::size().

◆ add() [4/4]

template<typename T >
void libMesh::LaspackVector< 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 211 of file laspack_vector.C.

212{
213#ifndef NDEBUG
214 const bool was_closed = this->_is_closed;
215#endif
216
217 const numeric_index_type n = this->size();
218
219 for (numeric_index_type i=0; i<n; i++)
220 this->add (i, v);
221
222 // This is an embarrassingly parallel method, but set() isn't in
223 // general so set() overzealously marked us as non-closed
224#ifndef NDEBUG
225 this->_is_closed = was_closed;
226#endif
227}

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

This method is guaranteed to be thread safe as long as library implementations of NumericVector are used

Definition at line 1008 of file numeric_vector.h.

1010{
1011 libmesh_assert(v.size() == dof_indices.size());
1012 if (!v.empty())
1013 this->add_vector(&v(0), dof_indices);
1014}
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].

References libMesh::DenseVector< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseVector< T >::size().

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

718{
719 libmesh_assert(this->compatible(v));
720
721 a.vector_mult_add(*this,v);
722}
bool compatible(const NumericVector< T > &v) const

References libMesh::libmesh_assert().

◆ add_vector() [3/6]

template<typename T >
void libMesh::LaspackVector< 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 264 of file laspack_vector.C.

266{
267 // Make sure the data passed in are really in Laspack types
268 const LaspackVector<T> * vec = cast_ptr<const LaspackVector<T> *>(&vec_in);
269 const LaspackMatrix<T> * mat = cast_ptr<const LaspackMatrix<T> *>(&mat_in);
270
271 libmesh_assert(vec);
272 libmesh_assert(mat);
273
274 // += mat*vec
275 AddAsgn_VV (&_vec, Mul_QV(const_cast<QMatrix*>(&mat->_QMat),
276 const_cast<QVector*>(&vec->_vec)));
277}

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

◆ 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 
)
inherited

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

This method is guaranteed to be thread-safe as long as library implementations of NumericVector are used

Definition at line 702 of file numeric_vector.C.

704{
705 libmesh_assert(v.readable());
706
707 const std::size_t n = dof_indices.size();
708 libmesh_assert_equal_to(v.size(), n);
709 for (numeric_index_type i=0; i != n; i++)
710 this->add (dof_indices[i], v(i));
711}
virtual void add(const numeric_index_type i, const T value)=0
Adds value to the vector entry specified by i.

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

This method is guaranteed to be thread safe as long as library implementations of NumericVector are used

Definition at line 996 of file numeric_vector.h.

998{
999 libmesh_assert(v.size() == dof_indices.size());
1000 if (!v.empty())
1001 this->add_vector(v.data(), dof_indices);
1002}

References libMesh::libmesh_assert().

◆ add_vector() [6/6]

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

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. Note that library implementations of this method are thread safe

Reimplemented in libMesh::PetscVector< libMesh::Number >, libMesh::PetscVector< T >, and libMesh::EpetraVector< T >.

Definition at line 690 of file numeric_vector.C.

692{
694
695 for (auto i : index_range(dof_indices))
696 this->add (dof_indices[i], v[i]);
697}
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition int_range.h:153

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

Referenced by libMesh::RBConstruction::add_scaled_matrix_and_vector(), LinearElasticity::assemble(), assemble(), assemble(), assemble_1D(), AssembleOptimization::assemble_A_and_F(), assemble_biharmonic(), assemble_divgrad(), assemble_elasticity(), assemble_ellipticdg(), assemble_func(), assemble_graddiv(), assemble_laplace(), assemble_matrix_and_rhs(), assemble_poisson(), assemble_poisson(), assemble_shell(), assemble_shell(), assemble_stokes(), assemble_temperature_jump(), assemble_wave(), assemble_wave(), libMesh::LinearImplicitSystem::assembly(), assembly_with_dg_fem_context(), compute_residual(), periodic_bc_test_poisson(), libMesh::HDGProblem::residual(), LinearElasticityWithContact::residual_and_jacobian(), Biharmonic::JR::residual_and_jacobian(), libMesh::NewmarkSystem::update_rhs(), and libMesh::SparseMatrix< T >::vector_mult_add().

◆ add_vector_transpose()

template<typename T >
void libMesh::LaspackVector< 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 281 of file laspack_vector.C.

283{
284 libmesh_not_implemented();
285}

◆ build()

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

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

Definition at line 61 of file numeric_vector.C.

64{
65 // Build the appropriate vector
66 switch (solver_package)
67 {
68
69#ifdef LIBMESH_HAVE_LASPACK
70 case LASPACK_SOLVERS:
71 return std::make_unique<LaspackVector<T>>(comm, parallel_type);
72#endif
73
74#ifdef LIBMESH_HAVE_PETSC
75 case PETSC_SOLVERS:
76 return std::make_unique<PetscVector<T>>(comm, parallel_type);
77#endif
78
79#ifdef LIBMESH_TRILINOS_HAVE_EPETRA
81 return std::make_unique<EpetraVector<T>>(comm, parallel_type);
82#endif
83
84#ifdef LIBMESH_HAVE_EIGEN
85 case EIGEN_SOLVERS:
86 return std::make_unique<EigenSparseVector<T>>(comm, parallel_type);
87#endif
88
89 default:
90 return std::make_unique<DistributedVector<T>>(comm, parallel_type);
91 }
92}

References libMesh::EIGEN_SOLVERS, libMesh::LASPACK_SOLVERS, libMesh::PETSC_SOLVERS, and libMesh::TRILINOS_SOLVERS.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::System::add_vector(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::DiagonalMatrix< T >::DiagonalMatrix(), AssembleOptimization::equality_constraints(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::CondensedEigenSystem::get_eigenpair(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::StaticCondensation::init(), main(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), LinearElasticityWithContact::move_mesh(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::InterMeshProjection::project_system_vectors(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), MeshFunctionTest::read_variable_info_from_output_data(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::ClawSystem::solve_conservation_law(), ConstraintOperatorTest::test1DCoarseningOperator(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), DiagonalMatrixTest::testNumerics(), SystemsTest::testProjectCubeWithMeshFunction(), SystemsTest::testProjectScalarCoarsening(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::RBConstruction::truth_assembly(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), and libMesh::RBConstruction::update_residual_terms().

◆ clear()

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

Restores the NumericVector<T> to a pristine state.

Reimplemented from libMesh::NumericVector< T >.

Definition at line 402 of file laspack_vector.h.

403{
404 if (this->initialized())
405 {
406 V_Destr (&_vec);
407 }
408
409 this->_is_initialized = false;
410#ifndef NDEBUG
411 this->_is_closed = false;
412#endif
413}
bool _is_initialized
true once init() has been called.

References libMesh::initialized().

◆ clone()

template<typename T >
std::unique_ptr< NumericVector< T > > libMesh::LaspackVector< 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 444 of file laspack_vector.h.

445{
446 std::unique_ptr<NumericVector<T>> cloned_vector =
447 std::make_unique<LaspackVector<T>>(this->comm());
448
449 cloned_vector->init(*this, true);
450
451 *cloned_vector = *this;
452
453 return cloned_vector;
454}

◆ close()

template<typename T >
void libMesh::LaspackVector< 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 389 of file laspack_vector.h.

390{
391 libmesh_assert (this->initialized());
392
393#ifndef NDEBUG
394 this->_is_closed = true;
395#endif
396}

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

◆ closed()

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

◆ comm()

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

Definition at line 97 of file parallel_object.h.

98 { return _communicator; }
const Parallel::Communicator & _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::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< T >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< T >::_petsc_shell_matrix_mult_add(), 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::RBEIMEvaluation::add_interpolation_data(), libMesh::CondensedEigenSystem::add_matrices(), libMesh::EigenSystem::add_matrices(), libMesh::System::add_matrix(), libMesh::System::add_matrix(), libMesh::System::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::System::add_vector(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::FEMSystem::assemble_qoi(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::MeshCommunication::assign_global_indices(), libMesh::Partitioner::assign_partitioning(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::Partitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::PetscDMWrapper::build_section(), libMesh::PetscDMWrapper::build_sf(), libMesh::MeshBase::cache_elem_data(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::MeshTetInterface::check_hull_integrity(), libMesh::MeshBase::complete_preparation(), 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::DofMap::computed_sparsity_already(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), PetscSolverConfiguration::configure_solver(), libMesh::ContinuationSystem::ContinuationSystem(), libMesh::MeshBase::copy_constraint_rows(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::CondensedEigenSystem::copy_super_to_sub(), 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::PetscMatrix< T >::create_submatrix_nosort(), create_wrapped_function(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::MeshBase::detect_interior_parents(), libMesh::RBEIMEvaluation::distribute_bfs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::DTKSolutionTransfer::DTKSolutionTransfer(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_nodes(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::EpetraVector< T >::EpetraVector(), AssembleOptimization::equality_constraints(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::JumpErrorEstimator::estimate_error(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::SmoothnessEstimator::estimate_smoothness(), 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::RBEIMEvaluation::gather_bfs(), libMesh::DofMap::gather_constraints(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBEIMEvaluation::get_eim_basis_function_node_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_side_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_value(), libMesh::MeshBase::get_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::RBEIMConstruction::get_max_abs_value(), libMesh::RBEIMConstruction::get_node_max_abs_value(), libMesh::RBEIMEvaluation::get_parametrized_function_node_value(), libMesh::RBEIMEvaluation::get_parametrized_function_side_value(), libMesh::RBEIMEvaluation::get_parametrized_function_value(), libMesh::RBEIMConstruction::get_random_point(), libMesh::RBEIMConstruction::get_random_point(), libMesh::RBEIMConstruction::get_random_point(), libMesh::MeshTetInterface::improve_hull_integrity(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::StaticCondensation::init(), libMesh::TimeSolver::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::LocationMap< T >::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), ElasticitySystem::init_data(), libMesh::AdvectionSystem::init_data(), libMesh::ClawSystem::init_data(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_parametrized_functions_in_training_set(), libMesh::RBEIMConstruction::inner_product(), integrate_function(), libMesh::MeshTools::Modification::interpolate_surface(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_equal_connectivity(), libMesh::MeshTools::libmesh_assert_equal_points(), 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_constraint_rows(), 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_linesearch_shellfunc(), libMesh::libmesh_petsc_preconditioner_apply(), libMesh::libmesh_petsc_snes_mffd_interface(), libMesh::libmesh_petsc_snes_postcheck(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), libMesh::LinearImplicitSystem::LinearImplicitSystem(), main(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_bcids_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::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::DofMap::n_constrained_dofs(), libMesh::MeshBase::n_constraint_rows(), libMesh::DofMap::n_dofs(), libMesh::DofMap::n_dofs_per_processor(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), MixedOrderTest::n_neighbor_links(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::SparsityPattern::Build::n_nonzeros(), libMesh::MeshTools::n_p_levels(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_distribute_bfs(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::RBEIMConstruction::node_inner_product(), libMesh::PetscVector< T >::operator=(), libMesh::MeshBase::operator==(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::MeshTools::paranoid_n_levels(), libMesh::Partitioner::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::petsc_auto_fieldsplit(), LaplaceSystem::postprocess(), PoissonSystem::postprocess(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Partitioner::processor_pairs_to_interface_nodes(), libMesh::InterMeshProjection::project_system_vectors(), libMesh::XdrIO::read(), libMesh::Nemesis_IO::read(), FEMParameters::read(), libMesh::EquationSystems::read(), libMesh::CheckpointIO::read_header(), libMesh::ExodusII_IO::read_header(), libMesh::System::read_header(), libMesh::XdrIO::read_header(), libMesh::RBEIMEvaluation::read_in_interior_basis_functions(), libMesh::RBEIMEvaluation::read_in_node_basis_functions(), libMesh::RBEIMEvaluation::read_in_side_basis_functions(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::TransientRBConstruction::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::Nemesis_IO_Helper::read_var_names_impl(), MeshFunctionTest::read_variable_info_from_output_data(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::BoundaryInfo::remove_edge_id(), libMesh::BoundaryInfo::remove_node_id(), libMesh::BoundaryInfo::remove_shellface_id(), libMesh::BoundaryInfo::remove_side_id(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), LinearElasticityWithContact::residual_and_jacobian(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), scale_mesh_and_plot(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::send_and_insert_dof_values(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::Partitioner::set_interface_node_processor_ids_BFS(), libMesh::Partitioner::set_interface_node_processor_ids_linear(), libMesh::Partitioner::set_interface_node_processor_ids_petscpartitioner(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::Partitioner::set_parent_processor_ids(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::PetscDiffSolver::setup_petsc_data(), libMesh::RBEIMEvaluation::side_distribute_bfs(), libMesh::RBEIMEvaluation::side_gather_bfs(), libMesh::RBEIMConstruction::side_inner_product(), libMesh::Partitioner::single_partition(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::VariationalMeshSmoother::smooth(), libMesh::NoxNonlinearSolver< Number >::solve(), libMesh::ClawSystem::solve_conservation_law(), libMesh::split_mesh(), libMesh::RBEIMConstruction::store_eim_solutions_for_training_set(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), libMesh::MeshBase::sync_subdomain_name_map(), ConstraintOperatorTest::test1DCoarseningNewNodes(), ConstraintOperatorTest::test1DCoarseningOperator(), MeshFunctionTest::test_bad_gradient_var_with_out_of_mesh_value(), MeshFunctionTest::test_bad_hessian_var_with_out_of_mesh_value(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), ExodusC0PolyhedronTest::test_write_and_read_hexagonal_prism(), ExodusC0PolygonTest::test_write_and_read_pentagon(), DofMapTest::testBadElemFECombo(), SystemsTest::testBlockRestrictedVarNDofs(), BoundaryInfoTest::testBoundaryOnChildrenErrors(), CheckpointIOTest::testC0PolygonCheckpoint(), VolumeTest::testC0PolygonMethods(), CheckpointIOTest::testC0PolyhedronCheckpoint(), VolumeTest::testC0PolyhedronMethods(), ConstraintOperatorTest::testCoreform(), ConnectedComponentsTest::testEdge(), MeshInputTest::testExodusIGASidesets(), MeshTriangulationTest::testFoundCenters(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), BoundaryMeshSubdomainTest::testPerBoundarySubdomain(), PointLocatorTest::testPlanar(), MeshTriangulationTest::testPoly2TriEdge3ToTri7CenterFixup(), MeshTriangulationTest::testPoly2TriRefinementBase(), SystemsTest::testProjectCubeWithMeshFunction(), SystemsTest::testProjectScalarCoarsening(), BoundaryInfoTest::testRenumber(), BoundaryInfoTest::testSelectiveRenumber(), BoundaryMeshSubdomainTest::testSingleSubdomain(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), MeshTriangulationTest::testTriangulatorInterp(), MeshTriangulationTest::testTriangulatorMeshedHoles(), MeshTriangulationTest::testTriangulatorRoundHole(), MeshSmootherTest::testVariationalSmoother(), libMesh::MeshTools::total_weight(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::Poly2TriTriangulator::triangulate(), libMesh::RBConstruction::truth_assembly(), libMesh::TransientRBConstruction::truth_assembly(), update_current_local_solution(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::XdrIO::write(), libMesh::NameBasedIO::write(), libMesh::VTKIO::write_nodal_data(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), libMesh::RBEvaluation::write_out_vectors(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::TransientRBConstruction::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 153 of file numeric_vector.C.

155{
156 libmesh_assert(this->compatible(other_vector));
157
158 int first_different_i = std::numeric_limits<int>::max();
160
161 while (first_different_i==std::numeric_limits<int>::max()
162 && i<last_local_index())
163 {
164 if (std::abs((*this)(i) - other_vector(i)) > threshold)
165 first_different_i = i;
166 else
167 i++;
168 }
169
170 // Find the correct first differing index in parallel
171 this->comm().min(first_different_i);
172
173 if (first_different_i == std::numeric_limits<int>::max())
174 return -1;
175
176 return first_different_i;
177}
void min(const T &r, T &o, Request &req) const
virtual numeric_index_type last_local_index() const =0
virtual numeric_index_type first_local_index() const =0

References libMesh::libmesh_assert().

◆ compatible()

template<typename T >
bool libMesh::NumericVector< T >::compatible ( const NumericVector< T > &  v) const
inherited
Returns
whether or not this vector and the vector v are able to be read for global operations with one-another

Definition at line 734 of file numeric_vector.C.

735{
736 return this->readable() && v.readable() &&
737 this->size() == v.size() &&
738 this->local_size() == v.local_size() &&
739 this->first_local_index() == v.first_local_index() &&
740 this->last_local_index() == v.last_local_index();
741}
virtual numeric_index_type size() const =0
virtual numeric_index_type local_size() const =0

References libMesh::NumericVector< T >::first_local_index(), libMesh::NumericVector< T >::last_local_index(), libMesh::NumericVector< T >::local_size(), libMesh::NumericVector< T >::readable(), and libMesh::NumericVector< T >::size().

◆ conjugate()

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

Negates the imaginary component of each entry in the vector.

Implements libMesh::NumericVector< T >.

Definition at line 187 of file laspack_vector.C.

188{
189 const numeric_index_type n = this->size();
190
191#ifndef NDEBUG
192 const bool was_closed = this->_is_closed;
193#endif
194
195 for (numeric_index_type i=0; i<n; i++)
196 {
197 T v = (*this)(i);
198
199 this->set(i, libmesh_conj(v) );
200 }
201
202 // This is an embarrassingly parallel method, but set() isn't in
203 // general so set() overzealously marked us as non-closed
204#ifndef NDEBUG
205 this->_is_closed = was_closed;
206#endif
207}
T libmesh_conj(T a)

References libMesh::libmesh_conj().

◆ create_subvector()

template<typename T >
virtual void libMesh::NumericVector< T >::create_subvector ( NumericVector< T > &  ,
const std::vector< numeric_index_type > &  ,
bool  = true 
) const
inlinevirtualinherited

Fills in subvector from this vector using the indices in rows.

supplying_global_rows communicates whether the supplied vector of rows corresponds to all the rows that should be used in the subvector's index set, e.g. whether the rows correspond to the global collective. If the rows supplied are only the local indices, then supplying_global_rows should be set to false

This is currently only implemented for PetscVector and EigenSparseVector.

Reimplemented in libMesh::PetscVector< libMesh::Number >, libMesh::EigenSparseVector< T >, and libMesh::PetscVector< T >.

Definition at line 794 of file numeric_vector.h.

797 {
798 libmesh_not_implemented();
799 }

Referenced by libMesh::StaticCondensation::forward_elimination().

◆ disable_print_counter_info()

void libMesh::ReferenceCounter::disable_print_counter_info ( )
staticinherited

Definition at line 100 of file reference_counter.C.

101{
102 _enable_print_counter = false;
103 return;
104}
static bool _enable_print_counter
Flag to control whether reference count information is printed when print_info is called.

References libMesh::ReferenceCounter::_enable_print_counter.

◆ dot()

template<typename T >
T libMesh::LaspackVector< 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 309 of file laspack_vector.C.

310{
311 libmesh_assert (this->initialized());
312
313 // Make sure the NumericVector passed in is really a LaspackVector
314 const LaspackVector<T> * v = cast_ptr<const LaspackVector<T> *>(&v_in);
316
317 return Mul_VV (const_cast<QVector*>(&(this->_vec)),
318 const_cast<QVector*>(&(v->_vec)));
319}

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

◆ el()

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

Definition at line 403 of file numeric_vector.h.

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

Enabled by default.

Definition at line 94 of file reference_counter.C.

95{
97 return;
98}

References libMesh::ReferenceCounter::_enable_print_counter.

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

◆ first_local_index()

template<typename T >
numeric_index_type libMesh::LaspackVector< 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 482 of file laspack_vector.h.

483{
484 libmesh_assert (this->initialized());
485
486 return 0;
487}

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

983{
984 const std::size_t num = index.size();
985 values.resize(num);
986 if (!num)
987 return;
988
989 this->get(index, values.data());
990}
virtual void get(const std::vector< numeric_index_type > &index, T *values) const
Access multiple components at once.

◆ get() [2/2]

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

◆ 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 & [name, cd] : _counts)
59 oss << "| " << name << " reference count information:\n"
60 << "| Creations: " << cd.first << '\n'
61 << "| Destructions: " << cd.second << '\n';
62
63 oss << " ---------------------------------------------------------------------------- \n";
64
65 return oss.str();
66
67#else
68
69 return "";
70
71#endif
72}
static Counts _counts
Actually holds the data.
std::string name(const ElemQuality q)
This function returns a string containing some name for q.

References libMesh::ReferenceCounter::_counts.

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

◆ get_subvector()

template<typename T >
virtual std::unique_ptr< NumericVector< T > > libMesh::NumericVector< T >::get_subvector ( const std::vector< numeric_index_type > &  )
inlinevirtualinherited

Creates a view into this vector using the indices in rows.

Calls to this API should always be paired with a call to restore_subvector, else any changes made in the subvector will not be reflected in (this) original vector.

This is currently only implemented for PetscVector and EigenSparseVector.

Reimplemented in libMesh::EigenSparseVector< T >, libMesh::PetscVector< T >, and libMesh::PetscVector< libMesh::Number >.

Definition at line 810 of file numeric_vector.h.

811 {
812 libmesh_not_implemented();
813 }

Referenced by libMesh::StaticCondensation::apply(), libMesh::CondensedEigenSystem::copy_sub_to_super(), libMesh::CondensedEigenSystem::copy_super_to_sub(), and NumericVectorTest< DerivedClass >::Subvectors().

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

213{
214 libmesh_assert(this->compatible(other_vector));
215
216 int first_different_i = std::numeric_limits<int>::max();
218
219 const Real my_norm = this->linfty_norm();
220 const Real other_norm = other_vector.linfty_norm();
221 const Real abs_threshold = std::max(my_norm, other_norm) * threshold;
222
223 do
224 {
225 if (std::abs((*this)(i) - other_vector(i) ) > abs_threshold)
226 first_different_i = i;
227 else
228 i++;
229 }
230 while (first_different_i==std::numeric_limits<int>::max()
231 && i<last_local_index());
232
233 // Find the correct first differing index in parallel
234 this->comm().min(first_different_i);
235
236 if (first_different_i == std::numeric_limits<int>::max())
237 return -1;
238
239 return first_different_i;
240}
virtual Real linfty_norm() const =0
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

References libMesh::libmesh_assert(), libMesh::NumericVector< T >::linfty_norm(), and libMesh::Real.

◆ increment_constructor_count()

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

Increments the construction counter.

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

Definition at line 183 of file reference_counter.h.

184{
185 libmesh_try
186 {
187 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
188 std::pair<unsigned int, unsigned int> & p = _counts[name];
189 p.first++;
190 }
191 libmesh_catch (...)
192 {
193 auto stream = libMesh::err.get();
194 stream->exceptions(stream->goodbit); // stream must not throw
195 libMesh::err << "Encountered unrecoverable error while calling "
196 << "ReferenceCounter::increment_constructor_count() "
197 << "for a(n) " << name << " object." << std::endl;
198 std::terminate();
199 }
200}
streamT * get()
Rather than implement every ostream/ios/ios_base function, we'll be lazy and make esoteric uses go th...
spin_mutex spin_mtx
A convenient spin mutex object which can be used for obtaining locks.
Definition threads.C:30
OStreamProxy err

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), and libMesh::Threads::spin_mtx.

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

◆ increment_destructor_count()

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

Increments the destruction counter.

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

Definition at line 207 of file reference_counter.h.

208{
209 libmesh_try
210 {
211 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
212 std::pair<unsigned int, unsigned int> & p = _counts[name];
213 p.second++;
214 }
215 libmesh_catch (...)
216 {
217 auto stream = libMesh::err.get();
218 stream->exceptions(stream->goodbit); // stream must not throw
219 libMesh::err << "Encountered unrecoverable error while calling "
220 << "ReferenceCounter::increment_destructor_count() "
221 << "for a(n) " << name << " object." << std::endl;
222 std::terminate();
223 }
224}

References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), and libMesh::Threads::spin_mtx.

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

◆ init() [1/4]

template<typename T >
void libMesh::LaspackVector< 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 354 of file laspack_vector.h.

357{
358 this->init(n,n,fast,ptype);
359}

◆ init() [2/4]

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

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

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

◆ init() [3/4]

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

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

Implements libMesh::NumericVector< T >.

◆ init() [4/4]

template<class T >
void libMesh::LaspackVector< 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 379 of file laspack_vector.h.

381{
382 this->init(other.size(),other.local_size(),fast,other.type());
383}

References 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

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

This method is guaranteed to be thread-safe as long as library implementations of NumericVector are used

Definition at line 1044 of file numeric_vector.h.

1046{
1047 libmesh_assert(v.size() == dof_indices.size());
1048 if (!v.empty())
1049 this->insert(&v(0), dof_indices);
1050}
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.

References libMesh::DenseSubVector< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseSubVector< T >::size().

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

This method is guaranteed to be thread-safe as long as library implementations of NumericVector are used

Definition at line 1032 of file numeric_vector.h.

1034{
1035 libmesh_assert(v.size() == dof_indices.size());
1036 if (!v.empty())
1037 this->insert(&v(0), dof_indices);
1038}

References libMesh::DenseVector< T >::empty(), libMesh::libmesh_assert(), and libMesh::DenseVector< T >::size().

◆ insert() [3/5]

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

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

This method is guaranteed to be thread-safe as long as library implementations of NumericVector are used

Definition at line 140 of file numeric_vector.C.

142{
143 libmesh_assert_equal_to (V.size(), dof_indices.size());
144 libmesh_assert (V.readable());
145
146 for (auto i : index_range(dof_indices))
147 this->set (dof_indices[i], V(i));
148}
virtual void set(const numeric_index_type i, const T value)=0
Sets v(i) = value.

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

This method is guaranteed to be thread-safe as long as library implementations of NumericVector are used

Definition at line 1020 of file numeric_vector.h.

1022{
1023 libmesh_assert(v.size() == dof_indices.size());
1024 if (!v.empty())
1025 this->insert(v.data(), dof_indices);
1026}

References libMesh::libmesh_assert().

◆ insert() [5/5]

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

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

Note that library implementations of this method are thread safe

Reimplemented in libMesh::PetscVector< libMesh::Number >, libMesh::PetscVector< T >, and libMesh::EpetraVector< T >.

Definition at line 128 of file numeric_vector.C.

130{
131 libmesh_assert (v);
132
133 for (auto i : index_range(dof_indices))
134 this->set (dof_indices[i], v[i]);
135}

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

Referenced by libMesh::StaticCondensation::backwards_substitution(), and Biharmonic::JR::bounds().

◆ is_effectively_ghosted()

template<typename T >
bool libMesh::NumericVector< T >::is_effectively_ghosted ( ) const
inlineinherited
Returns
Whether the vector is effectively ghosted, i.e. whether vector operations require handling of ghosted coefficients.

This is true for GHOSTED vectors in parallel, but in serial subclasses may return false here for GHOSTED vectors since every ghosted vector is effectively serial and thus may be able to take advantage of serial-specific code paths.

Definition at line 181 of file numeric_vector.h.

182 { return (this->n_processors()!=1) && (_type == GHOSTED); }
processor_id_type n_processors() const

References libMesh::NumericVector< T >::_type, libMesh::GHOSTED, and libMesh::ParallelObject::n_processors().

Referenced by libMesh::PetscVector< T >::create_subvector().

◆ is_effectively_serial()

template<typename T >
bool libMesh::NumericVector< T >::is_effectively_serial ( ) const
inlineinherited
Returns
Whether the vector is effectively serial, i.e. whether all vector data is accessible on every processor.

This is true for explicitly SERIAL vectors, but also for vectors on serial (1-processor) communicators.

Definition at line 168 of file numeric_vector.h.

169 { return (this->n_processors()==1) || (_type == SERIAL); }

References libMesh::NumericVector< T >::_type, libMesh::ParallelObject::n_processors(), and libMesh::SERIAL.

Referenced by libMesh::PetscVector< T >::operator=().

◆ l1_norm()

template<typename T >
Real libMesh::LaspackVector< 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 54 of file laspack_vector.C.

55{
56 libmesh_assert (this->closed());
57
58 return static_cast<Real>(l1Norm_V(const_cast<QVector*>(&_vec)));
59}
virtual bool closed() const

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

◆ l1_norm_diff()

template<class T >
Real libMesh::NumericVector< T >::l1_norm_diff ( const NumericVector< T > &  other_vec) const
inherited
Returns
The \( \ell_1 \)-norm of \( \vec{u} - \vec{v} \), where \( \vec{u} \) is this.

Definition at line 653 of file numeric_vector.C.

654{
655 libmesh_assert(this->compatible(v));
656
657 struct L1Differ {
658 const NumericVector<T> & v1, & v2;
659 Real norm;
660
661 L1Differ (const NumericVector<T> & v1in,
662 const NumericVector<T> & v2in) :
663 v1(v1in), v2(v2in), norm(0) {}
664
665 L1Differ (L1Differ & other, Threads::split) :
666 v1(other.v1), v2(other.v2), norm(0) {}
667
668 void operator()(const IntRange<numeric_index_type> & index_range) {
669 for (const auto i : index_range)
670 norm += libMesh::l1_norm_diff(v1(i), v2(i));
671 }
672
673 void join(const L1Differ & other) {
674 norm += other.norm;
675 }
676 };
677
678 L1Differ differ(*this, v);
679
681
682 this->comm().sum(differ.norm);
683
684 return differ.norm;
685}
auto norm(const T &a)
void parallel_reduce(const Range &range, Body &body, unsigned int n_threads=libMesh::n_threads())
Execute the provided reduction operation in parallel on the specified range.
The libMesh namespace provides an interface to certain functionality in the library.
auto l1_norm_diff(const NumericVector< T > &vec1, const NumericVector< T > &vec2)

References libMesh::index_range(), libMesh::l1_norm_diff(), libMesh::libmesh_assert(), libMesh::make_range(), libMesh::Threads::parallel_reduce(), and libMesh::Real.

Referenced by libMesh::l1_norm_diff().

◆ l2_norm()

template<typename T >
Real libMesh::LaspackVector< 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 64 of file laspack_vector.C.

65{
66 libmesh_assert (this->closed());
67
68 return static_cast<Real>(l2Norm_V(const_cast<QVector*>(&_vec)));
69}

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

◆ l2_norm_diff()

template<class T >
Real libMesh::NumericVector< T >::l2_norm_diff ( const NumericVector< T > &  other_vec) const
inherited
Returns
The \( \ell_2 \)-norm of \( \vec{u} - \vec{v} \), where \( \vec{u} \) is this.

Definition at line 616 of file numeric_vector.C.

617{
618 libmesh_assert(this->compatible(v));
619
620 struct L2Differ {
621 const NumericVector<T> & v1, & v2;
623
624 L2Differ (const NumericVector<T> & v1in,
625 const NumericVector<T> & v2in) :
626 v1(v1in), v2(v2in), norm_sq(0) {}
627
628 L2Differ (L2Differ & other, Threads::split) :
629 v1(other.v1), v2(other.v2), norm_sq(0) {}
630
631 void operator()(const IntRange<numeric_index_type> & index_range) {
632 for (const auto i : index_range)
633 norm_sq += TensorTools::norm_sq(v1(i) - v2(i));
634 }
635
636 void join(const L2Differ & other) {
637 norm_sq += other.norm_sq;
638 }
639 };
640
641 L2Differ differ(*this, v);
642
644
645 this->comm().sum(differ.norm_sq);
646
647 return std::sqrt(differ.norm_sq);
648}
auto norm_sq(const T &a)

References libMesh::index_range(), libMesh::libmesh_assert(), libMesh::make_range(), libMesh::Threads::parallel_reduce(), and libMesh::Real.

◆ last_local_index()

template<typename T >
numeric_index_type libMesh::LaspackVector< 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 493 of file laspack_vector.h.

494{
495 libmesh_assert (this->initialized());
496
497 return this->size();
498}

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

◆ linfty_norm()

template<typename T >
Real libMesh::LaspackVector< 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 74 of file laspack_vector.C.

75{
76 libmesh_assert (this->closed());
77
78 return static_cast<Real>(MaxNorm_V(const_cast<QVector*>(&_vec)));
79}

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

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

183{
184 libmesh_assert(this->compatible(other_vector));
185
186 int first_different_i = std::numeric_limits<int>::max();
188
189 do
190 {
191 if (std::abs((*this)(i) - other_vector(i)) > threshold *
192 std::max(std::abs((*this)(i)), std::abs(other_vector(i))))
193 first_different_i = i;
194 else
195 i++;
196 }
197 while (first_different_i==std::numeric_limits<int>::max()
198 && i<last_local_index());
199
200 // Find the correct first differing index in parallel
201 this->comm().min(first_different_i);
202
203 if (first_different_i == std::numeric_limits<int>::max())
204 return -1;
205
206 return first_different_i;
207}

References libMesh::libmesh_assert().

◆ local_size()

template<typename T >
numeric_index_type libMesh::LaspackVector< 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 471 of file laspack_vector.h.

472{
473 libmesh_assert (this->initialized());
474
475 return this->size();
476}

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

◆ localize() [1/5]

template<typename T >
virtual void libMesh::LaspackVector< 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 >.

◆ localize() [2/5]

template<typename T >
void libMesh::LaspackVector< 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 396 of file laspack_vector.C.

397{
398 // Make sure the NumericVector passed in is really a LaspackVector
399 LaspackVector<T> * v_local =
400 cast_ptr<LaspackVector<T> *>(&v_local_in);
401
402 libmesh_assert(v_local);
403
404 *v_local = *this;
405}

References libMesh::libmesh_assert().

◆ localize() [3/5]

template<typename T >
virtual void libMesh::LaspackVector< 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 >.

◆ localize() [4/5]

template<typename T >
void libMesh::LaspackVector< 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 456 of file laspack_vector.C.

458{
459 v_local.resize(this->size());
460
461 for (auto i : index_range(v_local))
462 v_local[i] = (*this)(i);
463}

References libMesh::index_range().

◆ localize() [5/5]

template<typename T >
void libMesh::LaspackVector< 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 426 of file laspack_vector.C.

428{
429 // LaspackVectors are serial, so we can just copy values
430 v_local.resize(indices.size());
431
432 for (auto i : index_range(v_local))
433 v_local[i] = (*this)(indices[i]);
434}

References libMesh::index_range().

◆ localize_to_one()

template<typename T >
void libMesh::LaspackVector< 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 468 of file laspack_vector.C.

470{
471 libmesh_assert_equal_to (pid, 0);
472
473 this->localize (v_local);
474}
virtual void localize(std::vector< T > &v_local) const override
Creates a copy of the global vector in the local vector v_local.

◆ max()

template<typename T >
Real libMesh::LaspackVector< T >::max ( ) const
overridevirtual
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 493 of file laspack_vector.C.

494{
495 libmesh_assert (this->initialized());
496 if (!this->size())
497 return -std::numeric_limits<Real>::max();
498
499 Real the_max = libmesh_real((*this)(0));
500
501 const numeric_index_type n = this->size();
502
503 for (numeric_index_type i=1; i<n; i++)
504 the_max = std::max (the_max, libmesh_real((*this)(i)));
505
506 return the_max;
507}
T libmesh_real(T a)

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

◆ max_allowed_id()

template<typename T >
std::size_t libMesh::LaspackVector< T >::max_allowed_id ( ) const
inlineoverridevirtual
Returns
the max number of entries (across all procs) that the NumericVector can have.

Although we define numeric_index_type, and it is typically required that the NumericVector's underlying implementation's indices have size equal to sizeof(numeric_index_type), these two types can still have different signedness, which affects the maximum number of values which can be stored in the NumericVector.

Implements libMesh::NumericVector< T >.

Definition at line 575 of file laspack_vector.h.

576{
577 // The QVector type declares a "size_t Dim;"
578 return std::numeric_limits<std::size_t>::max();
579}

◆ min()

template<typename T >
Real libMesh::LaspackVector< T >::min ( ) const
overridevirtual
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 512 of file laspack_vector.C.

513{
514 libmesh_assert (this->initialized());
515 if (!this->size())
516 return std::numeric_limits<Real>::max();
517
518 Real the_min = libmesh_real((*this)(0));
519
520 const numeric_index_type n = this->size();
521
522 for (numeric_index_type i=1; i<n; i++)
523 the_min = std::min (the_min, libmesh_real((*this)(i)));
524
525 return the_min;
526}

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

◆ n_objects()

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

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

Definition at line 85 of file reference_counter.h.

86 { return _n_objects; }
static Threads::atomic< unsigned int > _n_objects
The number of objects.

References libMesh::ReferenceCounter::_n_objects.

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

◆ n_processors()

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

Definition at line 103 of file parallel_object.h.

104 {
105 processor_id_type returnval =
106 cast_int<processor_id_type>(_communicator.size());
107 libmesh_assert(returnval); // We never have an empty comm
108 return returnval;
109 }
processor_id_type size() const
uint8_t processor_id_type
Definition id_types.h:104

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

Referenced by libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::DofMap::add_constraints_to_send_list(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DistributedMesh::add_node(), libMesh::System::add_vector(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::Partitioner::build_graph(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::copy_nodes_and_elements(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::DistributedMesh::DistributedMesh(), libMesh::EnsightIO::EnsightIO(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::MeshBase::get_info(), libMesh::StaticCondensation::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::DistributedMesh::insert_elem(), libMesh::NumericVector< T >::is_effectively_ghosted(), libMesh::NumericVector< T >::is_effectively_serial(), 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::MeshBase::n_active_elem_on_proc(), libMesh::DofMap::n_dofs_per_processor(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::MeshBase::partition(), libMesh::Partitioner::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::NameBasedIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::Partitioner::repartition(), OverlappingFunctorTest::run_partitioner_test(), libMesh::DofMap::scatter_constraints(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), WriteVecAndScalar::setupTests(), libMesh::RBEIMEvaluation::side_gather_bfs(), DistributedMeshTest::testRemoteElemError(), CheckpointIOTest::testSplitter(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::ExodusII_IO::write_nodal_data(), 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::LaspackVector< 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 538 of file laspack_vector.h.

539{
540 libmesh_assert (this->initialized());
541 libmesh_assert ( ((i >= this->first_local_index()) &&
542 (i < this->last_local_index())) );
543
544
545 return static_cast<T>(V_GetCmp(const_cast<QVector*>(&_vec), i+1));
546}
virtual numeric_index_type last_local_index() const override
virtual numeric_index_type first_local_index() const override

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

◆ operator*=() [1/2]

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 109 of file laspack_vector.C.

110{
111 libmesh_assert_equal_to(size(), v.size());
112
113#ifndef NDEBUG
114 const bool was_closed = this->_is_closed;
115#endif
116
117 const numeric_index_type n = this->size();
118
119 for (numeric_index_type i=0; i<n; i++)
120 this->set(i, (*this)(i) * v(i));
121
122 // This is an embarrassingly parallel method, but set() isn't in
123 // general so set() overzealously marked us as non-closed
124#ifndef NDEBUG
125 this->_is_closed = was_closed;
126#endif
127
128 return *this;
129}

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

448{ this->scale(a); return *this; }
virtual void scale(const T factor)=0
Scale each element of the vector by the given factor.

References libMesh::NumericVector< T >::scale().

◆ operator+=()

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 84 of file laspack_vector.C.

85{
86 libmesh_assert (this->closed());
87
88 this->add(1., v);
89
90 return *this;
91}

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

◆ operator-=()

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 97 of file laspack_vector.C.

98{
99 libmesh_assert (this->closed());
100
101 this->add(-1., v);
102
103 return *this;
104}

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

◆ operator/=() [1/2]

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 134 of file laspack_vector.C.

135{
136 libmesh_assert_equal_to(size(), v.size());
137
138#ifndef NDEBUG
139 const bool was_closed = this->_is_closed;
140#endif
141
142 const numeric_index_type n = this->size();
143
144 for (numeric_index_type i=0; i<n; i++)
145 this->set(i, (*this)(i) / v(i));
146
147 // This is an embarrassingly parallel method, but set() isn't in
148 // general so set() overzealously marked us as non-closed
149#ifndef NDEBUG
150 this->_is_closed = was_closed;
151#endif
152
153 return *this;
154}

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

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

References libMesh::NumericVector< T >::scale().

◆ operator=() [1/5]

template<typename T >
LaspackVector< T > & libMesh::LaspackVector< T >::operator= ( const LaspackVector< T > &  v)

Copy assignment operator.

Calls Asgn_VV() to assign the contents of one vector to another.

Returns
A reference to *this as the derived type.

Definition at line 356 of file laspack_vector.C.

357{
358 libmesh_assert (this->initialized());
359 libmesh_assert (v.closed());
360 libmesh_assert_equal_to (this->size(), v.size());
361
362 if (v.size() != 0)
363 Asgn_VV (const_cast<QVector*>(&_vec),
364 const_cast<QVector*>(&v._vec)
365 );
366
367#ifndef NDEBUG
368 this->_is_closed = true;
369#endif
370
371 return *this;
372}

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

◆ operator=() [2/5]

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 339 of file laspack_vector.C.

340{
341 // Make sure the NumericVector passed in is really a LaspackVector
342 const LaspackVector<T> * v =
343 cast_ptr<const LaspackVector<T> *>(&v_in);
344
346
347 *this = *v;
348
349 return *this;
350}

References libMesh::libmesh_assert().

◆ operator=() [3/5]

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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.

Implements libMesh::NumericVector< T >.

Definition at line 378 of file laspack_vector.C.

379{
384 if (this->size() == v.size())
385 for (auto i : index_range(v))
386 this->set (i, v[i]);
387
388 else
389 libmesh_error_msg("this->size() = " << this->size() << " must be equal to v.size() = " << v.size());
390
391 return *this;
392}

References libMesh::index_range().

◆ operator=() [4/5]

template<typename T >
NumericVector< T > & libMesh::LaspackVector< 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 325 of file laspack_vector.C.

326{
327 libmesh_assert (this->initialized());
328 libmesh_assert (this->closed());
329
330 V_SetAllCmp (&_vec, s);
331
332 return *this;
333}

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

◆ operator=() [5/5]

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

◆ pointwise_divide()

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

Computes \( u_i \leftarrow \frac{v_{1,i}}{v_{2,i}} \) (summation not implied) i.e.

the pointwise (component-wise) division of vec1 and vec2, and stores the result in *this.

Implements libMesh::NumericVector< T >.

Definition at line 486 of file laspack_vector.C.

488{
489 libmesh_not_implemented();
490}

◆ pointwise_mult()

template<typename T >
void libMesh::LaspackVector< 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 479 of file laspack_vector.C.

481{
482 libmesh_not_implemented();
483}

◆ print() [1/2]

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

Definition at line 1059 of file numeric_vector.h.

1060{
1061 libmesh_assert (this->initialized());
1062 os << "Size\tglobal = " << this->size()
1063 << "\t\tlocal = " << this->local_size() << std::endl;
1064
1065 // std::complex<>::operator<<() is defined, but use this form
1066 os << "#\tReal part\t\tImaginary part" << std::endl;
1067 for (auto i : index_range(*this))
1068 os << i << "\t"
1069 << (*this)(i).real() << "\t\t"
1070 << (*this)(i).imag() << std::endl;
1071}
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
boost::multiprecision::float128 imag(const boost::multiprecision::float128)

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

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

1078{
1079 libmesh_assert (this->initialized());
1080 os << "Size\tglobal = " << this->size()
1081 << "\t\tlocal = " << this->local_size() << std::endl;
1082
1083 os << "#\tValue" << std::endl;
1084 for (auto i : index_range(*this))
1085 os << i << "\t" << (*this)(i) << std::endl;
1086}

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

◆ print_global() [1/2]

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

Definition at line 1092 of file numeric_vector.h.

1093{
1094 libmesh_assert (this->initialized());
1095
1096 std::vector<Complex> v(this->size());
1097 this->localize(v);
1098
1099 // Right now we only want one copy of the output
1100 if (this->processor_id())
1101 return;
1102
1103 os << "Size\tglobal = " << this->size() << std::endl;
1104 os << "#\tReal part\t\tImaginary part" << std::endl;
1105 for (auto i : make_range(v.size()))
1106 os << i << "\t"
1107 << v[i].real() << "\t\t"
1108 << v[i].imag() << std::endl;
1109}
virtual void localize(std::vector< T > &v_local) const =0
Creates a copy of the global vector in the local vector v_local.
processor_id_type processor_id() const

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

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

1115{
1116 libmesh_assert (this->initialized());
1117
1118 std::vector<T> v(this->size());
1119 this->localize(v);
1120
1121 // Right now we only want one copy of the output
1122 if (this->processor_id())
1123 return;
1124
1125 os << "Size\tglobal = " << this->size() << std::endl;
1126 os << "#\tValue" << std::endl;
1127 for (auto i : make_range(v.size()))
1128 os << i << "\t" << v[i] << std::endl;
1129}

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

◆ print_info()

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

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

Definition at line 81 of file reference_counter.C.

82{
84 out_stream << ReferenceCounter::get_info();
85}
static std::string get_info()
Gets a string containing the reference information.

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

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

◆ print_matlab()

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

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

246{
247 parallel_object_only();
248
249 libmesh_assert (this->initialized());
250
251 const numeric_index_type first_dof = this->first_local_index(),
252 end_dof = this->last_local_index();
253
254 // We'll print the vector from processor 0 to make sure
255 // it's serialized properly
256 if (this->processor_id() == 0)
257 {
258 std::unique_ptr<std::ofstream> file;
259
260 if (filename != "")
261 file = std::make_unique<std::ofstream>(filename.c_str());
262
263 std::ostream & os = (filename == "") ? libMesh::out : *file;
264
265 // Print a header similar to PETSC_VIEWER_ASCII_MATLAB
266 os << "%Vec Object: () " << this->n_processors() << " MPI processes\n"
267 << "% type: " << (this->n_processors() > 1 ? "mpi" : "seq") << "\n"
268 << "Vec = [\n";
269
270 for (numeric_index_type i : make_range(end_dof))
271 os << (*this)(i) << '\n';
272
273 std::vector<T> cbuf;
274 for (auto p : IntRange<processor_id_type>(1, this->n_processors()))
275 {
276 this->comm().receive(p, cbuf);
277
278 for (auto c : cbuf)
279 os << c << '\n';
280 }
281
282 os << "];\n" << std::endl;
283 }
284 else
285 {
286 std::vector<T> cbuf(end_dof - first_dof);
287
288 for (numeric_index_type i : make_range(end_dof - first_dof))
289 cbuf[i] = (*this)(first_dof+i);
290 this->comm().send(0,cbuf);
291 }
292}
Status receive(const unsigned int dest_processor_id, T &buf, const MessageTag &tag=any_tag) const
void send(const unsigned int dest_processor_id, const T &buf, const MessageTag &tag=no_tag) const
OStreamProxy out

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

Referenced by libMesh::RBConstruction::enrich_basis_from_rhs_terms().

◆ processor_id()

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

Definition at line 114 of file parallel_object.h.

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

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

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::BoundaryInfo::add_elements(), libMesh::DistributedMesh::add_node(), libMesh::MeshTools::Modification::all_tri(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::Partitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::MeshFunction::check_found_elem(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), 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_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::ExodusII_IO_Helper::create(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DofMapBase::end_dof(), libMesh::DofMapBase::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::find_dofs_to_send(), libMesh::UnstructuredMesh::find_neighbors(), libMesh::DofMapBase::first_dof(), libMesh::DofMapBase::first_old_dof(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::Nemesis_IO_Helper::get_cmap_params(), libMesh::Nemesis_IO_Helper::get_eb_info_global(), libMesh::Nemesis_IO_Helper::get_elem_cmap(), libMesh::Nemesis_IO_Helper::get_elem_map(), libMesh::MeshBase::get_info(), libMesh::Nemesis_IO_Helper::get_init_global(), libMesh::Nemesis_IO_Helper::get_init_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::Nemesis_IO_Helper::get_loadbal_param(), libMesh::DofMap::get_local_constraints(), libMesh::MeshBase::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::LaplaceMeshSmoother::init(), libMesh::SystemSubsetBySubdomain::init(), 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::MeshTools::Modification::interpolate_surface(), libMesh::SparsityPattern::Build::join(), libMesh::RBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBSCMEvaluation::legacy_write_offline_data_to_files(), libMesh::TransientRBEvaluation::legacy_write_offline_data_to_files(), 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(), main(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::MeshBase::n_active_local_elem(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::MeshBase::n_constraint_rows(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::DofMapBase::n_local_dofs(), libMesh::MeshBase::n_local_elem(), libMesh::MeshBase::n_local_nodes(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::DistributedMesh::own_node(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), 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::XdrIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::NameBasedIO::read(), libMesh::EquationSystems::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::ExodusII_IO_Helper::read_global_values(), libMesh::CheckpointIO::read_header(), libMesh::ExodusII_IO::read_header(), libMesh::System::read_header(), libMesh::XdrIO::read_header(), libMesh::DynaIO::read_mesh(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::TransientRBConstruction::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::Nemesis_IO_Helper::read_var_names_impl(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::SimplexRefiner::refine_via_edges(), libMesh::StaticCondensationDofMap::reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::RBEIMEvaluation::side_gather_bfs(), MeshFunctionTest::test_bad_gradient_var_with_out_of_mesh_value(), MeshFunctionTest::test_bad_hessian_var_with_out_of_mesh_value(), ExodusTest< elem_type >::test_read_gold(), ExodusTest< elem_type >::test_write(), ExodusC0PolyhedronTest::test_write_and_read_hexagonal_prism(), ExodusC0PolygonTest::test_write_and_read_pentagon(), MeshInputTest::testAbaqusRead(), MeshInputTest::testBadGmsh(), BoundaryInfoTest::testBoundaryIDs(), MeshInputTest::testCopyElementSolutionImpl(), MeshInputTest::testCopyElementVectorImpl(), MeshInputTest::testCopyNodalSolutionImpl(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), MeshInputTest::testDynaFileMappings(), MeshInputTest::testDynaNoSplines(), MeshInputTest::testDynaReadElem(), MeshInputTest::testDynaReadPatch(), MeshInputTest::testExodusFileMappings(), MeshInputTest::testExodusIGASidesets(), MeshInputTest::testExodusWriteElementDataFromDiscontinuousNodalData(), MeshInputTest::testGmshBCIDOverlap(), MeshInputTest::testGoodGmsh(), MeshInputTest::testGoodSTL(), MeshInputTest::testGoodSTLBinary(), BoundaryInfoTest::testInternalBoundary(), MeshInputTest::testLowOrderEdgeBlocks(), BoundaryMeshSubdomainTest::testPerBoundarySubdomain(), SystemsTest::testProjectMatrix3D(), BoundaryInfoTest::testShellFaceConstraints(), MeshInputTest::testSingleElementImpl(), BoundaryMeshSubdomainTest::testSingleSubdomain(), WriteVecAndScalar::testSolution(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), MeshSmootherTest::testVariationalSmoother(), libMesh::MeshTools::total_weight(), libMesh::NetGenMeshInterface::triangulate(), libMesh::Parallel::Packing< Elem * >::unpack(), libMesh::Parallel::Packing< Node * >::unpack(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::DTKAdapter::update_variable_values(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::XdrIO::write(), libMesh::NameBasedIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO::write_element_data_from_discontinuous_nodal_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_Helper::write_elemset_data(), libMesh::ExodusII_IO_Helper::write_elemsets(), 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::ExodusII_IO::write_nodal_data(), libMesh::VTKIO::write_nodal_data(), libMesh::UCDIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data_common(), libMesh::ExodusII_IO::write_nodal_data_discontinuous(), libMesh::ExodusII_IO_Helper::write_nodal_values(), libMesh::ExodusII_IO_Helper::write_nodeset_data(), libMesh::ExodusII_IO_Helper::write_nodesets(), libMesh::Nemesis_IO_Helper::write_nodesets(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), 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::ExodusII_IO_Helper::write_sidesets(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

◆ read_matlab()

template<typename T >
void libMesh::NumericVector< T >::read_matlab ( const std::string &  filename)
virtualinherited

Read the contents of the vector from the Matlab-script format used by PETSc.

If the size of the matrix in filename appears consistent with the existing partitioning of this then the existing parallel decomposition will be retained. If not, then this will be initialized with the size from the file, linearly partitioned onto the number of processors available.

Definition at line 297 of file numeric_vector.C.

298{
299 LOG_SCOPE("read_matlab()", "NumericVector");
300
301#ifndef LIBMESH_HAVE_CXX11_REGEX
302 libmesh_not_implemented(); // What is your compiler?!? Email us!
303 libmesh_ignore(filename);
304#else
305 parallel_object_only();
306
307 const bool gzipped_file = Utility::ends_with(filename, ".gz");
308
309 // If we don't already have this size, we'll need to reinit, and
310 // determine which entries each processor is in charge of.
311 std::vector<numeric_index_type> first_entries, end_entries;
312
313 numeric_index_type first_entry = 0,
314 end_entry = 0,
315 n = 0;
316
317 // We'll use an istream here; it might be an ifstream if we're
318 // opening a raw ASCII file or a gzstream if we're opening a
319 // compressed one.
320 std::unique_ptr<std::istream> file;
321
322 // First read through the file, saving size and entry data
323 std::vector<T> entries;
324
325 {
326 // We'll read the vector on processor 0 rather than try to juggle
327 // parallel I/O.
328 if (this->processor_id() == 0)
329 {
330 // We'll be using regular expressions to make ourselves slightly
331 // more robust to formatting.
332 const std::regex start_regex // assignment like "Vec_0x84000002_1 = ["
333 ("\\s*\\w+\\s*=\\s*\\[");
334 const std::regex end_regex // end of assignment
335 ("^[^%]*\\]");
336
337 if (gzipped_file)
338 {
339#ifdef LIBMESH_HAVE_GZSTREAM
340 auto inf = std::make_unique<igzstream>();
341 libmesh_assert(inf);
342 inf->open(filename.c_str(), std::ios::in);
343 file = std::move(inf);
344#else
345 libmesh_error_msg("ERROR: need gzstream to handle .gz files!!!");
346#endif
347 }
348 else
349 {
350 auto inf = std::make_unique<std::ifstream>();
351 libmesh_assert(inf);
352
353 std::string new_name = Utility::unzip_file(filename);
354
355 inf->open(new_name.c_str(), std::ios::in);
356 file = std::move(inf);
357 }
358
359 const std::string whitespace = " \t";
360
361 bool have_started = false;
362 bool have_ended = false;
363
364 for (std::string line; std::getline(*file, line);)
365 {
366 std::smatch sm;
367
368 // First, try to match an entry. This is the most common
369 // case so we won't rely on slow std::regex for it.
370 // stringstream is at least an improvement over that.
371 std::istringstream l(line);
372 T value;
373 l >> value;
374
375 if (!l.fail())
376 {
377 libmesh_error_msg_if
378 (!have_started, "Confused by premature entries in vector file " << filename);
379
380 entries.push_back(value);
381 ++n;
382 }
383
384 else if (std::regex_search(line, start_regex))
385 have_started = true;
386
387 else if (std::regex_search(line, end_regex))
388 {
389 have_ended = true;
390 break;
391 }
392 }
393
394 libmesh_error_msg_if
395 (!have_started, "Confused by missing assignment-beginning in vector file " << filename);
396
397 libmesh_error_msg_if
398 (!have_ended, "Confused by missing assignment-ending in vector file " << filename);
399 }
400
401 this->comm().broadcast(n);
402
403 if (this->initialized() &&
404 n == this->size())
405 {
406 first_entry = this->first_local_index(),
407 end_entry = this->last_local_index();
408 }
409 else
410 {
411 // Determine which rows/columns each processor will be in charge of
412 first_entry = this->processor_id() * n / this->n_processors(),
413 end_entry = (this->processor_id()+1) * n / this->n_processors();
414 }
415
416 this->comm().gather(0, first_entry, first_entries);
417 this->comm().gather(0, end_entry, end_entries);
418
419 } // Done reading entry data and broadcasting vector size
420
421 // If we're not already initialized compatibly with the file then
422 // we'll initialize here
423 bool need_init = !this->initialized() ||
424 (this->size() != n) ||
425 (this->local_size() != end_entry - first_entry);
426
427 this->comm().max(need_init);
428
429 if (need_init)
430 this->init(n, end_entry - first_entry);
431
432 // Set the vector values last. The iota call here is inefficient
433 // but it's probably better than calling a single virtual function
434 // per index.
435 if (this->processor_id() == 0)
436 for (auto p : make_range(this->n_processors()))
437 {
438 const numeric_index_type first_entry_p = first_entries[p];
439 const numeric_index_type n_local = end_entries[p] - first_entry_p;
440 std::vector<numeric_index_type> indices(n_local);
441 std::iota(indices.begin(), indices.end(), first_entry_p);
442 this->insert(entries.data() + first_entries[p],
443 indices);
444 }
445
446 this->close();
447#endif
448}
void max(const T &r, T &o, Request &req) const
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
void gather(const unsigned int root_id, const T &send_data, std::vector< T, A > &recv) const
virtual void close()=0
Calls the NumericVector's internal assembly routines, ensuring that the values are consistent across ...
virtual void init(const numeric_index_type n, const numeric_index_type n_local, const bool fast=false, const ParallelType ptype=AUTOMATIC)=0
Change the dimension of the vector to n.
bool ends_with(std::string_view superstring, std::string_view suffix)
Look for a substring at the very end of a string.
Definition utility.C:213
std::string unzip_file(std::string_view name)
Create an unzipped copy of a bz2 or xz file, returning the name of the now-unzipped file that can be ...
Definition utility.C:164
void libmesh_ignore(const Args &...)

References libMesh::Utility::ends_with(), and libMesh::libmesh_ignore().

◆ readable()

template<typename T >
bool libMesh::NumericVector< T >::readable ( ) const
inherited
Returns
whether or not this vector is able to be read for global operations

Definition at line 727 of file numeric_vector.C.

728{
729 return this->initialized() && this->closed();
730}

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

Referenced by libMesh::NumericVector< Number >::build(), and libMesh::NumericVector< T >::compatible().

◆ reciprocal()

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

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

Implements libMesh::NumericVector< T >.

Definition at line 159 of file laspack_vector.C.

160{
161 const numeric_index_type n = this->size();
162
163#ifndef NDEBUG
164 const bool was_closed = this->_is_closed;
165#endif
166
167 for (numeric_index_type i=0; i<n; i++)
168 {
169 T v = (*this)(i);
170
171 // Don't divide by zero!
172 libmesh_assert_not_equal_to (v, T(0));
173
174 this->set(i, 1. / v);
175 }
176
177 // This is an embarrassingly parallel method, but set() isn't in
178 // general so set() overzealously marked us as non-closed
179#ifndef NDEBUG
180 this->_is_closed = was_closed;
181#endif
182}

◆ restore_subvector()

template<typename T >
virtual void libMesh::NumericVector< T >::restore_subvector ( std::unique_ptr< NumericVector< T > >  ,
const std::vector< numeric_index_type > &   
)
inlinevirtualinherited

Restores a view into this vector using the indices in rows.

The subvector should have been acquired from get_subvector() with the same rows.

This is currently only implemented for PetscVector and EigenSparseVector.

Reimplemented in libMesh::PetscVector< libMesh::Number >, libMesh::EigenSparseVector< T >, and libMesh::PetscVector< T >.

Definition at line 823 of file numeric_vector.h.

825 {
826 libmesh_not_implemented();
827 }

Referenced by libMesh::StaticCondensation::apply(), libMesh::CondensedEigenSystem::copy_sub_to_super(), and libMesh::CondensedEigenSystem::copy_super_to_sub().

◆ scale()

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

Scale each element of the vector by the given factor.

Implements libMesh::NumericVector< T >.

Definition at line 290 of file laspack_vector.C.

291{
292 libmesh_assert (this->initialized());
293
294 Asgn_VV(&_vec, Mul_SV (factor, &_vec));
295}

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

◆ set()

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

Sets v(i) = value.

Note that library implementations of this method are thread safe, e.g. we will lock _numeric_vector_mutex before writing to the vector

Implements libMesh::NumericVector< T >.

Definition at line 504 of file laspack_vector.h.

505{
506 libmesh_assert (this->initialized());
507 libmesh_assert_less (i, this->size());
508
509 std::scoped_lock lock(this->_numeric_vector_mutex);
510 V_SetCmp (&_vec, i+1, value);
511
512#ifndef NDEBUG
513 this->_is_closed = false;
514#endif
515}

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

◆ set_type()

template<typename T >
void libMesh::NumericVector< T >::set_type ( ParallelType  t)
inherited

Allow the user to change the ParallelType of the NumericVector under some circumstances.

If the NumericVector has not been initialized yet, then it is generally safe to change the ParallelType. otherwise, if the NumericVector has already been initialized with a specific type, we cannot change it without doing some extra copying/reinitialization work, and we currently throw an error if this is requested.

Definition at line 97 of file numeric_vector.C.

98{
99 // Check for no-op
100 if (_type == t)
101 return;
102
103 // If the NumericVector is not yet initialized, then it is generally
104 // safe to change the ParallelType, with minor restrictions.
105 if (!this->initialized())
106 {
107 // If ghosted vectors are not enabled and the user requested a
108 // GHOSTED vector, fall back on SERIAL.
109#ifndef LIBMESH_ENABLE_GHOSTED
110 if (t == GHOSTED)
111 {
112 _type = SERIAL;
113 return;
114 }
115#endif
116
117 _type = t;
118 return;
119 }
120
121 // If we made it here, then the NumericVector was already
122 // initialized and we don't currently allow the ParallelType to be
123 // changed, although this could potentially be added later.
124 libmesh_not_implemented();
125}

References libMesh::GHOSTED, libMesh::initialized(), and libMesh::SERIAL.

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

◆ size()

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

Implements libMesh::NumericVector< T >.

Definition at line 460 of file laspack_vector.h.

461{
462 libmesh_assert (this->initialized());
463
464 return static_cast<numeric_index_type>(V_GetDim(const_cast<QVector*>(&_vec)));
465}

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

Referenced by libMesh::LaspackVector< T >::add(), and libMesh::LaspackVector< T >::operator=().

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

560{
561 libmesh_assert (this->readable());
562
563 const NumericVector<T> & v = *this;
564
565 Real norm = 0;
566
567 for (const auto & index : indices)
568 norm += std::abs(v(index));
569
570 this->comm().sum(norm);
571
572 return norm;
573}
virtual void abs()=0
Sets for each entry in the vector.

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

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

577{
578 libmesh_assert (this->readable());
579
580 const NumericVector<T> & v = *this;
581
582 Real norm = 0;
583
584 for (const auto & index : indices)
585 norm += TensorTools::norm_sq(v(index));
586
587 this->comm().sum(norm);
588
589 return std::sqrt(norm);
590}

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

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

594{
595 libmesh_assert (this->readable());
596
597 const NumericVector<T> & v = *this;
598
599 Real norm = 0;
600
601 for (const auto & index : indices)
602 {
603 Real value = std::abs(v(index));
604 if (value > norm)
605 norm = value;
606 }
607
608 this->comm().max(norm);
609
610 return norm;
611}

References libMesh::libmesh_assert().

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

◆ sum()

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

Implements libMesh::NumericVector< T >.

Definition at line 37 of file laspack_vector.C.

38{
39 libmesh_assert (this->closed());
40
41 T _sum = 0;
42
43 const numeric_index_type n = this->size();
44
45 for (numeric_index_type i=0; i!=n; ++i)
46 _sum += (*this)(i);
47
48 return _sum;
49}

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

◆ swap()

template<typename T >
void libMesh::LaspackVector< 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 552 of file laspack_vector.h.

553{
554 LaspackVector<T> & v = cast_ref<LaspackVector<T> &>(other);
555
556 // This is all grossly dependent on Laspack version...
557
558 std::swap(_vec.Name, v._vec.Name);
559 std::swap(_vec.Dim, v._vec.Dim);
560 std::swap(_vec.Instance, v._vec.Instance);
561 std::swap(_vec.LockLevel, v._vec.LockLevel);
562 std::swap(_vec.Multipl, v._vec.Multipl);
563 std::swap(_vec.OwnData, v._vec.OwnData);
564
565 // This should still be O(1), since _vec.Cmp is just a pointer to
566 // data on the heap
567
568 std::swap(_vec.Cmp, v._vec.Cmp);
569}

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

◆ type() [1/2]

template<typename T >
ParallelType & libMesh::NumericVector< T >::type ( )
inlineinherited
Returns
The type (SERIAL, PARALLEL, GHOSTED) of the vector.
Deprecated:
because it is dangerous to change the ParallelType of an already-initialized NumericVector. See NumericVector::set_type() for a safer, non-deprecated setter.

Definition at line 192 of file numeric_vector.h.

192{ return _type; }

References libMesh::NumericVector< T >::_type.

◆ type() [2/2]

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

◆ zero()

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

Set all entries to zero.

Equivalent to v = 0, but more obvious and faster.

Implements libMesh::NumericVector< T >.

Definition at line 418 of file laspack_vector.h.

419{
420 libmesh_assert (this->initialized());
421 libmesh_assert (this->closed());
422
423 V_SetAllCmp (&_vec, 0.);
424}

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

◆ zero_clone()

template<typename T >
std::unique_ptr< NumericVector< T > > libMesh::LaspackVector< 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 430 of file laspack_vector.h.

431{
432 std::unique_ptr<NumericVector<T>> cloned_vector =
433 std::make_unique<LaspackVector<T>>(this->comm());
434
435 cloned_vector->init(*this);
436
437 return cloned_vector;
438}

Friends And Related Symbol Documentation

◆ LaspackLinearSolver< T >

template<typename T >
friend class LaspackLinearSolver< T >
friend

Make other Laspack datatypes friends.

Definition at line 242 of file laspack_vector.h.

Member Data Documentation

◆ _communicator

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

◆ _counts

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

Actually holds the data.

Definition at line 124 of file reference_counter.h.

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

◆ _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 143 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

◆ _is_initialized

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

◆ _mutex

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

Mutual exclusion object to enable thread-safe reference counting.

Definition at line 137 of file reference_counter.h.

◆ _n_objects

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

◆ _numeric_vector_mutex

template<typename T >
std::mutex libMesh::NumericVector< T >::_numeric_vector_mutex
protectedinherited

Mutex for performing thread-safe operations.

Definition at line 883 of file numeric_vector.h.

◆ _type

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

◆ _vec

template<typename T >
QVector libMesh::LaspackVector< T >::_vec
private

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