linear solver for complex matrix

zhifeng sheng z.sheng at ewi.tudelft.nl
Wed Oct 29 04:53:07 CDT 2008


Hi

Thanks, now it is clear :) I may want to use other solvers, since our 
software generates other kind of complex matrices.

Also, I remembered that left preconditioners are used in iterative 
solvers as default, so I am confused about what preconditioners are used 
for CG, left or "left and right" ?.

PS: is the Petsc development team planning to support it in the next 
release?

Thanks a lot
Zhifeng Sheng



Barry Smith wrote:
>
> The PETSc MatMultTranspose(), as you state, does not use conjugate 
> transpose, thus the Krylov methods that
> require a conjugate transpose will not work. Unless you change the 
> MatMultTranpose() routine.
> In addition, these algorithms use VecDot(), with the complex 
> conjugate transpose the order of the arguments to this function
> matter (determining which one is conjugated). The coding for these 
> methods was NOT done to use the proper conjugation
> (many of the original references do not include this information). In 
> other words PETSc DOES NOT support
> complex conjugate for most of the Krylov methods, I think we already 
> said this before.
>
>
> If your matrix is complex hermitian why not just use CG, why would you 
> want to use a different Krylov method?
>
> Barry
>
>
>
> On Oct 27, 2008, at 10:11 AM, zhifeng sheng wrote:
>
>> Dear all
>>
>> It looks like something strange is going on for my Petsc (which was 
>> built with '--with-scalar-type=complex'.):
>>
>> 1) I got a complex system of equation, with I can solve with CG+SOR . 
>> But when I try to use BICGS+SOR to solve it, it never converges.
>>
>> 2) I noticed that the transpose function for complex matrices was not 
>> what I was looking for. It really computes the transpose instead of 
>> the conjugate transpose which is the "right transpose" for complex 
>> matrix.
>>
>> For some linear solvers, e.g. BICG, BCGS, need to compute the 
>> transpose of real system matrix (to multiply it with a vector), while 
>> they need to compute the conjugate transpose for complex system 
>> matrices.
>>
>> So I am wondering whether BICGS+SOR did not converge for my complex 
>> matrix because of a bad A^Tx used internally in these linear solvers. 
>> Such problem does not exist for CG+SOR, therefore, CG+SOR converged.
>>
>> PS: I sent some emails about this problem before, but I guess I did 
>> not make myself clear :o
>>
>> Thanks a lot
>> Best regards
>> Zhifeng Sheng
>>
>> Hong Zhang wrote:
>>> Zhifeng,
>>>
>>> Petsc's linear solvers, including
>>> the external packages (e.g., superlu, mumps, and spooles)
>>> all support complex precision,
>>> simply configure petsc library with
>>> '--with-scalar-type=complex'.
>>>
>>>> How can I make the other linear solvers work for complex system? I 
>>>> think if only I can make the transpose function a little different 
>>>> then they should work. but I don't know where I should start.
>>>>
>>>> Did anyone have similar problem with the linear solvers for complex 
>>>> system before (the linear solver for complex system needs conjugate 
>>>> transpose)? and how could you solve it?
>>>
>>> Why do you need conjugate transpose for using petsc solver?
>>> Do you develop your onw solver for Hermitian matrix?
>>> We do not have some basic matrix operations for Hermitian matrix yet,
>>> e.g., MatMult_Hermitian() when only half of the matrix entries
>>> are stored. You need implement this operation for your onw
>>> solver.
>>>
>>> If you use petsc AIJ matrix format, all complex linear solvers
>>> should work. Storing half of entries is not as efficient
>>> as entire matrix when you have sufficient memory space.
>>>
>>> Hong
>>>
>>>>
>>>> Thanks a lot
>>>> Best regards
>>>> Zhifeng Sheng
>>>>
>>>>
>>>
>>
>




More information about the petsc-users mailing list