Skip to content

Commit

Permalink
Remove memory errors
Browse files Browse the repository at this point in the history
  • Loading branch information
devyeshtandon committed Aug 17, 2016
1 parent 4b6d339 commit 534ed5c
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 30 deletions.
41 changes: 30 additions & 11 deletions mbdynFMI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ void fmu2::setCallBackFunction(){

void fmu2::ImportCreateDLL(){

if(simType != fmi2_import_get_fmu_kind(fmu)-1){
silent_cout("This FMU does not support the specified simulation type");
throw ErrGeneric(MBDYN_EXCEPT_ARGS);
}


if(simType == IMPORT){
jmstatus = fmi2_import_create_dllfmu(fmu, fmi2_fmu_kind_me, &callBackFunctions);
}
Expand All @@ -140,6 +146,7 @@ int fmu2::GetNumOfEventIndicators(void){
}

int fmu2::GetNumOfVar(void){
fmi2_import_variable_list_t* vl;
vl = fmi2_import_get_variable_list(fmu, 0);
return fmi2_import_get_variable_list_size(vl);
}
Expand Down Expand Up @@ -239,8 +246,11 @@ void fmu2::EventIndicatorInit(void){
eventIndicators = new fmi2_real_t [nEventIndicators];
eventIndicatorsPrev = new fmi2_real_t [nEventIndicators];

fmistatus = fmi2_import_get_event_indicators(fmu, eventIndicatorsPrev, nEventIndicators);
STATUSCHECK(fmistatus);
fmistatus = fmi2_import_get_event_indicators(fmu, eventIndicatorsPrev, nEventIndicators);

if(fmistatus){
silent_cout("This FMU does triggers events. Warning: Event triggers not supported by MBDyn\n");
}
}

void fmu2::SetRelativeTol(double dTol){
Expand Down Expand Up @@ -290,12 +300,12 @@ double fmu2::GetStateFromRefValue(unsigned int i){
}

fmu2::~fmu2(void){
// delete[] eventIndicators;
// delete[] eventIndicatorsPrev;


fmi_import_free_context(context);

if (simType == IMPORT ){
delete[] eventIndicators;
delete[] eventIndicatorsPrev;

fmi2_import_free_instance(fmu);
fmi2_import_free(fmu);
Expand All @@ -314,6 +324,7 @@ fmu2::~fmu2(void){
void fmu2::GetStateDerivatives(double* derivatives){

fmistatus = fmi2_import_get_derivatives(fmu, derivatives, numOfContStates);
silent_cout("PPPPPPPPPPPPPP"<<derivatives[0]);
STATUSCHECK(fmistatus);

}
Expand Down Expand Up @@ -392,7 +403,7 @@ void fmu2::InitializeAsSlave(const char* location, double tstart, double tend){
std::string strLocation = location;

resourceLocation << "file://" << strLocation;
fmi1_boolean_t visible = fmi1_false;
fmi2_boolean_t visible = fmi2_false;
jmstatus = fmi2_import_instantiate(fmu, "Model for CS", fmi2_cosimulation, resourceLocation.str().c_str(), visible);
STATUSCHECK(jmstatus);

Expand All @@ -413,7 +424,7 @@ void fmu2::InitializeAsSlave(const char* location, double tstart, double tend){
}

void fmu2::CSPropogate(double tcur, double dt){
fmistatus = fmi2_import_do_step(fmu, tcur, dt, fmi1_true);
fmistatus = fmi2_import_do_step(fmu, tcur, dt, fmi2_true);
STATUSCHECK(fmistatus);
}

Expand Down Expand Up @@ -640,6 +651,7 @@ void fmu1::GetDirectionalDerivatives(FullMatrixHandler* jacobian, int* vector, i
}

int fmu1::GetNumOfVar(){
fmi1_import_variable_list_t* vl;
vl = fmi1_import_get_variable_list(fmu);
return fmi1_import_get_variable_list_size(vl);
}
Expand All @@ -654,8 +666,10 @@ void fmu1::EventIndicatorInit(void){
eventIndicators = new fmi1_real_t [nEventIndicators];
eventIndicatorsPrev = new fmi1_real_t [nEventIndicators];

// fmistatus = fmi1_import_get_event_indicators(fmu, eventIndicatorsPrev, nEventIndicators);
// STATUSCHECK(fmistatus);
fmistatus = fmi1_import_get_event_indicators(fmu, eventIndicatorsPrev, nEventIndicators);
if(fmistatus){
silent_cout("This FMU does triggers events. Warning: Event triggers not supported by MBDyn\n");
}
}

void fmu1::CSPropogate(double tcur, double dt){
Expand All @@ -670,8 +684,13 @@ void fmu1::GetStates(double* states){
if(!fmistatus){
fmistatus = fmi1_import_get_nominal_continuous_states(fmu, states, numOfContStates);
}
//Put all the values as zero if everything fails?
STATUSCHECK(fmistatus);
if(!fmistatus){
for(int i=0; i<numOfContStates; i++){
states[i] = 0;
}
}

// STATUSCHECK(fmistatus);

}

Expand Down
9 changes: 4 additions & 5 deletions mbdynFMI.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
class fmu {
public:
enum SimulationTypes{
COSIM,
IMPORT
IMPORT,
COSIM
};

int simType;
Expand Down Expand Up @@ -103,7 +103,7 @@ class fmu1 :public fmu{
fmi1_value_reference_t *vrs;

fmi1_boolean_t intermediateResults;
fmi1_import_variable_list_t* vl;


public:
void parseXML(fmi_import_context_t* context, const char* dirPath);
Expand Down Expand Up @@ -153,7 +153,6 @@ class fmu2 : public fmu{
fmi2_status_t fmistatus;
jm_status_enu_t jmstatus;


fmi2_real_t currTime;
fmi2_real_t relativeTolerance;
fmi2_event_info_t eventInfo;
Expand All @@ -169,7 +168,7 @@ class fmu2 : public fmu{
fmi2_value_reference_t *vrs;

fmi2_boolean_t intermediateResults;
fmi2_import_variable_list_t* vl;


public:
void parseXML(fmi_import_context_t* context, const char* dirPath);
Expand Down
24 changes: 13 additions & 11 deletions module-FMU.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include "module-FMU.h"
#include "solver.h"

//#define DEBUG
#define DEBUG

ModuleFMU::ModuleFMU(
unsigned uLabel, const DofOwner *pDO,
Expand Down Expand Up @@ -97,14 +97,15 @@ pDM(pDM)
model = new fmu2(context, SIMTYPE);
}

silent_cout("Version"<<version);
silent_cout("Version "<<version<<"\n");
model->parseXML(context, UClocation.c_str());
model->setCallBackFunction();
model->ImportCreateDLL();

currTime = pDM->dGetTime();
initialTime = currTime;
endTime = (pDM->GetSolver())->dGetFinalTime();

/// SIMTYPE specific work

if(SIMTYPE == IMPORT){
Expand Down Expand Up @@ -155,8 +156,6 @@ pDM(pDM)
seedVector = new double[numOfContinousStates + privDriveLength];
}

jacobian.Resize(numOfContinousStates,numOfContinousStates + privDriveLength);
jacobian.Reset();
}

ModuleFMU::~ModuleFMU(void)
Expand All @@ -168,15 +167,13 @@ ModuleFMU::~ModuleFMU(void)
delete[] seedVector;
}


delete[] jacobianInputVector;

delete[] currState;
delete[] stateDerivatives;

for (strDriveCon::iterator i = drivesContainer.begin(); i != drivesContainer.end(); i++){
delete (i->second);
drivesContainer.erase(i->first);
delete (i->second);
}

drivesContainer.clear();
Expand Down Expand Up @@ -208,7 +205,7 @@ void
ModuleFMU::WorkSpaceDim(integer* piNumRows, integer* piNumCols) const
{
*piNumRows = numOfContinousStates;
*piNumCols = numOfContinousStates;
*piNumCols = numOfContinousStates + privDriveLength;
}


Expand All @@ -224,10 +221,10 @@ ModuleFMU::AssJac(VariableSubMatrixHandler& WorkMat,
#endif

if (numOfContinousStates > 0){
FullSubMatrixHandler& WM = WorkMat.SetFull();
FullSubMatrixHandler &WM = WorkMat.SetFull();
silent_cout(numOfContinousStates<<"#########"<<privDriveLength<<"*******"<<WM.iVecSize<<"-------------"<<WM.iMaxCols);
WM.ResizeReset(numOfContinousStates, numOfContinousStates + privDriveLength);
integer iFirstIndex = iGetFirstIndex();

{
int i = 1;
for ( i=1; i<=numOfContinousStates ; i++){
Expand All @@ -242,6 +239,9 @@ ModuleFMU::AssJac(VariableSubMatrixHandler& WorkMat,
}

if (directionalFlag){
FullMatrixHandler jacobian;
jacobian.Resize(numOfContinousStates,numOfContinousStates + privDriveLength);
jacobian.Reset();


for (int i=0; i<numOfContinousStates; i++){
Expand Down Expand Up @@ -315,7 +315,7 @@ ModuleFMU::AssRes(SubVectorHandler& WorkVec,
}

//Get Index of the elements
integer iFirstIndex = iGetFirstIndex() + 1;
integer iFirstIndex = iGetFirstIndex();

//Set Index to WorkVec
for (int i=1; i<=numOfContinousStates; i++){
Expand All @@ -325,6 +325,7 @@ ModuleFMU::AssRes(SubVectorHandler& WorkVec,
//Set WorkVec with the difference in the XPrimCurr - FMUDerivative
for (int i=1; i<=numOfContinousStates; i++){
WorkVec.PutCoef(i, (stateDerivatives[i-1] - XPrimeCurr(i + iFirstIndex)));
silent_cout("OOOOOOOOO"<<(stateDerivatives[i-1] - XPrimeCurr(i + iFirstIndex)));
}
}

Expand Down Expand Up @@ -428,6 +429,7 @@ ModuleFMU::InitialWorkSpaceDim(
{
*piNumRows = 0;
*piNumCols = 0;

}

VariableSubMatrixHandler&
Expand Down
5 changes: 2 additions & 3 deletions module-FMU.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,9 @@ class ModuleFMU
DofOrder::Order GetEqType(unsigned int i) const;

enum SimulationTypes{
COSIM,
IMPORT
IMPORT,
COSIM
} SIMTYPE;

FullMatrixHandler jacobian;
};

0 comments on commit 534ed5c

Please sign in to comment.