Not sure if I understand you. Do you mean that a complex SBAIJ Mat with 
MAT_HERMITIAN flag can be assumed to have zero imaginary part? I don't think 
so. This matrix should have real diagonal entries, but off-diagonal entries 
should be allowed to have nonzero imaginary part. This is what is done in 
MatMult_SeqSBAIJ_1_Hermitian(), where off-diagonal entries are conjugated when 
used for the strict lower triangular part. So I guess the right fix is to 
implement MatMult_SeqSBAIJ_2_Hermitian(), MatMult_SeqSBAIJ_3_Hermitian() and so 
on with appropriate use of PetscConj().

Jose

> El 11 sept 2019, a las 10:36, Pierre Jolivet <pierre.joli...@enseeiht.fr> 
> escribió:
> 
> Nevermind, this is the wrong fix.
> The proper fix is in PETSc. It should not error out if the matrix is also 
> symmetric.
> Indeed, complex symmetric Hermitian => complex with no imaginary part.
> Thus all operations like MatMult, MatMultHermitianTranspose, Cholesky… will 
> work for bs > 1, since all is filled with zeroes.
> I will take care of this, I’m c/c’ing petsc-dev so that they don’t have to 
> “reverse engineer” the trivial change to MatSetOption_SeqSBAIJ.
> 
> Sorry about the noise.
> 
> Thank you,
> Pierre
> 
>> On 10 Sep 2019, at 8:37 AM, Pierre Jolivet <pierre.joli...@enseeiht.fr> 
>> wrote:
>> 
>> Hello,
>> Could you consider not setting MAT_HERMITIAN here 
>> http://slepc.upv.es/documentation/current/src/sys/classes/st/interface/stsles.c.html#line276
>>  when using SBAIJ matrices with bs > 1?
>> This makes PETSc error out with
>> #    [1]PETSC ERROR: No support for this operation for this object type
>> #    [1]PETSC ERROR: No support for Hermitian with block size greater than 1
>> 
>> The change does not bring any regression, since PETSc is always giving an 
>> error without it, but on the contrary, it improves the range of 
>> applicability of SLEPc, e.g., for complex Hermitian problems with SBAIJ 
>> matrices and bs > 1 that _don’t_ require the flag MAT_HERMITIAN set to true.
>> 
>> Thanks,
>> Pierre
> 

Reply via email to