15 double rec(
const double a) { 
return 1.0 / a; }  
 
   17 double isqrt(
const double a) { 
return 1.0 / sqrt(a); }  
 
   22 void SetupBPol(
int n, 
int max_deg, 
double tol, 
double lmin, 
double lmax, 
 
   37 void SetupPolRec(
int n, 
int max_deg, 
double tol, 
double lmin, 
double lmax, 
 
   45 void SetupPolSqrt(
int n, 
int max_deg, 
double tol, 
double lmin, 
double lmax, 
 
   61 void BSolPol(
double *b, 
double *x, 
void *data) {
 
   83 int apfun(
const double c, 
const double h, 
const double *
const xi,
 
   84           double (*
ffun)(
double), 
const int npts, 
double *yi) {
 
   86   for (i = 0; i < npts; i++) {
 
   87     yi[i] = 
ffun(c + h * xi[i]);
 
  109 int pnav(
double *mu, 
const int m, 
const double cc, 
const double dd, 
double *v,
 
  110          double *y, 
double *w) {  
 
  114   double *vkp1 = w + n;
 
  115   double *vkm1 = vkp1 + n;
 
  119   const double t1 = 1.0 / dd;
 
  120   const double t2 = 2.0 / dd;
 
  122   memcpy(vk, v, n * 
sizeof(
double));
 
  123   memset(vkm1, 0, n * 
sizeof(
double));
 
  126   for (i = 0; i < n; i++) {
 
  130   for (k = 1; k <= m; k++) {
 
  132     t = k == 1 ? t1 : t2;
 
  137     for (i = 0; i < n; i++) {
 
  138       vkp1[i] = t * (vkp1[i] - cc * vk[i]) - vkm1[i];
 
  169   const double a = pol->
intv[0];
 
  170   const double b = pol->
intv[1];
 
  171   pol->
cc = (a + b) / 2;
 
  172   pol->
dd = (b - a) / 2;
 
  175   const int npts = maxDeg * 4;
 
  177   Malloc(theti, npts, 
double);
 
  180   for (i = 0; i < npts * 2; i += 2) {
 
  181     theti[i / 2] = (i + 1) * (
PI / (2 * npts));
 
  187   for (i = 0; i < npts; i++) {
 
  188     xi[i] = cos(theti[i]);
 
  198   const int ptsNrm = 50 * maxDeg;  
 
  199   Malloc(xi, ptsNrm, 
double);
 
  204   Malloc(yx, ptsNrm, 
double);
 
  211   Malloc(ya, ptsNrm, 
double);
 
  216   const double t1 = 1.0 / npts;
 
  217   const double t2 = 2.0 / npts;
 
  220   for (k = 0; k < maxDeg; k++) {
 
  221     for (i = 0; i < npts; i++) {
 
  222       yi[i] = cos(k * theti[i]);
 
  224     const double t = k == 0 ? t1 : t2;
 
  226     for (i = 0; i < npts; i++) {
 
  227       sum += yi[i] * gi[i];
 
  229     pol->
mu[k] = t * sum;
 
  232     for (i = 0; i < ptsNrm; i++) {
 
  233       na = (ya[i] - yx[i]) / yx[i];
 
  236     if (nrm < pol->tol) {
 
  258 int scalEigVec(
int n, 
int nev, 
double *Y, 
double* sqrtdiag) {
 
  266   for (i=0; i<nev; i++){
 
  268     for (j=0; j<n; j++) {
 
  269       v[j] = v[j]*sqrtdiag[j];
 
int lsPol(double(*ffun)(double), BSolDataPol *pol)
void SetupBPol(int n, int max_deg, double tol, double lmin, double lmax, double(*ffun)(double), BSolDataPol *data)
int chebxPltd(int m, double *mu, int npts, double *xi, double *yi)
function yi = chebxPltd computes yi = p_mu (xi), 
int pnav(double *mu, const int m, const double cc, const double dd, double *v, double *y, double *w)
int apfun(const double c, const double h, const double *const xi, double(*ffun)(double), const int npts, double *yi)
#define Calloc(base, nmem, type)
This file contains function prototypes and constant definitions internally used in EVSL...
real *8 function ffun(x, y, z)
double rec(const double a)
void SetupPolSqrt(int n, int max_deg, double tol, double lmin, double lmax, BSolDataPol *data)
#define Malloc(base, nmem, type)
This file contains function prototypes and constant definitions for EVSL. 
Defs for blaslapack routines. 
evslData evsldata
global variable of EVSL 
void linspace(double a, double b, int num, double *arr)
double isqrt(const double a)
void BSolPol(double *b, double *x, void *data)
void SetupPolRec(int n, int max_deg, double tol, double lmin, double lmax, BSolDataPol *data)
int scalEigVec(int n, int nev, double *Y, double *sqrtdiag)
void FreeBSolPolData(BSolDataPol *data)