Hi Jonathan I've successfully used petsc shell matrices from Python. There is an example of how to do it in demo/poisson2d/poisson2d.py. The example is a little sparse, but it has all the important information. The most important is to define the
def mult(self, mat, x, y): routine inside of a Python class that is given in mat.setPythonContext() command. Hope that helps. Gaetan On Wed, Jul 30, 2014 at 7:29 PM, Jonathan Tu <[email protected]> wrote: > Hi, > > I would like to solve a large linear system. I have a linear operator > that operates on a "state" vector. The linear operator does things like > take the sum of the state elements, take the cross product of the state > with a known vector, and then multiply the state by a large (distributed) > matrix. You could imagine it like this: > > [sum of elements, cross product with other vector, multiplication with > large matrix] = A * x > > Now, I realize it is possible to implement all of this using a large > matrix. After all, these are all linear operations. However, I thought it > might be faster and less error-prone to use some of numpy's built-in > operations, for the sums and cross products, and only use a distributed > matrix for the last part of the output. > > From the PETSc documentation, it seems like a matrix shell would be > perfect for this. I could define my own mult operator that does all of > these things in steps, using built-in numpy functions when appropriate and > direct matrix multiplication when appropriate. However, I cannot figure > out how to do this in petsc4py. I found somewhere online that perhaps > createPython is the way I need to go about this, but I couldn't figure out > the details. > > Any ideas? > > > > Jonathan Tu >
