[petsc-users] DMCreateMatrix with some dense row

Dave May dave.mayhem23 at gmail.com
Sat Oct 24 01:33:26 CDT 2015


If you need to access a user defined context from within your CreateMatrix
function, you can attach it to the DM via PetscObjectCompose

http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscObjectCompose.html

If your context is not a petsc object, you can use PetscContainerCreate(),

http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscContainerCreate.html#PetscContainerCreate

You would then set your user context pointer inside the container and then
use PetscObjectCompose() to attach the container to the DM

Thanks,
  Dave


On 24 October 2015 at 06:04, Sang pham van <pvsang002 at gmail.com> wrote:

> Hi Barry,
>
> The routine DMCreateMatrix_DA_3d_MPIAIJ has 2 input arguments (DM da, Mat
> J), the function pointer in DMDASetGetMatrix() only accept function with
> that two arguments.
> As you suggested, I am writing a routine (based on DMCreateMatrix_DA_3d_MPIAIJ())
> to preallocate the matrix in the way I wish, to do that I think It needs to
> have one more input argument: My_DMCreateMatrix_DA_3d_MPIAIJ(DM da, Mat
> J, void* my_context). But DMDASetGetMatrix() will not accept pointer of
> this function. Please give a suggestion to overcome this.
>
> Thank you.
>
> Pham
>
>
> On Fri, Sep 4, 2015 at 1:24 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>>
>>     Look at DMCreateMatrix_DA_2d_MPIAIJ  (or the 3d version if working in
>> 3d)   You need to copy this routine and add whatever additional
>> preallocation information you need.   Then call DMDASetGetMatrix()  so that
>> the DM will use your routine to create the matrix for you.
>>
>>    Barry
>>
>>
>>
>>
>> > On Sep 3, 2015, at 11:28 AM, Sang pham van <pvsang002 at gmail.com> wrote:
>> >
>> > Hi,
>> >
>> > I am using DMCreateMatrix to create matrix from a existed DM object and
>> defined stencil.
>> > In my code, boundary nodes need to involve many inner nodes, thus
>> matrix rows corresponding to boundary nodes are almost dense. How can I
>> tell petsc that those rows need to be preallocated with more entries? I
>> don't want to use MatMPIAIJSetPreallocation() since advantages of DM might
>> be lost.
>> >
>> > Many thanks.
>> >
>> > Sam.
>> >
>> >
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151024/854db5c8/attachment.html>


More information about the petsc-users mailing list