dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #19321
Re: Swig director typemaps for ODE solvers
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).
--
Anders
> >
> >>It seems to me that no "directorargout" typemap is needed when returning
> >>arrays, since the numpy arrays are just wrapping the plain c array. Is
> >>this safe?
> >
> >Yes I think so.
> >
> >>How should "const double*" be handled (I used a const_cast<double *>
> >>when I tested it, to avoid compiler errors)? Is data copying needed here?
> >
> >Should not be any problem as Python does not know what const is.
> >
> >Johan
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
--
Anders
Follow ups
References