diff options
author | Gard Spreemann <gard.spreemann@epfl.ch> | 2017-10-10 15:00:09 +0200 |
---|---|---|
committer | Gard Spreemann <gard.spreemann@epfl.ch> | 2017-10-10 15:00:09 +0200 |
commit | 523afa5a86657bb3a2a44415191bc0ce49e07568 (patch) | |
tree | af69f2ef9f061e53f4cbe0531cfdae3b21be7ff6 | |
parent | 88697fc31fee0c89ec0eb5a4f477e9048dd81bde (diff) |
Save eigenvectors too.
-rw-r--r-- | src/main.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/main.cpp b/src/main.cpp index f8904b8..d5a731f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,8 +10,9 @@ int main(int argc, char ** argv) SlepcInitialize(&argc, &argv, NULL, NULL); std::string infile(argv[1]); - std::string outfile(argv[2]); - + std::string outfile_vals(argv[2]); + std::string outfile_vecs(argv[3]); + PetscMPIInt mpi_rank; PetscMPIInt mpi_size; MPI_Comm_rank(PETSC_COMM_WORLD, &mpi_rank); @@ -70,10 +71,12 @@ int main(int argc, char ** argv) VecScatter scatter; err = VecScatterCreateToZero(vec, &scatter, &vec_r0); CHKERRQ(err); - std::ofstream ofs; + std::ofstream ofs_vals; + std::ofstream ofs_vecs; if (mpi_rank == 0) { - ofs.open(outfile, std::ios::out); + ofs_vals.open(outfile_vals, std::ios::out); + ofs_vecs.open(outfile_vecs, std::ios::out); } for (PetscInt i = 0; i < num_ev; i++) @@ -84,30 +87,32 @@ int main(int argc, char ** argv) if (std::abs(val) < cutoff) { estimated_betti++; + } - err = VecScatterBegin(scatter, vec, vec_r0, INSERT_VALUES, SCATTER_FORWARD); CHKERRQ(err); - err = VecScatterEnd(scatter, vec, vec_r0, INSERT_VALUES, SCATTER_FORWARD); CHKERRQ(err); + err = VecScatterBegin(scatter, vec, vec_r0, INSERT_VALUES, SCATTER_FORWARD); CHKERRQ(err); + err = VecScatterEnd(scatter, vec, vec_r0, INSERT_VALUES, SCATTER_FORWARD); CHKERRQ(err); - if (mpi_rank == 0) + if (mpi_rank == 0) + { + ofs_vals << val << std::endl; + PetscReal * tmp; + err = VecGetArray(vec_r0, &tmp); CHKERRQ(err); + for (PetscInt j = 0; j < vec_size; j++) { - PetscReal * tmp; - err = VecGetArray(vec_r0, &tmp); CHKERRQ(err); - for (PetscInt j = 0; j < vec_size; j++) - { - ofs << tmp[j] << " "; - } - ofs << std::endl; - err = VecRestoreArray(vec_r0, &tmp); CHKERRQ(err); + ofs_vecs << tmp[j] << " "; } + ofs_vecs << std::endl; + err = VecRestoreArray(vec_r0, &tmp); CHKERRQ(err); } } - + PetscPrintf(PETSC_COMM_WORLD, "Estimated Betti number: %d.\n", estimated_betti); if (mpi_rank == 0) { - ofs.close(); + ofs_vals.close(); + ofs_vecs.close(); } err = VecScatterDestroy(&scatter); CHKERRQ(err); |