27#include <dolfin/common/MPI.h>
28#include <dolfin/common/SubSystemsManager.h>
29#include <dolfin/common/types.h>
30#include "DefaultFactory.h"
31#include "GenericTensor.h"
32#include "TensorLayout.h"
62 _local_increment = 0.0;
71 virtual std::size_t
rank()
const
75 virtual std::size_t
size(std::size_t dim)
const
86 "Dim must be equal to zero.");
93 virtual std::pair<std::int64_t, std::int64_t>
97 "get local range of scalar",
98 "The local_range() function is not available for scalars");
107 "get global value of scalar",
108 "The get() function is not available for scalars");
116 "set global value of scalar",
117 "The set() function is not available for scalars");
125 "set local value of scalar",
126 "The set_local() function is not available for scalars");
133 dolfin_assert(block);
134 _local_increment += block[0];
141 dolfin_assert(block);
142 _local_increment += block[0];
146 virtual void add(
const double* block,
149 dolfin_assert(block);
150 _local_increment += block[0];
157 dolfin_assert(block);
158 _local_increment += block[0];
165 _local_increment = 0.0;
169 virtual void apply(std::string mode)
171 _value = _value +
MPI::sum(_mpi_comm.
comm(), _local_increment);
172 _local_increment = 0.0;
177 {
return _mpi_comm.
comm(); }
180 virtual std::string
str(
bool verbose)
const
183 s <<
"<Scalar value " << _value <<
">";
190 virtual std::shared_ptr<Scalar>
copy()
const
192 std::shared_ptr<Scalar> s(
new Scalar);
194 s->_local_increment = _local_increment;
195 s->_mpi_comm.reset(_mpi_comm.
comm());
216 { _local_increment += value; }
224 double _local_increment;
Definition ArrayView.h:32
Default linear algebra factory based on global parameter "linear_algebra_backend".
Definition DefaultFactory.h:36
static GenericLinearAlgebraFactory & factory()
Return instance of default backend.
Definition DefaultFactory.cpp:85
Base class for LinearAlgebra factories.
Definition GenericLinearAlgebraFactory.h:47
A common interface for arbitrary rank tensors.
Definition GenericTensor.h:49
MPI_Comm comm() const
Return the underlying MPI_Comm object.
Definition MPI.cpp:117
void reset(MPI_Comm comm)
Definition MPI.cpp:91
static T sum(MPI_Comm comm, const T &value)
Sum values and return sum.
Definition MPI.h:814
virtual void add_local(const double *block, const std::vector< ArrayView< const dolfin::la_index > > &rows)
Add block of values using local indices.
Definition Scalar.h:154
double get_scalar_value() const
Definition Scalar.h:210
void add_local_value(double value)
Definition Scalar.h:215
virtual void add(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Add block of values using global indices.
Definition Scalar.h:130
virtual GenericLinearAlgebraFactory & factory() const
Return a factory for the default linear algebra backend.
Definition Scalar.h:202
Scalar()
Create zero scalar.
Definition Scalar.h:47
virtual void add_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Add block of values using local indices.
Definition Scalar.h:138
virtual void apply(std::string mode)
Finalize assembly of tensor.
Definition Scalar.h:169
virtual void set_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Set block of values using local indices.
Definition Scalar.h:121
virtual void set(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Set block of values using global indices.
Definition Scalar.h:112
virtual std::shared_ptr< Scalar > copy() const
Return copy of scalar.
Definition Scalar.h:190
virtual std::size_t rank() const
Return tensor rank (number of dimensions)
Definition Scalar.h:71
virtual std::pair< std::int64_t, std::int64_t > local_range(std::size_t dim) const
Return local ownership range.
Definition Scalar.h:94
virtual void init(const TensorLayout &tensor_layout)
Initialize zero tensor using sparsity pattern.
Definition Scalar.h:59
virtual MPI_Comm mpi_comm() const
Return MPI communicator.
Definition Scalar.h:176
virtual ~Scalar()
Destructor.
Definition Scalar.h:54
virtual void add(const double *block, const std::vector< ArrayView< const dolfin::la_index > > &rows)
Add block of values using global indices.
Definition Scalar.h:146
Scalar(MPI_Comm comm)
Create zero scalar.
Definition Scalar.h:50
virtual bool empty() const
Return true if empty.
Definition Scalar.h:67
virtual std::string str(bool verbose) const
Return informal string representation (pretty-print)
Definition Scalar.h:180
virtual void zero()
Set all entries to zero and keep any sparse structure.
Definition Scalar.h:162
virtual void get(double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows) const
Get block of values.
Definition Scalar.h:103
virtual std::size_t size(std::size_t dim) const
Return size of given dimension.
Definition Scalar.h:75
Definition TensorLayout.h:42
MPI_Comm mpi_comm() const
Return MPI communicator.
Definition TensorLayout.h:92
void dolfin_error(std::string location, std::string task, std::string reason,...)
Definition log.cpp:129
PetscInt la_index
Index type for compatibility with linear algebra backend(s)
Definition types.h:32