Skip to content

Commit

Permalink
Updated final time, jacobian and minor issues (10th Aug)
Browse files Browse the repository at this point in the history
  • Loading branch information
devyeshtandon committed Aug 11, 2016
1 parent e41f944 commit 57fdb7d
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 111 deletions.
104 changes: 51 additions & 53 deletions mbdynFMI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,12 @@ void fmu2::setCallBackFunction(){
callBackFunctions.componentEnvironment = 0;
}

void fmu2::ImportCreateDLL(int type){
void fmu2::ImportCreateDLL(){

if(type == 1){
if(simType == 1){
jmstatus = fmi2_import_create_dllfmu(fmu, fmi2_fmu_kind_me, &callBackFunctions);
}
else if (type == 0){
else if (simType == 0){
jmstatus = fmi2_import_create_dllfmu(fmu, fmi2_fmu_kind_cs, &callBackFunctions);
}
else{
Expand Down Expand Up @@ -173,7 +173,7 @@ void fmu2::Initialize(double dTol, double time, double rTol){

}

bool fmu2::SupportsDirectionalDerivatives(int simType){
bool fmu2::SupportsDirectionalDerivatives(){
unsigned int capability;

if(simType == 0){
Expand All @@ -195,7 +195,7 @@ bool fmu2::SupportsDirectionalDerivatives(int simType){

}

void fmu2::GetDirectionalDerivatives(double** jacobian, int* inputStatesVRef, int inputLength, double* seedVector){
void fmu2::GetDirectionalDerivatives(FullMatrixHandler jacobian, int* inputStatesVRef, int inputLength, double* seedVector){
//Seed Vector (the state value)

fmi2_import_variable_list_t* derivativeList = fmi2_import_get_derivatives_list(fmu);
Expand Down Expand Up @@ -224,7 +224,7 @@ void fmu2::GetDirectionalDerivatives(double** jacobian, int* inputStatesVRef, in
STATUSCHECK(fmistatus);

for (int j=0; j<numOfContStates + inputLength; j++){
jacobian[i][j] = output[j];
jacobian.PutCoef(i,j,output[j]);
}
}
delete[] derList;
Expand Down Expand Up @@ -295,6 +295,18 @@ fmu2::~fmu2(void){

fmi_import_free_context(context);

if (simType ==1 ){

fmi2_import_free_instance(fmu);
fmi2_import_free(fmu);

} else {

fmistatus = fmi2_import_terminate(fmu);
STATUSCHECK(fmistatus);
fmi2_import_free_instance(fmu);

}

}

Expand Down Expand Up @@ -373,15 +385,9 @@ void fmu2::SetValuesByVariable(const std::string s, double value){
STATUSCHECK(fmistatus);
}

void fmu2::Terminate(void){
fmi2_import_free_instance(fmu);

fmi2_import_free_instance(fmu);
fmi2_import_free(fmu);

}

void fmu2::InitializeAsSlave(const char* location, double tstart, double tend){

std::stringstream resourceLocation;
std::string strLocation = location;

Expand All @@ -390,7 +396,12 @@ void fmu2::InitializeAsSlave(const char* location, double tstart, double tend){
jmstatus = fmi2_import_instantiate(fmu, "Model for CS", fmi2_cosimulation, resourceLocation.str().c_str(), visible);
STATUSCHECK(jmstatus);

fmistatus = fmi2_import_setup_experiment(fmu, fmi2_true, relativeTolerance, tstart, fmi2_true, tend);
if (tend == std::numeric_limits<double>::max()){
fmistatus = fmi2_import_setup_experiment(fmu, fmi2_true, relativeTolerance, tstart, fmi2_false, 0);
} else {
fmistatus = fmi2_import_setup_experiment(fmu, fmi2_true, relativeTolerance, tstart, fmi2_true, tend);
}

STATUSCHECK(fmistatus);

fmistatus = fmi2_import_enter_initialization_mode(fmu);
Expand All @@ -406,20 +417,36 @@ void fmu2::CSPropogate(double tcur, double dt){
STATUSCHECK(fmistatus);
}

void fmu2::TerminateSlave(void){
fmistatus = fmi2_import_terminate(fmu);
STATUSCHECK(fmistatus);
fmi2_import_free_instance(fmu);

}

fmu::~fmu(void){
NO_OP;
}

fmu1::~fmu1(void){

fmi_xml_free_context(context);

if(simType == 1){

fmi1_capi_free_dll(fmu->capi);

delete[] eventIndicators;
delete[] eventIndicatorsPrev;
// delete[] currStates;

delete[] deriv;
delete[] vrs;

fmi1_import_free_model_instance(fmu);
fmi1_import_destroy_dllfmu(fmu);
fmi1_import_free(fmu);

} else {

fmistatus = fmi1_import_terminate_slave(fmu);
STATUSCHECK(fmistatus);
fmi1_import_free_slave_instance(fmu);

}
}


Expand All @@ -440,7 +467,7 @@ void fmu1::setCallBackFunction(){
silent_cout("Callback Functions Set.\n");
}

void fmu1::ImportCreateDLL(int type){
void fmu1::ImportCreateDLL(void){
jmstatus = fmi1_import_create_dllfmu(fmu, callBackFunctions, 1);
STATUSCHECK(jmstatus);

Expand Down Expand Up @@ -604,11 +631,11 @@ double fmu1::GetStateFromRefValue(unsigned int i){
return realValue[0];
}

bool fmu1::SupportsDirectionalDerivatives(int simType){
bool fmu1::SupportsDirectionalDerivatives(){
return false;
}

void fmu1::GetDirectionalDerivatives(double** jacobian, int* vector, int vectorLength, double* seedVector){
void fmu1::GetDirectionalDerivatives(FullMatrixHandler jacobian, int* vector, int vectorLength, double* seedVector){
NO_OP;
}

Expand Down Expand Up @@ -637,35 +664,6 @@ void fmu1::CSPropogate(double tcur, double dt){
}


void fmu1::Terminate(void){


fmi1_capi_free_dll(fmu->capi);

delete[] eventIndicators;
delete[] eventIndicatorsPrev;
// delete[] currStates;

delete[] deriv;
delete[] vrs;

fmi1_import_free_model_instance(fmu);
fmi1_import_destroy_dllfmu(fmu);
fmi1_import_free(fmu);




}

void fmu1::TerminateSlave(void){

fmistatus = fmi1_import_terminate_slave(fmu);
STATUSCHECK(fmistatus);
fmi1_import_free_slave_instance(fmu);

}

void fmu1::GetStates(double* states){

fmistatus = fmi1_import_get_continuous_states(fmu, states, numOfContStates);
Expand Down
46 changes: 21 additions & 25 deletions mbdynFMI.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
#include <FMI2/fmi2_import.h>
#include <FMI/fmi_import_context.h>

#include "mbconfig.h"
#include "stepsol.h"


//#include <fmi1_import_impl.h>
//#include <fmi1_import_variable_list_impl.h>

Expand All @@ -32,7 +36,7 @@ class fmu {
virtual void parseXML(fmi_import_context_t* context, const char* dirPath) = 0;
virtual void setCallBackFunction() = 0;

virtual void ImportCreateDLL(int) = 0;
virtual void ImportCreateDLL(void) = 0;

virtual bool CheckInput(const std::string) = 0;

Expand All @@ -52,15 +56,14 @@ class fmu {
virtual double GetStateFromRefValue(unsigned int i) = 0;
virtual void GetStateDerivatives(double*) = 0;
virtual void GetStates(double*) = 0;
virtual void GetDirectionalDerivatives(double** ,int*, int, double *) = 0;
virtual bool SupportsDirectionalDerivatives(int) = 0;
virtual void GetDirectionalDerivatives(FullMatrixHandler ,int*, int, double *) = 0;
virtual bool SupportsDirectionalDerivatives() = 0;

virtual bool CheckInterrupts(double, double*) = 0;
virtual void Terminate(void) = 0;

virtual void InitializeAsSlave(const char*, double, double) = 0;
virtual void CSPropogate(double tcur, double dt) = 0;
virtual void TerminateSlave(void) = 0;


virtual ~fmu(void);
};
Expand All @@ -84,24 +87,23 @@ class fmu1 :public fmu{
fmi1_import_variable_t* v;

int numOfContStates;
fmi1_real_t* currStates;
fmi1_real_t* currStatesDer;
fmi1_real_t* deriv;
fmi1_value_reference_t *vrs;

fmi1_boolean_t intermediateResults;
fmi1_import_variable_list_t* vl;

int type; //1: IMPORT 2:COSIM
int simType; //1: IMPORT 2:COSIM
public:
void parseXML(fmi_import_context_t* context, const char* dirPath);
void setCallBackFunction();

fmu1(fmi_import_context_t* text){
context= text;
fmu1(fmi_import_context_t* text, int type){
context = text;
simType = type;
}

void ImportCreateDLL(int);
void ImportCreateDLL(void);

bool CheckInput(const std::string);

Expand All @@ -121,15 +123,13 @@ class fmu1 :public fmu{
double GetStateFromRefValue(unsigned int i);
void GetStateDerivatives(double*);
void GetStates(double *);
void GetDirectionalDerivatives(double** , int*, int, double*);
bool SupportsDirectionalDerivatives(int);
void GetDirectionalDerivatives(FullMatrixHandler, int*, int, double*);
bool SupportsDirectionalDerivatives();

bool CheckInterrupts(double, double*);
void Terminate(void);

void InitializeAsSlave(const char* location, double tstart, double tend);
void CSPropogate(double tcur, double dt);
void TerminateSlave(void);

virtual ~fmu1(void);

Expand All @@ -156,25 +156,23 @@ class fmu2 : public fmu{
fmi2_boolean_t terminateSimulation;

int numOfContStates;
fmi2_real_t* currStates;
fmi2_real_t* currStatesDer;
fmi2_value_reference_t *vrs;

fmi2_boolean_t intermediateResults;
fmi2_import_variable_list_t* vl;


int simType; //1: IMPORT 2:COSIM

int type; //1: IMPORT 2:COSIM
public:
void parseXML(fmi_import_context_t* context, const char* dirPath);
void setCallBackFunction();

fmu2(fmi_import_context_t* text){
fmu2(fmi_import_context_t* text, int type){
context= text;
simType = type;
}

void ImportCreateDLL(int);
void ImportCreateDLL(void);

bool CheckInput(const std::string);

Expand All @@ -194,15 +192,13 @@ class fmu2 : public fmu{
double GetStateFromRefValue(unsigned int i);
void GetStateDerivatives(double*);
void GetStates(double *);
void GetDirectionalDerivatives(double** , int*, int, double*);
bool SupportsDirectionalDerivatives(int);
void GetDirectionalDerivatives(FullMatrixHandler , int*, int, double*);
bool SupportsDirectionalDerivatives();

bool CheckInterrupts(double, double*);
void Terminate(void);

void InitializeAsSlave(const char* , double, double);
void CSPropogate(double tcur, double dt);
void TerminateSlave(void);

virtual ~fmu2(void);
};
Expand Down
Binary file modified mbdynFMI.o
Binary file not shown.
Loading

0 comments on commit 57fdb7d

Please sign in to comment.