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

Matthew Knepley knepley at gmail.com
Wed Jul 15 14:13:05 CDT 2015


On Wed, Jul 15, 2015 at 12:04 PM, Raphaël Couturier <
raphael.couturier at univ-fcomte.fr> wrote:

> 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.
>

The code you sent does not make any sense to me. How can KSPSolve(ksp,
NULL, NULL) be meaningful?

Also, can't you get exactly this effect using PCKSP?

 Thanks,

    Matt


> 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
>



-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20150715/4d335223/attachment.html>


More information about the petsc-dev mailing list