[petsc-dev] problem when creating a new ksp that calls another one

Raphaël Couturier raphael.couturier at univ-fcomte.fr
Wed Jul 15 12:04:45 CDT 2015


I want to make a new solver inside petsc.
This solver is based on a 2 stage method. So I have one outer iteration 
and one inner iteration. For the inner iteration I can use gmres or one 
of its variants.
I succeeded to make my algorithm by creating a new ksp (that copies the 
linear system). So I have tried to do that without creating a new ksp. 
It works well with ksp examples that don't use dmda and with snes examples.

So I have tried to make a really simple ksp (only to test) in which I 
simply call another ksp.
Here is the part of the code (and attached is the complete code):
    PetscErrorCode ierr;
    ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
    ierr = KSPSolve(ksp, NULL, NULL); CHKERRQ(ierr);

For example with the ksp example 15:
  time $PETSC_DIR/arch-linux2-c-debug/bin/mpirun  -np 3    ./ex15 -m 200 
-n 200 -ksp_type test  -ksp_rtol 1e-10 -pc_type mg -ksp_monitor
there is no problem, I obtain the good result.

But with the ksp example 45 (based on dmda):
time $PETSC_DIR/arch-linux2-c-debug/bin/mpirun  -np 1    ./ex45 
-ksp_type test  -ksp_rtol 1e-10 -pc_type mg -ksp_monitor

It crashes with that (I didn't change anything in ex45)
[0]PETSC ERROR: Object is in wrong state
[0]PETSC ERROR:  Vec is locked read only, argument # 1
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html 
for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.6.0, Jun, 09, 2015
[0]PETSC ERROR: ./ex45 on a arch-linux2-c-debug named extinction by 
couturie Wed Jul 15 18:45:39 2015
[0]PETSC ERROR: Configure options --download-openmpi --download-hypre 
--download-f2cblaslapack --with-fc=0
[0]PETSC ERROR: #1 VecGetArray() line 1646 in 
[0]PETSC ERROR: #2 VecGetArray3d() line 2411 in 
[0]PETSC ERROR: #3 DMDAVecGetArray() line 77 in 
[0]PETSC ERROR: #4 ComputeRHS() line 84 in 
[0]PETSC ERROR: #5 KSPSetUp() line 277 in 
[0]PETSC ERROR: #6 KSPSolve() line 546 in 
[0]PETSC ERROR: #7 KSPSolve_TEST() line 43 in 
[0]PETSC ERROR: #8 KSPSolve() line 604 in 
[0]PETSC ERROR: #9 main() line 51 in 

I don't understand since many examples in snes are good with my code and 
they use dmda.
Do any of you have an idea of the problem?

Of course, I have a bad solution that consists in creating a new ksp but 
I would like to do without, if possible.

Thank you in advance,

Raphaël Couturier
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.c
Type: text/x-csrc
Size: 1724 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20150715/b6812552/attachment.bin>

More information about the petsc-dev mailing list