25 #ifndef __GENERIC_TENSOR_H 26 #define __GENERIC_TENSOR_H 34 #include <dolfin/common/ArrayView.h> 35 #include <dolfin/common/MPI.h> 36 #include <dolfin/common/types.h> 37 #include <dolfin/log/log.h> 38 #include "LinearAlgebraObject.h" 44 class GenericLinearAlgebraFactory;
61 virtual bool empty()
const = 0;
64 virtual std::size_t
rank()
const = 0;
67 virtual std::size_t
size(std::size_t dim)
const = 0;
70 virtual std::pair<std::int64_t, std::int64_t>
82 virtual void set_local(
const double* block,
88 void add(
const double* block,
102 virtual void add_local(
const double* block,
107 virtual void zero() = 0;
110 virtual void apply(std::string mode) = 0;
116 virtual std::string
str(
bool verbose)
const = 0;
virtual std::size_t size(std::size_t dim) const =0
Return size of given dimension.
virtual std::size_t rank() const =0
Return tensor rank (number of dimensions)
virtual void apply(std::string mode)=0
Finalize assembly of tensor.
virtual void set_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)=0
Set block of values using local indices.
virtual GenericLinearAlgebraFactory & factory() const =0
Return linear algebra backend factory.
Definition: LinearAlgebraObject.h:36
Definition: TensorLayout.h:41
Base class for LinearAlgebra factories.
Definition: GenericLinearAlgebraFactory.h:46
virtual std::string str(bool verbose) const =0
Return MPI communicator.
virtual void zero()=0
Set all entries to zero and keep any sparse structure.
A common interface for arbitrary rank tensors.
Definition: GenericTensor.h:48
Definition: ArrayView.h:31
virtual bool empty() const =0
Return true if empty.
PetscInt la_index
Index type for compatibility with linear algebra backend(s)
Definition: types.h:32
virtual void add(const double *block, const std::vector< ArrayView< const dolfin::la_index >> &rows)=0
Add block of values using global indices.
virtual std::pair< std::int64_t, std::int64_t > local_range(std::size_t dim) const =0
Return local ownership range.
virtual ~GenericTensor()
Destructor.
Definition: GenericTensor.h:53
virtual void add_local(const double *block, const std::vector< ArrayView< const dolfin::la_index >> &rows)=0
Add block of values using local indices.
virtual void init(const TensorLayout &tensor_layout)=0
Initialize zero tensor using tensor layout.