5 #ifndef INTERNAL_PROTO_H
6 #define INTERNAL_PROTO_H
15 int chebxCoefd(
int m,
double gam,
int damping,
double *mu);
17 int dampcf(
int m,
int damping,
double *jac);
19 int chebxPltd(
int m,
double *mu,
int n,
double *xi,
double *yi);
26 int apfun(
const double c,
const double h,
const double* xi,
double (*
ffun)(
double),
const int npts,
double* yi);
28 double rec(
const double a);
30 double isqrt(
const double a);
32 int pnav(
double *mu,
const int m,
const double cc,
const double dd,
double *v,
33 double *y,
double *w);
41 void savedensemat(
double *A,
int lda,
int m,
int n,
const char *fn);
43 void save_vec(
int n,
const double *x,
const char fn[]);
50 int SymmTridEig(
double *eigVal,
double *eigVec,
int n,
const double *diag,
const double *sdiag);
52 int SymmTridEigS(
double *eigVal,
double *eigVec,
int n,
double vl,
double vu,
int *nevO,
const double *diag,
const double *sdiag);
54 void SymEigenSolver(
int n,
double *A,
int lda,
double *Q,
int ldq,
double *lam);
56 void CGS_DGKS(
int n,
int k,
int i_max,
double *Q,
double *v,
double *nrmv,
double *w);
58 void CGS_DGKS2(
int n,
int k,
int i_max,
double *Z,
double *Q,
double *v,
double *w);
60 void orth(
double *V,
int n,
int k,
double *Vo,
double *work);
65 void contQuad(
int method,
int n, complex
double* zk);
67 void ratf2p2(
int n,
int *mulp, complex
double *zk, complex
double* alp,
int m,
double *z,
double *x);
69 void pfe2(complex
double s1, complex
double s2,
int k1,
int k2, complex
double* alp, complex
double* bet);
71 complex
double integg2(complex
double s1, complex
double s2, complex
double* alp,
int k1, complex
double* bet,
int k2,
double a,
double b);
73 void weights(
int n, complex
double* zk,
int* pow,
double lambda, complex
double* omega);
75 int scaleweigthts(
int n,
double a,
double b, complex
double *zk,
int* pow, complex
double* omegaM);
81 void simpson(
double *xi,
double *yi,
int npts);
84 void matvec_csr(
double *x,
double *y,
void *data);
91 int *mapA,
int *mapB);
101 void vecset(
int n,
double t,
double *v);
102 void vec_perm(
int n,
int *p,
double *x,
double *y);
103 void vec_iperm(
int n,
int *p,
double *x,
double *y);
110 static inline void matvec_A(
double *x,
double *y) {
123 static inline void matvec_B(
double *x,
double *y) {
136 static inline void solve_B(
double *x,
double *y) {
149 static inline void solve_LT(
double *x,
double *y) {
163 double *br,
double *bz,
164 double *xr,
double *xz) {
166 (sol->
func)(n, br, bz, xr, xz, sol->
data);
173 static inline int check_intv(
double *intv, FILE *fstats) {
179 double a=intv[0], b=intv[1], lmin=intv[2], lmax=intv[3];
182 fprintf(fstats,
" error: invalid interval (%e, %e)\n", a, b);
187 if (a >= lmax || b <= lmin) {
189 fprintf(fstats,
" error: interval (%e, %e) is outside (%e %e) \n",
void csr_resize(int nrow, int ncol, int nnz, csrMat *csr)
memory allocation for csr matrix
void CGS_DGKS(int n, int k, int i_max, double *Q, double *v, double *nrmv, double *w)
Classical GS reortho with Daniel, Gragg, Kaufman, Stewart test.
void save_vec(int n, const double *x, const char fn[])
int SymmTridEig(double *eigVal, double *eigVec, int n, const double *diag, const double *sdiag)
compute all eigenvalues and eigenvectors of a symmetric tridiagonal matrix
int speye(int n, csrMat *A)
return an identity matrix of dimension n
void vecset(int n, double t, double *v)
int chebxPltd(int m, double *mu, int n, double *xi, double *yi)
function yi = chebxPltd computes yi = p_mu (xi),
void savemat(csrMat *A, const char *fn)
void vec_iperm(int n, int *p, double *x, double *y)
void simpson(double *xi, double *yi, int npts)
real *8 function ffun(x, y, z)
complex double integg2(complex double s1, complex double s2, complex double *alp, int k1, complex double *bet, int k2, double a, double b)
Integration of 1/[(z-s1)^k1 (z-s2)^k2] from a to b.
int pnav(double *mu, const int m, const double cc, const double dd, double *v, double *y, double *w)
void contQuad(int method, int n, complex double *zk)
Compute the locations of the poles.
double isqrt(const double a)
void SymEigenSolver(int n, double *A, int lda, double *Q, int ldq, double *lam)
interface to LAPACK SYMMETRIC EIGEN-SOLVER
evslStat evslstat
global statistics of EVSL
void ratf2p2(int n, int *mulp, complex double *zk, complex double *alp, int m, double *z, double *x)
Compute the function value of the multiple pole rational filter at real locations.
double rec(const double a)
int SymmTridEigS(double *eigVal, double *eigVec, int n, double vl, double vu, int *nevO, const double *diag, const double *sdiag)
compute eigenvalues and eigenvectors of a symmetric tridiagonal matrix in a slice ...
void pfe2(complex double s1, complex double s2, int k1, int k2, complex double *alp, complex double *bet)
Get the fraction expansion of 1/[(z-s1)^k1 (z-s2)^k2].
int matadd(double alp, double bet, csrMat *A, csrMat *B, csrMat *C, int *mapA, int *mapB)
matrix addition C = alp * A + bet * B
user-provided function and data for solving (A - SIGMA*B) x = b
sparse matrix format: the compressed sparse row (CSR) format, 0-based
void chext(polparams *pol, double aIn, double bIn)
Determines polynomial for end interval cases.
int dampcf(int m, int damping, double *jac)
Computes damping coefficient for cheb. expansions.
This file contains function prototypes and constant definitions for EVSL.
void CGS_DGKS2(int n, int k, int i_max, double *Z, double *Q, double *v, double *w)
Classical GS reortho. No test. just do i_max times used in generalized ev problems.
int apfun(const double c, const double h, const double *xi, double(*ffun)(double), const int npts, double *yi)
void orth(double *V, int n, int k, double *Vo, double *work)
Orthogonalize columns of n-by-k matrix V.
void triuCsr(csrMat *A, csrMat *U)
void sortrow(csrMat *A)
Sort each row of a csr by increasing column order By double transposition.
int lsPol(double(*ffun)(double), BSolDataPol *pol)
void vec_perm(int n, int *p, double *x, double *y)
int chebxCoefd(int m, double gam, int damping, double *mu)
evslData evsldata
global variable of EVSL
void RatFiltApply(int n, ratparams *rat, double *b, double *x, double *w3)
Apply rational filter R to a vetor b.
parameters for polynomial filter
int ChebAv(polparams *pol, double *v, double *y, double *w)
Computes y=P(A) v, where pn is a Cheb. polynomial expansion
void matvec_csr(double *x, double *y, void *data)
matvec for a CSR matrix, y = A*x. void *data points to csrMat, compatible form with EVSLMatvec (see s...
int time_seeder()
Uses the timer to generate a seed to be used for srand.
void weights(int n, complex double *zk, int *pow, double lambda, complex double *omega)
Compute the LS weight for each multiple pole.
double evsl_timer()
evsl timer for mac
void savedensemat(double *A, int lda, int m, int n, const char *fn)
int scaleweigthts(int n, double a, double b, complex double *zk, int *pow, complex double *omegaM)
Compute the weights and pole locations on [a, b].
parameters for rational filter