Skip to content

Commit

Permalink
- fix gcc-warnings for c-runtime
Browse files Browse the repository at this point in the history
- introduce new flag -ils (c-runtime)


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@15134 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Feb 10, 2013
1 parent a84ef06 commit 7a7b39e
Show file tree
Hide file tree
Showing 14 changed files with 61 additions and 44 deletions.
8 changes: 6 additions & 2 deletions SimulationRuntime/c/simulation/options.cpp
Expand Up @@ -44,6 +44,7 @@ const char *FLAG_NAME[FLAG_MAX] = {
/* FLAG_IIF */ "iif",
/* FLAG_IIM */ "iim",
/* FLAG_IIT */ "iit",
/* FLAG_ILS */ "ils",
/* FLAG_INTERACTIVE */ "interactive",
/* FLAG_IOM */ "iom",
/* FLAG_JAC */ "jac",
Expand All @@ -70,12 +71,13 @@ const char *FLAG_DESC[FLAG_MAX] = {
/* FLAG_HELP */ "get deteiled information the specifies the command-line flag",
/* FLAG_IIF */ "value specifies an external file for the initialization of the model",
/* FLAG_IIM */ "value specifies the initialization method",
/* FLAG_IIT */ "value specifies a time for the initialization of the model",
/* FLAG_IIT */ "[double] value specifies a time for the initialization of the model",
/* FLAG_ILS */ "[int] value specifies the number of steps for the global homotopy method (required: -iim=numeric -iom=nelder_mead_ex)",
/* FLAG_INTERACTIVE */ "specify interactive simulation",
/* FLAG_IOM */ "value specifies the initialization optimization method",
/* FLAG_JAC */ "specify jacobian",
/* FLAG_L */ "value specifies a time where the linearization of the model should be performed",
/* FLAG_LV */ "value specifies the logging level",
/* FLAG_LV */ "[string list] value specifies the logging level",
/* FLAG_MEASURETIMEPLOTFORMAT */ "value specifies the output format of the measure time functionality",
/* FLAG_NLS */ "value specifies the nonlinear solver",
/* FLAG_NOEMIT */ "do not emit any results to the result file",
Expand All @@ -98,6 +100,7 @@ const char *FLAG_DETAILED_DESC[FLAG_MAX] = {
/* FLAG_IIF */ "value specifies an external file for the initialization of the model",
/* FLAG_IIM */ "value specifies the initialization method\n none\n numeric\n symbolic",
/* FLAG_IIT */ "value specifies a time for the initialization of the model",
/* FLAG_ILS */ "value specifies the number of steps for the global homotopy method (required: -iim=numeric -iom=nelder_mead_ex)",
/* FLAG_INTERACTIVE */ "specify interactive simulation",
/* FLAG_IOM */ "value specifies the initialization optimization method\n nelder_mead_ex\n nelder_mead_ex2\n simplex\n newuoa",
/* FLAG_JAC */ "specify jacobian",
Expand Down Expand Up @@ -125,6 +128,7 @@ const int FLAG_TYPE[FLAG_MAX] = {
/* FLAG_IIF */ FLAG_TYPE_OPTION,
/* FLAG_IIM */ FLAG_TYPE_OPTION,
/* FLAG_IIT */ FLAG_TYPE_OPTION,
/* FLAG_ILS */ FLAG_TYPE_OPTION,
/* FLAG_INTERACTIVE */ FLAG_TYPE_FLAG,
/* FLAG_IOM */ FLAG_TYPE_OPTION,
/* FLAG_JAC */ FLAG_TYPE_FLAG,
Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/simulation/options.h
Expand Up @@ -44,6 +44,7 @@ enum _FLAG
FLAG_IIF,
FLAG_IIM,
FLAG_IIT,
FLAG_ILS,
FLAG_INTERACTIVE,
FLAG_IOM,
FLAG_JAC,
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/simulation/simulation_info_xml.c
Expand Up @@ -128,7 +128,7 @@ void modelInfoXmlInit(MODEL_DATA_XML* xml)
size_t len = fread(buf, 1, sizeof(buf), file);
done = len < sizeof(buf);
if(XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
char *err = XML_ErrorString(XML_GetErrorCode(parser));
const char *err = XML_ErrorString(XML_GetErrorCode(parser));
unsigned long line = XML_GetCurrentLineNumber(parser);
fclose(file);
XML_ParserFree(parser);
Expand Down
29 changes: 18 additions & 11 deletions SimulationRuntime/c/simulation/simulation_runtime.cpp
Expand Up @@ -113,7 +113,7 @@ simulation_result *sim_result = NULL;


/* function for start simulation */
int callSolver(DATA*, string, string, string, string, double, string, int cpuTime);
int callSolver(DATA*, string, string, string, string, double, int, string, int cpuTime);

int isInteractiveSimulation();

Expand Down Expand Up @@ -425,7 +425,9 @@ int startNonInteractiveSimulation(int argc, char**argv, DATA* data)
string init_optiMethod = "";
string init_file = "";
string init_time_string = "";
double init_time = 0;
double init_time = 0.0;
string init_lambda_steps_string = "";
int init_lambda_steps = 5;
string outputVariablesAtEnd = "";
int cpuTime = flagSet("cpu", argc, argv);

Expand All @@ -440,11 +442,16 @@ int startNonInteractiveSimulation(int argc, char**argv, DATA* data)
init_time_string = *getOption("iit", argc, argv);
init_time = atof(init_time_string.c_str());
}
if(optionSet("ils", argc, argv))
{
init_lambda_steps_string = *getOption("ils", argc, argv);
init_lambda_steps = atoi(init_lambda_steps_string.c_str());
}

if(flagSet("output", argc, argv))
outputVariablesAtEnd = *getFlagValue("output", argc, argv);

retVal = callSolver(data, result_file_cstr, init_initMethod, init_optiMethod, init_file, init_time, outputVariablesAtEnd, cpuTime);
retVal = callSolver(data, result_file_cstr, init_initMethod, init_optiMethod, init_file, init_time, init_lambda_steps, outputVariablesAtEnd, cpuTime);

if(retVal == 0 && create_linearmodel)
{
Expand Down Expand Up @@ -487,7 +494,7 @@ int startNonInteractiveSimulation(int argc, char**argv, DATA* data)
* "dopri5" calls an embedded DOPRI5(4)-solver with stepsize control
*/
int callSolver(DATA* simData, string result_file_cstr, string init_initMethod,
string init_optiMethod, string init_file, double init_time, string outputVariablesAtEnd, int cpuTime)
string init_optiMethod, string init_file, double init_time, int lambda_steps, string outputVariablesAtEnd, int cpuTime)
{
int retVal = -1;
const char* outVars = (outputVariablesAtEnd.size() == 0) ? NULL : outputVariablesAtEnd.c_str();
Expand All @@ -509,17 +516,17 @@ int callSolver(DATA* simData, string result_file_cstr, string init_initMethod,

if(simData->simulationInfo.solverMethod == std::string("")) {
INFO(LOG_SOLVER, " | No solver is set, using dassl.");
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 3, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 3, outVars);
} else if(simData->simulationInfo.solverMethod == std::string("euler")) {
INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 1, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 1, outVars);
} else if(simData->simulationInfo.solverMethod == std::string("rungekutta")) {
INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 2, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 2, outVars);
#ifdef WITH_SUNDIALS
} else if(simData->simulationInfo.solverMethod == std::string("radau")) {
INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 6, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 6, outVars);
#endif
} else if(simData->simulationInfo.solverMethod == std::string("dassl") ||
simData->simulationInfo.solverMethod == std::string("dasslwort") ||
Expand All @@ -530,22 +537,22 @@ int callSolver(DATA* simData, string result_file_cstr, string init_initMethod,
simData->simulationInfo.solverMethod == std::string("dasslInternalNumJac")) {

INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 3, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 3, outVars);
} else if(simData->simulationInfo.solverMethod == std::string("inline-euler")) {
if(!_omc_force_solver || std::string(_omc_force_solver) != std::string("inline-euler")) {
INFO1(LOG_SOLVER, " | Recognized solver: %s, but the executable was not compiled with support for it. Compile with -D_OMC_INLINE_EULER.", simData->simulationInfo.solverMethod);
retVal = 1;
} else {
INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 4, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 4, outVars);
}
} else if(simData->simulationInfo.solverMethod == std::string("inline-rungekutta")) {
if(!_omc_force_solver || std::string(_omc_force_solver) != std::string("inline-rungekutta")) {
INFO1(LOG_SOLVER, " | Recognized solver: %s, but the executable was not compiled with support for it. Compile with -D_OMC_INLINE_RK.", simData->simulationInfo.solverMethod);
retVal = 1;
} else {
INFO1(LOG_SOLVER, " | Recognized solver: %s.", simData->simulationInfo.solverMethod);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, 4, outVars);
retVal = solver_main(simData, init_initMethod.c_str(), init_optiMethod.c_str(), init_file.c_str(), init_time, lambda_steps, 4, outVars);
}
#ifdef _OMC_QSS_LIB
} else if(simData->simulationInfo.solverMethod == std::string("qss")) {
Expand Down
Expand Up @@ -342,17 +342,18 @@ void dumpInitialSolution(DATA *simData)
RELEASE(LOG_SOTI);
}

/*! \fn static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling)
/*! \fn static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling, int lambda_steps)
*
* This is a helper function for initialize.
*
* \param [ref] [initData]
* \param [in] [optiMethod] specified optimization method
* \param [in] [useScaling] specifies whether scaling should be used or not
* \param [in] [lambda_steps] number of steps
*
* \author lochel
*/
static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling)
static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling, int lambda_steps)
{
DATA *data = initData->simData;

Expand Down Expand Up @@ -385,9 +386,9 @@ static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling)
else if(optiMethod == IOM_NEWUOA)
retVal = newuoa_initialization(initData);
else if(optiMethod == IOM_NELDER_MEAD_EX)
retVal = nelderMeadEx_initialization(initData, &lambda);
retVal = nelderMeadEx_initialization(initData, &lambda, lambda_steps);
else if(optiMethod == IOM_NELDER_MEAD_EX2)
retVal = nelderMeadEx_initialization(initData, &lambda);
retVal = nelderMeadEx_initialization(initData, &lambda, 1);
else if(optiMethod == IOM_KINSOL)
retVal = kinsol_initialization(initData);
else if(optiMethod == IOM_KINSOL_SCALED)
Expand Down Expand Up @@ -441,7 +442,7 @@ static int initialize2(INIT_DATA *initData, int optiMethod, int useScaling)
*
* \author lochel
*/
static int initialize(DATA *data, int optiMethod)
static int initialize(DATA *data, int optiMethod, int lambda_steps)
{
const double h = 1e-6;

Expand Down Expand Up @@ -569,7 +570,7 @@ static int initialize(DATA *data, int optiMethod)
{
INFO(LOG_INIT, "start with scaling");

initialize2(initData, optiMethod, 1);
initialize2(initData, optiMethod, 1, lambda_steps);

dumpInitialization(initData);

Expand Down Expand Up @@ -599,7 +600,7 @@ static int initialize(DATA *data, int optiMethod)
initData->startValueResidualScalingCoefficients = NULL;
}

initialize2(initData, optiMethod, 0);
initialize2(initData, optiMethod, 0, lambda_steps);

/* dump final solution */
dumpInitialization(initData);
Expand All @@ -619,14 +620,15 @@ static int initialize(DATA *data, int optiMethod)
return retVal;
}

/*! \fn static int numeric_initialization(DATA *data, int optiMethod)
/*! \fn static int numeric_initialization(DATA *data, int optiMethod, int lambda_steps)
*
* \param [ref] [data]
* \param [in] [optiMethod] specified optimization method
* \param [in] [lambda_steps] number of steps
*
* \author lochel
*/
static int numeric_initialization(DATA *data, int optiMethod)
static int numeric_initialization(DATA *data, int optiMethod, int lambda_steps)
{
int retVal = 0;

Expand All @@ -645,7 +647,7 @@ static int numeric_initialization(DATA *data, int optiMethod)
storeRelations(data);
storePreValues(data);

retVal = initialize(data, optiMethod);
retVal = initialize(data, optiMethod, lambda_steps);

storePreValues(data); /* save pre-values */
overwriteOldSimulationData(data); /* if there are non-linear equations */
Expand Down Expand Up @@ -893,7 +895,7 @@ static int importStartValues(DATA *data, const char *pInitFile, double initTime)
*
* \author lochel
*/
int initialization(DATA *data, const char* pInitMethod, const char* pOptiMethod, const char* pInitFile, double initTime)
int initialization(DATA *data, const char* pInitMethod, const char* pOptiMethod, const char* pInitFile, double initTime, int lambda_steps)
{
int initMethod = useSymbolicInitialization ? IIM_SYMBOLIC : IIM_NUMERIC; /* default method */
int optiMethod = IOM_NELDER_MEAD_EX; /* default method */
Expand Down Expand Up @@ -970,7 +972,7 @@ int initialization(DATA *data, const char* pInitMethod, const char* pOptiMethod,
if(initMethod == IIM_NONE)
retVal = 0;
else if(initMethod == IIM_NUMERIC)
retVal = numeric_initialization(data, optiMethod);
retVal = numeric_initialization(data, optiMethod, lambda_steps);
else if(initMethod == IIM_SYMBOLIC)
retVal = symbolic_initialization(data);
else
Expand Down
Expand Up @@ -47,7 +47,7 @@ extern "C"
extern void dumpInitialization(INIT_DATA *initData);
extern int reportResidualValue(INIT_DATA *initData);
extern double leastSquareWithLambda(INIT_DATA *initData, double lambda);
extern int initialization(DATA *data, const char* pInitMethod, const char* pOptiMethod, const char* pInitFile, double initTime);
extern int initialization(DATA *data, const char* pInitMethod, const char* pOptiMethod, const char* pInitFile, double initTime, int lambda_steps);

#ifdef __cplusplus
}
Expand Down
Expand Up @@ -372,16 +372,16 @@ static void NelderMeadOptimization(INIT_DATA* initData,
*
* \author lochel
*/
int nelderMeadEx_initialization(INIT_DATA *initData, double *lambda)
int nelderMeadEx_initialization(INIT_DATA *initData, double *lambda, int lambda_steps)
{
double lambda_step = 0.2;
double lambda_stepsize = 1.0 / (double)lambda_steps;
double STOPCR = 1.e-12;
long NLOOP = 1000 * initData->nVars;
long NLOOP = 1000 * initData->nVars * lambda_steps;
long iteration = 0;

INFO(LOG_INIT, "NelderMeadOptimization");
INDENT(LOG_INIT);
NelderMeadOptimization(initData, lambda_step, STOPCR, NLOOP, ACTIVE_STREAM(LOG_INIT) ? NLOOP/10 : 0, lambda, &iteration, leastSquareWithLambda);
NelderMeadOptimization(initData, lambda_stepsize, STOPCR, NLOOP, ACTIVE_STREAM(LOG_INIT) ? NLOOP/10 : 0, lambda, &iteration, leastSquareWithLambda);
INFO1(LOG_INIT, "iterations: %ld", iteration);
RELEASE(LOG_INIT);

Expand Down
Expand Up @@ -44,7 +44,7 @@ extern "C"
{
#endif

extern int nelderMeadEx_initialization(INIT_DATA *initData, double *lambdaStart);
extern int nelderMeadEx_initialization(INIT_DATA *initData, double *lambdaStart, int lambda_steps);

#ifdef __cplusplus
}
Expand Down
Expand Up @@ -549,7 +549,7 @@ int solveHybrd(DATA *data, int sysNumber)
buffer[0] = 0;
for(j=0; j<solverData->n; j++)
sprintf(buffer, "%s%10g ", buffer, solverData->fjacobian[i*solverData->n+j]);
INFO(LOG_NLS_JAC, buffer);
INFO1(LOG_NLS_JAC, "%s", buffer);
}
RELEASE(LOG_NLS_JAC);
}
Expand Down
Expand Up @@ -483,7 +483,7 @@ static int _omc_newton(integer* n, double *x, double *fvec, double* eps, double*
buffer[0] = 0;
for(j=0; j<solverData->n; j++)
sprintf(buffer, "%s%10g ", buffer, fjac[i*(*n)+j]);
INFO(LOG_NLS_JAC, buffer);
INFO1(LOG_NLS_JAC, "%s", buffer);
}
RELEASE(LOG_NLS_JAC);
}
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/simulation/solver/solver_main.c
Expand Up @@ -112,7 +112,7 @@ int solver_main_step(int flag, DATA* data, SOLVER_INFO* solverInfo)
* 5=free
*/
int solver_main(DATA* data, const char* init_initMethod,
const char* init_optiMethod, const char* init_file, double init_time,
const char* init_optiMethod, const char* init_file, double init_time, int lambda_steps,
int flag, const char* outputVariablesAtEnd)
{
int i;
Expand Down Expand Up @@ -214,7 +214,7 @@ int solver_main(DATA* data, const char* init_initMethod,
rt_tick(SIM_TIMER_INIT);
}

if(initialization(data, init_initMethod, init_optiMethod, init_file, init_time))
if(initialization(data, init_initMethod, init_optiMethod, init_file, init_time, lambda_steps))
{
WARNING(LOG_STDOUT, "Error in initialization. Storing results and exiting.\nUse -lv LOG_INIT for more information.");
simInfo->stopTime = simInfo->startTime;
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/simulation/solver/solver_main.h
Expand Up @@ -77,7 +77,7 @@ extern "C" {
#endif

extern int solver_main(DATA* data, const char* init_initMethod,
const char* init_optiMethod, const char* init_file, double init_time,
const char* init_optiMethod, const char* init_file, double init_time, int lambda_steps,
int flag, const char* outputVariablesAtEnd);

#ifdef __cplusplus
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/simulation/solver/stateset.c
Expand Up @@ -263,14 +263,14 @@ int stateSelection(DATA *data, char reportError)
/* error, report the matrix and the time */
char buffer[4096];

WARNING3(LOG_DSS, "jacobian %dx%d [id: %d]", data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeRows, data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeCols, set->jacobianIndex);
WARNING3(LOG_DSS, "jacobian %dx%d [id: %ld]", data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeRows, data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeCols, set->jacobianIndex);
INDENT(LOG_DSS);
for(i=0; i < data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeRows; i++)
{
buffer[0] = 0;
for(j=0; j < data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeCols; j++)
sprintf(buffer, "%s%.5e ", buffer, set->J[i*data->simulationInfo.analyticJacobians[set->jacobianIndex].sizeCols+j]);
WARNING(LOG_DSS, buffer);
WARNING1(LOG_DSS, "%s", buffer);
}

for (i=0; i<set->nCandidates; i++)
Expand Down
13 changes: 8 additions & 5 deletions SimulationRuntime/fmi/export/fmu_model_interface.c
Expand Up @@ -535,16 +535,19 @@ fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal
initializeStateSetJacobians(comp->fmuData);
/*TODO: Simulation stop time is need to calculate in before hand all sample events
We shouldn't generate them all in beforehand */
initSample(comp->fmuData, comp->fmuData->localData[0]->timeValue, 100 /*should be stopTime*/);
initSample(comp->fmuData, comp->fmuData->localData[0]->timeValue, 100 /*should be stopTime*/);
initDelay(comp->fmuData, comp->fmuData->localData[0]->timeValue);

if (initialization(comp->fmuData, "", "","",0)){
if(initialization(comp->fmuData, "", "", "", 0.0, 5))
{
comp->state = modelError;
if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
if(comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
"fmiInitialization: failed");
} else {
}
else
{
comp->state = modelInitialized;
if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
if(comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log",
"fmiInitialization: succeed");
}
/* due to an event overwrite old values */
Expand Down

0 comments on commit 7a7b39e

Please sign in to comment.