diff --git a/__init__.py b/__init__.py index c3d7a14b2b75bc5cc5e808e1ccfe6d61b4112ce6..de7d10968e5919b169e75f43f8b62cdfc90ebdc9 100644 --- a/__init__.py +++ b/__init__.py @@ -1 +1,3 @@ +from .. import common + from ._istl import * diff --git a/_istl.cc b/_istl.cc index eaf6418eda715998f38cb89ad9653e1b80b57baa..0d6f3d5ac9e70dde5d6b5f9c90596e8c0f2492f9 100644 --- a/_istl.cc +++ b/_istl.cc @@ -9,17 +9,34 @@ #include <dune/corepy/istl/bcrsmatrix.hh> #include <dune/corepy/istl/bvector.hh> +#include <dune/corepy/istl/operators.hh> +#include <dune/corepy/istl/preconditioners.hh> +#include <dune/corepy/istl/solvers.hh> #include <dune/corepy/pybind11/pybind11.h> PYBIND11_MODULE( _istl, module ) { - Dune::CorePy::registerBCRSMatrix< Dune::BCRSMatrix< Dune::FieldMatrix< double, 1, 1 > > >( module ); - Dune::CorePy::registerBlockVector< Dune::BlockVector< Dune::FieldVector< double, 1 > > >( module ); - // export solver category pybind11::enum_< Dune::SolverCategory::Category > solverCategory( module, "SolverCategory" ); solverCategory.value( "sequential", Dune::SolverCategory::sequential ); solverCategory.value( "nonoverlapping", Dune::SolverCategory::nonoverlapping ); solverCategory.value( "overlapping", Dune::SolverCategory::overlapping ); + + // export block vector with block size 1 + typedef Dune::BlockVector< Dune::FieldVector< double, 1 > > Vector; + Dune::CorePy::registerBlockVector< Vector >( module ); + + // export linear operator, preconditioners, and solvers for blockvectors with block size 1 + pybind11::class_< Dune::LinearOperator< Vector, Vector > > clsLinearOperator( module, "LinearOperator" ); + Dune::CorePy::registerLinearOperator( clsLinearOperator ); + Dune::CorePy::registerPreconditioners( module, clsLinearOperator ); + Dune::CorePy::registerSolvers( module, clsLinearOperator ); + + // export BCRS matrix with block size 1x1 + typedef Dune::BCRSMatrix< Dune::FieldMatrix< double, 1, 1 > > Matrix; + Dune::CorePy::registerBCRSMatrix< Matrix >( module ); + + // export matrix-based preconditioners for BCRS matrix with block size 1x1 + Dune::CorePy::registerMatrixPreconditioners< Matrix >( module, clsLinearOperator ); }