Biconjugate gradient stabilized method
From CFD-Wiki
(Difference between revisions)
Line 12: | Line 12: | ||
=== Algorithm === | === Algorithm === | ||
- | + | ---- | |
- | + | : Allocate temperary vectors p, phat, s, shat, t, v, rtilde <br> | |
- | + | : Allocate temerary reals rho_1, rho_2 , alpha, beta, omega <br> | |
- | + | : <br> | |
- | + | : r := b - A<math>\bullet</math>x <br> | |
- | + | : rtilde = r <br> | |
- | + | : <br> | |
- | + | : for i := 1 step 1 until max_itr do | |
- | + | :: rho_1 = rtilde<math>\bullet</math>r <br> | |
- | + | :: if i = 1 then p := r else <br> | |
- | + | ::: beta = (rho_1/rho_2) * (alpha/omega)<br> | |
- | + | ::: p = r + beta * (p - omega * v) <br> | |
- | + | :: end if <br> | |
- | + | :: solve (M<math>\bullet</math>phat = p ) <br> | |
- | + | :: v = A<math>\bullet</math>phat <br> | |
- | + | :: alpha = rho_1 / (rtilde<math>\bullet</math>v) <br> | |
- | + | :: s = r - alpha * v <br> | |
- | + | :: solve (M<math>\bullet</math>shat = s ) <br> | |
- | + | :: t = A * shat; | |
- | + | :: omega = (t<math>\bullet</math>s) / (t<math>\bullet</math>t) <br> | |
- | + | :: x = x + alpha * phat + omega * shat <br> | |
- | + | :: r = s - omega * t <br> | |
- | + | :: rho_2 = rho_1 <br> | |
- | + | : end (i-loop) | |
- | + | : <br> | |
+ | : deallocate all temp memory <br> | ||
+ | : return TRUE <br> | ||
+ | ---- |
Revision as of 08:18, 14 September 2005
Biconjugate gradient stabilized method
Biconjugate gradient stabilized 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 precondioning matrix constructued by matrix A
Algorithm
- Allocate temperary vectors p, phat, s, shat, t, v, rtilde
- Allocate temerary reals rho_1, rho_2 , alpha, beta, omega
-
- r := b - Ax
- rtilde = r
-
- for i := 1 step 1 until max_itr do
- rho_1 = rtilder
- if i = 1 then p := r else
- beta = (rho_1/rho_2) * (alpha/omega)
- p = r + beta * (p - omega * v)
- beta = (rho_1/rho_2) * (alpha/omega)
- end if
- solve (Mphat = p )
- v = Aphat
- alpha = rho_1 / (rtildev)
- s = r - alpha * v
- solve (Mshat = s )
- t = A * shat;
- omega = (ts) / (tt)
- x = x + alpha * phat + omega * shat
- r = s - omega * t
- rho_2 = rho_1
- rho_1 = rtilder
- end (i-loop)
-
- deallocate all temp memory
- return TRUE