<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 15, 2015 at 12:04 PM, Raphaël Couturier <span dir="ltr"><<a href="mailto:raphael.couturier@univ-fcomte.fr" target="_blank">raphael.couturier@univ-fcomte.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I want to make a new solver inside petsc.<br>
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.<br>
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.<br></blockquote><div><br></div><div>The code you sent does not make any sense to me. How can KSPSolve(ksp, NULL, NULL) be meaningful?</div><div><br></div><div>Also, can't you get exactly this effect using PCKSP?</div><div><br></div><div> Thanks,</div><div><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So I have tried to make a really simple ksp (only to test) in which I simply call another ksp.<br>
Here is the part of the code (and attached is the complete code):<br>
PetscErrorCode ierr;<br>
ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);<br>
KSPSetType(ksp,KSPFGMRES);<br>
ierr = KSPSolve(ksp, NULL, NULL); CHKERRQ(ierr);<br>
PetscFunctionReturn(0);<br>
<br>
<br>
For example with the ksp example 15:<br>
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<br>
there is no problem, I obtain the good result.<br>
<br>
But with the ksp example 45 (based on dmda):<br>
time $PETSC_DIR/arch-linux2-c-debug/bin/mpirun -np 1 ./ex45 -ksp_type test -ksp_rtol 1e-10 -pc_type mg -ksp_monitor<br>
<br>
It crashes with that (I didn't change anything in ex45)<br>
[0]PETSC ERROR: Object is in wrong state<br>
[0]PETSC ERROR: Vec is locked read only, argument # 1<br>
[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
[0]PETSC ERROR: Petsc Release Version 3.6.0, Jun, 09, 2015<br>
[0]PETSC ERROR: ./ex45 on a arch-linux2-c-debug named extinction by couturie Wed Jul 15 18:45:39 2015<br>
[0]PETSC ERROR: Configure options --download-openmpi --download-hypre --download-f2cblaslapack --with-fc=0<br>
[0]PETSC ERROR: #1 VecGetArray() line 1646 in /home/couturie/work/petsc-3.6.0/src/vec/vec/interface/rvector.c<br>
[0]PETSC ERROR: #2 VecGetArray3d() line 2411 in /home/couturie/work/petsc-3.6.0/src/vec/vec/interface/rvector.c<br>
[0]PETSC ERROR: #3 DMDAVecGetArray() line 77 in /home/couturie/work/petsc-3.6.0/src/dm/impls/da/dagetarray.c<br>
[0]PETSC ERROR: #4 ComputeRHS() line 84 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/examples/tutorials/ex45.c<br>
[0]PETSC ERROR: #5 KSPSetUp() line 277 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c<br>
[0]PETSC ERROR: #6 KSPSolve() line 546 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c<br>
[0]PETSC ERROR: #7 KSPSolve_TEST() line 43 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/impls/gmres/test.c<br>
[0]PETSC ERROR: #8 KSPSolve() line 604 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/interface/itfunc.c<br>
[0]PETSC ERROR: #9 main() line 51 in /home/couturie/work/petsc-3.6.0/src/ksp/ksp/examples/tutorials/ex45.c<br>
<br>
<br>
I don't understand since many examples in snes are good with my code and they use dmda.<br>
Do any of you have an idea of the problem?<br>
<br>
Of course, I have a bad solution that consists in creating a new ksp but I would like to do without, if possible.<br>
<br>
Thank you in advance,<br>
Regards,<br>
<br>
Raphaël Couturier<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>