← Documentation
ADS-IDAC Engine 5.0.0
Procedures.cpp
Go to the documentation of this file.
1// Procedures.cpp: implementation of the Procedures class.
2//
4
5#include "Procedures.h"
6#include "../Scheduler/Scheduler.h"
7#include "../Scheduler/CommunicationPlace.h"
8#include "../Branch/BranchRecord.h"
9#include <boost/serialization/export.hpp>
10#include <boost/archive/binary_oarchive.hpp>
11#include <boost/archive/binary_iarchive.hpp>
12#include "../Global/SimulationContext.h"
13BOOST_CLASS_EXPORT_IMPLEMENT(Procedures)
14using namespace std;
15
16
18// Construction/Destruction
20
22{
36}
37
39{
40 this->clearProcedures();
41}
43 // Idempotent: clients and the server load the procedure book at
44 // startup (the shared master must exist before the first snapshot arrives
45 // over the wire or from a checkpoint) and onFirstInit reaches here again
46 // on the engine's normal path. The book is immutable configuration;
47 // reloading would append a duplicate of every step.
48 if (!procedure_step.empty()) return;
49 this->readInfoFromFile();
50};
51typedef map<string, ProcedureStep *> ProcedureMAP;
79 string file_name, procedure_name, step_name, combined_name, str;
80 int i, n_step;
81 bool found_file, found_file1;
82 ifstream fin;
83 //
84 file_name = g_sim.SScheduler.getEOPDirectory();
85 file_name += "Procedures.txt";
86 fin.open(file_name.c_str(), ios::in);
87 if(!fin.is_open()){//the file contains the list of procedure steps cannot be found
88 cout << "File: " << file_name << " cound not be found" << endl;
89 ofstream fout("err messages.txt", ios::app);
90 fout << r5pars_.timesno << " File: " << file_name << " cound not be found\n";
91 fout.close();
92 r5pars_.terminateall = true;
93 found_file = false;
94 return;
95 }
96 else{
97 found_file = true;
98 }
99 fin >> str >> step_transfer_time;
100 fin >> str >> procedure_transfer_time;
101 fin >> str >> normal_procedure_multiplier;
102 fin >> str >> abnormal_procedure_multiplier;
106 fin >> str >> mental_procedure_multiplier;
107 fin >> str >> verification_step_multiplier;
108 fin >> str >> monitoring_step_multiplier;
109 fin >> str >> prerequisite_step_multiplier;
110 fin >> str >> objective_step_multiplier;
111 fin >> str >> diagnosis_step_multiplier;
112 fin >> str >> n_step;//coded procedure steps
113 for (i = 0; i < n_step; i++){
114 fin >> procedure_name >> step_name;
115 auto pps_pt = make_unique<ProcedureStepInfo>();
116 pps_pt->setProcedureName(procedure_name);
117 pps_pt->setStepName(step_name);
118 list_of_procedural_step.push_back(std::move(pps_pt));
119 }
120 fin.close();
121 for(auto& pps : list_of_procedural_step){
122 auto pstep_pt = make_unique<ProcedureStep>();
123 found_file1 = pstep_pt->readInfoFromFile(pps->getProcedureName(), pps->getStepName());
124 if(found_file1){
125 combined_name = pstep_pt->getCurrentProcedureName();
126 combined_name += pstep_pt->getCurrentStepName();
127 procedure_map.insert(ProcedureMAP::value_type(combined_name, pstep_pt.get()));
128 }
129 else{
130 found_file = found_file1;
131 }
132 procedure_step.push_back(std::move(pstep_pt));
133 }
134 if(!found_file){
135 r5pars_.terminateall = true;
136 }
137}
139 string combined_name, step_name;
153 for(auto& src : _pt.list_of_procedural_step){
154 auto ptr = make_unique<ProcedureStepInfo>();
155 ptr->copyProcedureStepInfo(*src);
156 list_of_procedural_step.push_back(std::move(ptr));
157 }
158 for(auto& src : _pt.procedure_step){
159 auto ptr = make_unique<ProcedureStep>();
160 ptr->copyProcedureStep(*src);
161 combined_name = ptr->getCurrentProcedureName();
162 step_name = ptr->getCurrentStepName();
163 combined_name += step_name;
164 procedure_map.insert(ProcedureMAP::value_type(combined_name, ptr.get()));
165 procedure_step.push_back(std::move(ptr));
166 }
167}
169 string r_return = "NO_PROCEDURE";
170 if(list_of_procedural_step.size() > 0){
171 r_return = list_of_procedural_step[0]->getProcedureName();
172 }
173 return r_return;
174}
176 string r_return = "NO_STEP";
177 if(list_of_procedural_step.size() > 0){
178 r_return = list_of_procedural_step[0]->getStepName();
179 }
180 return r_return;
181}
183 procedure_step.clear();
185 procedure_map.clear();
186}
187
189 procedure_step.clear();
190 procedure_map.clear();
191}
206 for(auto& src : _pt.procedure_step){
207 auto ptr = make_unique<ProcedureStep>();
208 ptr->copyProcedureStep(*src);
209 procedure_step.push_back(std::move(ptr));
210 }
211}
213 string combined_name, step_name;
227 for(auto& src : _pt.procedure_step){
228 auto ptr = make_unique<ProcedureStep>();
229 ptr->copyProcedureStep(*src);
230 combined_name = ptr->getCurrentProcedureName();
231 step_name = ptr->getCurrentStepName();
232 combined_name += step_name;
233 procedure_map.insert(ProcedureMAP::value_type(combined_name, ptr.get()));
234 procedure_step.push_back(std::move(ptr));
235 }
236}
238 // State overlay: rebuild definitions and structure from the process-local
239 // master before the state stream is applied on top. Deep copy: the
240 // snapshot remains a private object; only the ARCHIVE carries no
241 // configuration. The copy is total (config + the master's current state)
242 // and load() then overwrites every state leaf from the stream.
245}
247 int i, num;
248 num = this->procedure_step.size();
249 fout << procedure_transfer_time << ' '
250 << step_transfer_time << ' '
261 << diagnosis_step_multiplier << '\n';
262 fout << "Procedures\n" << num << '\n';
263 for(i = 0; i < num; i++){
264 this->procedure_step.at(i)->saveProcedureStepToFile(fout);
265 }
266 num = this->list_of_procedural_step.size();
267 fout << '\n' << num << '\n';
268 for(i = 0; i < num; i++){
269 this->list_of_procedural_step.at(i)->saveProcedureStepInfoToFile(fout);
270 }
271}
273 int i, num;
274 string combined_name, str;
288 fin >> str >> num;
289 if (str != "Procedures"){
290 ofstream fout("err messages.txt", ios::app);
291 cout << "Procedures::retrieveProceduresFromFile retrieval errir in previous function" << endl;
292 fout << r5pars_.timesno << " Procedures::retrieveProceduresFromFile retrieval errir in previous function\n";
293 fout.close();
294 r5pars_.sim_err = true;
295 g_sim.Branch_center.setTempESMessage("Procedures::retrieveProceduresFromFile Prior err.");
297 return;
298 }
299
300 for(i = 0; i < num; i++){
301 auto procedure_step_pt = make_unique<ProcedureStep>();
302 procedure_step_pt->retrieveProcedureStepFromFile(fin);
303 combined_name = procedure_step_pt->getCurrentProcedureName();
304 combined_name += procedure_step_pt->getCurrentStepName();
305 procedure_map.insert(ProcedureMAP::value_type(combined_name, procedure_step_pt.get()));
306 this->procedure_step.push_back(std::move(procedure_step_pt));
307 }
308 fin >> num;
309 for(i = 0; i < num; i++){
310 auto list_of_procedural_step_pt = make_unique<ProcedureStepInfo>();
311 list_of_procedural_step_pt->retrieveProcedureStepInfoFromFile(fin);
312 this->list_of_procedural_step.push_back(std::move(list_of_procedural_step_pt));
313 }
314}
map< string, ProcedureStep * > ProcedureMAP
Definition: Procedures.cpp:51
Emergency Operating Procedure (EOP) management — step execution and procedure flow.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
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...
void setPrerequisiteStepMultiplier(double)
Definition: Procedures.cpp:74
double getVerificationStepMultiplier()
Definition: Procedures.cpp:65
void copyProceduresFromRestartInfoForRestart(Procedures &)
Definition: Procedures.cpp:212
double getDiagnosisStepMultiplier()
Definition: Procedures.cpp:66
void copyProceduresToRestartInfoForRestart(Procedures &)
Definition: Procedures.cpp:192
void copyProcedures(Procedures &)
Definition: Procedures.cpp:138
std::string getEntryProcedureName()
Definition: Procedures.cpp:168
std::vector< std::unique_ptr< ProcedureStep > > procedure_step
Definition: Procedures.h:71
void setAbnormalProcedureMultiplier(double)
Definition: Procedures.cpp:69
void setAlarmResponseProcedureMultiplier(double)
Definition: Procedures.cpp:72
double getObjectiveStepMultiplier()
Definition: Procedures.cpp:62
double getAlarmResponseProcedureMultiplier()
Definition: Procedures.cpp:61
double getPrerequisiteStepMultiplier()
Definition: Procedures.cpp:63
void retrieveProceduresFromFile(std::ifstream &)
Definition: Procedures.cpp:272
double getMentalProcedureMultiplier()
Definition: Procedures.cpp:57
void readInfoFromFile()
Definition: Procedures.cpp:78
double getNormalProcedureMultiplier()
Definition: Procedures.cpp:56
std::map< std::string, ProcedureStep * > procedure_map
Definition: Procedures.h:72
double diagnosis_step_multiplier
Definition: Procedures.h:87
double getProcedureTransferTime()
Definition: Procedures.cpp:55
double abnormal_procedure_multiplier
Definition: Procedures.h:79
void setObjectiveStepMultiplier(double)
Definition: Procedures.cpp:73
void setProcedureTransferTime(double)
Definition: Procedures.cpp:54
double optimal_recovery_procedure_multiplier
Definition: Procedures.h:80
void setNormalProcedureMultiplier(double)
Definition: Procedures.cpp:67
double getAbnormalProcedureMultiplier()
Definition: Procedures.cpp:58
double objective_step_multiplier
Definition: Procedures.h:83
double functional_recovery_procedure_multiplier
Definition: Procedures.h:81
double getOptimalRecoveryProcedureMultiplier()
Definition: Procedures.cpp:59
void initiationForSimulation()
Definition: Procedures.cpp:42
double alarm_response_procedure_multiplier
Definition: Procedures.h:82
double getFunctionalRecoveryProcedureMultipler()
Definition: Procedures.cpp:60
double getMonitoringStepMultiplier()
Definition: Procedures.cpp:64
void seedFromMaster(const Procedures &master)
Definition: Procedures.cpp:237
double getStepTransferTime()
Definition: Procedures.cpp:53
double verification_step_multiplier
Definition: Procedures.h:86
double prerequisite_step_multiplier
Definition: Procedures.h:84
double step_transfer_time
Definition: Procedures.h:76
void setStepTransferTime(double)
Definition: Procedures.cpp:52
void clearProceduresForRestart()
Definition: Procedures.cpp:188
void setDiagnosisStepMultiplier(double)
Definition: Procedures.cpp:77
void setVerificationStepMultiplier(double)
Definition: Procedures.cpp:76
void setOptimalRecoveryProcedureMultiplier(double)
Definition: Procedures.cpp:70
std::string getEntryStepName()
Definition: Procedures.cpp:175
double normal_procedure_multiplier
Definition: Procedures.h:77
void clearProcedures()
Definition: Procedures.cpp:182
void setMentalProcedureMultiplier(double)
Definition: Procedures.cpp:68
double mental_procedure_multiplier
Definition: Procedures.h:78
virtual ~Procedures()
Definition: Procedures.cpp:38
std::vector< std::unique_ptr< ProcedureStepInfo > > list_of_procedural_step
Definition: Procedures.h:73
void setFunctionalRecoveryProcedureMultipler(double)
Definition: Procedures.cpp:71
void setMonitoringStepMultiplier(double)
Definition: Procedures.cpp:75
double procedure_transfer_time
Definition: Procedures.h:76
double monitoring_step_multiplier
Definition: Procedures.h:85
void saveProceduresToFile(std::ofstream &)
Definition: Procedures.cpp:246
std::string getEOPDirectory()
Definition: Scheduler.cpp:616
struct @0 r5pars_
Scheduler SScheduler
Simulation scheduling, parses CLI options.
BranchRecord Branch_center
Dynamic event tree state.