Hex
1.0
Hydrogen-electron collision solver
|
#include <iostream>
#include <set>
#include "arrays.h"
#include "gauss.h"
#include "input.h"
#include "itersolve.h"
#include "misc.h"
#include "preconditioners.h"
#include "radial.h"
#include "opencl.h"
#include "kernels_cl.c"
Macros | |
#define | THRESHOLD 1e-5 |
Functions | |
cArray | IC (cArrayView const &A, lArrayView const &I, lArrayView const &P) |
SymDiaMatrix | DIC (SymDiaMatrix const &A) |
DIC preconditioner. More... | |
SymDiaMatrix | SSOR (SymDiaMatrix const &A) |
SSOR preconditioner. More... | |
void | zgelsd_ (int *M, int *N, int *NRHS, Complex *A, int *LDA, Complex *B, int *LDB, double *S, double *RCOND, int *RANK, Complex *WORK, int *LWORK, double *RWORK, int *IWORK, int *INFO) |
void | LapackLeastSquares (ColMatrix< Complex > const &A, cArrayView b) |
CooMatrix | SPAI (SymDiaMatrix const &A, iArrayView diagonals) |
SPAI preconditioner. More... | |
Variables | |
char | kernels_cl [] |
char * | source = &kernels_cl[0] |
#define THRESHOLD 1e-5 |
SymDiaMatrix DIC | ( | SymDiaMatrix const & | A | ) |
Setup the diagonal incomplete Cholesky preconditioner. It is a essentially the original matrix with a preconditioned diagonal and the strict upper and lower triangles normalized by the preconditioned diagonal, i.e. a matrix
\[ \mathbf{P} = \mathbf{\tilde{L}}_\mathbf{A} + \mathbf{D}^{-1} + \mathbf{\tilde{L}}_\mathbf{A}^T \]
for the preconditioner
\[ \mathbf{M} = (\mathbf{D} + \mathbf{L}_\mathbf{A}) \mathbf{D}^{-1} (\mathbf{D} + \mathbf{U}_\mathbf{A}) = (1 + \mathbf{\tilde{U}}_\mathbf{A}^T) \mathbf{D} (1 + \mathbf{\tilde{U}}_\mathbf{A}) \]
The formula for the elements of \( \mathbf{D} \) is
\[ d_i = a_{ii} - \sum_{k < i} a_{ik} d_{k}^{-1} a_{ki} \ , \]
and is to be evaluated along the diagonal, re-using the just computed values \( d_i \). Hence, the access pattern in dense matrix would be
\[ \pmatrix { \ast & & & \ast & & \cr & \ast & & \ast & & \cr & & \ast & \ast & & \cr \ast & \ast & \ast & ? & & \cr & & & & & \cr & & & & & \cr } \]
In the case of the sparse SymDiaMatrix, the asterisks will occur only on the nonzero diagonals.
A | Matrix in SymDiaMatrix format that is to be preconditioned. |
cArray IC | ( | cArrayView const & | A, |
lArrayView const & | I, | ||
lArrayView const & | P | ||
) |
void LapackLeastSquares | ( | ColMatrix< Complex > const & | A, |
cArrayView | b | ||
) |
CooMatrix SPAI | ( | SymDiaMatrix const & | A, |
const iArrayView | diagonals | ||
) |
Compute sparse aproximate inverse of a given symmetrix diagonal matrix A. The sparse structure of the SPAI is set by the second parameter that contains list of non-lower diagonal indices (greater than or equal to zero).
This function uses Lapack routine ZGELSD.
SymDiaMatrix SSOR | ( | SymDiaMatrix const & | A | ) |
Symmetric successive over-relaxation preconditioner for \( \omega = 1 \). (Essentially symmetrized Gauss-Seidel). The resulting matrix contains normalized lower (and upper) triangle and in the place of the unit diagonal is the inverse diagonal of \( \mathbf{A} \). So, having the preconditioner
void zgelsd_ | ( | int * | M, |
int * | N, | ||
int * | NRHS, | ||
Complex * | A, | ||
int * | LDA, | ||
Complex * | B, | ||
int * | LDB, | ||
double * | S, | ||
double * | RCOND, | ||
int * | RANK, | ||
Complex * | WORK, | ||
int * | LWORK, | ||
double * | RWORK, | ||
int * | IWORK, | ||
int * | INFO | ||
) |
char kernels_cl[] |
char* source = &kernels_cl[0] |