12 #ifndef MFEM_SYMMETRICMAT
13 #define MFEM_SYMMETRICMAT
15 #include "../config/config.hpp"
16 #include "../general/globals.hpp"
50 data.
Wrap(d, (s*(s+1))/2,
false);
73 inline double *
Data()
const
74 {
return const_cast<double*
>((
const double*)data);}
89 inline const double &
operator()(
int i,
int j)
const;
92 virtual double &
Elem(
int i,
int j);
95 virtual const double &
Elem(
int i,
int j)
const;
105 const double *
Read(
bool on_dev =
true)
const
149 MFEM_ASSERT(data && i >= 0 && i < height && j >= 0 && j <
width,
"");
152 return data[(j*
height) - (((j-1)*j)/2) + i - j];
156 return data[(i*
height) - (((i-1)*i)/2) + j - i];
162 MFEM_ASSERT(data && i >= 0 && i < height && j >= 0 && j <
width,
"");
165 return data[(j*
height) - (((j-1)*j)/2) + i - j];
169 return data[(i*
height) - (((i-1)*i)/2) + j - i];
bool OwnsData() const
Return the DenseSymmetricMatrix data (host pointer) ownership flag.
double & operator()(int i, int j)
Returns reference to a_{ij}.
double * Write(bool on_dev=true)
Shortcut for mfem::Write(GetMemory(), TotalSize(), on_dev).
void SetSize(int s)
Change the size of the DenseSymmetricMatrix to s x s.
void Delete()
Delete the owned pointers. The Memory is not reset by this method, i.e. it will, generally, not be Empty() after this call.
int Width() const
Get the width (size of input) of the Operator. Synonym with NumCols().
DenseSymmetricMatrix & operator*=(double c)
const double * HostRead() const
Shortcut for mfem::Read(GetMemory(), TotalSize(), false).
T * Write(Memory< T > &mem, int size, bool on_dev=true)
Get a pointer for write access to mem with the mfem::Device's DeviceMemoryClass, if on_dev = true...
Abstract data type for matrix inverse.
virtual void Print(std::ostream &out=mfem::out, int width_=4) const
Prints matrix to stream out.
double * ReadWrite(bool on_dev=true)
Shortcut for mfem::ReadWrite(GetMemory(), TotalSize(), on_dev).
virtual double & Elem(int i, int j)
Returns reference to a_{ij}.
int Capacity() const
Return the size of the allocated memory.
virtual void Mult(const Vector &x, Vector &y) const
Matrix vector multiplication.
double * Data() const
Returns the matrix data array.
void Wrap(T *ptr, int size, bool own)
Wrap an externally allocated host pointer, ptr with the current host memory type returned by MemoryMa...
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
const double * Read(bool on_dev=true) const
Shortcut for mfem::Read( GetMemory(), TotalSize(), on_dev).
Abstract data type matrix.
DenseSymmetricMatrix(double *d, int s)
Construct a DenseSymmetricMatrix using an existing data array.
void UseExternalData(double *d, int s)
Change the data array and the size of the DenseSymmetricMatrix.
bool OwnsHostPtr() const
Return true if the host pointer is owned. Ownership indicates whether the pointer will be deleted by ...
const T * Read(const Memory< T > &mem, int size, bool on_dev=true)
Get a pointer for read access to mem with the mfem::Device's DeviceMemoryClass, if on_dev = true...
void Reset()
Reset the memory to be empty, ensuring that Delete() will be a no-op.
const Memory< double > & GetMemory() const
int height
Dimension of the output / number of rows in the matrix.
T * ReadWrite(Memory< T > &mem, int size, bool on_dev=true)
Get a pointer for read+write access to mem with the mfem::Device's DeviceMemoryClass, if on_dev = true, or the mfem::Device's HostMemoryClass, otherwise.
virtual MatrixInverse * Inverse() const
Returns a pointer to (an approximation) of the matrix inverse.
void Clear()
Delete the matrix data array (if owned) and reset the matrix state.
double * HostReadWrite()
Shortcut for mfem::ReadWrite(GetMemory(), TotalSize(), false).
virtual ~DenseSymmetricMatrix()
Destroys the symmetric matrix.
OutStream out(std::cout)
Global stream used by the library for standard output. Initially it uses the same std::streambuf as s...
double * HostWrite()
Shortcut for mfem::Write(GetMemory(), TotalSize(), false).
DenseSymmetricMatrix & operator=(double c)
Sets the matrix elements equal to constant c.
Memory< double > & GetMemory()
int width
Dimension of the input / number of columns in the matrix.
double * GetData() const
Returns the matrix data array.
void Reset(double *d, int s)
Change the data array and the size of the DenseSymmetricMatrix.