[petsc-users] Wise usage of user contexts

Dave May dave.mayhem23 at gmail.com
Tue Aug 18 03:59:58 CDT 2015

On 18 August 2015 at 10:42, Timothée Nicolas <timothee.nicolas at gmail.com>

> Hi all,
> I am in the process of writing an implicit solver for a set of PDEs
> (namely MHD equations), in FORTRAN. When setting the non-linear function to
> solve via Newton-Krylov, I use a "user defined context", namely the thing
> denoted by "ctx" on the doc page about SNESFunction :
> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESFunction.html#SNESFunction
> In practice ctx is a user defined type which contains everything I need in
> the local routine which sets the function on the local part of the grid,
> FormFunctionLocal. That is, some local/global geometrical information on
> the grid, the physical parameter, and possibly any other thing.
> In my case it so happens that due to the scheme I have chosen, when I
> compute my function, I need the full solution of the problem at the last
> two time steps (which are in Vec format). So my ctx contains two Vec
> elements. Since I will work in 3D and intend to use a lot of points in the
> future, I am concerned about memory problems which could occur.

In the grand scheme of things, the two vectors in your context aren't
likely to significantly add to the total memory footprint of your code. A
couple of things to note:
* If you run in parallel, only the local part of the vector will be stored
on each MPI process.
* All the KSP methods will allocate auxiliary vectors. Most methods require
more than 2 auxiliary vectors.
* SNES also requires auxiliary vectors. If you use JFNK, that method will
also need some additional temporary vectors.
* If you assemble a Jacobian, this matrix will likely require much more
memory per MPI process than two vectors

> Is there a limit to the size occupied by ctx ?

The only limit is defined by the available memory per MPI process you have
on your target machine.

> Would this be better if instead I was declaring global variables in a
> module and using this module inside FormFunctionLocal ? Is this allowed ?

What would be the difference in doing that - the memory usage will be


> Best regards
> Timothee NICOLAS
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150818/49856720/attachment.html>

More information about the petsc-users mailing list