[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
Hello,
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);
KSPSetType(ksp,KSPFGMRES);
ierr = KSPSolve(ksp, NULL, NULL); CHKERRQ(ierr);
PetscFunctionReturn(0);
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
/home/couturie/work/petsc-3.6.0/src/vec/vec/interface/rvector.c
[0]PETSC ERROR: #2 VecGetArray3d() line 2411 in
/home/couturie/work/petsc-3.6.0/src/vec/vec/interface/rvector.c
[0]PETSC ERROR: #3 DMDAVecGetArray() line 77 in
/home/couturie/work/petsc-3.6.0/src/dm/impls/da/dagetarray.c
[0]PETSC ERROR: #4 ComputeRHS() line 84 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/examples/tutorials/ex45.c
[0]PETSC ERROR: #5 KSPSetUp() line 277 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c
[0]PETSC ERROR: #6 KSPSolve() line 546 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c
[0]PETSC ERROR: #7 KSPSolve_TEST() line 43 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/impls/gmres/test.c
[0]PETSC ERROR: #8 KSPSolve() line 604 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c
[0]PETSC ERROR: #9 main() line 51 in
/home/couturie/work/petsc-3.6.0/src/ksp/ksp/examples/tutorials/ex45.c
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,
Regards,
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