From 99caf8833a29a694fefe1b74841e491cc2d761bc Mon Sep 17 00:00:00 2001 From: Andrew Melim Date: Tue, 14 Oct 2014 23:46:12 -0400 Subject: [PATCH] Finished ordering implementation --- gtsam/inference/Ordering.cpp | 18 ++++++++++++++---- gtsam/inference/tests/testOrdering.cpp | 11 +++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/gtsam/inference/Ordering.cpp b/gtsam/inference/Ordering.cpp index d8c590361..99b116009 100644 --- a/gtsam/inference/Ordering.cpp +++ b/gtsam/inference/Ordering.cpp @@ -207,18 +207,28 @@ namespace gtsam { vector adj = met.adj(); vector perm, iperm; + + idx_t size = xadj.size() - 1; + for (int i = 0; i < size; i++) + { + perm.push_back(0); + iperm.push_back(0); + } + int outputError; - idx_t size = xadj.size(); - outputError = METIS_NodeND(&size, xadj.data(), adj.data(), NULL, NULL, perm.data(), iperm.data()); + + outputError = METIS_NodeND(&size, &xadj[0], &adj[0], NULL, NULL, &perm[0], &iperm[0]); Ordering result; if (outputError != METIS_OK) { - std::cout << "METIS ordering error!\n"; + std::cout << "METIS failed during Nested Dissection ordering!\n"; return result; } - + result.resize(size); + for (size_t j = 0; j < size; ++j) + result[j] = perm[j]; return result; } diff --git a/gtsam/inference/tests/testOrdering.cpp b/gtsam/inference/tests/testOrdering.cpp index 22c86e191..90e1cbe66 100644 --- a/gtsam/inference/tests/testOrdering.cpp +++ b/gtsam/inference/tests/testOrdering.cpp @@ -119,14 +119,13 @@ TEST(Ordering, csr_format) { } /* ************************************************************************* */ TEST(Ordering, metis) { - + SymbolicFactorGraph sfg; - sfg.push_factor(0, 1); - sfg.push_factor(1, 2); - sfg.push_factor(2, 3); - sfg.push_factor(3, 4); - Ordering::METIS(sfg); + sfg.push_factor(0, 1); + sfg.push_factor(1, 2); + + Ordering metis = Ordering::METIS(sfg); } /* ************************************************************************* */ int main() { TestResult tr; return TestRegistry::runAllTests(tr); }