3
\brief Sort eigenvalues and eigenvectors in ascending or descending order
13
** eigsort(): Sort the eigenvalues in d and eigenvectors in v in ascending
14
** (n>0) or descending (n<0) order. abs(n) is the number of eigenvalues.
16
** \param d = array of eigenvalues
17
** \param v = matrix of eigenvectors (each column is an eigenvector)
18
** Note: seems to assume v is a square matrix, could be a
19
** problem if, e.g., nmo != nso.
20
** \param n = abs(n) is the number of eigenvalues/cols of v. Use
21
** n>0 to sort in ascending order, n<0 to sort in descending
28
void eigsort(double *d, double **v, int n)
33
/* Modified by Ed Valeev - if n is negative,
34
sort eigenvalues in descending order */
37
for (i=0; i < n-1 ; i++) {
40
for (j=i+1; j < n; j++) {
49
for (j=0; j < n; j++) {
59
for (i=0; i < n-1 ; i++) {
62
for (j=i+1; j < n; j++) {
71
for (j=0; j < n; j++) {
83
** mosort(): Minor modification of eigsort() to also sort a series of
86
** \param d = array of eigenvalues
87
** \param v = matrix of eigenvectors (each column is an eigenvector)
88
** \param sym = array of symmetry ID's (irreps)
89
** \param nso = number of rows in v
90
** \param nmo = abs(nmo) is the number of eigenvalues/cols of v. Use
91
** nmo>0 to sort in ascending order, nmo<0 to sort in descending
99
void mosort(double *d, double **v, int *sym, int nso, int nmo)
105
for (i=0; i < nmo-1 ; i++) {
108
for (j=i+1; j < nmo; j++) {
122
for (j=0; j < nso; j++) {
132
for (i=0; i < nmo-1 ; i++) {
135
for (j=i+1; j < nmo; j++) {
149
for (j=0; j < nso; j++) {