[petsc-users] About DMDA (and extracting its ordering)

Thibaut Appel t.appel17 at imperial.ac.uk
Thu Feb 21 12:19:25 CST 2019


Hi Matthew,

Is your first part of your answer (using DMDASetBlockFills) valid only 
in the case I create a DMDA object?

Yes I think that is the kind of stencil I am using. I could know how the 
stencil looks like exactly, but I preallocate looping, for each process 
on all the elements of the stencil, grid node by grid node (which is not 
that costly, and "exact")

If I do NOT use a DMDA object and create my MPIAIJ matrix myself, how do 
I get the global row indices owned by the process (the "DMDA-like" ones 
you mentioned)? The problem is that MatGetOwnershipRange cannot be 
called if the matrix hasn't been preallocated, and I need the global 
indices to preallocate.

Thibaut


On 21/02/2019 17:49, Matthew Knepley wrote:
> On Thu, Feb 21, 2019 at 11:16 AM Thibaut Appel via petsc-users 
> <petsc-users at mcs.anl.gov <mailto:petsc-users at mcs.anl.gov>> wrote:
>
>     Dear PETSc developers/users,
>
>     I’m solving linear PDEs on a regular grid with high-order finite
>     differences, assembling an MPIAIJ matrix to solve linear systems
>     or eigenvalue problems. I’ve been using vertex major, natural
>     ordering for the parallelism with PetscSplitOwnership (yielding
>     rectangular slices of the physical domain) and wanted to move to
>     DMDA to have a more square-ish domain decomposition and minimize
>     communication between processes.
>
>     However, my application is memory critical, and I have
>     finely-tuned matrix preallocation routines for allocating memory
>     “optimally”. It seems the memory of a DMDA matrix is allocated
>     along the value of the stencil width of DMDACreate and the manual
>     says about it
>
>     “These DMDA stencils have nothing directly to do with any finite
>     difference stencils one might chose to use for a discretization”
>
>     And despite reading the manual pages there must be something I do
>     not understand in the DM topology, what is that "stencil width"
>     for then? I will not use ghost values for my FD-method, right?
>
>
> What this is saying is, "You might be using some stencil that is not 
> STAR or BOX, but we are preallocating according to one of those".
> If you really care about how much memory is preallocated, which it 
> seems you do, then you might be able to use
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDASetBlockFills.html
>
> to tell use exactly how to preallocate.
>
>     I was then wondering if I could just create a MPIAIJ matrix, and
>     with a PETSc routine get the global indices of the domain for each
>     process: in other words, an equivalent of PetscSplitOwnership that
>     gives me the DMDA unknown ordering. So I can feed and loop on that
>     in my preallocation and assembly routines.
>
>
> You can make an MPIAIJ matrix yourself of course. It should have the 
> same division of rows as the DMDA division of dofs. Also, 
> MatSetValuesStencil() will not work for a custom matrix.
>
>   Thanks,
>
>      Matt
>
>     Thanks very much,
>
>     Thibaut
>
>
>
> -- 
> 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.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190221/9d20ebf0/attachment.html>


More information about the petsc-users mailing list