version 0.4.2
registerferequirements.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2021-2024 The Ikarus Developers mueller@ibb.uni-stuttgart.de
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
6#include <dune/python/pybind11/pybind11.h>
7
9
10namespace Ikarus::Python {
11
12template <class FE, class... options>
13void registerFERequirement(pybind11::handle scope, pybind11::class_<FE, options...> cls) {
14 using FERequirements = typename FE::Requirement;
15 using SolutionVectorType = typename FERequirements::SolutionVectorType;
16 using ParameterType = typename FERequirements::ParameterType;
17
18 using ParameterType = typename FERequirements::ParameterType;
19 using namespace pybind11::literals;
20
21 cls.def(
22 "createRequirement", [](pybind11::object /* self */) { return FERequirements(); },
23 pybind11::return_value_policy::copy);
24
25 auto includes = Dune::Python::IncludeFiles{"ikarus/finiteelements/ferequirements.hh"};
26 auto [lv, isNotRegistered] = Dune::Python::insertClass<FERequirements>(
27 scope, "FERequirements", Dune::Python::GenerateTypeName(Dune::className<FERequirements>()), includes);
28 if (isNotRegistered) {
29 lv.def(pybind11::init());
30 lv.def(pybind11::init<SolutionVectorType&, ParameterType&>());
31
32 lv.def(
33 "insertGlobalSolution",
34 [](FERequirements& self, SolutionVectorType solVec) { self.insertGlobalSolution(solVec); },
35 "solutionVector"_a.noconvert());
36 lv.def(
37 "globalSolution", [](FERequirements& self) { return self.globalSolution(); },
38 pybind11::return_value_policy::reference_internal);
39 lv.def(
40 "insertParameter", [](FERequirements& self, ValueWrapper<double>& parVal) { self.insertParameter(parVal.val); },
41 pybind11::keep_alive<1, 2>(), "parameterValue"_a.noconvert());
42
43 lv.def("parameter", [](const FERequirements& self) { return self.parameter(); });
44 }
45}
46} // namespace Ikarus::Python
void init(int argc, char **argv, bool enableFileLogger=true)
Initializes the Ikarus framework.
Definition: init.hh:82
Definition: flatassembler.hh:21
void registerFERequirement(pybind11::handle scope, pybind11::class_< FE, options... > cls)
Definition: registerferequirements.hh:13
Class representing the requirements for finite element calculations.
Definition: ferequirements.hh:252
SV SolutionVectorType
Definition: ferequirements.hh:268
PM ParameterType
Definition: ferequirements.hh:269
SolutionVectorReturnType globalSolution()
Get the global solution vector.
Definition: ferequirements.hh:308
FERequirements & insertParameter(ParameterInputType val)
Insert a parameter into the requirements.
Definition: ferequirements.hh:284
FERequirements & insertGlobalSolution(SolutionVectorInputType solVec)
Insert a global solution vector into the requirements.
Definition: ferequirements.hh:297
PMHelper::ConstReturnType parameter() const
Get the parameter value.
Definition: ferequirements.hh:325
RequirementType< requirementDetected >::type Requirement
Definition: mixin.hh:89
Definition: valuewrapper.hh:8
T val
Definition: valuewrapper.hh:9