By golly you are right, I don't know how we got to the model where each implementation independently sets it to 0. Instead of a universal one. Minimizing code, of course, seems to point to a single location where it is set to zero.
Barry > On Mar 4, 2019, at 12:17 AM, Jed Brown <j...@jedbrown.org> wrote: > > I think Lisandro's point is that KSPSolve does not set ksp->its = 0. > That happens in each KSPSolve_XXX. The Python implementation of a KSP > forgot to do that, but perhaps it should happen in KSPSolve. > > "Smith, Barry F. via petsc-dev" <petsc-dev@mcs.anl.gov> writes: > >> I'm a bit confused. Since the C KSPSolve() always resets the counter to >> zero I don't understand why the Python call (which presumably calls the C >> version doesn't get it reset). Or does the python version not call the C >> version. >> >> I'm fine with either solution I guess but I'd like to understand why the C >> behavior doesn't just automatically happen with the Python. >> >> Barry >> >> >>> On Mar 4, 2019, at 12:07 AM, Lisandro Dalcin <dalc...@gmail.com> wrote: >>> >>> I pushed the fix to branch dalcinl/fix-ksp-ex100 >>> >>> On Mon, 4 Mar 2019 at 09:01, Lisandro Dalcin <dalc...@gmail.com> wrote: >>> Well, this is just because the Python code implementing KSPSolve does not >>> reset the iteration counter to zero. This was an oversight on my part when >>> I wrote that code ages ago. >>> >>> Barry, I'm wondering whether this should be done at the interface rather >>> than implementation level? If you do not want to change things in core KSP >>> (and then maybe SNES, etc), the the following patch should fix things. >>> >>> >>> diff --git a/src/ksp/ksp/examples/tutorials/example100.py >>> b/src/ksp/ksp/examples/tutorials/example100.py >>> index ef085522bf..7ad03ec194 100644 >>> --- a/src/ksp/ksp/examples/tutorials/example100.py >>> +++ b/src/ksp/ksp/examples/tutorials/example100.py >>> @@ -119,11 +119,13 @@ class ConjGrad(object): >>> >>> def solve(self, ksp, b, x): >>> LOG('ConjGrad.solve()') >>> + ksp.setIterationNumber(0) >>> A, P = get_op_pc(ksp, transpose=False) >>> pcg(ksp, A, P, b, x, *self.work) >>> >>> def solveTranspose(self, ksp, b, x): >>> LOG('ConjGrad.solveTranspose()') >>> + ksp.setIterationNumber(0) >>> A, P = get_op_pc(ksp, transpose=True) >>> pcg(ksp, A, P, b, x, *self.work) >>> >>> >>> On Mon, 4 Mar 2019 at 06:15, Smith, Barry F. <bsm...@mcs.anl.gov> wrote: >>> >>> Pierre, >>> >>> I can confirm the problem. >>> >>> Lisandro, >>> >>> Could you please take a look at this? I have no explanation for why >>> this would happen. >>> >>> Barry >>> >>> >>> >>>> On Feb 25, 2019, at 1:21 PM, Pierre Jolivet via petsc-dev >>>> <petsc-dev@mcs.anl.gov> wrote: >>>> >>>> I’m not sure this is the expected behavior. Is it? >>>> $ git diff ex100.py >>>> diff --git a/src/ksp/ksp/examples/tutorials/ex100.py >>>> b/src/ksp/ksp/examples/tutorials/ex100.py >>>> index dbb3f8e012..051637ce1d 100644 >>>> --- a/src/ksp/ksp/examples/tutorials/ex100.py >>>> +++ b/src/ksp/ksp/examples/tutorials/ex100.py >>>> @@ -29,6 +29,7 @@ def RunTest(): >>>> ksp.setOperators(A, A) >>>> ksp.setFromOptions() >>>> ksp.solve(b, x) >>>> + ksp.solve(b, x) >>>> >>>> r = b.duplicate() >>>> A.mult(x, r) >>>> >>>> $ mpirun -np 8 python ./ex100.py -ksp_converged_reason -ksp_monitor >>>> 0 KSP Residual norm 5.101520253035e-04 >>>> 1 KSP Residual norm 1.168905135944e-03 >>>> [..] >>>> 12 KSP Residual norm 5.101520253035e-05 >>>> 13 KSP Residual norm 7.504522604366e-20 >>>> Linear solve converged due to CONVERGED_RTOL iterations 13 >>>> 13 KSP Residual norm 5.101520253035e-04 >>>> 14 KSP Residual norm 1.168905135944e-03 >>>> [..] >>>> 25 KSP Residual norm 5.101520253035e-05 >>>> 26 KSP Residual norm 7.504522604366e-20 >>>> Linear solve converged due to CONVERGED_RTOL iterations 26 >>>> >>>> Shouldn’t the iterate number be reset to 0 for the 2nd KSPSolve? >>>> >>>> Thanks, >>>> Pierre >>> >>> >>> >>> -- >>> Lisandro Dalcin >>> ============ >>> Research Scientist >>> Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) >>> Extreme Computing Research Center (ECRC) >>> King Abdullah University of Science and Technology (KAUST) >>> http://ecrc.kaust.edu.sa/ >>> >>> 4700 King Abdullah University of Science and Technology >>> al-Khawarizmi Bldg (Bldg 1), Office # 0109 >>> Thuwal 23955-6900, Kingdom of Saudi Arabia >>> http://www.kaust.edu.sa >>> >>> Office Phone: +966 12 808-0459 >>> >>> >>> -- >>> Lisandro Dalcin >>> ============ >>> Research Scientist >>> Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) >>> Extreme Computing Research Center (ECRC) >>> King Abdullah University of Science and Technology (KAUST) >>> http://ecrc.kaust.edu.sa/ >>> >>> 4700 King Abdullah University of Science and Technology >>> al-Khawarizmi Bldg (Bldg 1), Office # 0109 >>> Thuwal 23955-6900, Kingdom of Saudi Arabia >>> http://www.kaust.edu.sa >>> >>> Office Phone: +966 12 808-0459