diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index b1e3af607f592a69681be9305a30da5f403c494c..629b3ec351291b7980bcb9727fd2bfbd9ae98796 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -5603,6 +5603,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); @@ -5778,7 +5781,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] << ", "; @@ -5866,7 +5869,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 2545cafe7edc7ebb2ec905c99fe931efc39093a3..5fbd7fd889e3dea593344c16d0c15fe52ff9fd07 100644 --- a/src/ModelTree.cc +++ b/src/ModelTree.cc @@ -1356,7 +1356,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 @@ -1380,19 +1380,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 77741fa930b8c82cc5cf49605859550b4c8f754d..a5cc30c8cfdd98dd47b4ad54f03b784618acad71 100644 --- a/src/ModelTree.hh +++ b/src/ModelTree.hh @@ -257,7 +257,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, bool dynamic, bool steady_dynamic, const temporary_terms_t &temporary_terms_union, const temporary_terms_idxs_t &temporary_terms_idxs) const; diff --git a/src/StaticModel.cc b/src/StaticModel.cc index ebfb747d6458fc84deceff3a8938b384532a9016..ad5fd35dc41d3d52b67eedcd039d0f6a5e30de83 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -2245,6 +2245,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); } @@ -2257,7 +2260,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] << ", "; @@ -2344,7 +2347,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)