← Documentation
ADS-IDAC Engine 5.0.0
SystemModule.cpp
Go to the documentation of this file.
1// SystemModule.cpp: implementation of the SystemModule class.
2//
4
5#include "SystemModule.h"
6#include "../Branch/BranchRecord.h"
7#include "../Global/SimulationContext.h"
8using namespace std;
9
10
12// Construction/Destruction
14
16{
17
18}
19
21{
22 this->clearSystemModiule();
23}
29 logical_trip_array.clear();
30 variable_trip_array.clear();
32 system_map.clear();
33}
34
35//**********************************************************************************************
36//readInfoFromFile: read the output of GUI from harddisk to build the components in the TH system
37//return 0 if reading correct
38//return -1 if file can not be read; error message is stored in "Error Message.txt" in the directory
39//of executable file
40//**********************************************************************************************
41typedef map<string, THElement *> sm_type;
43 int n_comp, i;
44 string comp_type, comp_name, comp_unit;
45 string file_name;
46 //
48 file_name += "RELAP5_channels.txt";
49 ifstream fin(file_name.c_str(), ios::in);
50 if(!fin.is_open()){
51 // A plant with no RELAP5 channel map cannot run meaningfully: reading on
52 // from the closed stream would yield an empty plant model, so this is fatal.
53 cout << "FATAL: File: " << file_name << " could not be found" << endl;
54 ofstream fout("err messages.txt", ios::app);
55 fout << r5pars_.timesno << " FATAL: File: " << file_name << " could not be found\n";
56 fout.close();
57 std::exit(1);
58 }
59 //read hydraulic volumes
60 fin >> comp_type >> n_comp;
61 for(i = 0; i < n_comp; i++){
62 auto p = make_unique<HydraulicVolume>();
63 p->readInfoFromFile(fin);
64 hydraulic_volume_array.push_back(std::move(p));
65 }
66 //read hydraulic junctions
67 fin >> comp_type >> n_comp;
68 for(i = 0; i < n_comp; i++){
69 auto p = make_unique<HydraulicJunction>();
70 p->readInfoFromFile(fin);
71 hydraulic_junction_array.push_back(std::move(p));
72 }
73 //read variable trips
74 fin >> comp_type >> n_comp;
75 for(i = 0; i < n_comp; i++){
76 auto p = make_unique<VariableTrip>();
77 p->readInfoFromFile(fin);
78 variable_trip_array.push_back(std::move(p));
79 }
80 //read logical trips
81 fin >> comp_type >> n_comp;
82 for(i = 0; i < n_comp; i++){
83 auto p = make_unique<LogicalTrip>();
84 p->readInfoFromFile(fin);
85 logical_trip_array.push_back(std::move(p));
86 }
87 //read Interactive Variables (Channels)
88 fin >> comp_type >> n_comp;
89 for(i = 0; i < n_comp; i++){
90 auto p = make_unique<InteractiveVariable>();
91 p->readInfoFromFile(fin);
92 p->setSequenceInTheArray(i);
93 interactive_variable_array.push_back(std::move(p));
94 }
95 //read Heat Structure
96 fin >> comp_type >> n_comp;
97 for(i = 0; i < n_comp; i++){
98 auto p = make_unique<HeatStructure>();
99 p->readInfoFromFile(fin);
100 heat_structure_array.push_back(std::move(p));
101 }
102 //read Control Variables
103 fin >> comp_type >> n_comp;
104 for(i = 0; i < n_comp; i++){
105 auto p = make_unique<ControlVariable>();
106 p->readInfoFromFile(fin);
107 control_variable_array.push_back(std::move(p));
108 }
109 fin.close();
110 //build up system map====================================
111 for(i = 0; i < hydraulic_volume_array.size(); i++)
112 system_map.insert(sm_type::value_type(hydraulic_volume_array[i]->getName(), hydraulic_volume_array[i].get()));
113 for(i = 0; i < hydraulic_junction_array.size(); i++)
114 system_map.insert(sm_type::value_type(hydraulic_junction_array[i]->getName(), hydraulic_junction_array[i].get()));
115 for(i = 0; i < variable_trip_array.size(); i++)
116 system_map.insert(sm_type::value_type(variable_trip_array[i]->getName(), variable_trip_array[i].get()));
117 for(i = 0; i < logical_trip_array.size(); i++)
118 system_map.insert(sm_type::value_type(logical_trip_array[i]->getName(), logical_trip_array[i].get()));
119 for(i = 0; i < interactive_variable_array.size(); i++)
120 system_map.insert(sm_type::value_type(interactive_variable_array[i]->getName(), interactive_variable_array[i].get()));
121 for(i = 0; i < heat_structure_array.size(); i++)
122 system_map.insert(sm_type::value_type(heat_structure_array[i]->getName(), heat_structure_array[i].get()));
123 for(i = 0; i < control_variable_array.size(); i++)
124 system_map.insert(sm_type::value_type(control_variable_array[i]->getName(), control_variable_array[i].get()));
125 return 0;
126}
127
128//**********************************************************************************************
129//setConnectionToRELAP5: specify the number of TH elements (i.e., hraraulic volumes, ydraulic junctions,
130//trips, interactive variables, control variables, and heat structures) and teh corresponding card numbers
131//which the user specified to interact with rest of ADS routines;
132//This reoutine must be called after the routine readInfoFromFile()
133//return 0 if successful completion of the task
134//return -1 if errors occur
135//currently set the number of each type of information is 100; number of heat structure is 10
136// edit systemParameters.for and fmodule.h for change
137//**********************************************************************************************
139 int i, max_channel, max_ht, max_mesh, n_return, n_mesh;
140 n_return = 0;
141 max_channel = 100;
142 max_ht = 10;
143 max_mesh = 100;
144 //
145 r5pars_.n_hydrov = hydraulic_volume_array.size();
146 r5pars_.n_hydroj = hydraulic_junction_array.size();
147 r5pars_.n_vartrip = variable_trip_array.size();
148 r5pars_.n_logtrip = logical_trip_array.size();
149 r5pars_.n_interact = interactive_variable_array.size();
150 r5pars_.n_ctrl_var = control_variable_array.size();
151 r5pars_.n_heatstr = heat_structure_array.size();
152 if (r5pars_.n_hydrov > max_channel){
153 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
154 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_hydrov value " << r5pars_.n_hydrov
155 << " exceeds the maximum allowance value " << max_channel << '\n';
156 n_return = -1;
157 fout.close();
158 }
159 if (r5pars_.n_hydroj > max_channel){
160 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
161 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_hydroj value " << r5pars_.n_hydroj
162 << " exceeds the maximum allowance value " << max_channel << '\n';
163 n_return = -1;
164 fout.close();
165 }
166 if (r5pars_.n_vartrip > max_channel){
167 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
168 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_vartrip value " << r5pars_.n_vartrip
169 << " exceeds the maximum allowance value " << max_channel << '\n';
170 n_return = -1;
171 fout.close();
172 }
173 if (r5pars_.n_logtrip > max_channel){
174 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
175 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_logtrip value " << r5pars_.n_logtrip
176 << " exceeds the maximum allowance value " << max_channel << '\n';
177 n_return = -1;
178 fout.close();
179 }
180 if (r5pars_.n_interact > max_channel){
181 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
182 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_interact value " << r5pars_.n_interact
183 << " exceeds the maximum allowance value " << max_channel << '\n';
184 n_return = -1;
185 fout.close();
186 }
187 if (r5pars_.n_ctrl_var > max_channel){
188 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
189 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_ctrl_var value " << r5pars_.n_ctrl_var
190 << " exceeds the maximum allowance value " << max_channel << '\n';
191 n_return = -1;
192 fout.close();
193 }
194 // heat_str_cn/heat_str_obj/n_mesh are [10] in r5pars_, so heat structures
195 // are checked against max_ht (10), not max_channel: more than 10 would
196 // overwrite adjacent struct fields shared with Fortran.
197 if (r5pars_.n_heatstr > max_ht){
198 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
199 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: r5pars_.n_heatstr value " << r5pars_.n_heatstr
200 << " exceeds the maximum allowance value " << max_ht << '\n';
201 n_return = -1;
202 fout.close();
203 }
204 if(n_return == -1){
205 return n_return;
206 }
207
208 n_mesh = 0;
209 for(i = 0; i < r5pars_.n_heatstr; i++){
210 n_mesh += heat_structure_array[i]->getNumberOfMeshPoints();
211 }
212 if (n_mesh > max_mesh){
213 ofstream fout("err messages.txt", ios_base::out | ios_base::app);
214 fout << r5pars_.timesno << " SystemModule::setConnectionToRELAP5: total mesh points" << n_mesh
215 << " exceeds the maximum allowance value " << max_mesh << '\n';
216 n_return = -1;
217 fout.close();
218 }
219 //pass card numbers to systemParameter.for to retrieve RELAP5 data
220 if (n_return != -1){
221 for(i = 0; i < r5pars_.n_hydrov; i++){
222 r5pars_.hydro_v_cn[i] = hydraulic_volume_array[i]->getCardNumber();}
223 for(i = 0; i < r5pars_.n_hydroj; i++){
224 r5pars_.hydro_j_cn[i] = hydraulic_junction_array[i]->getCardNumber();}
225 for(i = 0; i < r5pars_.n_vartrip; i++){
226 r5pars_.var_trip_cn[i] = variable_trip_array[i]->getCardNumber();}
227 for(i = 0; i < r5pars_.n_logtrip; i++){
228 r5pars_.log_trip_cn[i] = logical_trip_array[i]->getCardNumber();}
229 for(i = 0; i < r5pars_.n_interact; i++){
230 r5pars_.interact_cn[i] = interactive_variable_array[i]->getCardNumber();}
231 for(i = 0; i < r5pars_.n_ctrl_var; i++){
232 r5pars_.ctrl_var_cn[i] = control_variable_array[i]->getCardNumber();}
233 for(i = 0; i < r5pars_.n_heatstr; i++){
234 r5pars_.heat_str_cn[i] = heat_structure_array[i]->getCardNumber();
235 r5pars_.n_mesh[i] = heat_structure_array[i]->getNumberOfMeshPoints();
236 }
237 }
238 return n_return;
239};
240
242 int i, j;
243 double dbg_x1;
244 decltype(hydraulic_volume_array)::iterator hv_itr;
245 decltype(hydraulic_junction_array)::iterator hj_itr;
246 decltype(interactive_variable_array)::iterator iv_itr;
247 decltype(logical_trip_array)::iterator lt_itr;
248 decltype(variable_trip_array)::iterator vt_itr;
249 decltype(control_variable_array)::iterator ctrl_itr;
250 decltype(heat_structure_array)::iterator ht_itr;
251 //Update parameters' values of Hydraulic Volumes
252 i = 0;
253 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
254 (*hv_itr)->setLiquidTemperature(r5pars_.liq_t[i]);
255 (*hv_itr)->setVaporTemperature(r5pars_.vap_t[i]);
256 (*hv_itr)->setSaturationTemperature(r5pars_.sat_t[i]);
257 (*hv_itr)->setPressure(r5pars_.sys_pressure[i]);
258 (*hv_itr)->setBoronDensity(r5pars_.boron_d[i]);
259 (*hv_itr)->setEquilibriumQuality(r5pars_.quality[i]);
260 (*hv_itr)->setFlowRegimeNumber(r5pars_.flow_reg[i]);
261 i++;
262 }
263 //Update parameters' values of Hydraulic Junctions
264 i = 0;
265 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
266 (*hj_itr)->setLiquidVelocity(r5pars_.liq_vel[i]);
267 (*hj_itr)->setMassFlowRate(r5pars_.mass_fr[i]);
268 (*hj_itr)->setVaporVelocity(r5pars_.vap_vel[i]);
269 i++;
270 }
271 //Update parameters' values of Variable Trips
272 i = 0;
273 for(vt_itr = variable_trip_array.begin(); vt_itr != variable_trip_array.end(); vt_itr++){
274 (*vt_itr)->setTripTime(r5pars_.vartrip_t[i]);
275 i++;
276 }
277 //Update parameters' values of Logical Trips
278 i = 0;
279 for(lt_itr = logical_trip_array.begin(); lt_itr != logical_trip_array.end(); lt_itr++){
280 (*lt_itr)->setTripTime(r5pars_.logtrip_t[i]);
281 i++;
282 }
283 //Update parameters' values of Interactive Variables
284 i = 0;
285 for(iv_itr = interactive_variable_array.begin(); iv_itr != interactive_variable_array.end(); iv_itr++){
286 (*iv_itr)->setDisplayValue(r5pars_.inter_val[i]);
287 i++;
288 }
289 //Update parameters' values of Control Variables
290 i = 0;
291 for(ctrl_itr = control_variable_array.begin(); ctrl_itr != control_variable_array.end(); ctrl_itr++){
292 (*ctrl_itr)->setControlValue(r5pars_.ctrl_var_val[i]);
293 i++;
294 }
295 //Update parameters' values of Heat Structure
296 j = 0;
297 for(ht_itr = heat_structure_array.begin(); ht_itr != heat_structure_array.end(); ht_itr++){
298 for(i = 0; i < (*ht_itr)->getNumberOfMeshPoints(); i++){
299 (*ht_itr)->setMeshPointTemperature(i,r5pars_.mesh_t[j]);
300 dbg_x1 = r5pars_.mesh_t[j];
301 j++;
302 }
303 }
304}
305
307 int i;
308 string name, str1, str2, str3, str4, str5, str6, str7;
309 decltype(hydraulic_volume_array)::iterator hv_itr;
310 decltype(hydraulic_junction_array)::iterator hj_itr;
311 decltype(variable_trip_array)::iterator vt_itr;
312 decltype(logical_trip_array)::iterator lt_itr;
313 decltype(interactive_variable_array)::iterator iv_itr;
314 decltype(control_variable_array)::iterator ctrl_itr;
315 decltype(heat_structure_array)::iterator ht_itr;
316 //Output Name
317 //Hydraulic Volumes
318 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
319 name = (*hv_itr)->getName();
320 for(i = 0; i < 7; i++){
321 fout << name << '\t';
322 }
323 }
324 //Hydraulic Junctions
325 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
326 name = (*hj_itr)->getName();
327 for(i = 0; i < 3; i++){
328 fout << name << '\t';
329 }
330 }
331 //Variable Trips
332 for(vt_itr = variable_trip_array.begin(); vt_itr != variable_trip_array.end(); vt_itr++){
333 fout << (*vt_itr)->getName() << '\t';
334 }
335 //Logical Trips
336 for(lt_itr = logical_trip_array.begin(); lt_itr != logical_trip_array.end(); lt_itr++){
337 fout << (*lt_itr)->getName() << '\t';
338 }
339 //Interactive Variables
340 for(iv_itr = interactive_variable_array.begin(); iv_itr != interactive_variable_array.end(); iv_itr++){
341 fout << (*iv_itr)->getName() << '\t';
342 }
343 //Control Variables
344 for(ctrl_itr = control_variable_array.begin(); ctrl_itr != control_variable_array.end(); ctrl_itr++){
345 fout << (*ctrl_itr)->getName() << '\t';
346 }
347 //Heat Structure
348 for(ht_itr = heat_structure_array.begin(); ht_itr != heat_structure_array.end(); ht_itr++){
349 name = (*ht_itr)->getName();
350 for(i = 0; i < (*ht_itr)->getNumberOfMeshPoints(); i++){
351 fout << name << '\t';
352 }
353 }
354 fout << '\n';
355 /*
356 c
357c liq_t(i) = Volume liquid temperature (K, oF)->
358c vap_t(i) = Volume vapor temperature (K, oF)->
359c sat_t(i) = Volume saturation temperature based on the partial pressure of steam (K, oF)->
360c sys_pressure(i): Volume pressure (Pa, lbf/in^2)
361c boron_d(i) = Spatial boron density, rb (kg/m3, lb/ft3)-> This is the volume liquid fraction (af) times the
362c liquid density (rf) times the boron concentration (Cb)-> Boron concentration is used for
363c hydrodynamic input, and boron density is used for minor edits and plots.
364c quality(i) = Volume equilibrium quality. This quality uses phasic enthalpies and mixture quality, with
365c the mixture enthalpy calculated using the flow quality.
366c flow_reg(i) = Flow regime number;
367
368 */
369 //output parameters' Names and units;
370 //Hydraulic Volumes
371 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
372 (*hv_itr)->setUnitOfLiquidTemperature(r5pars_.si_unit);
373 (*hv_itr)->setUnitOfVaporTemperature(r5pars_.si_unit);
374 (*hv_itr)->setUnitOfSaturationTemperature(r5pars_.si_unit);
375 (*hv_itr)->setUnitOfPressure(r5pars_.si_unit);
376 (*hv_itr)->setUnitOfBoronDensity(r5pars_.si_unit);
377 str1 = "Liquid_T("; str1 += (*hv_itr)->getUnitOfLiquidTemperature(); str1 += ")";
378 str2 = "Vapor_T("; str2 += (*hv_itr)->getUnitOfVaporTemperature(); str2 += ")";
379 str3 = "Sat_T("; str3 += (*hv_itr)->getUnitOfSaturationTemperature(); str3 += ")";
380 str4 = "Pressure("; str4 += (*hv_itr)->getUnitOfPressure(); str4 += ")";
381 str5 = "Boron_density("; str5 += (*hv_itr)->getUnitOfBoronDensity(); str5 += ")";
382 str6 = "Equilibrium";
383 str7 = "Flow_regime";
384 fout << str1 << '\t' << str2 << '\t' << str3 << '\t' << str4 << '\t' << str5 << '\t' << str6 << '\t' << str7 << '\t';
385 }
386 //Hydraulic Junctions
387 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
388 (*hj_itr)->setUnitOfLiquidVelocity(r5pars_.si_unit);
389 (*hj_itr)->setUnitOfMassFlowRate(r5pars_.si_unit);
390 (*hj_itr)->setUnitOfVaporVelocity(r5pars_.si_unit);
391 str1 = "Liquid_vel("; str1 += (*hj_itr)->getUnitOfLiquidVelocity(); str1 += ")";
392 str2 = "Mass_flow("; str2 += (*hj_itr)->getUnitOfMassFlowRate(); str2 += ")";
393 str3 = "Vapor_vel("; str3 += (*hj_itr)->getUnitOfVaporVelocity(); str3 += ")";
394 fout << str1 << '\t' << str2 << '\t' << str3 << '\t';
395 }
396 //Variable Trips
397 for(vt_itr = variable_trip_array.begin(); vt_itr != variable_trip_array.end(); vt_itr++){
398 fout << "Trip_time(s)\t";
399 }
400 //Logical Trips
401 for(lt_itr = logical_trip_array.begin(); lt_itr != logical_trip_array.end(); lt_itr++){
402 fout << "Trip_time(s)\t";
403 }
404 //Interactive Variables
405 for(iv_itr = interactive_variable_array.begin(); iv_itr != interactive_variable_array.end(); iv_itr++){
406 fout << "--\t";
407 }
408 //Control Variables
409 for(ctrl_itr = control_variable_array.begin(); ctrl_itr != control_variable_array.end(); ctrl_itr++){
410 fout << (*ctrl_itr)->getUnitOfControlValue() << '\t';
411 i++;
412 }
413 //Heat Structure
414 for(ht_itr = heat_structure_array.begin(); ht_itr != heat_structure_array.end(); ht_itr++){
415 (*ht_itr)->setUnitOfMeshPointTemperature(r5pars_.si_unit);
416 for(i = 0; i < (*ht_itr)->getNumberOfMeshPoints(); i++){
417 str1 = "Mesh_T_";
418 str1 += to_string(i);
419 str1 += "(";
420 str1 += (*ht_itr)->getUnitOfMeshPointTemperature();
421 str1 += ")";
422 fout << str1 << '\t';
423 }
424 }
425 fout << '\n';
426}
427//
429 decltype(hydraulic_volume_array)::iterator hv_itr;
430 decltype(hydraulic_junction_array)::iterator hj_itr;
431 decltype(heat_structure_array)::iterator ht_itr;
432 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
433 (*hv_itr)->setUnitOfLiquidTemperature(r5pars_.si_unit);
434 (*hv_itr)->setUnitOfVaporTemperature(r5pars_.si_unit);
435 (*hv_itr)->setUnitOfSaturationTemperature(r5pars_.si_unit);
436 (*hv_itr)->setUnitOfPressure(r5pars_.si_unit);
437 (*hv_itr)->setUnitOfBoronDensity(r5pars_.si_unit);
438 }
439 //Hydraulic Junctions
440 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
441 (*hj_itr)->setUnitOfLiquidVelocity(r5pars_.si_unit);
442 (*hj_itr)->setUnitOfMassFlowRate(r5pars_.si_unit);
443 (*hj_itr)->setUnitOfVaporVelocity(r5pars_.si_unit);
444 }
445 //Heat Structure
446 for(ht_itr = heat_structure_array.begin(); ht_itr != heat_structure_array.end(); ht_itr++){
447 (*ht_itr)->setUnitOfMeshPointTemperature(r5pars_.si_unit);
448 }
449}
450//
452 int i;
453 decltype(hydraulic_volume_array)::iterator hv_itr;
454 decltype(hydraulic_junction_array)::iterator hj_itr;
455 decltype(variable_trip_array)::iterator vt_itr;
456 decltype(logical_trip_array)::iterator lt_itr;
457 decltype(interactive_variable_array)::iterator iv_itr;
458 decltype(control_variable_array)::iterator ctrl_itr;
459 decltype(heat_structure_array)::iterator ht_itr;
460 //Hydraulic Volumes
461 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
462 fout << (*hv_itr)->getLiquidTemperature() << '\t'
463 << (*hv_itr)->getVaporTemperature() << '\t'
464 << (*hv_itr)->getSaturationTemperature() << '\t'
465 << (*hv_itr)->getPressure() << '\t'
466 << (*hv_itr)->getBoronDensity() << '\t'
467 << (*hv_itr)->getEquilibriumQuality() << '\t'
468 << (*hv_itr)->getFlowRegimeNumber() << '\t';
469 }
470 //Hydraulic Junctions
471 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
472 fout << (*hj_itr)->getLiquidVelocity() << '\t'
473 << (*hj_itr)->getMassFlowRate() << '\t'
474 << (*hj_itr)->getVaporVelocity() << '\t';
475 }
476 //Variable Trips
477 for(vt_itr = variable_trip_array.begin(); vt_itr != variable_trip_array.end(); vt_itr++){
478 fout << (*vt_itr)->getTripTime() << '\t';
479 }
480 //Logical Trips
481 for(lt_itr = logical_trip_array.begin(); lt_itr != logical_trip_array.end(); lt_itr++){
482 fout << (*lt_itr)->getTripTime() << '\t';
483 }
484 //Interactive Variables
485 for(iv_itr = interactive_variable_array.begin(); iv_itr != interactive_variable_array.end(); iv_itr++){
486 fout << (*iv_itr)->getDisplayValue() << '\t';
487 }
488 //Control Variables
489 for(ctrl_itr = control_variable_array.begin(); ctrl_itr != control_variable_array.end(); ctrl_itr++){
490 fout << (*ctrl_itr)->getControlValue() << '\t';
491 }
492 //Heat Structure
493 for(ht_itr = heat_structure_array.begin(); ht_itr != heat_structure_array.end(); ht_itr++){
494 for(i = 0; i < (*ht_itr)->getNumberOfMeshPoints(); i++){
495 fout << (*ht_itr)->getMeshPointTemperature(i) << '\t';
496 }
497 }
498 fout << '\n';
499}
500//typedef map<string, THElement *> sm_type;
502 THElement *ptr;
503 ptr = 0;
504 map<string, THElement *>::iterator itr;
505 itr = system_map.find(_str);
506 if (itr != system_map.end()){
507 ptr = itr->second;
508 }
509 else{
510 ofstream fout("err messages.txt", ios::app);
511 cout << "SystemModule::getComponentFromSystemMap indicator " << _str << " could not be found in plant." << endl;
512 fout << r5pars_.timesno << " SystemModule::getComponentFromSystemMap indicator " << _str << " could not be found in plant.\n";
513 fout.close();
514 r5pars_.sim_err = true;
515 g_sim.Branch_center.setTempESMessage("SystemModule::getComponentFromSystemMap err.");
517 }
518 return ptr;
519}
520//
522 this->readInfoFromFile();
523 if (this->setConnectionToRELAP5() == -1) {
524 cout << "FATAL: SystemModule::setConnectionToRELAP5 failed — channel counts exceed "
525 << "the r5pars_ bridge capacity (see err messages.txt)." << endl;
526 std::exit(1);
527 }
528 this->setUnits();
529}
531 if (this->setConnectionToRELAP5() == -1) {
532 cout << "FATAL: SystemModule::setConnectionToRELAP5 failed — channel counts exceed "
533 << "the r5pars_ bridge capacity (see err messages.txt)." << endl;
534 std::exit(1);
535 }
536 this->setUnits();
537}//
539 decltype(interactive_variable_array)::iterator itr;
540 for(itr = interactive_variable_array.begin(); itr != interactive_variable_array.end(); itr++){
541 (*itr)->executeInteractiveAction();
542 }
543}
547}
549 decltype(control_variable_array)::iterator cv_itr;//control_variable_array;
550 decltype(heat_structure_array)::iterator hs_itr;// heat_structure_array;
551 decltype(hydraulic_junction_array)::iterator hj_itr;// hydraulic_junction_array;
552 decltype(hydraulic_volume_array)::iterator hv_itr;// hydraulic_volume_array;
553 decltype(interactive_variable_array)::iterator iv_itr;// interactive_variable_array;
554 decltype(logical_trip_array)::iterator lt_itr;// logical_trip_array;
555 decltype(variable_trip_array)::iterator vt_itr;// variable_trip_array;
556 //
557 fout << "SystemModule\n" << hydraulic_volume_array.size() << '\n';
558 for(hv_itr = hydraulic_volume_array.begin(); hv_itr != hydraulic_volume_array.end(); hv_itr++){
559 (*hv_itr)->saveHydraulicVolumeToFile(fout);
560 }
561 fout << hydraulic_junction_array.size() << '\n';
562 for(hj_itr = hydraulic_junction_array.begin(); hj_itr != hydraulic_junction_array.end(); hj_itr++){
563 (*hj_itr)->saveHydraulicJunctionToFile(fout);
564 }
565 fout << variable_trip_array.size() << '\n';
566 for(vt_itr = variable_trip_array.begin(); vt_itr != variable_trip_array.end(); vt_itr++){
567 (*vt_itr)->saveVariableTripToFile(fout);;
568 }
569 fout << logical_trip_array.size() << '\n';
570 for(lt_itr = logical_trip_array.begin(); lt_itr != logical_trip_array.end(); lt_itr++){
571 (*lt_itr)->saveLogicalTripToFile(fout);
572 }
573 fout << interactive_variable_array.size() << '\n';
574 for(iv_itr = interactive_variable_array.begin(); iv_itr != interactive_variable_array.end(); iv_itr++){
575 (*iv_itr)->saveInteractiveVariableToFile(fout);
576 }
577 fout << heat_structure_array.size() << '\n';
578 for(hs_itr = heat_structure_array.begin(); hs_itr != heat_structure_array.end(); hs_itr++){
579 (*hs_itr)->saveHeatStructureToFile(fout);
580 }
581 fout << control_variable_array.size() << '\n';
582 for(cv_itr = control_variable_array.begin(); cv_itr != control_variable_array.end(); cv_itr++){
583 (*cv_itr)->saveControlVariableToFile(fout);
584 }
585}
587 int n_comp, i;
588 string str;
589 THElement *element_ptr;
590 string file_name;
591 //
592
593 //read hydraulic volumes
594 fin >> str >> n_comp;
595 if(str != "SystemModule"){
596 ofstream fout("err messages.txt", ios::app);
597 cout << "SystemModule::retrieveSystemModuleFromFile File retrieval error in previous function" << endl;
598 fout << r5pars_.timesno << " SystemModule::retrieveSystemModuleFromFile File retrieval error in previous function\n";
599 fout.close();
600 r5pars_.sim_err = true;
601 g_sim.Branch_center.setTempESMessage("SystemModule::retrieveSystemModuleFromFile Prior error");
603 return;
604 }
605 for(i = 0; i < n_comp; i++){
606 auto ptr = make_unique<HydraulicVolume>();
607 ptr->retrieveHydraulicVolumeFromFile(fin);
608 hydraulic_volume_array.push_back(std::move(ptr));
609 }
610 //read hydraulic junctions
611 fin >> n_comp;
612 for(i = 0; i < n_comp; i++){
613 auto ptr = make_unique<HydraulicJunction>();
614 ptr->retrieveHydraulicJunctionFromFile(fin);
615 hydraulic_junction_array.push_back(std::move(ptr));
616 }
617 //read variable trips
618 fin >> n_comp;
619 for(i = 0; i < n_comp; i++){
620 auto ptr = make_unique<VariableTrip>();
621 ptr->retrieveVariableTripFromFile(fin);
622 variable_trip_array.push_back(std::move(ptr));
623 }
624 //read logical trips
625 fin >> n_comp;
626 for(i = 0; i < n_comp; i++){
627 auto ptr = make_unique<LogicalTrip>();
628 ptr->retrieveLogicalTripFromFile(fin);
629 logical_trip_array.push_back(std::move(ptr));
630 }
631 //read Interactive Variables (Channels)
632 fin >> n_comp;
633 for(i = 0; i < n_comp; i++){
634 auto ptr = make_unique<InteractiveVariable>();
635 ptr->retrieveInteractiveVariableFromFile(fin);
636 ptr->setSequenceInTheArray(i);
637 interactive_variable_array.push_back(std::move(ptr));
638 }
639 //read Heat Structure
640 fin >> n_comp;
641 for(i = 0; i < n_comp; i++){
642 auto ptr = make_unique<HeatStructure>();
643 ptr->retrieveHeatStructureFromFile(fin);
644 heat_structure_array.push_back(std::move(ptr));
645 }
646 //read Control Variables
647 fin >> n_comp;
648 for(i = 0; i < n_comp; i++){
649 auto ptr = make_unique<ControlVariable>();
650 ptr->retrieveControlVariableFromFile(fin);
651 control_variable_array.push_back(std::move(ptr));
652 }
653 //build up system map====================================
654 //hydraulic volumes
655 for(i = 0; i < hydraulic_volume_array.size(); i++){
656 system_map.insert(sm_type::value_type(hydraulic_volume_array[i]->getName(), hydraulic_volume_array[i].get()));
657 }
658 //hydraulic junctions
659 for(i = 0; i < hydraulic_junction_array.size(); i++){
660 system_map.insert(sm_type::value_type(hydraulic_junction_array[i]->getName(), hydraulic_junction_array[i].get()));
661 }
662 //variable trips
663 for(i = 0; i < variable_trip_array.size(); i++){
664 system_map.insert(sm_type::value_type(variable_trip_array[i]->getName(), variable_trip_array[i].get()));
665 }
666 //logical trips
667 for(i = 0; i < logical_trip_array.size(); i++){
668 system_map.insert(sm_type::value_type(logical_trip_array[i]->getName(), logical_trip_array[i].get()));
669 }
670 //Interactive Variables (Channels)
671 for(i = 0; i < interactive_variable_array.size(); i++){
672 system_map.insert(sm_type::value_type(interactive_variable_array[i]->getName(), interactive_variable_array[i].get()));
673 }
674 //Heat Structure
675 for(i = 0; i < heat_structure_array.size(); i++){
676 system_map.insert(sm_type::value_type(heat_structure_array[i]->getName(), heat_structure_array[i].get()));
677 }
678 //Control Variables
679 for(i = 0; i < control_variable_array.size(); i++){
680 system_map.insert(sm_type::value_type(control_variable_array[i]->getName(), control_variable_array[i].get()));
681 }
682}
684 int i;
685//
686 for(auto& src : _sm.control_variable_array){
687 auto ptr = make_unique<ControlVariable>();
688 ptr->copyControlVariable(*src);
689 control_variable_array.push_back(std::move(ptr));
690 }
691 for(auto& src : _sm.heat_structure_array){
692 auto ptr = make_unique<HeatStructure>();
693 ptr->copyHeatStructure(*src);
694 heat_structure_array.push_back(std::move(ptr));
695 }
696 for(auto& src : _sm.hydraulic_junction_array){
697 auto ptr = make_unique<HydraulicJunction>();
698 ptr->copyHydraulicJunction(*src);
699 hydraulic_junction_array.push_back(std::move(ptr));
700 }
701 for(auto& src : _sm.hydraulic_volume_array){
702 auto ptr = make_unique<HydraulicVolume>();
703 ptr->copyHydraulicVolume(*src);
704 hydraulic_volume_array.push_back(std::move(ptr));
705 }
706 for(auto& src : _sm.interactive_variable_array){
707 auto ptr = make_unique<InteractiveVariable>();
708 ptr->copyInteractiveVariable(*src);
709 interactive_variable_array.push_back(std::move(ptr));
710 }
711 for(auto& src : _sm.logical_trip_array){
712 auto ptr = make_unique<LogicalTrip>();
713 ptr->copyLogicalTrip(*src);
714 logical_trip_array.push_back(std::move(ptr));
715 }
716 for(auto& src : _sm.variable_trip_array){
717 auto ptr = make_unique<VariableTrip>();
718 ptr->copyVariableTrip(*src);
719 variable_trip_array.push_back(std::move(ptr));
720 }
721 //build up system map====================================
722 //hydraulic volumes
723 for(i = 0; i < hydraulic_volume_array.size(); i++){
724 system_map.insert(sm_type::value_type(hydraulic_volume_array[i]->getName(), hydraulic_volume_array[i].get()));
725 }
726 //hydraulic junctions
727 for(i = 0; i < hydraulic_junction_array.size(); i++){
728 system_map.insert(sm_type::value_type(hydraulic_junction_array[i]->getName(), hydraulic_junction_array[i].get()));
729 }
730 //variable trips
731 for(i = 0; i < variable_trip_array.size(); i++){
732 system_map.insert(sm_type::value_type(variable_trip_array[i]->getName(), variable_trip_array[i].get()));
733 }
734 //logical trips
735 for(i = 0; i < logical_trip_array.size(); i++){
736 system_map.insert(sm_type::value_type(logical_trip_array[i]->getName(), logical_trip_array[i].get()));
737 }
738 //Interactive Variables (Channels)
739 for(i = 0; i < interactive_variable_array.size(); i++){
740 system_map.insert(sm_type::value_type(interactive_variable_array[i]->getName(), interactive_variable_array[i].get()));
741 }
742 //Heat Structure
743 for(i = 0; i < heat_structure_array.size(); i++){
744 system_map.insert(sm_type::value_type(heat_structure_array[i]->getName(), heat_structure_array[i].get()));
745 }
746 //Control Variables
747 for(i = 0; i < control_variable_array.size(); i++){
748 system_map.insert(sm_type::value_type(control_variable_array[i]->getName(), control_variable_array[i].get()));
749 }
750};
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
map< string, THElement * > sm_type
Maps RELAP5 input deck components to C++ objects for T-H parameter access.
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
std::string getSystemDirectory()
Definition: Scheduler.cpp:637
std::map< std::string, THElement * > system_map
Definition: SystemModule.h:55
void oneThroughProcess()
std::vector< std::unique_ptr< HeatStructure > > heat_structure_array
Definition: SystemModule.h:49
THElement * getComponentFromSystemMap(std::string)
void outputParametersValuesToFile(std::ofstream &)
void initiationForSimulation()
std::vector< std::unique_ptr< VariableTrip > > variable_trip_array
Definition: SystemModule.h:54
std::vector< std::unique_ptr< HydraulicVolume > > hydraulic_volume_array
Definition: SystemModule.h:51
void retrieveSystemModuleFromFile(std::ifstream &)
void executeActionsToInteractWithSystem()
virtual ~SystemModule()
std::vector< std::unique_ptr< HydraulicJunction > > hydraulic_junction_array
Definition: SystemModule.h:50
std::vector< std::unique_ptr< LogicalTrip > > logical_trip_array
Definition: SystemModule.h:53
void copySystemModule(SystemModule &)
void initiationForSimulationClient()
void updateParametersValues()
std::vector< std::unique_ptr< InteractiveVariable > > interactive_variable_array
Definition: SystemModule.h:52
void outputParametersLabelsToFile(std::ofstream &)
int readInfoFromFile()
void clearSystemModiule()
std::vector< std::unique_ptr< ControlVariable > > control_variable_array
Definition: SystemModule.h:48
int setConnectionToRELAP5()
void saveSystemModuleToFile(std::ofstream &)
struct @0 r5pars_
int n_mesh[10]
Number of mesh points per heat structure.
Definition: fmodule.h:67
Scheduler SScheduler
Simulation scheduling, parses CLI options.
BranchRecord Branch_center
Dynamic event tree state.