From c47b6e6e4ce29c87d6ce2542e3056a5df9d874a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Fri, 5 Oct 2018 17:14:27 +0200 Subject: [PATCH] Fix bug with notmpterms option Commit c6cb9aa1b8db8cf61883097d1c747a3b05eb7e4e was not the right fix. --- src/ModelTree.cc | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/ModelTree.cc b/src/ModelTree.cc index 72745c88..d2d35b65 100644 --- a/src/ModelTree.cc +++ b/src/ModelTree.cc @@ -1256,36 +1256,34 @@ ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms) reference_count[v] = { ExprNode::min_cost(is_matlab)+1, NodeTreeReference::residuals }; } - /* When option notmpterms is set, we only need to process model local - variables (and turn them into temporary terms); no need to go further */ - if (no_tmp_terms) - return; - map temp_terms_map; temp_terms_map[NodeTreeReference::residuals] = temporary_terms_res; temp_terms_map[NodeTreeReference::firstDeriv] = temporary_terms_g1; temp_terms_map[NodeTreeReference::secondDeriv] = temporary_terms_g2; temp_terms_map[NodeTreeReference::thirdDeriv] = temporary_terms_g3; - for (auto & equation : equations) - equation->computeTemporaryTerms(reference_count, - temp_terms_map, - is_matlab, NodeTreeReference::residuals); + if (!no_tmp_terms) + { + for (auto & equation : equations) + equation->computeTemporaryTerms(reference_count, + temp_terms_map, + is_matlab, NodeTreeReference::residuals); - for (auto & first_derivative : first_derivatives) - first_derivative.second->computeTemporaryTerms(reference_count, - temp_terms_map, - is_matlab, NodeTreeReference::firstDeriv); + for (auto & first_derivative : first_derivatives) + first_derivative.second->computeTemporaryTerms(reference_count, + temp_terms_map, + is_matlab, NodeTreeReference::firstDeriv); - for (auto & second_derivative : second_derivatives) - second_derivative.second->computeTemporaryTerms(reference_count, - temp_terms_map, - is_matlab, NodeTreeReference::secondDeriv); + for (auto & second_derivative : second_derivatives) + second_derivative.second->computeTemporaryTerms(reference_count, + temp_terms_map, + is_matlab, NodeTreeReference::secondDeriv); - for (auto & third_derivative : third_derivatives) - third_derivative.second->computeTemporaryTerms(reference_count, - temp_terms_map, - is_matlab, NodeTreeReference::thirdDeriv); + for (auto & third_derivative : third_derivatives) + third_derivative.second->computeTemporaryTerms(reference_count, + temp_terms_map, + is_matlab, NodeTreeReference::thirdDeriv); + } for (map::const_iterator it = temp_terms_map.begin(); it != temp_terms_map.end(); it++) @@ -1301,8 +1299,8 @@ ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms) it != temporary_terms_mlv.end(); it++) temporary_terms_idxs[it->first] = idx++; - for (auto temporary_terms_re : temporary_terms_res) - temporary_terms_idxs[temporary_terms_re] = idx++; + for (auto it : temporary_terms_res) + temporary_terms_idxs[it] = idx++; for (auto it : temporary_terms_g1) temporary_terms_idxs[it] = idx++;