Difference between revisions of "Bi-Conjugate Gradient Stabilized"

From Gw-qcd-wiki
Jump to: navigation, search
(Usage)
(Usage)
Line 21: Line 21:
 
# rnd = a random vector used to start the algorithm.
 
# rnd = a random vector used to start the algorithm.
  
 +
'''NOTES:'''<br>
 +
#  The BICGStabM only guarantees the convergence of the linear system associated with the pfncMatMult you give it. You need to check this in your code. In fact, you should have a segment of your code check for this. If one or more shifts fails, for example, you could restart them using a single shift inverter. They should converge quickly since they probably already have almost converged to the desired accuracy.
 
*[[Example]]
 
*[[Example]]

Revision as of 15:42, 21 April 2010

The bi-conjugate gradient stabilized method (BICGStab), returns the solution to a set of shifted linear systems of the form

\((M+\sigma_i) \textbf{x} =\textbf{b} \quad i=1,2,... ,N \)

where \( \sigma_i\) are the shift values.

Definitions:
\( \text{residue} = || ( M+\sigma_i) - \textbf{b} || \)

\( \text{error} = || ( M+\sigma_i) - \textbf{b} || / ||\textbf{b}|| \)

Usage

int qcd::bicgstabm_device(device_wilson_field &src, int noshifts, double shifts[],device_wilson_field* sol[], double dError, int maxiters, matmult<device_wilson_field>& pfncMatMult, device_random_field& rnd);

  1. src = b.
  2. noShifts = (N-1) the number of shifts minus one.
  3. shifts[] = a pointer to all shift values except the most singular value
  4. sol = a pointer to an array of N pointers pointing to the solutions.
  5. dError = the maximum error in the solution (see definition).
  6. maxiters = the maximum number of iterations allowed.
  7. pfncMatMult = pointer to the matrix multiplication.
  8. rnd = a random vector used to start the algorithm.

NOTES:

  1. The BICGStabM only guarantees the convergence of the linear system associated with the pfncMatMult you give it. You need to check this in your code. In fact, you should have a segment of your code check for this. If one or more shifts fails, for example, you could restart them using a single shift inverter. They should converge quickly since they probably already have almost converged to the desired accuracy.