[petsc-users] Custom Matrix- and Vector-Class
Markus Mayr
markus.mayr at outlook.com
Fri Sep 21 08:17:13 CDT 2012
Dear list,
I would like to use PETSc's linear solver for matrix free methods, but I think that I need to create a custom vector type in order to write an efficient matrix-vector multiplication. First, this is my problem:
I would like to solve a system of linear equations
/ A | B \ / x \ / a \
| -----+----- | * | --- | = | --- |
\ C | D / \ y / \ b /
The problem is that only A is a PETSc matrix. For the other matrices, an external library provides a matrix-vector multiplication for PETSc vectors. I would like to use GMRES to solve this system.
If I would like to use GMRES, I have to provide a matrix-vector multiplication for the whole matrix, right?. A, B, C, D and all vectors involved are distributed across the same set of processes. This is why I think it would be inefficient to use PETSc's MPIVec vector class. Is it? Or can I obtain the required parts of the vector efficiently, i.e. with little communication operations involved?
I think, it would be the best solution, to write a vector class myself, that contains an array of PETSc vector. I took a look at the PETSc source code and it does not look too hard, but first:
1.) I wanted to get some feedback, because I am a beginner with PETSc and there might be a way to do this in PETSc more easily.
2.) I do not know which functions I have to implement in order to get GMRES to work. Is there a comprehensive list or something? Or does PETSc return meaningful error messages about missing functions?
3.) If you do not mind, could you give a short example how new vector classes are created once the vector operations struct is created? I could not find this yet.
Thanks for your help!
Best regards,
Markus Mayr
More information about the petsc-users
mailing list