Loading...
Searching...
No Matches
GenericTensor.h
// Copyright (C) 2007-2012 Anders Logg
//
// This file is part of DOLFIN.
//
// DOLFIN is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DOLFIN is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
//
// Modified by Garth N. Wells 2007-2011
// Modified by Ola Skavhaug 2007
// Modified by Martin Alnæs 2008
//
// First added: 2007-01-17
// Last changed: 2012-08-22
#ifndef __GENERIC_TENSOR_H
#define __GENERIC_TENSOR_H
#include <cstdint>
#include <exception>
#include <memory>
#include <typeinfo>
#include <utility>
#include <dolfin/common/ArrayView.h>
#include <dolfin/common/MPI.h>
#include <dolfin/common/types.h>
#include <dolfin/log/log.h>
#include "LinearAlgebraObject.h"
namespace dolfin
{
class TensorLayout;
class GenericLinearAlgebraFactory;
class GenericTensor : public virtual LinearAlgebraObject
{
public:
virtual ~GenericTensor() {}
//--- Basic GenericTensor interface ---
virtual void init(const TensorLayout& tensor_layout) = 0;
virtual bool empty() const = 0;
virtual std::size_t rank() const = 0;
virtual std::size_t size(std::size_t dim) const = 0;
virtual std::pair<std::int64_t, std::int64_t>
local_range(std::size_t dim) const = 0;
virtual void get(double* block, const dolfin::la_index* num_rows,
const dolfin::la_index * const * rows) const = 0;
virtual void set(const double* block, const dolfin::la_index* num_rows,
const dolfin::la_index * const * rows) = 0;
virtual void set_local(const double* block,
const dolfin::la_index* num_rows,
const dolfin::la_index * const * rows) = 0;
virtual
void add(const double* block,
const std::vector<ArrayView<const dolfin::la_index>>& rows) = 0;
virtual void add_local(
const double* block,
const std::vector<ArrayView<const dolfin::la_index>>& rows) = 0;
virtual void add(const double* block, const dolfin::la_index* num_rows,
const dolfin::la_index * const * rows) = 0;
virtual void add_local(const double* block,
const dolfin::la_index* num_rows,
const dolfin::la_index * const * rows) = 0;
virtual void zero() = 0;
virtual void apply(std::string mode) = 0;
//virtual MPI_Comm mpi_comm() const = 0;
virtual std::string str(bool verbose) const = 0;
virtual GenericLinearAlgebraFactory& factory() const = 0;
};
}
#endif
dolfin::ArrayView
Definition ArrayView.h:32
dolfin::GenericLinearAlgebraFactory
Base class for LinearAlgebra factories.
Definition GenericLinearAlgebraFactory.h:47
dolfin::GenericTensor
A common interface for arbitrary rank tensors.
Definition GenericTensor.h:49
dolfin::GenericTensor::add_local
virtual void add_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)=0
Add block of values using local indices.
dolfin::GenericTensor::add
virtual void add(const double *block, const std::vector< ArrayView< const dolfin::la_index > > &rows)=0
Add block of values using global indices.
dolfin::GenericTensor::add
virtual void add(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)=0
Add block of values using global indices.
dolfin::GenericTensor::rank
virtual std::size_t rank() const =0
Return tensor rank (number of dimensions).
dolfin::GenericTensor::zero
virtual void zero()=0
Set all entries to zero and keep any sparse structure.
dolfin::GenericTensor::factory
virtual GenericLinearAlgebraFactory & factory() const =0
Return linear algebra backend factory.
dolfin::GenericTensor::local_range
virtual std::pair< std::int64_t, std::int64_t > local_range(std::size_t dim) const =0
Return local ownership range.
dolfin::GenericTensor::init
virtual void init(const TensorLayout &tensor_layout)=0
Initialize zero tensor using tensor layout.
dolfin::GenericTensor::empty
virtual bool empty() const =0
Return true if empty.
dolfin::GenericTensor::apply
virtual void apply(std::string mode)=0
Finalize assembly of tensor.
dolfin::GenericTensor::str
virtual std::string str(bool verbose) const =0
Return MPI communicator.
dolfin::GenericTensor::set
virtual void set(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)=0
Set block of values using global indices.
dolfin::GenericTensor::~GenericTensor
virtual ~GenericTensor()
Destructor.
Definition GenericTensor.h:53
dolfin::GenericTensor::add_local
virtual void add_local(const double *block, const std::vector< ArrayView< const dolfin::la_index > > &rows)=0
Add block of values using local indices.
dolfin::GenericTensor::set_local
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.
dolfin::GenericTensor::get
virtual void get(double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows) const =0
Get block of values.
dolfin::GenericTensor::size
virtual std::size_t size(std::size_t dim) const =0
Return size of given dimension.
dolfin::LinearAlgebraObject
Definition LinearAlgebraObject.h:37
dolfin::TensorLayout
Definition TensorLayout.h:42
dolfin
Definition adapt.h:30
dolfin::la_index
PetscInt la_index
Index type for compatibility with linear algebra backend(s).
Definition types.h:32