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

Reply via email to