← Back to team overview

dolfin team mailing list archive

Re: Swig director typemaps for ODE solvers

 

On Tue, Aug 24, 2010 at 11:03:58AM +0200, Benjamin Kehlet wrote:
> Anders Logg wrote:
> >On Tue, Aug 24, 2010 at 01:25:56AM +0200, Benjamin Kehlet wrote:
> >>Johan Hake wrote:
> >>>On Monday August 23 2010 15:59:15 Benjamin Kehlet wrote:
> >>>>Hello!
> >>>>
> >>>>I have been trying to get the python wrappes of the ODE solvers in place
> >>>>again and learn more about Swig. The wrappers have been broken since the
> >>>>change from uBLASVector to real*.
> >>>>
> >>>>Dolfin needs to call functions implemented on the python side, so
> >>>>directors are needed. This simple typemap seems to do the job:
> >>>>
> >>>>%typemap(directorin) double* ODE_ARGIN
> >>>>{
> >>>>  // Get the length of the arrays
> >>>>  int n = size();
> >>>>  $input = PyArray_SimpleNewFromData(1, &n, NPY_DOUBLE, $1_name);
> >>>>}
> >>>>
> >>>>Some questions from a Swig newbie: Is this the preferred way of doing this?
> >>>>Note that the typemap have to call size() (a member function of class
> >>>>ODE) to get the length of the array, so I guess it is not possible to
> >>>>use a more generic typemap.
> >>>This is why we instroduced the dolfin::Array class. So
> >>>speciallized typemaps like this could be avoided.
> >>>
> >>>Is there any way you can port the ODE interface to using
> >>>dolfin::Array instead? Then most of the typemaps should be inplace
> >>>already.
> >>That shouldn't be too complicated. Or was there a reason for
> >>changing to plain c arrays (and not dolfin::Array) in the first
> >>place? Anders?
> >
> >The reason was that we couldn't get uBLAS to use GMP types so we
> >needed a more basic container like foo*, but the Array class would
> >work fine for this. It would also provide a nicer interface for the
> >user (since u etc will have a size).
> >
>
> Should the functionality in common/real.h (add, sub, axpy, inner
> etc.) be moved into dolfin::Array then or do you want to keep
> dolfin::Array as minimal as possible?

It should not be mixed with the real.h functionality.

Array is a general container that can also hold ints, bools etc.

--
Anders



References