11#include <dune/python/common/typeregistry.hh>
12#include <dune/python/pybind11/eigen.h>
13#include <dune/python/pybind11/pybind11.h>
14#include <dune/python/pybind11/stl.h>
15#include <dune/python/pybind11/stl_bind.h>
23#define MAKE_ASSEMBLER_REGISTERY_FUNCTION(name) \
43 template <class Assembler, class... options> \
44 void register##name(pybind11::handle scope, pybind11::class_<Assembler, options...> cls) { \
45 using pybind11::operator""_a; \
46 using FEContainer = typename Assembler::FEContainer; \
47 using Basis = typename Assembler::Basis; \
48 using DirichletValuesType = typename Assembler::DirichletValuesType; \
49 using AffordanceCollectionType = typename Assembler::AffordanceCollectionType; \
50 using FERequirementType = typename Assembler::FERequirement; \
51 pybind11::module m = pybind11::module::import("ikarus"); \
52 cls.def(pybind11::init([](const pybind11::list& fes, const DirichletValuesType& dirichletValues) { \
56 FEContainer fesV = fes.template cast<FEContainer>(); \
57 return new Assembler(std::move(fesV), dirichletValues); \
59 pybind11::keep_alive<1, 3>()); \
66 [](Assembler& self, const FERequirementType& req, Ikarus::MatrixAffordance affordance, \
67 Ikarus::DBCOption dbcOption) -> std::remove_cvref_t<decltype(self.matrix(req, affordance))> { \
68 return self.matrix(req, affordance, dbcOption); \
70 pybind11::return_value_policy::copy); \
73 "matrix", [](Assembler& self) -> std::remove_cvref_t<decltype(self.matrix())> { return self.matrix(); }, \
74 pybind11::return_value_policy::copy); \
78 [](Assembler& self, Ikarus::DBCOption dbcOption) -> std::remove_cvref_t<decltype(self.matrix(dbcOption))> { \
79 return self.matrix(dbcOption); \
81 pybind11::return_value_policy::copy); \
85 [](Assembler& self, const FERequirementType& req, Ikarus::VectorAffordance affordance, \
86 Ikarus::DBCOption dbcOption) { return self.vector(req, affordance, dbcOption); }, \
87 pybind11::return_value_policy::reference); \
89 cls.def("vector", [](Assembler& self) { return self.vector(); }, pybind11::return_value_policy::reference); \
92 "vector", [](Assembler& self, Ikarus::DBCOption dbcOption) { return self.vector(dbcOption); }, \
93 pybind11::return_value_policy::reference); \
97 [](Assembler& self, const FERequirementType& req, Ikarus::ScalarAffordance affordance) { \
98 return self.scalar(req, affordance); \
100 pybind11::return_value_policy::copy); \
102 cls.def("scalar", [](Assembler& self) { return self.scalar(); }, pybind11::return_value_policy::copy); \
105 "createFullVector", \
106 [](Assembler& self, Eigen::Ref<const Eigen::VectorXd> redVec) { return self.createFullVector(redVec); }, \
107 pybind11::return_value_policy::move); \
108 cls.def("reducedSize", [](Assembler& self) { return self.reducedSize(); }, pybind11::return_value_policy::copy); \
109 cls.def("bind", [](Assembler& self, const FERequirementType& req, AffordanceCollectionType affordance, \
110 DBCOption dbcOption = DBCOption::Full) { return self.bind(req, affordance, dbcOption); }); \
111 cls.def("bind", [](Assembler& self, const FERequirementType& req) { return self.bind(req); }); \
112 cls.def("bind", [](Assembler& self, const AffordanceCollectionType affordance) { return self.bind(affordance); }); \
113 cls.def("bind", [](Assembler& self, const DBCOption dbcOption) { return self.bind(dbcOption); }); \
114 cls.def("bound", &Assembler::bound); \
115 cls.def("boundToRequirement", &Assembler::boundToRequirement); \
116 cls.def("boundToAffordanceCollection", &Assembler::boundToAffordanceCollection); \
117 cls.def("boundToDBCOption", &Assembler::boundToDBCOption); \
118 cls.def("requirement", &Assembler::requirement); \
119 cls.def("affordanceCollection", &Assembler::affordanceCollection); \
120 cls.def("dBCOption", &Assembler::dBCOption); \
#define MAKE_ASSEMBLER_REGISTERY_FUNCTION(name)
Definition: flatassembler.hh:23
Definition of the LinearElastic class for finite element mechanics computations.
Definition: flatassembler.hh:21
SparseFlatAssembler assembles matrix quantities using a flat basis Indexing strategy....
Definition: simpleassemblers.hh:426
DenseFlatAssembler assembles matrix quantities using a flat basis Indexing strategy....
Definition: simpleassemblers.hh:553
Wrapper around Dune-functions global basis.