Could you try the following? null = PETSc.Mat() nest_list = [[null,null],[null,null]]
Anyway, I like Lawrence's patch. I'll push a fix to maint On 18 February 2016 at 21:27, Chris Eldred <[email protected]> wrote: > Hey Lawrence, > > I will give that a try, thanks! > > -Chris > > On Wed, Feb 17, 2016 at 3:53 PM, Lawrence Mitchell > <[email protected]> wrote: >> On 17/02/16 14:47, Chris Eldred wrote: >>> Hey All, >>> >>> I was wondering if anyone had used MatNest with petsc4py. I am having >>> issues trying to create a MatNest where some of the submatrices are >>> empty. In PETSc, I can just pass NULL in the array that I give to >>> MatCreateNest and it works fine. However, the following code >> >> We use it, but haven't used it with empty slots. >> >>> nest_list = [[None,None],[None,None]] >>> nest_list[0][0] = some matrix >>> nest_list[0][1] = some matrix >>> nest_list[1][0] = some matrix >>> A = PETSc.Mat().createNest(nest_list,comm=PETSc.COMM_WORLD) >>> >>> fails with: >>> File "Mat.pyx", line 445, in petsc4py.PETSc.Mat.createNest >>> (src/petsc4py.PETSc.c:103202) >>> TypeError: Cannot convert NoneType to petsc4py.PETSc.Mat >>> >>> Is there an equivalent to NULL in petsc4py (there doesn't appear to be one)? >>> >>> If all of the entries in nest_list are filled, everything works fine. >>> >>> Any help would be appreciated! >> >> Maybe a patch like this to petsc4py? >> >> diff --git a/src/PETSc/Mat.pyx b/src/PETSc/Mat.pyx >> index f281ba0..490c58e 100644 >> --- a/src/PETSc/Mat.pyx >> +++ b/src/PETSc/Mat.pyx >> @@ -460,7 +460,10 @@ cdef class Mat(Object): >> tmp1 = oarray_p(empty_p(nr*nc), NULL, <void**>&cmats) >> for i from 0 <= i < mr: >> for j from 0 <= j < mc: >> - cmats[i*mc+j] = (<Mat?>mats[i][j]).mat >> + if mats[i][j] is None: >> + cmats[i*mc+j] = NULL >> + else: >> + cmats[i*mc+j] = (<Mat?>mats[i][j]).mat >> if isrows is not None: >> tmp2 = oarray_p(empty_p(nr), NULL, <void**>&cisrows) >> for i from 0 <= i < mr: cisrows[i] = (<IS?>isrows[i]).iset >> >> >> Untested. >> >> If you want to pass null isrows and iscols as well you'll need to do a >> similar thing there. >> >> Cheers, >> >> Lawrence >> > > > > -- > Chris Eldred > Postdoctoral Fellow, LAGA, University of Paris 13 > PhD, Atmospheric Science, Colorado State University, 2015 > DOE Computational Science Graduate Fellow (Alumni) > B.S. Applied Computational Physics, Carnegie Mellon University, 2009 > [email protected] -- Lisandro Dalcin ============ Research Scientist Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) Extreme Computing Research Center (ECRC) King Abdullah University of Science and Technology (KAUST) http://ecrc.kaust.edu.sa/ 4700 King Abdullah University of Science and Technology al-Khawarizmi Bldg (Bldg 1), Office # 4332 Thuwal 23955-6900, Kingdom of Saudi Arabia http://www.kaust.edu.sa Office Phone: +966 12 808-0459
