[petsc-users] Binary format in real vs. complex scalar type configurations

Matthew Knepley knepley at gmail.com
Wed May 12 06:35:55 CDT 2021


On Wed, May 12, 2021 at 2:17 AM Pierre Jolivet <pierre at joliv.et> wrote:

>
>
> On 11 May 2021, at 6:26 PM, Matthew Knepley <knepley at gmail.com> wrote:
>
> On Tue, May 11, 2021 at 12:03 PM Pierre Jolivet <pierre at joliv.et> wrote:
>
>> Hello Frederico,
>> I’m not sure that’s possible.
>> Here is what I do, it makes me sick, but mixing precisions/scalar types
>> with PETSc is difficult (crossing my fingers this will be better with
>> future).
>> In MATLAB (after putting petsc/share/petsc/matlab in the path):
>> A = PetscBinaryRead('your_binary_mat_with_re+im.dat','complex',true); %
>> scalar-type=complex
>> PetscBinaryWrite('re.dat',real(A)); % scalar-type=real
>> PetscBinaryWrite('im.dat',imag(A)); % scalar-type=real
>>
>
> So what you want to happen is that MatLoad() looks at the datatype, sees
> that it is complex and PetscScalar is real, and returns two matrices with
> the real and imaginary parts?
>
> The hard part is that the MatLoad interface returns a single matrix.
>
>
> There is Mat[Real,Imaginary]Part(), maybe there could be
> Mat[Real,Imaginary]PartLoad()?
> It will be inefficient (complex Mat read twice in a very naive
> implementation), but functional and would not require tinkering with the
> options (but maybe you had something clear in mind).
> Also, just for reference, https://gitlab.com/petsc/petsc/-/issues/901.
>
> Frederico, as Barry wrote, it will work with Octave or Python. In fact, it
> will work in any code that does not include petsc.h or link to libpetsc.
> If you want to stick to C, I think you could simply copy/paste the
> MatLoad_SeqAIJ_Binary() implementation
> https://www.mcs.anl.gov/petsc/petsc-3.15.0/src/mat/impls/aij/seq/aij.c.html#line4811
> <https://www.mcs.anl.gov/petsc/petsc-current/src/mat/impls/aij/seq/aij.c.html#line4811> and
> replace PETSC_SCALAR line 4861 by PETSC_COMPLEX.
> Then, as Matt wrote, instead of assembling a single Mat, assemble two Mats
> by splitting a->a in two PetscScalar arrays (remember that this is for your
> scalar-type=real configuration).
>

Should this make two matrices, or the equivalent real matrix?

  / R Q \
 \ -Q R /

  THanks,

     Matt


> Thanks,
> Pierre
>
> I guess we could have a flag that says what to do with complex numbers
> (read real, read imaginary, read norm, etc.)
> and you could read it twice. Would that work?
>
>   Thanks,
>
>      Matt
>
>
>> Thanks,
>> Pierre
>>
>> On 11 May 2021, at 3:30 PM, Frederico Teixeira <teixeira at zmt.swiss>
>> wrote:
>>
>> Dear fellows,
>>
>> I hope this message finds you safe and well.
>>
>> I have a complex-valued matrix and its real/imaginary components in binary
>> format. They were extracted from a solver that only works with
>> "scalar-type=complex" configuration.
>> I am getting weird results when I load them into a small test program
>> that's configured with "scalar-type=real", but I believe this is expected.
>> At the end of the day, I would like to have both real and imaginary
>> components as real-valued matrices.
>> Is it possible to do it? I want to test preconditioners that are
>> tailored for this sort of problem.
>>
>> Regards,
>>  Frederico.
>>
>>
>>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>
>
>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210512/92e48b06/attachment.html>


More information about the petsc-users mailing list