linear solver for complex matrix

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


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 

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