|
|
|
|
@ -199,33 +199,33 @@ int main(int argc, char **argv) {
|
|
|
|
|
PetscLogDouble lapack_time = lapack_end_time - lapack_start_time;
|
|
|
|
|
PetscCall(PetscPrintf(PETSC_COMM_WORLD, "[Arnoldi] LAPACK time: %f seconds\n", lapack_time));
|
|
|
|
|
|
|
|
|
|
// // print Hessenberg matrix
|
|
|
|
|
// printf("H = \n");
|
|
|
|
|
// for (int i = 0; i < l + 1; i++) {
|
|
|
|
|
// for (int j = 0; j < l; j++) {
|
|
|
|
|
// printf("%.3f ", H[i * l + j]);
|
|
|
|
|
// }
|
|
|
|
|
// printf("\n");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // sort eigenvalues
|
|
|
|
|
// for (int i = 0; i < l; i++) {
|
|
|
|
|
// for (int j = i + 1; j < l; j++) {
|
|
|
|
|
// if (wr[i] > wr[j]) {
|
|
|
|
|
// swap(&wr[i], &wr[j]);
|
|
|
|
|
// swap(&wi[i], &wi[j]);
|
|
|
|
|
// for (int k = 0; k < l; k++) {
|
|
|
|
|
// swap(&z[i * l + k], &z[j * l + k]);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // print eigenvalues
|
|
|
|
|
// printf("Eigenvalues = \n");
|
|
|
|
|
// for (int i = 0; i < l; i++) {
|
|
|
|
|
// printf("%.3f + %.3f i\n", wr[i], wi[i]);
|
|
|
|
|
// }
|
|
|
|
|
// print Hessenberg matrix
|
|
|
|
|
printf("H = \n");
|
|
|
|
|
for (int i = 0; i < l + 1; i++) {
|
|
|
|
|
for (int j = 0; j < l; j++) {
|
|
|
|
|
printf("%.2f ", H[i * l + j]);
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// sort eigenvalues
|
|
|
|
|
for (int i = 0; i < l; i++) {
|
|
|
|
|
for (int j = i + 1; j < l; j++) {
|
|
|
|
|
if (wr[i] > wr[j]) {
|
|
|
|
|
swap(&wr[i], &wr[j]);
|
|
|
|
|
swap(&wi[i], &wi[j]);
|
|
|
|
|
for (int k = 0; k < l; k++) {
|
|
|
|
|
swap(&z[i * l + k], &z[j * l + k]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// print eigenvalues
|
|
|
|
|
printf("Eigenvalues = \n");
|
|
|
|
|
for (int i = 0; i < l; i++) {
|
|
|
|
|
printf("%.3f + %.3f i\n", wr[i], wi[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// print eigenvectors
|
|
|
|
|
|