SERiF 0.0.1a
3+1D Stellar Structure and Evolution
Loading...
Searching...
No Matches
PyMatrix.h
Go to the documentation of this file.
1
9#pragma once
10
11#include "mfem.hpp"
12#include "pybind11/pybind11.h"
13
14namespace serif::pybind {
15
118 class PyMatrix : public mfem::Matrix {
119 public:
120 // Inherit constructors from the base mfem::Matrix class.
121 using mfem::Matrix::Matrix;
122
123 // --- Trampolines for new mfem::Matrix pure virtual methods ---
134 mfem::real_t& Elem(int i, int j) override;
135
144 const mfem::real_t& Elem(int i, int j) const override;
145
153 mfem::MatrixInverse* Inverse() const override;
154
155 // --- Trampoline for new mfem::Matrix regular virtual methods ---
163 void Finalize(int skip_zeros) override;
164
165 // --- Trampolines for inherited mfem::Operator virtual methods ---
166 // These must be repeated here to allow Python classes inheriting from
167 // Matrix to override methods originally from the Operator base class.
168
177 void Mult(const mfem::Vector &x, mfem::Vector &y) const override;
178
186 void MultTranspose(const mfem::Vector &x, mfem::Vector &y) const override;
187
196 void AddMult(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a = 1.0) const override;
197
206 void AddMultTranspose(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a = 1.0) const override;
207
216 mfem::Operator& GetGradient(const mfem::Vector &x) const override;
217
224 void AssembleDiagonal(mfem::Vector &diag) const override;
225
232 const mfem::Operator* GetProlongation() const override;
233
240 const mfem::Operator* GetRestriction() const override;
241
250 void RecoverFEMSolution(const mfem::Vector &X, const mfem::Vector &b, mfem::Vector &x) override;
251 };
252
253} // namespace serif::pybind
A trampoline class for mfem::Matrix.
Definition PyMatrix.h:118
mfem::MatrixInverse * Inverse() const override
Get the inverse of the matrix. Pure virtual in mfem::Matrix. Must be overridden in Python....
Definition PyMatrix.cpp:28
void RecoverFEMSolution(const mfem::Vector &X, const mfem::Vector &b, mfem::Vector &x) override
Recover the FEM solution. Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:126
void Finalize(int skip_zeros) override
Finalize matrix assembly. For sparse matrices, this typically involves finalizing the sparse structur...
Definition PyMatrix.cpp:38
void MultTranspose(const mfem::Vector &x, mfem::Vector &y) const override
Perform the transpose operator action: y = A^T*x. Inherited from mfem::Operator. Can be overridden in...
Definition PyMatrix.cpp:60
void AddMult(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a=1.0) const override
Perform the action y += a*(A*x). Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:70
const mfem::Operator * GetProlongation() const override
Get the prolongation operator. Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:110
const mfem::Operator * GetRestriction() const override
Get the restriction operator. Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:118
void Mult(const mfem::Vector &x, mfem::Vector &y) const override
Perform the operator action: y = A*x. Inherited from mfem::Operator. Can be overridden in Python....
Definition PyMatrix.cpp:49
void AssembleDiagonal(mfem::Vector &diag) const override
Assemble the diagonal of the operator. Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:101
mfem::real_t & Elem(int i, int j) override
Access element (i,j) for read/write. Pure virtual in mfem::Matrix. Must be overridden in Python.
Definition PyMatrix.cpp:8
void AddMultTranspose(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a=1.0) const override
Perform the action y += a*(A^T*x). Inherited from mfem::Operator. Can be overridden in Python.
Definition PyMatrix.cpp:81
mfem::Operator & GetGradient(const mfem::Vector &x) const override
Get the gradient operator (Jacobian) at a given point x. Inherited from mfem::Operator....
Definition PyMatrix.cpp:92
Contains pybind11 helper classes and trampoline classes for interfacing C++ with Python.