Biconjugate gradient method
From CFDWiki
Contents 
Biconjugate gradient method
Biconjugate gradient method could be summarized as follows
System of equation
For the given system of equation
Ax = b ;
b = source vector
x = solution variable for which we seek the solution
A = coefficient matrix
M = the preconditioning matrix constructed by matrix A
Algorithm
 Allocate temperary vectors r,z,p,q, rtilde,ztilde,qtilde
 Allocate temerary reals rho_1, rho_2 , alpha, beta

 r := b  Ax
 rtilde = r

 for i := 1 step 1 until max_itr do
 solve (Mz = r )
 solve (M^{T}ztilde = rtilde )
 rho_1 = zrtilde
 if i = 1 then
 p := z
 ptilde := ztilde
 p := z
 else
 beta = (rho_1/rho_2)
 p = z + beta * p
 ptilde = ztilde + beta * ptilde
 beta = (rho_1/rho_2)
 end if
 q := Ap
 qtilde := A^{T}ptilde
 alpha = rho_1 / (ptildeq)
 x = x + alpha * p
 r = r  alpha * q
 rtilde = rtilde  alpha * qtilde
 rho_2 = rho_1
 solve (Mz = r )
 end (iloop)

 deallocate all temp memory
 return TRUE
Reference
 Richard Barret, Michael Berry, Tony F. Chan, James Demmel, June M. Donato, Jack Dongarra, Victor Eijihout, Roldan Pozo, Charles Romine, Henk Van der Vorst, "Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods", Philadelphia, PA: SIAM, 1994.  http://www.netlib.org/linalg/html_templates/Templates.html
Return to Numerical Methods