- template<> void lapackEig<float>(char jobvl, char jobvr, int n, float *a, int lda, float *w, float* vl, int ldvl, float *vr, int ldvr, float *work, int lwork, float *rwork, int *info) {
- // lapack [sd]geev wants to separate output arrays: wr and wi for the real
- // and imaginary parts
- float *wr = w;
- float *wi = w ? w + n : nullptr;
- (void)rwork; // unused
- sgeev_(&jobvl, &jobvr, &n, a, &lda, wr, wi, vl, &ldvl, vr, &ldvr, work, &lwork, info);
- }
- template<> void lapackEig<c10::complex<double>, double>(char jobvl, char jobvr, int n, c10::complex<double> *a, int lda, c10::complex<double> *w, c10::complex<double> *vl, int ldvl, c10::complex<double> *vr, int ldvr, c10::complex<double> *work, int lwork, double *rwork, int *info) {
- zgeev_(&jobvl, &jobvr, &n,
- reinterpret_cast<std::complex<double>*>(a), &lda,
- reinterpret_cast<std::complex<double>*>(w),
- reinterpret_cast<std::complex<double>*>(vl), &ldvl,
- reinterpret_cast<std::complex<double>*>(vr), &ldvr,
- reinterpret_cast<std::complex<double>*>(work), &lwork,
- rwork, info);
- }
- template<> void lapackEig<c10::complex<float>, float>(char jobvl, char jobvr, int n, c10::complex<float> *a, int lda, c10::complex<float> *w, c10::complex<float> *vl, int ldvl, c10::complex<float> *vr, int ldvr, c10::complex<float> *work, int lwork, float *rwork, int *info) {