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. > 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@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp