[petsc-dev] PetscObjectStateIncrease in MatMult*

Václav Hapla vaclav.hapla at vsb.cz
Mon Oct 19 05:06:21 CDT 2015


Again, I can see that MatShellSetOperation sets mat->ops->mult pointer 
directly
(see 
http://www.mcs.anl.gov/petsc/petsc-dev/src/mat/impls/shell/shell.c.html 
line 779).
to user-specified MatMult unless MatShellUseScaledMethods has been 
called (e.g. from MatScale_Shell)
(see 
http://www.mcs.anl.gov/petsc/petsc-dev/src/mat/impls/shell/shell.c.html 
line 70).

So your MatMult_Shell and MatMultTranspose_Shell is completely ignored 
if one has not scaled its Mat.

Sorry Barry for replying this only to you before.

Vaclav


Dne 17.10.2015 v 22:08 Barry Smith napsal(a):
> https://bitbucket.org/petsc/petsc/pull-requests/378/update-the-output-vector-state-in-pc-and/diff
>
> On Oct 17, 2015, at 11:12 AM, Václav Hapla <vaclav.hapla at vsb.cz> wrote:
>> Yes, exactly, MATSHELL.
>> But if I am right, MatShellSetOperation sets mat->ops->mult pointer directly to user-specified MatMult unless MatShellUseScaledMethods has been called.
>> So user must keep in mind he should call PetscObjectStateIncrease in his MatMult.
>> I feel like this is something one would intuitively await from the interface function...
>> It would be less error-prone for future and user-implemented MatTypes.
>> Vaclav
>>
>> Dne 17.10.2015 v 17:58 Barry Smith napsal(a):
>>>> On Oct 17, 2015, at 5:10 AM, Václav Hapla <vaclav.hapla at vsb.cz> wrote:
>>>>
>>>> Hello,
>>>> MatMult(), MatMultTranspose(), MatMultAdd(), MatMultTransposeAdd() and PCApply() belong to most common modifiers of Vec values.
>>>> Maybe it would be nice if these routines called PetscObjectStateIncrease explicitly because of MATSHELL and such stuff.
>>>> Thanks,
>>>> Vaclav
>>>     I assume you are suggesting this because users of MATSHELL or PCSHELL may not realize they need to call PetscObjectStateIncrease() on the output vector if they do not use VecGe/RestoretArray() to access the vector entries? (VecRestoreArray() automatically increases the state)
>>>
>>>     What if we add it to MatMult_Shell(), MatMultTranspose_Shell(), PCApply_Shell() and PCApplyTranspose_Shell()?  It looks like those are the only ones where the state won't get increased automatically
>>>
>>>     Thanks for the suggestion,
>>>
>>>    Barry
>>>
>>>> -- 
>>>>
>>>> Vaclav Hapla
>>>> Junior researcher
>>>> IT4Innovations <http://www.it4i.eu/>
>>>>
>>>>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3290 bytes
Desc: Elektronicky podpis S/MIME
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20151019/6397a4c5/attachment.p7s>


More information about the petsc-dev mailing list