arpackff.hpp
来自「FreeFem++可以生成高质量的有限元网格。可以用于流体力学」· HPP 代码 · 共 440 行 · 第 1/2 页
HPP
440 行
/* The freefem++ arpack interface without arpack ++ aprack++ is do too much c++ error with modern compiler but a by tanks to arpack++ for the idea of this code F. Hecht. */// Change V[1] -> V[0]// Change workev[1] -> workev[0]#ifndef ARPACKFF_HPP#define ARPACKFF_HPP#include "error.hpp"typedef int integer;typedef int logical;#define F77NAME(x) x ## _#define HIDDEN_HBW ,int,int,int#define HIDDEN_BW ,int,int#define HIDDEN_12 ,1,2#define HIDDEN_112 ,1,1,2extern "C"{ /*// debug "common" statement. struct { integer logfil, ndigit, mgetv0; integer msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd; integer mnaupd, mnaup2, mnaitr, mneigt, mnapps, mngets, mneupd; integer mcaupd, mcaup2, mcaitr, mceigt, mcapps, mcgets, mceupd; } F77NAME(debug); // add FH pour lib dynamic so win 32 struct { integer nopx, nbx, nrorth, nitref, nrstrt; float tsaupd, tsaup2, tsaitr, tseigt, tsgets, tsapps, tsconv, tnaupd, tnaup2, tnaitr, tneigh, tngets, tnapps, tnconv, tcaupd, tcaup2, tcaitr, tceigh, tcgets, tcapps, tcconv, tmvopx, tmvbx, tgetv0, titref, trvec; } F77NAME(timing);*/// double precision symmetric routines. void F77NAME(dsaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, double *tol, double *resid, integer *ncv, double *V, integer *ldv, integer *iparam, integer *ipntr, double *workd, double *workl, integer *lworkl, integer *info HIDDEN_BW); void F77NAME(dseupd)(logical *rvec, char *HowMny, logical *select, double *d, double *Z, integer *ldz, double *sigma, char *bmat, integer *n, char *which, integer *nev, double *tol, double *resid, integer *ncv, double *V, integer *ldv, integer *iparam, integer *ipntr, double *workd, double *workl, integer *lworkl, integer *info HIDDEN_HBW );// double precision nonsymmetric routines. void F77NAME(dnaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, double *tol, double *resid, integer *ncv, double *V, integer *ldv, integer *iparam, integer *ipntr, double *workd, double *workl, integer *lworkl, integer *info HIDDEN_BW); void F77NAME(dneupd)(logical *rvec, char *HowMny, logical *select, double *dr, double *di, double *Z, integer *ldz, double *sigmar, double *sigmai, double *workev, char *bmat, integer *n, char *which, integer *nev, double *tol, double *resid, integer *ncv, double *V, integer *ldv, integer *iparam, integer *ipntr, double *workd, double *workl, integer *lworkl, integer *info HIDDEN_HBW);// single precision symmetric routines. void F77NAME(ssaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, float *tol, float *resid, integer *ncv, float *V, integer *ldv, integer *iparam, integer *ipntr, float *workd, float *workl, integer *lworkl, integer *info HIDDEN_BW); void F77NAME(sseupd)(logical *rvec, char *HowMny, logical *select, float *d, float *Z, integer *ldz, float *sigma, char *bmat, integer *n, char *which, integer *nev, float *tol, float *resid, integer *ncv, float *V, integer *ldv, integer *iparam, integer *ipntr, float *workd, float *workl, integer *lworkl, integer *info HIDDEN_HBW);// single precision nonsymmetric routines. void F77NAME(snaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, float *tol, float *resid, integer *ncv, float *V, integer *ldv, integer *iparam, integer *ipntr, float *workd, float *workl, integer *lworkl, integer *info HIDDEN_BW); void F77NAME(sneupd)(logical *rvec, char *HowMny, logical *select, float *dr, float *di, float *Z, integer *ldz, float *sigmar, float *sigmai, float *workev, char *bmat, integer *n, char *which, integer *nev, float *tol, float *resid, integer *ncv, float *V, integer *ldv, integer *iparam, integer *ipntr, float *workd, float *workl, integer *lworkl, integer *info HIDDEN_HBW); void F77NAME(cnaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, float *tol, complex<float> *resid, integer *ncv, complex<float> *V, integer *ldv, integer *iparam, integer *ipntr, complex<float> *workd, complex<float> *workl, integer *lworkl, float *rwork, integer *info HIDDEN_BW); void F77NAME(cneupd)(logical *rvec, char *HowMny, logical *select, complex<float> *d, complex<float> *Z, integer *ldz, complex<float> *sigma, complex<float> *workev, char *bmat, integer *n, char *which, integer *nev, float *tol, complex<float> *resid, integer *ncv, complex<float> *V, integer *ldv, integer *iparam, integer *ipntr, complex<float> *workd, complex<float> *workl, integer *lworkl, float *rwork, integer *info HIDDEN_HBW);// double precision complex routines. void F77NAME(znaupd)(integer *ido, char *bmat, integer *n, char *which, integer *nev, double *tol, complex<double> *resid, integer *ncv, complex<double> *V, integer *ldv, integer *iparam, integer *ipntr, complex<double> *workd, complex<double> *workl, integer *lworkl, double *rwork, integer *info HIDDEN_BW); void F77NAME(zneupd)(logical *rvec, char *HowMny, logical *select, complex<double> *d, complex<double> *Z, integer *ldz, complex<double> *sigma, complex<double> *workev, char *bmat, integer *n, char *which, integer *nev, double *tol, complex<double> *resid, integer *ncv, complex<double> *V, integer *ldv, integer *iparam, integer *ipntr, complex<double> *workd, complex<double> *workl, integer *lworkl, double *rwork, integer *info HIDDEN_HBW);}inline void saupp(int& ido, char bmat, int n, char* which, int nev, double& tol, double resid[], int ncv, double V[], int ldv, int iparam[], int ipntr[], double workd[], double workl[], int lworkl, int& info){ F77NAME(dsaupd)(&ido, &bmat, &n, which, &nev, &tol, resid, &ncv, &V[0], &ldv, &iparam[1], &ipntr[1], &workd[1], &workl[1], &lworkl, &info HIDDEN_12);} // saupp (double).inline void saupp(int& ido, char bmat, int n, char* which, int nev, float& tol, float resid[], int ncv, float V[], int ldv, int iparam[], int ipntr[], float workd[], float workl[], int lworkl, int& info){ F77NAME(ssaupd)(&ido, &bmat, &n, which, &nev, &tol, resid, &ncv, &V[0], &ldv, &iparam[1], &ipntr[1], &workd[1], &workl[1], &lworkl, &info HIDDEN_12);} // saupp (float).inline void seupp(bool rvec, char HowMny, double d[], double Z[], int ldz, double sigma, char bmat, int n, char* which, int nev, double tol, double resid[], int ncv, double V[], int ldv, int iparam[], int ipntr[], double workd[], double workl[], int lworkl, int& info){ int irvec; logical* iselect; double* iZ; irvec = (int) rvec; iselect = new logical[ncv]; iZ = (Z == NULL) ? &V[0] : Z; F77NAME(dseupd)(&irvec, &HowMny, iselect, d, iZ, &ldz, &sigma, &bmat, &n, which, &nev, &tol, resid, &ncv, &V[0], &ldv, &iparam[1], &ipntr[1], &workd[1], &workl[1], &lworkl, &info HIDDEN_112); delete[] iselect;} // seupp (double).inline void seupp(bool rvec, char HowMny, float d[], float Z[], int ldz, float sigma, char bmat, int n, char* which, int nev, float tol, float resid[], int ncv, float V[], int ldv, int iparam[], int ipntr[], float workd[], float workl[], int lworkl, int& info){ int irvec; logical* iselect; float* iZ;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?