1234{
1235 int size =
static_cast<int>(A->
numRows());
1236 if (size !=
static_cast<int>(A->
numColumns()))
1237 {
1238 ERROR(
"expected a square matrix");
1239 return false;
1240 }
1241
1242 if (size == 0)
1243 {
1244 eigvals->resize(0, 1);
1245 return true;
1246 }
1247
1248 bool ret = true;
1249 char dont = 'N';
1250 int info;
1251 int wsize = 2 * size;
1252 int rsize = 2 * size;
1253 double *workspace = new double[2*wsize];
1254 double *rwork = new double[rsize];
1255
1257 std::vector<double> evals(2 * size);
1258
1260 &dont,
1261 &size,
1262 copyA.data(),
1263 &size,
1264 evals.data(),
1265 static_cast<double *>(nullptr),
1266 &size,
1267 static_cast<double *>(nullptr),
1268 &size,
1269 workspace,
1270 &wsize,
1271 rwork,
1272 &info);
1273
1274 if (info < 0)
1275 {
1276 ERROR(
"argument passed to zgeev had an illegal value");
1277 ret = false;
1278 }
1279 else if (info > 0)
1280 {
1281 ERROR(
"the QR algorithm in zgeev failed to compute all eigvals");
1282 ret = false;
1283 }
1284 else
1285 {
1286 eigvals->resize(size, 1);
1288 }
1289
1290 delete[] workspace;
1291 delete[] rwork;
1292
1293 return ret;
1294}
size_t numColumns() const
std::vector< double > make_lapack_array(const DMatRR &mat)
void fill_from_lapack_array(const std::vector< double > &doubles, DMatRR &mat)
int zgeev_(char *n, char *n2, int *size, double *M, int *size1, double *E, double *l, int *lsize, double *r, int *rsize, double *w, int *wsize, double *rwork, int *info)