-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmodule-FMU.h
101 lines (82 loc) · 3.08 KB
/
module-FMU.h
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
AUTHOR: Devyesh Tandon <[email protected]>
Copyright (C) 2016(-2016) all rights reserved.
The copyright of this patch is transferred
to Pierangelo Masarati and Paolo Mantegazza
for use in the software MBDyn as described
in the GNU Public License version 2.1
*/
#include "mbconfig.h" /* This goes first in every *.c,*.cc file */
#include <iostream>
#include <cfloat>
#include "dataman.h"
#include "userelem.h"
#include "drive.h"
#include "privdrive.h"
#include "mbdynFMI_config.h"
class ModuleFMU
: virtual public Elem, public UserDefinedElem {
private:
fmu* model;
char FMUlocation[1000];
const char* simType;
double currTime;
double initialTime;
double timeStep;
double endTime;
fmi_import_context_t* context;
fmi_version_enu_t version;
jm_callbacks callbacks;
jm_status_enu_t status;
typedef std::map<std::string, const DriveCaller *> strDriveCon;
typedef std::map<int, const PrivDriveCaller*> intDriveCon;
strDriveCon drivesContainer;
intDriveCon privDrivesIndex;
int numOfContinousStates;
int numOfEventIndicators;
DataManager* pDM;
int* statesOrder;
double* currState;
double* stateDerivatives;
int* jacobianInputVector;
bool* privDriveArray;
int privDriveLength;
bool directionalFlag;
double *seedVector;
public:
ModuleFMU(unsigned uLabel, const DofOwner *pDO,
DataManager* pDM, MBDynParser& HP);
virtual ~ModuleFMU(void);
virtual void Output(OutputHandler& OH) const;
virtual void WorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
VariableSubMatrixHandler&
AssJac(VariableSubMatrixHandler& WorkMat,
doublereal dCoef,
const VectorHandler& XCurr,
const VectorHandler& XPrimeCurr);
SubVectorHandler&
AssRes(SubVectorHandler& WorkVec,
doublereal dCoef,
const VectorHandler& XCurr,
const VectorHandler& XPrimeCurr);
unsigned int iGetNumPrivData(void) const;
unsigned int iGetPrivDataIdx(const char *s) const; //
doublereal dGetPrivData(unsigned int i) const; //
int iGetNumConnectedNodes(void) const;
void GetConnectedNodes(std::vector<const Node *>& connectedNodes) const;
void SetValue(DataManager *pDM, VectorHandler& X, VectorHandler& XP,
SimulationEntity::Hints *ph);
std::ostream& Restart(std::ostream& out) const;
virtual unsigned int iGetInitialNumDof(void) const;
virtual void
InitialWorkSpaceDim(integer* piNumRows, integer* piNumCols) const;
VariableSubMatrixHandler&
InitialAssJac(VariableSubMatrixHandler& WorkMat,
const VectorHandler& XCurr);
SubVectorHandler&
InitialAssRes(SubVectorHandler& WorkVec, const VectorHandler& XCurr);
unsigned int iGetNumDof(void) const;
DofOrder::Order GetDofType(unsigned int i) const;
DofOrder::Order GetEqType(unsigned int i) const;
fmu::SimulationTypes SIMTYPE;
};