// note: both H and S are overwritten. Eigenvectors go into H. void DiagonalizeGen(double *pEw, double *pH, uint ldH, double *pS, uint ldS, uint N) { FORTINT info = 0, nWork = 128*N; double *pWork = (double*)::malloc(sizeof(double)*nWork); DSYGV(1, 'V', 'L', N, pH, ldH, pS, ldS, pEw, pWork, nWork, info ); ::free(pWork); if ( info != 0 ) throw std::runtime_error("dsygv failed."); };
inline static void f( INTEGER * ITYPE, char * JOBZ, char * UPLO, INTEGER * N, double * A, INTEGER * LDA, double * B, INTEGER * LDB, double * W, double * WORK, INTEGER * LWORK, INTEGER * INFO) { DSYGV( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO ); }