← Back to team overview

dolfin team mailing list archive

Re: [HG DOLFIN] Typemap fixes for SubDomain::inside(), seems to work now.

 

On Wed, Dec 03, 2008 at 02:57:09PM +0100, Johan Hake wrote:
> On Wednesday 03 December 2008 13:54:47 DOLFIN wrote:
> > One or more new changesets pushed to the primary dolfin repository.
> > A short summary of the last three changesets is included below.
> >
> > changeset:   5221:0e4bbb39f032405bcc4abfab501af49f6beb7b0b
> > tag:         tip
> > user:        Anders Logg <logg@xxxxxxxxx>
> > date:        Wed Dec 03 13:54:05 2008 +0100
> > files:       demo/pde/poisson/python/demo.py dolfin/swig/directors.i
> > dolfin/swig/dolfin_mesh_pre.i description:
> > Typemap fixes for SubDomain::inside(), seems to work now.
> 
> Nice work!
> 
> I suppose you are aware that the director typemap only kicks in for Function 
> and SubDomain as these are the only director classes that includes a double* 
> x, in one of their signatures. If other director classes in a possible future 
> implements that signature, will trigger the typemap and that class need to 
> implement geometric_dimension(). It is a nice way to solve the dimension 
> problem of the numpy array, we just need to be aware of possible fragile side 
> effects.

Yes, that was the main point, to have a common typemap for both.

> I introduced the class specific typemap with Function in mind, which you now 
> have generalized to work for any "double* x" used in directors. We could 
> hypotethize that this could be done for more "double*" typemaps too.
> 
> Most of them are now implemented as a very fragile and greedy numpy typemap 
> that kicks in every where a "double *" is expected. This typemap depends on 
> the user passing the right dimension on the array to the function. This is 
> inherited from the cpp interface where you have natural relationship to size 
> of arrays. But I think that it does not scale to python.
> 
> Optimally we should use a dimension check for each double * typemap that 
> expect a numpy array, where the size of the numpy array is defined from the 
> contex the type map is applied in. E.g. a type map for the Vector.set(), 
> could check the size of the array agains the size of the Vector. The problem 
> with this is to make a specific typemap that we know only kicks in for a 
> particular class. 

I know too little SWIG to have an opinion on this.

> To facilitate this we could change the parameter name in the 
> Vector.set(double* value) to Vector.set(double* vecvalue) and to add the 
> typemap:
> (pseudo code)
> %typemap(in) double* vecvalues {
>   {
>     Check input is numpy array.
>     // This is safe as long as only Vectors implement "double* vecvalues"
>     Check dimension of numpy array agains self->size()
>     Assign the input statement.
>   }
> }

But I'd like to avoid this (choosing special names for the arguments
in C++ just to please SWIG).

> We should also %ignore alot of low level cpp only functions from the 
> especially the la interface. Removing alot of the fragile double* typemaps 
> that now kicks in everywhere.

Agree!

I'm about to get started on renaming dolfin.dolfin --> dolfin.cpp. Let's see how it goes.

-- 
Anders

Attachment: signature.asc
Description: Digital signature


Follow ups

References