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

Reply via email to