On 18 August 2015 at 10:42, Timothée Nicolas <[email protected]> wrote:
> 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 identical. Cheers Dave > > Best regards > > Timothee NICOLAS >
