Difference between revisions of "Bi-Conjugate Gradient Stabilized"

From Gw-qcd-wiki
Jump to: navigation, search
(Usage)
(Usage)
Line 27: Line 27:
  
 
You can find the example [[Media:BICGStabM-example.pdf|here]] <br>
 
You can find the example [[Media:BICGStabM-example.pdf|here]] <br>
The code implementing the example is "control_test_bicgstabm.cu". It is located in in /gwu_qcd/inverters/ directory. You can find a .pdf of it here [[Media:BICGStabM-example_code.pdf|here]]
+
The code implementing the example is "control_test_bicgstabm.cu". It is located in in /gwu_qcd/inverters/ directory. You can find a .pdf of it [[Media:BICGStabM-example_code.pdf|here]]

Revision as of 17:47, 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.
  9. the function returns the number of iterations required for convergence.

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.
  2. The example explains in more detail how to correctly use BICGStabM through an example.

You can find the example here
The code implementing the example is "control_test_bicgstabm.cu". It is located in in /gwu_qcd/inverters/ directory. You can find a .pdf of it here