[petsc-users] Issues with the Variational Inequality solver

Justin Chang jychang48 at gmail.com
Wed Dec 2 13:56:46 CST 2015


Barry,

So I do not believe there is any problem with the ISEqual() per se, because
what I am doing is I am solving 5151 different VI problem using the same
SNES/KSP/PC/Mat. That is, I am not "resetting" these data structures once I
am done with one problem and move on to the next. If I ran each case
individually, I get no error; the error comes when I run these problems
sequentially without resetting the SNES after each problem.

I haven't run the C debugger or done any of that yet, but could this be a
plausible explanation for my error? Originally I was thinking about
creating/destroying SNES for each problem but I was wondering if that might
affect performance.

Thanks,
Justin

On Tue, Dec 1, 2015 at 5:58 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>
> > On Dec 1, 2015, at 5:13 PM, Justin Chang <jychang48 at gmail.com> wrote:
> >
> > Hi all,
> >
> > So I am running into some issues with the SNESVINEWTONRSLS solver. I
> originally had this done in firedrake, but have ported it to petsc4py.
> Attached is the code as well as the two required input files.
> >
> > First issue, when I run the program like this:
> >
> > python testVI.py psiA_1 psiB_1 2 1
> >
> > I get this error:
> >
> > Traceback (most recent call last):
> >   File "testVI.py", line 103, in <module>
> >     snes.solve(None,X)
> >   File "PETSc/SNES.pyx", line 520, in petsc4py.PETSc.SNES.solve
> (src/petsc4py.PETSc.c:169677)
> > petsc4py.PETSc.Error: error code 60
> > [0] SNESSolve() line 3992 in
> /Users/justin/Software/petsc/src/snes/interface/snes.c
> > [0] SNESSolve_VINEWTONRSLS() line 507 in
> /Users/justin/Software/petsc/src/snes/impls/vi/rs/virs.c
> > [0] KSPSetOperators() line 544 in
> /Users/justin/Software/petsc/src/ksp/ksp/interface/itcreate.c
> > [0] PCSetOperators() line 1170 in
> /Users/justin/Software/petsc/src/ksp/pc/interface/precon.c
> > [0] Nonconforming object sizes
> > [0] Cannot change local size of Amat after use old sizes 2 2 new sizes 3
> 3
> >
> > No such error occurred when this was ran in firedrake, though I did
> notice that -snes_view did indicate that some of the iterations had 2x2
> instead of 3x3 matrices. Why is this happening? I thought I should be
> solving a 3x3 system each time so why would a 2x2 ever arise?
>
>   Justin,
>
>    For VI's the rs (reduced space solver) solves the linearized problem on
> a subset of the variables, thus the size of the linear system may change
> from iteration of Newton to the next iteration of Newton.
>
>    In the rs solver we have
>
>     ierr = ISEqual(vi->IS_inact_prev,vi->IS_inact,&isequal);CHKERRQ(ierr);
>     if (!isequal) {
>       ierr =
> SNESVIResetPCandKSP(snes,jac_inact_inact,prejac_inact_inact);CHKERRQ(ierr);
>     }
>
> so what __should__ happen is that if the size of the reduced space changes
> KSPReset() is called on the KSP allowing the KSP/PC to handle a different
> sized system then before. But why doesn't it work? Why isn't KSPReset()
> called? Somehow the ISEqual is not working.
>
>    Can you run the C debugger and put a breakpoint in the ISEqual() then
> check the inputs and see if it is correctly setting the isequal to false
> when it should?  Each time the vi->IS_inact changes the KSPReset() should
> get called. You can check this in the debugger.
>
>    Barry
>
> >
> > More issues to come :)
> >
> > Thanks,
> > Justin
> > <testVI.py><psiA_1><psiB_1>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151202/5adcc624/attachment-0001.html>


More information about the petsc-users mailing list