Skip to content

Spaces with float as field.

Robert K requested to merge bugfix/python-space-field into master

In order to create a discrete function space with field other than double a few patches are necessary. In dune-common I had to register Dune::Python::registerFieldVector<float, 1>(module); in _common.cc. Is there a better way? It seems to work automatically with the double version.

After a small bugfix in the python/dune/fem/space/__init__.py creating the space works (included in this MR).

Now the main questions is, how much more patches are needed, and is it worth it? For example, interpoalating fails with a strange error message. This is the sample code:

domain = cartesianDomain([0,0], [1,1], [4, 4])
gridView = yaspGrid( domain )

x = FieldVector([numpy.float32(1)])

fvspc = finiteVolume(gridView, dimRange=1, field="float" )

## the following fails
x = SpatialCoordinate(fvspc)
expr = dot(x, x)
f = fvspc.interpolate(expr, name="f")

Error: File "/home/robertk/work/Dune/stable/demos/float.py", line 17, in f = fvspc.interpolate(expr, name="f") File "/home/robertk/work/Dune/stable/dune-fem/build-cmake/python/dune/ufl/init.py", line 137, in wrapper return func(*args, **kwargs) File "/home/robertk/work/Dune/stable/dune-fem/build-cmake/python/dune/fem/space/init.py", line 230, in spcInterpolate return interpolate(self,*args,**kwargs) File "/home/robertk/work/Dune/stable/dune-fem/build-cmake/python/dune/fem/space/init.py", line 50, in interpolate return function.discreteFunction(space, name=name, expr=expr, **kwargs) File "/home/robertk/work/Dune/stable/dune-fem/build-cmake/python/dune/fem/function/_functions.py", line 140, in discreteFunction df.interpolate(expr) File "/home/robertk/work/Dune/stable/dune-fem/build-cmake/python/dune/fem/space/init.py", line 118, in dfInterpolate return self._interpolate(func) TypeError: _interpolate(): incompatible function arguments. The following argument types are supported: 1. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, value: dune.common._common.FieldVector_float_1) -> None 2. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.VirtualizedGridFunction1) -> None 3. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 1, function> >) -> None 4. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 1, std::function<Dune::FieldVector<double, 1> (Dune::Entity<0, 2, Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const, Dune::YaspEntity> const&, Dune::FieldVector<double, 2> const&)> > >) -> None 5. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 0, function> >) -> None 6. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 0, std::function<double (Dune::Entity<0, 2, Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const, Dune::YaspEntity> const&, Dune::FieldVector<double, 2> const&)> > >) -> None 7. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 0, function> >) -> None 8. (self: dune.generated.femspace_34ac97d95510722692d11017052ed256_9e5cf8710a01f507e5bc2c821cfbfbd4.DiscreteFunction, gridFunction: Dune::Python::SimpleGridFunction<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, Dune::Python::detail::PyGridFunctionEvaluator<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const> >, 0, std::function<double (Dune::Entity<0, 2, Dune::YaspGrid<2, Dune::EquidistantOffsetCoordinates<double, 2> > const, Dune::YaspEntity> const&, Dune::FieldVector<double, 2> const&)> > >) -> None

Merge request reports