From 66c5b8184edecbae17808f157cf73ce0484701bb Mon Sep 17 00:00:00 2001 From: CismonX Date: Thu, 13 Dec 2018 22:33:28 +0800 Subject: [PATCH] Bug fix. Reformat code. --- src/calc.cpp | 20 +++++++++++++------- src/calc.hpp | 9 ++++++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/calc.cpp b/src/calc.cpp index ff9f26e..50362fd 100644 --- a/src/calc.cpp +++ b/src/calc.cpp @@ -165,11 +165,13 @@ namespace flow verbose_ = verbose; epsilon_ = epsilon; ignore_load_ = ignore_load; - if (short_circuit_node < 1 || short_circuit_node > num_nodes_) { - writer::error("Bad node ID for short circuit calculation."); + if (short_circuit_) { + if (short_circuit_node < 1 || short_circuit_node > num_nodes_) { + writer::error("Bad node ID for short circuit calculation."); + } + short_circuit_node_ = node_offset(short_circuit_node - 1); + z_f_ = z_f; } - short_circuit_node_ = node_offset(short_circuit_node - 1); - z_f_ = z_f; } std::pair calc::node_admittance() @@ -249,7 +251,7 @@ namespace flow auto i_p = 0; auto i_q = 0; auto i_v = 0; - e_.resize(num_nodes_); + e_.set_size(num_nodes_); for (auto&& node : nodes_) { if (node.type == node_data::pq) { init_p_[i_p] = -node.p; @@ -342,11 +344,15 @@ namespace flow const auto x_vec = spsolve(j_, f_x_, "superlu"); vec_elem_foreach(f_, [&x_vec](auto& elem, auto row) { - elem += x_vec.at(2 * row, 0); + if (2 * row < x_vec.n_elem) { + elem += x_vec.at(2 * row, 0); + } }); vec_elem_foreach(e_, [&x_vec](auto& elem, auto row) { - elem += x_vec.at(2 * row + 1, 0); + if (2 * row + 1 < x_vec.n_elem) { + elem += x_vec.at(2 * row + 1, 0); + } }); if (verbose_) { writer::println("Correction vector of voltage (real):"); diff --git a/src/calc.hpp b/src/calc.hpp index 17a7d1a..0c7afc6 100644 --- a/src/calc.hpp +++ b/src/calc.hpp @@ -213,9 +213,11 @@ namespace flow template static void mat_elem_foreach(M& mat, F func) { - for (auto row = 0U; row < mat.n_rows; ++row) - for (auto col = 0U; col < mat.n_cols; ++col) + for (auto row = 0U; row < mat.n_rows; ++row) { + for (auto col = 0U; col < mat.n_cols; ++col) { func(mat.at(row, col), row, col); + } + } } /** @@ -227,8 +229,9 @@ namespace flow template static void vec_elem_foreach(V& vec, F func) { - for (auto i = 0U; i < vec.n_elem; ++i) + for (auto i = 0U; i < vec.n_elem; ++i) { func(vec[i], i); + } } /**