From 8caa2607898b250bcd3082f811ec2e87b56ad7db Mon Sep 17 00:00:00 2001 From: Vitalij Ruge Date: Mon, 13 Oct 2014 17:34:59 +0000 Subject: [PATCH] fixed assert handling in dyn. optimization, thanks Willi git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@22737 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- .../c/optimization/DataManagement/MoveData.c | 23 ++++++++++++++++--- SimulationRuntime/c/util/omc_error.c | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/SimulationRuntime/c/optimization/DataManagement/MoveData.c b/SimulationRuntime/c/optimization/DataManagement/MoveData.c index 6dfb7934b06..3629bfad1dd 100644 --- a/SimulationRuntime/c/optimization/DataManagement/MoveData.c +++ b/SimulationRuntime/c/optimization/DataManagement/MoveData.c @@ -31,6 +31,9 @@ /*! MoveData.c */ +#include "../../openmodelica.h" +#include "../../openmodelica_types.h" +#include "../../meta/meta_modelica.h" #include "../OptimizerData.h" #include "../OptimizerLocalFunction.h" #include "../../simulation/results/simulation_result.h" @@ -572,6 +575,7 @@ void optData2ModelData(OptData *optData, double *vopt, const int index){ DATA * data = optData->data; const int * indexBC = optData->s.indexABCD + 3; OptDataDim * dim = &optData->dim; + threadData_t *threadData = data->threadData; for(l = 0; l < 3; ++l) realVars[l] = data->localData[l]->realVars; @@ -606,14 +610,19 @@ void optData2ModelData(OptData *optData, double *vopt, const int index){ for(; k simulationInfo.inputVars[k-nx] = (modelica_real) vopt[shift + k]*vnom[k]; } - + /* try */ +#if !defined(OMC_EMCC) + MMC_TRY_INTERNAL(simulationJumpBuffer) +#endif data->callback->input_function(data); /*data->callback->functionDAE(data);*/ updateDiscreteSystem(data); - if(index){ diffSynColoredOptimizerSystem(optData, optData->J[i][j], i,j,2); } +#if !defined(OMC_EMCC) + MMC_CATCH_INTERNAL(simulationJumpBuffer) +#endif } } @@ -634,7 +643,10 @@ void optData2ModelData(OptData *optData, double *vopt, const int index){ for(; k simulationInfo.inputVars[k-nx] = (modelica_real) vopt[shift + k]*vnom[k]; } - + /* try */ +#if !defined(OMC_EMCC) + MMC_TRY_INTERNAL(simulationJumpBuffer) +#endif data->callback->input_function(data); /*data->callback->functionDAE(data);*/ updateDiscreteSystem(data); @@ -642,6 +654,11 @@ void optData2ModelData(OptData *optData, double *vopt, const int index){ if(index){ diffSynColoredOptimizerSystem(optData, optData->J[i][j], i,j, (j+1 == np)? 3 : 2); } +#if !defined(OMC_EMCC) + MMC_CATCH_INTERNAL(simulationJumpBuffer) +#endif + + } /*terminal constraint(s)*/ diff --git a/SimulationRuntime/c/util/omc_error.c b/SimulationRuntime/c/util/omc_error.c index c27d76de725..acbae612b13 100644 --- a/SimulationRuntime/c/util/omc_error.c +++ b/SimulationRuntime/c/util/omc_error.c @@ -389,6 +389,7 @@ static inline jmp_buf* getBestJumpBuffer(threadData_t *threadData) case ERROR_SIMULATION: case ERROR_NONLINEARSOLVER: case ERROR_INTEGRATOR: + case ERROR_OPTIMIZE: #ifndef OMC_EMCC return threadData->simulationJumpBuffer; #endif