[petsc-dev] KSPMonitor and petsc4py

Jed Brown jed at jedbrown.org
Mon Mar 4 00:17:47 CST 2019


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 at 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 <dalcinl at gmail.com> wrote:
>> 
>> I pushed the fix to branch dalcinl/fix-ksp-ex100
>> 
>> On Mon, 4 Mar 2019 at 09:01, Lisandro Dalcin <dalcinl at 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. <bsmith at 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 at 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


More information about the petsc-dev mailing list