Vectorized callback seen from Python

class Grid2Deff(Grid2D):
    ...
    def ext_gridloop_vec(self, f):
        """Call extension, then do a vectorized callback to Python."""
        lx = size(self.xcoor);  ly = size(self.ycoor)
        a = zeros((lx,ly))
        a = ext_gridloop.gridloop_vec(a, self.xcoor, self.ycoor, f)
        return a

def myfunc(x, y):
    return sin(x*y) + 8*x

def myfuncf77(a, xcoor, ycoor, nx, ny):
    """Vectorized function to be called from extension module."""
    x = xcoor[:,NewAxis];  y = ycoor[NewAxis,:]
    a[:,:] = myfunc(x, y)  # in-place modification of a

g = Grid2Deff(dx=0.2, dy=0.1)
a = g.ext_gridloop_vec(myfuncf77)

previousnexttable of contents