summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGard Spreemann <gard.spreemann@epfl.ch>2017-10-10 15:00:09 +0200
committerGard Spreemann <gard.spreemann@epfl.ch>2017-10-10 15:00:09 +0200
commit523afa5a86657bb3a2a44415191bc0ce49e07568 (patch)
treeaf69f2ef9f061e53f4cbe0531cfdae3b21be7ff6
parent88697fc31fee0c89ec0eb5a4f477e9048dd81bde (diff)
Save eigenvectors too.
-rw-r--r--src/main.cpp39
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);