[petsc-users] Krylov for Implicit CFD

Matthew Knepley knepley at gmail.com
Thu May 3 09:11:47 CDT 2012


On Thu, May 3, 2012 at 3:44 AM, Pavanakumar Mohanamuraly <
m.pavanakumar at gmail.com> wrote:

> Hi,
>
> Currently I am planning to use Petsc Krylov solver for implicit time
> integration of my CFD code. I need some pointer on the implementation. I am
> providing a detailed list of things I am not very clear with in both the
> documentation and the mailing list archives.
>
> --> The equations to be solved is of the form :  [ I / \delta t + J ] \delta
> U^n = - R[ U^n ]
>
> --> The Jacobian J is hard to evaluate exactly and hence we use the finite
> difference method to evaluate J. I want to use a matrix-free approach so
> all I need is the action of this J on some vector v.
>
> --> Jv = \frac{\partial R}{\partial U}v = ( R[ U^n + hv ] - R[ U^] ) / h,
> h is some parameter. Since I is identity matrix and \delta t is fixed this
> diagonal matrix is trivial to evaluate. Thus [ I / \delta t + J ] is
> available as a user define function in my solver.
>
> 1) Vector U^n is from an unstructured node distribution and is partitioned
> outside of Petsc. I have both the global indexing and local indexing
> information along with the ghost node information.
> 2) I have already defined functions to move data across the ghost nodes
> given the local variable address and memory stride/offset information.
> 3) In Jacobian-vector Jv evaluation, one has to exchange the ghost cell
> values of vector v with adjacent processor before the calculation is done.
> 4) I can write the Jacobian-vector Jv evaluation function to perform ghost
> node exchange before evaluation but I am not clear as to how I can
> interface my local arrays and local / global indexing information into
> Petsc.
> 5) I understand that I have to create a Matrix Shell for the matrix free
> method and define my user-defined function to evaluate the matrix-vector
> product given an input vector. But it is not clear as to how Petsc
> understands how I order my vectors locally and how that corresponds to the
> global indexes.
> 6) I cannot use the DA object as it is for structured/contiguous
> partitioning .i.e., the local indices don't correspond to contiguous global
> ordering/indexing.
> 7) I also don't want to use the unstructured mesh and decomposition
> routines in Petsc and I already have my own.
>
> Can this be done in Petsc ?
>

Yes, there are ??? parts:

  1) You want to manage unstructured data yourself. The easiest way to do
this now is to implement a DM. You just need to provide
      routines for making global and local vectors (you have this), and
routines for mapping between them (you have this). You will have
      to use petsc-dev, but this definitely looks like the easiest thing to
do.

     a) If you consider using part of our infrastructure, you can build a
PetscSection and a PetscSF, and everything else will be automatically
         calculated. These are very new things, so there is not a lot of
documentation, and thus you might prefer to do the whole DM yourself.

  2) You want to do matrix-free action of your Jacobian. This is easy using
MatShell, however the real question is How will you precondition that
       equation?

   Matt


>
> Thanking you in anticipation.
>
> Regards,
>
>
> --
>
> Pavanakumar Mohanamuraly
>
>


-- 
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/20120503/1aeeacbc/attachment.htm>


More information about the petsc-users mailing list