diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 9077c5e5aaf238d846dd27e396eb41cabc866483..3bedee10c32babec6dc77eb76390ceb403244e24 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -6832,6 +6832,9 @@ DynamicModel::isChecksumMatching(const string &basename, bool block) const void DynamicModel::writeJsonOutput(ostream &output) const { + deriv_node_temp_terms_t tef_terms; + writeJsonModelLocalVariables(output, false, tef_terms); + output << ", "; writeJsonModelEquations(output, false); output << ", "; writeJsonXrefs(output); @@ -7025,7 +7028,7 @@ DynamicModel::writeJsonComputingPassOutput(ostream &output, bool writeDetails) c deriv_node_temp_terms_t tef_terms; temporary_terms_t temp_term_union; - writeJsonModelLocalVariables(model_local_vars_output, tef_terms); + writeJsonModelLocalVariables(model_local_vars_output, true, tef_terms); writeJsonTemporaryTerms(temporary_terms_derivatives[0], temp_term_union, d_output[0], tef_terms, ""); d_output[0] << ", "; @@ -7113,7 +7116,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails) ostringstream g3p_output; // 1st deriv. of 3rd deriv. matrix w.r.t. parameters deriv_node_temp_terms_t tef_terms; - writeJsonModelLocalVariables(model_local_vars_output, tef_terms); + writeJsonModelLocalVariables(model_local_vars_output, true, tef_terms); temporary_terms_t temp_term_union; for (const auto &it : params_derivs_temporary_terms) diff --git a/src/ModelTree.cc b/src/ModelTree.cc index a8348e7ac699a5004bae996560adfc227a13d711..a4cef4dcaebf8b8db25ad9e6ee8e29f6a35562d8 100644 --- a/src/ModelTree.cc +++ b/src/ModelTree.cc @@ -1616,7 +1616,7 @@ ModelTree::compileTemporaryTerms(ostream &code_file, unsigned int &instruction_n } void -ModelTree::writeJsonModelLocalVariables(ostream &output, deriv_node_temp_terms_t &tef_terms) const +ModelTree::writeJsonModelLocalVariables(ostream &output, bool write_tef_terms, deriv_node_temp_terms_t &tef_terms) const { /* Collect all model local variables appearing in equations, and print only them. Printing unused model local variables can lead to a crash (see @@ -1640,19 +1640,22 @@ ModelTree::writeJsonModelLocalVariables(ostream &output, deriv_node_temp_terms_t printed = true; int id = it; - vector<string> efout; expr_t value = local_variables_table.find(id)->second; - value->writeJsonExternalFunctionOutput(efout, tt, tef_terms); - for (auto it1 = efout.begin(); it1 != efout.end(); ++it1) + if (write_tef_terms) { - if (it1 != efout.begin()) + vector<string> efout; + value->writeJsonExternalFunctionOutput(efout, tt, tef_terms); + for (auto it1 = efout.begin(); it1 != efout.end(); ++it1) + { + if (it1 != efout.begin()) + output << ", "; + output << *it1; + } + + if (!efout.empty()) output << ", "; - output << *it1; } - if (!efout.empty()) - output << ", "; - output << R"({"variable": ")" << symbol_table.getName(id) << R"(", "value": ")"; value->writeJsonOutput(output, tt, tef_terms); diff --git a/src/ModelTree.hh b/src/ModelTree.hh index 7f5c5686a614b3416428ba9516e3c46c11046796..b3502c365636c123c4ad37ea6f5384a73ca0ecb1 100644 --- a/src/ModelTree.hh +++ b/src/ModelTree.hh @@ -205,7 +205,9 @@ protected: //! if residuals = true, we are writing the dynamic/static model. //! Otherwise, just the model equations (with line numbers, no tmp terms) void writeJsonModelEquations(ostream &output, bool residuals) const; - void writeJsonModelLocalVariables(ostream &output, deriv_node_temp_terms_t &tef_terms) const; + /* Writes JSON model local variables. + Optionally put the external function variable calls into TEF terms */ + void writeJsonModelLocalVariables(ostream &output, bool write_tef_terms, deriv_node_temp_terms_t &tef_terms) const; //! Compiles model equations void compileModelEquations(ostream &code_file, unsigned int &instruction_number, const temporary_terms_t &tt, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic) const; diff --git a/src/StaticModel.cc b/src/StaticModel.cc index 99ceef31c283668e4f8dfc25a60ad64cc3450477..7609e1560435a9b4ea7cd268882dfc20b0a939e9 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -2753,6 +2753,9 @@ StaticModel::writeParamsDerivativesFile(const string &basename, bool julia) cons void StaticModel::writeJsonOutput(ostream &output) const { + deriv_node_temp_terms_t tef_terms; + writeJsonModelLocalVariables(output, false, tef_terms); + output << ", "; writeJsonModelEquations(output, false); } @@ -2765,7 +2768,7 @@ StaticModel::writeJsonComputingPassOutput(ostream &output, bool writeDetails) co deriv_node_temp_terms_t tef_terms; temporary_terms_t temp_term_union; - writeJsonModelLocalVariables(model_local_vars_output, tef_terms); + writeJsonModelLocalVariables(model_local_vars_output, true, tef_terms); writeJsonTemporaryTerms(temporary_terms_derivatives[0], temp_term_union, d_output[0], tef_terms, ""); d_output[0] << ", "; @@ -2852,7 +2855,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails) ostringstream third_derivs1_output; // Used for storing third order derivatives equations deriv_node_temp_terms_t tef_terms; - writeJsonModelLocalVariables(model_local_vars_output, tef_terms); + writeJsonModelLocalVariables(model_local_vars_output, true, tef_terms); temporary_terms_t temp_term_union; for (const auto &it : params_derivs_temporary_terms)