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;
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
Scalar()
Create zero scalar.
Definition: Scalar.h:47
virtual void apply(std::string mode)
Finalize assembly of tensor.
Definition: Scalar.h:169
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 std::shared_ptr< Scalar > copy() const
Return copy of scalar.
Definition: Scalar.h:190
MPI_Comm mpi_comm() const
Return MPI communicator.
Definition: TensorLayout.h:92
double get_scalar_value() const
Definition: Scalar.h:210
virtual void zero()
Set all entries to zero and keep any sparse structure.
Definition: Scalar.h:162
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
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 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
Definition: TensorLayout.h:41
Base class for LinearAlgebra factories.
Definition: GenericLinearAlgebraFactory.h:46
static T sum(MPI_Comm comm, const T &value)
Sum values and return sum.
Definition: MPI.h:814
MPI_Comm comm() const
Return the underlying MPI_Comm object.
Definition: MPI.cpp:117
virtual bool empty() const
Return true if empty.
Definition: Scalar.h:67
A common interface for arbitrary rank tensors.
Definition: GenericTensor.h:48
virtual std::size_t size(std::size_t dim) const
Return size of given dimension.
Definition: Scalar.h:75
Definition: ArrayView.h:31
virtual std::string str(bool verbose) const
Return informal string representation (pretty-print)
Definition: Scalar.h:180
void add_local_value(double value)
Definition: Scalar.h:215
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
PetscInt la_index
Index type for compatibility with linear algebra backend(s)
Definition: types.h:32
virtual ~Scalar()
Destructor.
Definition: Scalar.h:54
void dolfin_error(std::string location, std::string task, std::string reason,...)
Definition: log.cpp:129
void reset(MPI_Comm comm)
Definition: MPI.cpp:91
virtual MPI_Comm mpi_comm() const
Return MPI communicator.
Definition: Scalar.h:176
static GenericLinearAlgebraFactory & factory()
Return instance of default backend.
Definition: DefaultFactory.cpp:85
Scalar(MPI_Comm comm)
Create zero scalar.
Definition: Scalar.h:50
virtual void init(const TensorLayout &tensor_layout)
Initialize zero tensor using sparsity pattern.
Definition: Scalar.h:59
virtual GenericLinearAlgebraFactory & factory() const
Return a factory for the default linear algebra backend.
Definition: Scalar.h:202
Default linear algebra factory based on global parameter "linear_algebra_backend".
Definition: DefaultFactory.h:35