Yeah, you have a valid point we really need a MatCreateDense() and a 
MatCreateDenseWithArray() like we have for vectors. 

    If we simply had a null array to indicate don't allocate space then uses 
would ALWAYS need to allocate the space themselves and pass it in which is 
annoying because most of the time users want PETSc to allocate the array.

   In your case can't you create the matrix with the "first" array from the 
other code and then after that use MatDensePlaceArray()? Then MatCreateDense() 
would not allocate any unneeded space.

   Barry


> On May 30, 2017, at 3:46 AM, Pierre Jolivet <[email protected]> 
> wrote:
> 
> Thank you very much. One last thing: with VecCreateMPIWithArray, if I pass a 
> NULL pointer for the array of values, then nothing is done and I need to use 
> VecPlaceArray/VecResetArray.
> With MatCreateDense, if I pass a NULL pointer for the array of values, then 
> PETSc allocates the memory. Why is there such a difference? Is there a way to 
> create a dense matrix with no storage attached to it (that will of course be 
> then set via MatDensePlaceArray/MatDenseResetArray)?
> 
> Thanks,
> Pierre
> 
> On Mon, 29 May 2017 19:45:27 -0500, Barry Smith wrote:
>> I have added MatDensePlaceArray() and MatDenseResetArray() in
>> https://bitbucket.org/petsc/petsc/branch/barry/feature-matdenseplacearray
>> 
>>   Barry
>> 
>>> On May 29, 2017, at 3:46 PM, Pierre Jolivet <[email protected]> 
>>> wrote:
>>> 
>>> 
>>>> On 29 May 2017, at 22:20, Jed Brown <[email protected]> wrote:
>>>> 
>>>>> That makes perfect sense (assuming I'm not wrong about the
>>>>> MatAssemblyBegin/MatAssemblyEnd). MatSetUpMultiply_MPIDense would still
>>>>> be called at each iteration but I doubt this is too costly.
>>>> 
>>>> It creates a VecScatter so it isn't nothing (in terms of parallel
>>>> semantics), but I'd like to see profiling data before chasing this
>>>> around.
>>> 
>>> Sure, I'll use that and will look out for any occurrence of 
>>> "MatDensePlaceArray" (or stuff like that) in the logs, in case it is 
>>> implemented.
>>> Thanks!
> 

Reply via email to