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]

Reply via email to