Skip to content

Commit

Permalink
- check allocation of Samples in initSample
Browse files Browse the repository at this point in the history
- do not use large number of simulation time in fmu, causes error in allocation Samples in initSample

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@9659 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Jens Frenkel committed Aug 19, 2011
1 parent 183a19a commit 8bc8b7c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
8 changes: 4 additions & 4 deletions c_runtime/fmu_model_interface.c
Expand Up @@ -739,18 +739,18 @@ fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], siz

fmiStatus fmiGetDerivatives(fmiComponent c, fmiReal derivatives[], size_t nx) {
unsigned int i=0;
int needToIterate = 0;
ModelInstance* comp = (ModelInstance *)c;
if (invalidState(comp, "fmiGetDerivatives", not_modelError))
return fmiError;
if (invalidNumber(comp, "fmiGetDerivatives", "nx", nx, NUMBER_OF_STATES))
return fmiError;
if (nullPointer(comp, "fmiGetDerivatives", "derivatives[]", derivatives))
return fmiError;
#if NUMBER_OF_STATES>0
#if (NUMBER_OF_STATES>0)
//if (comp->eventInfo.stateValuesChanged == fmiTrue)
//{
// calculate new values
int needToIterate = 0;
functionDAE(&needToIterate);
for (i=0; i<nx; i++) {
fmiValueReference vr = vrStatesDerivatives[i];
Expand Down Expand Up @@ -793,6 +793,7 @@ fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_
fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance,
fmiEventInfo* eventInfo) {
int sampleEvent_actived = 0;
std::string init_method = std::string("simplex");
ModelInstance* comp = (ModelInstance *)c;
if (invalidState(comp, "fmiInitialize", modelInstantiated))
return fmiError;
Expand All @@ -808,7 +809,7 @@ fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal
eventInfo->upcomingTimeEvent = comp->eventInfo.upcomingTimeEvent;
globalData->lastEmittedTime = *comp->time;
globalData->forceEmit = 0;
initSample(*comp->time, 1e10);
initSample(*comp->time, 1);
initDelay(*comp->time);

if (initializeEventData()) {
Expand All @@ -826,7 +827,6 @@ fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal
// Evaluate all constant equations
functionAliasEquations();

std::string init_method = std::string("simplex");

/*try{
if (main_initialize(&init_method))
Expand Down
4 changes: 3 additions & 1 deletion c_runtime/simulation_events.cpp
Expand Up @@ -343,7 +343,7 @@ initSample(double start, double stop)
int i;
//double stop = 1.0;
double d;
sample_time* Samples;
sample_time* Samples = NULL;
int num_samples = globalData->nRawSamples;
int max_events = 0;
int ix = 0;
Expand All @@ -356,6 +356,8 @@ initSample(double start, double stop)
/ globalData->rawSampleExps[i].interval) + 1);
}
Samples = (sample_time*) calloc(max_events + 1, sizeof(sample_time));
if (Samples == NULL)
throw TerminateSimulationException("Could not allocate Memory for initSample!");
for (i = 0; i < num_samples; i++)
{
if (sim_verbose >= LOG_EVENTS)
Expand Down

0 comments on commit 8bc8b7c

Please sign in to comment.