MCPcopy Create free account
hub / github.com/NatLabRockies/SAM / InvokeWithHandler

Method InvokeWithHandler

src/simulation.cpp:1128–1443  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1126
1127
1128bool Simulation::InvokeWithHandler(ISimulationHandler *ih, wxString folder)
1129{
1130 assert( 0 != ih );
1131
1132 m_totalElapsedMsec = 0;
1133 m_sscElapsedMsec = 0;
1134 wxStopWatch sw;
1135
1136 ssc_data_t p_data = ssc_data_create();
1137
1138 if ( m_simlist.size() == 0 )
1139 ih->Error("No simulation compute modules defined for this configuration.");
1140
1141 // hybrids (already gone through equations in Prepare)
1142 if (m_case->GetConfiguration()->Technology.size() > 1) {
1143 // set "input" table
1144 ssc_data_t p_input = ssc_data_create();
1145 // set "compute_modules"
1146 ssc_var_t p_compute_modules[10]; // only constant allowed here - assumes m_simlist.size() < 10
1147 for (size_t i = 0; i < m_simlist.size() && i<10; i++) {
1148 p_compute_modules[i] = ssc_var_create();
1149 ssc_var_set_string(p_compute_modules[i], m_simlist[i].c_str());
1150 }
1151 ssc_data_set_data_array(p_input, "compute_modules", &p_compute_modules[0], (int)m_simlist.size());
1152 for (size_t i = 0; i < m_simlist.size() && i < 10; i++)
1153 ssc_var_free(p_compute_modules[i]);
1154
1155 for (size_t i = 0; i < m_case->GetConfiguration()->Technology.size() && i < m_simlist.size(); i++) { // each vartable
1156 ssc_data_t p_val = ssc_data_create();
1157// m_case->Values(i).AsSSCData(p_val); // skips overrides
1158 m_inputs[i].AsSSCData(p_val); // includes overrides
1159 if (i == m_case->GetConfiguration()->Technology.size() - 1) // "Hybrid" captures all non-generators and non-battery and non-fuel cell compute modules, e.g. "grid", "utility rate5","singleowner", etc.
1160 ssc_data_set_table(p_input, m_case->GetConfiguration()->Technology[i].c_str(), p_val);
1161 else
1162 ssc_data_set_table(p_input, m_simlist[i].c_str(), p_val);
1163 ssc_data_free(p_val);
1164 }
1165 // set "input" SSC_TABLE
1166 ssc_data_set_table(p_data, "input", p_input);
1167 ssc_data_free(p_input); // after deep copy above
1168 // invoke "hybrid" compute module
1169 ssc_module_t p_modhybrid = ssc_module_create("hybrid");
1170 if (!p_modhybrid) {
1171 wxString err = "could not create ssc module: hybrid";
1172 ssc_data_set_string(p_data, "error", err.c_str());
1173 return false;
1174 }
1175 wxStopWatch ssctime;
1176 ssc_bool_t ok = ssc_module_exec_with_handler(p_modhybrid, p_data, ssc_invoke_handler, ih);
1177 m_sscElapsedMsec += (int)ssctime.Time();
1178 // process "output" table
1179 if (!ok) {
1180 ih->Error("Simulation " + m_case->GetConfiguration()->Technology[m_case->GetConfiguration()->Technology.size() - 1] + " failed :" + ssc_module_log(p_modhybrid, 0, nullptr, nullptr));
1181 }
1182 else {
1183 int poutidx = 0;
1184 while (const ssc_info_t p_outinf = ssc_module_var_info(p_modhybrid, poutidx++))
1185 {

Callers 3

fcall_simulateFunction · 0.80
fcall_simulate_ssc_testsFunction · 0.80
EntryMethod · 0.80

Calls 13

sizeMethod · 0.80
AsSSCDataMethod · 0.80
lengthMethod · 0.80
GetWarningsMethod · 0.80
GetNoticesMethod · 0.80
ErrorMethod · 0.45
GetConfigurationMethod · 0.45
RemoveMethod · 0.45
AddMethod · 0.45
CreateMethod · 0.45
SetMethod · 0.45
WriteDebugFileMethod · 0.45

Tested by

no test coverage detected