[petsc-users] Assembling a matrix for a DMComposite vector

Anton Popov popov at uni-mainz.de
Tue Apr 29 04:14:12 CDT 2014


On 4/29/14 7:07 AM, Anush Krishnan wrote:
> Hi all,
>
> I created a DMComposite using two DMDAs (representing the x and y 
> components of velocity in a 2-D staggered cartesian grid used for CFD 
> simulations). DMCompositeGetISLocalToGlobalMappings gives me the 
> global indices of the elements and ghost cells, which I can use to set 
> up a matrix that operates on the vector created with the DMComposite. 
> I obtain the correct global indices for all the interior points. But 
> when I look at the global indices of the ghost cells, the ones outside 
> the domain from the x-component DM return -1, but the ones outside the 
> domain from the y-component DM return a positive value (which seems to 
> be the largest global index of the interior points on Process 0). My 
> question is: Why do they not return -1? Wouldn't that make matrix 
> assembly easier (since MatSetValues ignores negative indices)? I have 
> attached a code which demonstrates the above.
>
> On a related note: Is it possible to use MatSetValuesStencil for 
> assembling a block diagonal matrix that operates on a vector created 
> using the above DMComposite?
>
> Thanks,
> Anush
You can do the whole thing much easier (to my opinion).
Since you created two DMDA anyway, just do:

- find first index on every processor using MPI_Scan
- create two global vectors (no ghosts)
- put proper global indicies to global vectors
- create two local vectors (with ghosts) and set ALL entries to -1 (to 
have what you need in boundary ghosts)
- call global-to-local scatter

Done!

The advantage is that you can access global indices (including ghosts) 
in every block using i-j-k indexing scheme.
I personally find this way quite easy to implement with PETSc

Anton
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140429/083813c4/attachment-0001.html>


More information about the petsc-users mailing list