[petsc-users] Wise usage of user contexts

Timothée Nicolas timothee.nicolas at gmail.com
Tue Aug 18 04:20:35 CDT 2015


Dave,

Thx a lot for your very clear answer. My last question about modules could
be reformulated like this :

Why would I put anything in a ctx while I could simply use modules ? Maybe
it has something to do with the fact that PETSc is initially written for C ?

Best

Timothee

2015-08-18 17:59 GMT+09:00 Dave May <dave.mayhem23 at gmail.com>:

>
>
> On 18 August 2015 at 10:42, Timothée Nicolas <timothee.nicolas at gmail.com>
> 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150818/2aa2239a/attachment.html>


More information about the petsc-users mailing list