I am fine with you giving this a try. I fear it mostly just moves the 
complications from one (several :-)) places to a different place but.

    Barry


> On Dec 1, 2018, at 2:47 PM, Hapla Vaclav <vaclav.ha...@erdw.ethz.ch> wrote:
> 
> Yes, that means that a significant part of MatShell logic would become 
> default implementations. But I would now do that only with MatDiagonalScale 
> as a proof-of-concept - then we can progressively do the same with the 
> others. At some point it could happen even with axpy - I think it would be 
> cool although more a complex task as you say.
> 
> Vaclav
> 
>> 1. 12. 2018 v 21:31, Smith, Barry F. <bsm...@mcs.anl.gov>:
>> 
>> 
>>  So basically hoist most of the data structure 
>> 
>> typedef struct {
>> struct _MatShellOps ops[1];
>> 
>> PetscScalar vscale,vshift;
>> Vec         dshift;
>> Vec         left,right;
>> Vec         left_work,right_work;
>> Vec         left_add_work,right_add_work;
>> Mat         axpy;
>> PetscScalar axpy_vscale;
>> PetscBool   managescalingshifts;                   /* The user will manage 
>> the scaling and shifts for the MATSHELL, not the default */
>> void        *ctx;
>> } Mat_Shell;
>> 
>> into Mat?    MatShell handles the axpy (which is nasty), would you handle 
>> that as well, if not then you still have code duplication between the 
>> MatShell implementations and the Mat___Basic implementations. If it wasn't 
>> for the axpy I would say it is worth trying but including correctly the axpy 
>> (I am not sure if it is always handled correctly for MatShell) requires 
>> complex code.
>> 
>> 
>>   Barry
>> 
>> 
>>> On Dec 1, 2018, at 1:49 PM, Hapla Vaclav <vaclav.ha...@erdw.ethz.ch> wrote:
>>> 
>>> MatDiagonalScale_Shell, MatDiagonalScale_Normal, 
>>> MatDiagonalScaleHermitian_Normal and perhaps some others are essentially 
>>> the same.
>>> 
>>> What about converting them into one MatDiagonalScale_Basic which would be 
>>> the default implementation if no type-specific implementation is provided?
>>> 
>>> I'm asking because I wanted to add the same to MATTRANSPOSE. But with my 
>>> proposal, this redundancy would be removed and additionally 
>>> MatDiagonalScale() would work for any current or future MatType while it 
>>> doesn't prevent providing an optimised version for explicit matrix types.
>>> 
>>> Note the same could be done for MatScale, MatShift, MatDiagonalSet and 
>>> maybe some others.
>>> 
>>> I also think such approach would promote using such high-level API 
>>> functions in higher PETSc layers and user codes because one wouldn't have 
>>> to be afraid those methods might not be implemented in input matrices.
>>> 
>>> Thanks for opinions
>>> 
>>> Vaclav
>> 
> 

Reply via email to