SERiF 0.0.1a
3+1D Stellar Structure and Evolution
Loading...
Searching...
No Matches
PyOperator.cpp
Go to the documentation of this file.
2#include "mfem.hpp"
3
4namespace serif::pybind {
5
6 // --- Pure virtual function implementation ---
7 // This override is mandatory for the trampoline class to be concrete.
8 void PyOperator::Mult(const mfem::Vector &x, mfem::Vector &y) const {
9 PYBIND11_OVERRIDE_PURE(
10 void, /* Return type */
11 mfem::Operator, /* C++ base class */
12 Mult, /* C++ function name */
13 x, /* Argument 1 */
14 y /* Argument 2 */
15 );
16 }
17
18 // --- Regular virtual function implementations ---
19 // These overrides allow Python subclasses to optionally provide their own
20 // implementation for these methods. If they don't, the default C++
21 // implementation from mfem::Operator will be called.
22
23 void PyOperator::MultTranspose(const mfem::Vector &x, mfem::Vector &y) const {
24 PYBIND11_OVERRIDE(
25 void,
26 mfem::Operator,
28 x,
29 y
30 );
31 }
32
33 void PyOperator::AddMult(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a) const {
34 PYBIND11_OVERRIDE(
35 void,
36 mfem::Operator,
37 AddMult,
38 x,
39 y,
40 a
41 );
42 }
43
44 void PyOperator::AddMultTranspose(const mfem::Vector &x, mfem::Vector &y, const mfem::real_t a) const {
45 PYBIND11_OVERRIDE(
46 void,
47 mfem::Operator,
49 x,
50 y,
51 a
52 );
53 }
54
55 mfem::Operator& PyOperator::GetGradient(const mfem::Vector &x) const {
56 PYBIND11_OVERRIDE(
57 mfem::Operator&,
58 mfem::Operator,
60 x
61 );
62 }
63
64 void PyOperator::AssembleDiagonal(mfem::Vector &diag) const {
65 PYBIND11_OVERRIDE(
66 void,
67 mfem::Operator,
69 diag
70 );
71 }
72
73 const mfem::Operator* PyOperator::GetProlongation() const {
74 PYBIND11_OVERRIDE(
75 const mfem::Operator*,
76 mfem::Operator,
78 );
79 }
80
81 const mfem::Operator* PyOperator::GetRestriction() const {
82 PYBIND11_OVERRIDE(
83 const mfem::Operator*,
84 mfem::Operator,
86 );
87 }
88
89 void PyOperator::RecoverFEMSolution(const mfem::Vector &X, const mfem::Vector &b, mfem::Vector &x) {
90 PYBIND11_OVERRIDE(
91 void,
92 mfem::Operator,
94 X,
95 b,
96 x
97 );
98 }
99
100} // namespace serif::pybind::mfem
Defines a pybind11 trampoline class for mfem::Operator.
const mfem::Operator * GetRestriction() const override
Get the restriction operator.
Operator & GetGradient(const mfem::Vector &x) const override
Get the gradient operator (Jacobian) at a given point x.
void AssembleDiagonal(mfem::Vector &diag) const override
Assemble the diagonal of the operator.
void Mult(const mfem::Vector &x, mfem::Vector &y) const override
Perform the operator action: y = A*x.
Definition PyOperator.cpp:8
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).
void MultTranspose(const mfem::Vector &x, mfem::Vector &y) const override
Perform the transpose operator action: y = A^T*x.
void RecoverFEMSolution(const mfem::Vector &X, const mfem::Vector &b, mfem::Vector &x) override
Recover the FEM solution.
const mfem::Operator * GetProlongation() const override
Get the prolongation operator.
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).
Contains pybind11 helper classes and trampoline classes for interfacing C++ with Python.