-
Notifications
You must be signed in to change notification settings - Fork 298
/
Initialization.cpp
66 lines (55 loc) · 1.88 KB
/
Initialization.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/** @addtogroup coreSimcontroller
*
* @{
*/
#include <Core/ModelicaDefine.h>
#include <Core/Modelica.h>
#include <Core/SimController/Initialization.h>
Initialization::Initialization(shared_ptr<ISystemInitialization> system_initialization, shared_ptr<ISolver> solver)
: _system(system_initialization)
, _solver(solver)
{
}
Initialization::~Initialization(void)
{
}
void Initialization::initializeSystem()
{
shared_ptr<IContinuous> continous_system = dynamic_pointer_cast<IContinuous>(_system);
shared_ptr<IEvent> event_system = dynamic_pointer_cast<IEvent>(_system);
shared_ptr<IMixedSystem> mixed_system = dynamic_pointer_cast<IMixedSystem>(_system);
int dim = event_system->getDimZeroFunc();
bool* conditions0 = new bool[dim];
bool* conditions1 = new bool[dim];
_system->setInitial(true);
//Initialization of continous equations and bounded parameters
_system->initialize();
_solver->stateSelection();
/*deactivated initialization loop*/
//bool restart = true;
//int iter = 0;
//bool cond_restart = true;
//while((restart /*|| cond_restart*/) && !(iter++ > 15))
//{
// event_system->getConditions(conditions0);
// _system->initEquations(); // vxworksupdate
// restart = event_system->checkForDiscreteEvents();
// event_system->getConditions(conditions1);
// //Deactivated: event_system->saveDiscreteVars();
// event_system->saveAll();
// cond_restart = !std::equal (conditions1, conditions1+dim, conditions0);
//}
event_system->saveAll();
_system->setInitial(false);
if( _solver->stateSelection())
{
_system->initEquations();
continous_system->stepCompleted(0.0);
/* report a warning about strange start values */
if(_solver->stateSelection())
cout << "Cannot initialize the dynamic state selection in an unique way." << std::endl;
}
delete[] conditions0;
delete[] conditions1;
}
/** @} */ // end of coreSimcontroller