1#ifndef DUNE_PYTHON_MMESH_DISTANCE
2#define DUNE_PYTHON_MMESH_DISTANCE
10#include <dune/fempy/py/grid/function.hh>
11#include <dune/fempy/py/grid/gridpart.hh>
13#include <dune/python/common/typeregistry.hh>
25 :
public BindableGridFunctionWithSpace<FemPy::GridPart<GV>,
26 Dune::FieldVector<double, 1>> {
28 static constexpr int dim = GridView::dimensionworld;
29 using GridPartType = FemPy::GridPart<GridView>;
31 BindableGridFunctionWithSpace<GridPartType, Dune::FieldVector<double, 1>>;
32 using RangeType =
typename Base::RangeType;
33 static constexpr bool scalar =
true;
35 Distance(
const GridView &gridView)
37 interpolation_(GeometryTypes::simplex(
dim),
38 std::vector<
Dune::FieldVector<double, 1>>()) {}
40 void bind(
const typename Base::EntityType &
entity) {
57 template <
class Po
int>
58 void evaluate(
const Point &x, RangeType &ret)
const {
60 ret = interpolation_.global(xLocal);
63 template <
class Po
int>
64 void jacobian(
const Point &x,
typename Base::JacobianRangeType &ret)
const {
65 const auto geo = this->
entity().geometry();
69 auto t0 = geo.local(p);
75 auto t = geo.local(p);
82 template <
class Po
int>
83 void hessian(
const Point &x,
typename Base::HessianRangeType &ret)
const {
84 ret =
typename Base::HessianRangeType(0);
91template <
class Gr
idView>
92inline static void registerDistance(pybind11::module module,
93 pybind11::class_<Distance<GridView>> cls) {
94 using pybind11::operator
""_a;
96 cls.def(pybind11::init([](
const GridView &gridView) {
97 return Distance<GridView>(gridView);
99 "gridView"_a, pybind11::keep_alive<1, 2>());
101 cls.def_property_readonly(
"scalar",
102 [](Distance<GridView> &self) {
return true; });
104 Dune::FemPy::registerGridFunction(module, cls);
GridView(const Implementation &imp)
const GridPartType & gridPart() const
void evaluate(const DomainType &global, RangeType &result) const
AnalyticalJacobianType & jacobian()
const EntityType & entity() const
AnalyticalHessianType & hessian()
static const Point & coordinate(const Point &x)