[petsc-users] Novice: How to implement the petsc Gmres libraries in my CFD code

Matthew Knepley knepley at gmail.com
Fri Jan 26 09:01:27 CST 2018


On Sat, Jan 27, 2018 at 1:55 AM, Smith, Barry F. <bsmith at mcs.anl.gov> wrote:

>
>
> > On Jan 26, 2018, at 3:39 AM, Stephen Wornom <stephen.wornom at inria.fr>
> wrote:
> >
> > I am disparate to implement  the petsc library gmres in an CFD code and
> need a little help to get going.
> >
> > 23 years ago, gmres was implemented/written in the code by Y. Saad,
> modified by A. Malevsky, version February 1, 1995.
>
>    Off by a decade or so.
> >
> > petsc, most likely started with the same version, added new solvers,
> ...etc and maintained and corrected bugs reported by users
> > and I would like to use the latest petsc version of gmres
> >
> > Why?
> > Normally we have no convergence problems using gmres.
> > However sometimes gmres diverges instantaneously, no warning, just a
> negative density.
>
>    A negative density likely has nothing to do with your gmres.  You
> should run your code with a very tight GMRES convergence tolerance and see
> what happens and how and when the density goes negative; put in debugging
> code in your solver and your GEMRES that checks for negative density at
> each step. Does a tighter tolerance lead to a later time for the negative
> density?
>
>    GMRES is GMRES, I don't think converting to the PETSc GMRES will make
> an difference with your negative density problem.
>

As long as we are making guesses, there are different algorithms for
orthogonalization, some of which are better at dealing
with ill-conditioned matrices. If you are using classical Gram-Schmidt, you
could try Householder or modified GS.

   Thanks,

     Matt


> > Our code is parallel mpi, unstructured, uses a low Mach preconditioner,
> FV Roe scheme.
> >
> > Thus I would like to add an petsc option.
> > Would  someone outline, in detail, the steps that I need to follow?
> > I need all the encourage that I can get to add the option in the code.
> > petsc is installed on our computers
> > Thanks in advance,
> > Stephen
> >
> >
> >             IF ( petsc .EQ. 1 ) THEN
> > c petsc        CALL MatAssembleBegin
> > c petsc        CALL MatAssembleEnd
> > ... add steps
> >             ELSE
> >                CALL GMRESASR ! from our code
> >             ENDIF
> >
> >
> >
> > This is from our code which may be useful information
> > c-----------------------------------------------------------------------
> > c flexible GMRES routine. This is a version of GMRES which allows a
> > c a variable preconditioner. Implemented with a reverse communication
> > c protocole for flexibility -
> > c DISTRIBUTED VERSION (USES DISTDOT FOR DDOT)
> > c explicit (exact) residual norms for restarts
> > c written by Y. Saad, modified by A. Malevsky, version February 1, 1995
> > c-----------------------------------------------------------------------
> > c This Is A Reverse Communication Implementation.
> > c-------------------------------------------------
> > c USAGE: (see also comments for icode below). CGMRES
> > c should be put in a loop and the loop should be active for as
> > c long as icode is not equal to 0. On RETURN fgmres will
> > c    1) either be requesting the new preconditioned vector applied
> > c       to wk1 in case icode.eq.1 (result should be put in wk2)
> > c    2) or be requesting the product of A applied to the vector wk1
> > c       in case icode.eq.2 (result should be put in wk2)
> > c    3) or be terminated in case icode .eq. 0.
> > c on entry always set icode = 0. So icode should be set back to zero
> > c upon convergence.
> > c-----------------------------------------------------------------------
> > c Here is a typical way of running fgmres:
> > c
> > c      icode = 0
> > c 1    continue
> > c      CALL fgmres (n,im,rhs,sol,i,vv,w,wk1, wk2,eps,maxits,iout,icode)
> > c
> > c      if (icode .eq. 1) then
> > c         CALL  precon(n, wk1, wk2)    <--- user's variable
> preconditioning
> > c         goto 1
> > c      else if (icode .ge. 2) then
> > c         CALL  matvec (n,wk1, wk2)    <--- user's matrix vector product.
> > c         goto 1
> > c      else
> > c         ----- done ----
> > c         .........
> >
>
>


-- 
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

https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/~mk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180127/637eca80/attachment.html>


More information about the petsc-users mailing list