[petsc-users] Question about using MatSNESMFWPSetComputeNormU

Matthew Knepley knepley at gmail.com
Thu Aug 18 22:31:47 CDT 2016


On Thu, Aug 18, 2016 at 10:28 PM, 최경준 <kyungjun.choi92 at gmail.com> wrote:

> Dear Matt.
>
> I didn't use the command line options because it looked not working.
>
> I called SNESSetFromOptions(snes, ier) in my source code,
>
> but options like -snes_mf or -snes_monitor doesn't look  working.
>

I would recommend starting with an example, where these options clearly
work (I use SNES ex5
with these options in my class). Then slowly change that example until you
have what you want.

    Matt


> Is there anything that I should consider more?
>
>
> 2016-08-19 4:47 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>
>> On Thu, Aug 18, 2016 at 2:44 PM, 최경준 <kyungjun.choi92 at gmail.com> wrote:
>>
>>> Is there a part that you considered this as finite-difference
>>> approximation?
>>> I thought I used matrix-free method with MatCreateSNESMF() function
>>>
>>
>> You did not tell the SNES to use a MF Jacobian, you just made a Mat
>> object. This is why
>>     we encourage people to use the command line. Everything is setup
>> correctly and in order.
>>     Why would you choose not to. This creates long rounds of email.
>>
>>    Matt
>>
>>
>>> Also I used
>>> - call PCSetType(pc, PCNONE, ier)  --> so the pc type shows 'none' at
>>> the log
>>>
>>>
>>> I didn't use any of command line options.
>>>
>>>
>>> Kyungjun
>>>
>>> 2016-08-19 4:27 GMT+09:00 Barry Smith <bsmith at mcs.anl.gov>:
>>>
>>>>
>>>>    You can't use that Jacobian function SNESComputeJacobianDefault
>>>> with matrix free, it tries to compute the matrix entries and stick them
>>>> into the matrix. You can use MatMFFDComputeJacobian
>>>>
>>>> > On Aug 18, 2016, at 2:03 PM, 최경준 <kyungjun.choi92 at gmail.com> wrote:
>>>> >
>>>> > I got stuck at FormJacobian stage.
>>>> >
>>>> > - call SNESComputeJacobianDefault(snes, v, J, pJ, FormResidual,
>>>> ier)  --> J & pJ are same with A matrix-free matrix (input argument)
>>>> >
>>>> >
>>>> >
>>>> > with these kind of messages..
>>>> >
>>>> > [0]PETSC ERROR: No support for this operation for this object type
>>>> > [0]PETSC ERROR: Mat type mffd
>>>> >
>>>> >
>>>> >
>>>> > Guess it's because I used A matrix-free matrix (which is mffd type)
>>>> into pJ position.
>>>> >
>>>> > Is there any solution for this kind of situation?
>>>> >
>>>> >
>>>> > 2016-08-19 2:05 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>>>> > On Thu, Aug 18, 2016 at 12:04 PM, 최경준 <kyungjun.choi92 at gmail.com>
>>>> wrote:
>>>> > Then in order not to use preconditioner,
>>>> >
>>>> > is it ok if I just put A matrix-free matrix (made from
>>>> MatCreateSNESMF()) into the place where preA should be?
>>>> >
>>>> > Yes, but again the solve will likely perform very poorly.
>>>> >
>>>> >   Thanks,
>>>> >
>>>> >      Matt
>>>> >
>>>> > The flow goes like this
>>>> > - call SNESCreate
>>>> > - call SNESSetFunction(snes, r, FormResidual, userctx, ier)
>>>> > - call MatCreateSNESMF(snes, A, ier)
>>>> > - call SNESSetJacobian(snes, A, A, FormJacobian, userctx, ier)
>>>> > - call SNESSetFromOptions()
>>>> >
>>>> > - call SNESGetKSP(snes, ksp, ier)
>>>> > - call KSPSetType(ksp, KSPGMRES, ier)
>>>> > - call KSPGetPC(ksp, pc, ier)
>>>> > - call PCSetType(pc, PCNONE, ier)
>>>> > - call KSPGMRESSetRestart(ksp, 30, ier)
>>>> >
>>>> > - call SNESSolve()
>>>> > .
>>>> > .
>>>> >
>>>> >
>>>> > and inside the FormJacobian routine
>>>> > - call SNESComputeJacobian(snes, v, J, pJ, userctx, ier)  --> J and
>>>> pJ must be pointed with A and A.
>>>> >
>>>> >
>>>> >
>>>> > Thank you again,
>>>> >
>>>> > Kyungjun.
>>>> >
>>>> > 2016-08-19 1:44 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>>>> > On Thu, Aug 18, 2016 at 11:42 AM, 최경준 <kyungjun.choi92 at gmail.com>
>>>> wrote:
>>>> > Thanks for your helpful answers.
>>>> >
>>>> > Here's another question...
>>>> >
>>>> > As I read some example PETSc codes, I noticed that there should be a
>>>> preconditioning matrix (e.g. approx. jacobian matrix) when using
>>>> MatCreateSNESMF().
>>>> >
>>>> > I mean,
>>>> > after calling MatCreateSNESMF(snes, A, ier),
>>>> > there should be another matrix preA(preconditioning matrix) to use
>>>> SNESSetJacobian(snes, A, preA, FormJacobian, ctx, ier).
>>>> >
>>>> >
>>>> > 1) Is there any way that I can use matrix-free method without making
>>>> preconditioning matrix?
>>>> >
>>>> > Don't use a preconditioner. As you might expect, this does not often
>>>> work out well.
>>>> >
>>>> > 2) I have a reference code, and the code adopts
>>>> >
>>>> > MatFDColoringCreate()
>>>> > and finally uses
>>>> > SNESComputeJacobianDefaultColor() at FormJacobian stage.
>>>> >
>>>> > But I can't see the inside of the fdcolor and I'm curious of this
>>>> mechanism. Can you explain this very briefly or tell me an example code
>>>> that I can refer to. ( I think none of PETSc example code is using
>>>> fdcolor..)
>>>> >
>>>> > This is the default, so there is no need for all that code. We use
>>>> naive graph 2-coloring. I think there might be a review article by Alex
>>>> Pothen about that.
>>>> >
>>>> >   Thanks,
>>>> >
>>>> >     Matt
>>>> >
>>>> >
>>>> > Best,
>>>> >
>>>> > Kyungjun.
>>>> >
>>>> > 2016-08-19 0:54 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>>>> > On Thu, Aug 18, 2016 at 10:39 AM, 최경준 <kyungjun.choi92 at gmail.com>
>>>> wrote:
>>>> > 1) I wanna know the difference between applying option with command
>>>> line and within source code.
>>>> > From my experience, command line option helps set other default
>>>> settings that I didn't applied, I guess.
>>>> >
>>>> > The command line arguments are applied to an object when
>>>> *SetFromOptions() is called, so in this case
>>>> > you want SNESSetFromOptions() on the solver. There should be no
>>>> difference from using the API.
>>>> >
>>>> > 2) I made a matrix-free matrix with MatCreateSNESMF function, and
>>>> every time I check my snes context with SNESView,
>>>> >
>>>> >     Mat Object:     1 MPI processes
>>>> >       type: mffd
>>>> >       rows=11616, cols=11616
>>>> >         Matrix-free approximation:
>>>> >           err=1.49012e-08 (relative error in function evaluation)
>>>> >           The compute h routine has not yet been set
>>>> >
>>>> > at the end of line shows there's no routine for computing h value.
>>>> > I used MatMFFDWPSetComputeNormU function, but it didn't work I think.
>>>> > Is it ok if I leave the h value that way? Or should I have to set h
>>>> computing routine?
>>>> >
>>>> > I am guessing you are calling the function on a different object from
>>>> the one that is viewed here.
>>>> > However, there will always be a default function for computing h.
>>>> >
>>>> >   Thanks,
>>>> >
>>>> >     Matt
>>>> >
>>>> > Kyungjun.
>>>> >
>>>> > 2016-08-18 23:18 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>>>> > On Thu, Aug 18, 2016 at 8:35 AM, 최경준 <kyungjun.choi92 at gmail.com>
>>>> wrote:
>>>> > Hi, I'm trying to set my SNES matrix-free with Walker & Pernice way
>>>> of computing h value.
>>>> >
>>>> > I found above command (MatSNESMFWPSetComputeNormU) but my fortran
>>>> compiler couldn't fine any reference of that command.
>>>> >
>>>> > I checked Petsc changes log, but there weren't any mentions about
>>>> that command.
>>>> >
>>>> > Should I have to include another specific header file?
>>>> >
>>>> > We have this function
>>>> >
>>>> >   http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages
>>>> /Mat/MatMFFDWPSetComputeNormU.html
>>>> >
>>>> > but I would recommend using the command line option
>>>> >
>>>> >   -mat_mffd_compute_normu
>>>> >
>>>> >   Thanks,
>>>> >
>>>> >      Matt
>>>> >
>>>> > Thank you always.
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> > -- Norbert Wiener
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> > -- Norbert Wiener
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> > -- Norbert Wiener
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> > -- Norbert Wiener
>>>> >
>>>>
>>>>
>>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> experiments lead.
>> -- Norbert Wiener
>>
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160818/025ec8c8/attachment.html>


More information about the petsc-users mailing list