[petsc-dev] PetscObjectStateIncrease in MatMult*
Barry Smith
bsmith at mcs.anl.gov
Mon Oct 19 07:13:01 CDT 2015
> On Oct 19, 2015, at 5:06 AM, Václav Hapla <vaclav.hapla at vsb.cz> wrote:
>
> 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.
Ahh, thanks for reporting this I guess I need to change the code to always do the extra indirection.
>
> 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/>
>>>>>
>>>>>
>
>
More information about the petsc-dev
mailing list