[petsc-users] Confusion with MatGetLocalSubMatrix
Lawrence Mitchell
lawrence.mitchell at imperial.ac.uk
Fri Dec 19 09:10:36 CST 2014
Dear petsc-users,
I'm trying to setup matrices and data structures for use with MatGetLocalSubMatrix, but I'm rather lost in a world of ISes and block sizes. I have the layouts and so forth correct where all my fields have block size 1, but am struggling to follow how things fit together for block size > 1.
I have a Taylor-Hood discretisation so a P2 velocity space with block size 2, and a P1 pressure space with block size 1.
On each process, I build the full local to global mapping for both fields. This has block size 1.
Then I create strided ISes to define the local blocks for each field, and set the block size on each of them (2 for the velocity space, 1 for the pressure). Aside, when I do ISCreateStride for an IS with a block size > 1, do I provide all the indices, or just the blocked indices? Should I be using ISCreateBlock for block size > 1 instead?
Calling MatGetLocalSubMatrix results in an error:
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: Petsc has generated inconsistent data
[0]PETSC ERROR: Blocksize of localtoglobalmapping 1 must match that of layout 2
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Development GIT revision: v3.5.2-679-gfd874b2 GIT Date: 2014-10-14 23:50:11 -0500
[0]PETSC ERROR: foo.py on a arch-darwin-c-dbg named yam-laptop.local by lmitche1 Fri Dec 19 14:50:37 2014
[0]PETSC ERROR: Configure options --download-chaco=1 --download-ctetgen=1 --download-exodusii=1 --download-hypre=1 --download-metis=1 --download-ml --download-parmetis=1 --download-triangle=1 --with-c2html=0 --with-debugging=1 --with-hdf5-dir=/usr/local --with-hdf5=1 --with-netcdf-dir=/usr/local --with-netcdf=1 --with-shared-libraries=1 PETSC_ARCH=arch-darwin-c-dbg
[0]PETSC ERROR: #1 PetscLayoutSetBlockSize() line 438 in /Users/lmitche1/Documents/work/mapdes/petsc/src/vec/is/utils/pmap.c
[0]PETSC ERROR: #2 MatCreateLocalRef() line 259 in /Users/lmitche1/Documents/work/mapdes/petsc/src/mat/impls/localref/mlocalref.c
[0]PETSC ERROR: #3 MatGetLocalSubMatrix() line 9480 in /Users/lmitche1/Documents/work/mapdes/petsc/src/mat/interface/matrix.c
Should I therefore not set the block size on this IS? This seems wrong to me, since it's the only way to forward that to the local created sub matrix, such that I can do matsetvaluesblockedlocal on it. As an aside, I note that the local sub matrix only supports blocked insertion for square blocks, but I think matsetvaluesblocked now works for non-square blocks: should this check be relaxed appropriately?
Cheers,
Lawrence
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20141219/fb2cfd29/attachment.pgp>
More information about the petsc-users
mailing list