From b5d57bcd5707f777d72ffd4a9efe838b09d93024 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 7 Dec 2023 01:50:12 -0700 Subject: [PATCH] Add ssc_module_exec_with_error per @dguittet with filtering to fix #1105 --- ssc/cmod_hybrid.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/ssc/cmod_hybrid.cpp b/ssc/cmod_hybrid.cpp index 0d2e3e9e6..b0a620759 100644 --- a/ssc/cmod_hybrid.cpp +++ b/ssc/cmod_hybrid.cpp @@ -51,6 +51,25 @@ class cm_hybrid : public compute_module { add_var_info(_cm_vtab_hybrid); } + + void ssc_module_exec_with_error(ssc_module_t module, var_table& input, std::string compute_module) { + if (!ssc_module_exec(module, static_cast(&input))) { + std::string str = std::string(compute_module) + " execution error.\n"; + int idx = 0; + int type = -1; + while (const char* msg = ssc_module_log(module, idx++, &type, nullptr)) + { + if (/*/(type == SSC_NOTICE) || */(type == SSC_WARNING) || (type == SSC_ERROR)) { + str += "\t"; + str += std::string(msg); + str += "\n\n"; + } + } + ssc_module_free(module); + throw std::runtime_error(str); + } + } + void exec() { float percent = 0; @@ -120,8 +139,7 @@ class cm_hybrid : public compute_module var_table& input = compute_module_inputs->table; ssc_data_set_number(static_cast(&input), "en_batt", 0); - - ssc_module_exec(module, static_cast(&input)); + ssc_module_exec_with_error(module, input, compute_module); ssc_data_t compute_module_outputs = ssc_data_create(); @@ -297,7 +315,7 @@ class cm_hybrid : public compute_module throw exec_error("hybrid", "No input input_table found for ." + hybridVarTable); var_table& hybridinput = hybrid_inputs->table; input.merge(hybridinput, false); - ssc_module_exec(module, static_cast(&input)); + ssc_module_exec_with_error(module, input, compute_module); ssc_data_t compute_module_outputs = ssc_data_create(); @@ -415,7 +433,7 @@ class cm_hybrid : public compute_module ssc_data_set_number(static_cast(&input), "system_use_lifetime_output", 1); ssc_data_set_number(static_cast(&input), "en_batt", 1); // should be done at UI level - ssc_module_exec(module, static_cast(&input)); + ssc_module_exec_with_error(module, input, compute_module); ssc_data_t compute_module_outputs = ssc_data_create(); @@ -612,7 +630,7 @@ class cm_hybrid : public compute_module std::string compute_module = financials[i]; ssc_module_t module = ssc_module_create(compute_module.c_str()); - ssc_module_exec(module, static_cast(&input)); + ssc_module_exec_with_error(module, input, compute_module); int pidx = 0;