Skip to content

Commit

Permalink
- return something in SimulationRuntime/c/util/integer_array.c
Browse files Browse the repository at this point in the history
- hopefully fix condition in SimulationRuntime/c/simulation/solver/initialization/initialization.c
- try to use proper data types in function interfaces
- get rid of some of the warnings
- transform to char* where needed



git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@23747 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adrpo committed Dec 11, 2014
1 parent 44803ec commit e4dbe3b
Show file tree
Hide file tree
Showing 14 changed files with 65 additions and 61 deletions.
2 changes: 1 addition & 1 deletion SimulationRuntime/c/meta/meta_modelica_builtin.c
Expand Up @@ -355,7 +355,7 @@ modelica_metatype boxptr_stringGetStringChar(threadData_t *threadData,metamodeli
MMC_CHECK_STRING(str);
if (ix < 1 || ix > (long) MMC_STRLEN(str))
MMC_THROW_INTERNAL();
return mmc_strings_len1[MMC_STRINGDATA(str)[ix-1]];
return mmc_strings_len1[(size_t)MMC_STRINGDATA(str)[ix-1]];
}

modelica_integer nobox_stringGet(threadData_t *threadData,metamodelica_string str, modelica_integer ix)
Expand Down
Expand Up @@ -144,19 +144,19 @@ static void write_aliases(std::ofstream &fp, MODEL_DATA *modelData, int include[
msgpack_str(fp, "als");
int na = 0; // Number of aliases (include time) for this request
for(long i=0;i<modelData->nAliasReal;i++)
na += include[modelData->realAlias[i].aliasType];
na += include[(int)modelData->realAlias[i].aliasType];
for(long i=0;i<modelData->nAliasInteger;i++)
na += include[modelData->integerAlias[i].aliasType];
na += include[(int)modelData->integerAlias[i].aliasType];
for(long i=0;i<modelData->nAliasBoolean;i++)
na += include[modelData->booleanAlias[i].aliasType];
na += include[(int)modelData->booleanAlias[i].aliasType];
for(long i=0;i<modelData->nAliasString;i++)
na += include[modelData->stringAlias[i].aliasType];
na += include[(int)modelData->stringAlias[i].aliasType];

msgpack_obj_header(fp, na);

for(long i=0;i<modelData->nAliasReal;i++) {
DATA_REAL_ALIAS *alias = &modelData->realAlias[i];
if (include[alias->aliasType]==0) continue;
if (include[(int)alias->aliasType]==0) continue;
if (alias->aliasType==2) sig = "time";
if (alias->aliasType==1) sig = modelData->realParameterData[alias->nameID].info.name;
if (alias->aliasType==0) sig = modelData->realVarsData[alias->nameID].info.name;
Expand All @@ -165,7 +165,7 @@ static void write_aliases(std::ofstream &fp, MODEL_DATA *modelData, int include[

for(long i=0;i<modelData->nAliasInteger;i++) {
DATA_INTEGER_ALIAS *alias = &modelData->integerAlias[i];
if (include[alias->aliasType]==0) continue;
if (include[(int)alias->aliasType]==0) continue;
if (alias->aliasType==2) sig = "time";
if (alias->aliasType==1) sig = modelData->integerParameterData[alias->nameID].info.name;
if (alias->aliasType==0) sig = modelData->integerVarsData[alias->nameID].info.name;
Expand All @@ -174,7 +174,7 @@ static void write_aliases(std::ofstream &fp, MODEL_DATA *modelData, int include[

for(long i=0;i<modelData->nAliasBoolean;i++) {
DATA_BOOLEAN_ALIAS *alias = &modelData->booleanAlias[i];
if (include[alias->aliasType]==0) continue;
if (include[(int)alias->aliasType]==0) continue;
if (alias->aliasType==2) sig = "time";
if (alias->aliasType==1) sig = modelData->booleanParameterData[alias->nameID].info.name;
if (alias->aliasType==0) sig = modelData->booleanVarsData[alias->nameID].info.name;
Expand All @@ -183,7 +183,7 @@ static void write_aliases(std::ofstream &fp, MODEL_DATA *modelData, int include[

for(long i=0;i<modelData->nAliasString;i++) {
DATA_STRING_ALIAS *alias = &modelData->stringAlias[i];
if (include[alias->aliasType]==0) continue;
if (include[(int)alias->aliasType]==0) continue;
if (alias->aliasType==2) sig = "time";
if (alias->aliasType==1) sig = modelData->stringParameterData[alias->nameID].info.name;
if (alias->aliasType==0) sig = modelData->stringVarsData[alias->nameID].info.name;
Expand Down
6 changes: 3 additions & 3 deletions SimulationRuntime/c/simulation/simulation_input_xml.cpp
Expand Up @@ -389,13 +389,13 @@ void read_input_xml(MODEL_DATA* modelData,
infoStreamPrint(LOG_SIMULATION, 0, "tolerance = %g", simulationInfo->tolerance);

read_value_mm(mi.de["solver"], &simulationInfo->solverMethod);
infoStreamPrint(LOG_SIMULATION, 0, "solver method: %s", simulationInfo->solverMethod);
infoStreamPrint(LOG_SIMULATION, 0, "solver method: %s", MMC_STRINGDATA(simulationInfo->solverMethod));

read_value_mm(mi.de["outputFormat"], &(simulationInfo->outputFormat));
infoStreamPrint(LOG_SIMULATION, 0, "output format: %s", simulationInfo->outputFormat);
infoStreamPrint(LOG_SIMULATION, 0, "output format: %s", MMC_STRINGDATA(simulationInfo->outputFormat));

read_value_mm(mi.de["variableFilter"], &(simulationInfo->variableFilter));
infoStreamPrint(LOG_SIMULATION, 0, "variable filter: %s", simulationInfo->variableFilter);
infoStreamPrint(LOG_SIMULATION, 0, "variable filter: %s", MMC_STRINGDATA(simulationInfo->variableFilter));

read_value(mi.md["OPENMODELICAHOME"], &simulationInfo->OPENMODELICAHOME);
infoStreamPrint(LOG_SIMULATION, 0, "OPENMODELICAHOME: %s", simulationInfo->OPENMODELICAHOME);
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/simulation/solver/dassl.c
Expand Up @@ -547,7 +547,7 @@ int dassl_step(DATA* data, SOLVER_INFO* solverInfo)
externalInputUpdate(data);
data->callback->input_function(data);

DDASKR(functionODE_residual, &mData->nStates,
DDASKR(functionODE_residual, (int*) &mData->nStates,
&solverInfo->currentTime, sData->realVars, stateDer, &tout,
dasslData->info, dasslData->rtol, dasslData->atol, &dasslData->idid,
dasslData->rwork, &dasslData->lrw, dasslData->iwork, &dasslData->liw,
Expand Down
Expand Up @@ -884,7 +884,9 @@ static int importStartValues(DATA *data, const char *pInitFile, double initTime)
omc_matlab4_val(&(mData->realVarsData[i].attribute.start), &reader, pVar, initTime);
infoStreamPrint(LOG_INIT, 0, "| %s(start=%g)", mData->realVarsData[i].info.name, mData->realVarsData[i].attribute.start);
}
else if(strlen(mData->realVarsData[i].info.name) > 0 && mData->realVarsData[i].info.name[0] != '$' != 0 && strncmp(mData->realVarsData[i].info.name, "der($", 5) != 0)
else if((strlen(mData->realVarsData[i].info.name) > 0) &&
(mData->realVarsData[i].info.name[0] != '$') &&
(strncmp(mData->realVarsData[i].info.name, "der($", 5) != 0))
{
/* skip warnings about self-generated variables */
warningStreamPrint(LOG_INIT, 0, "unable to import real variable %s from given file", mData->realVarsData[i].info.name);
Expand Down
Expand Up @@ -353,7 +353,7 @@ int getAnalyticalJacobianTotalPivot(DATA* data, double* jac, int sysNumber)
static int wrapper_fvec_totalpivot(double* x, double* f, void* data, int sysNumber)
{
int currentSys = sysNumber;
int iflag;
int iflag = 0;
/* NONLINEAR_SYSTEM_DATA* systemData = &(((DATA*)data)->simulationInfo.nonlinearSystemData[currentSys]); */
/* DATA_NEWTON* solverData = (DATA_NEWTON*)(systemData->solverData); */

Expand Down
Expand Up @@ -802,7 +802,7 @@ static int getNumericalJacobianHomotopy(DATA_HOMOTOPY* solverData, double *x, do
*/
static int wrapper_fvec(DATA_HOMOTOPY* solverData, double* x, double* f)
{
int iflag=0;
int iflag = 0;

/*TODO: change input to residualFunc from data to systemData */
(solverData->data)->simulationInfo.nonlinearSystemData[solverData->sysNumber].residualFunc(solverData->data, x, f, &iflag);
Expand Down Expand Up @@ -1371,9 +1371,9 @@ static int homotopyAlgorithm(DATA_HOMOTOPY* solverData, double *x)
int numSteps = 0;
int stepAccept = 0;
int runHomotopy = 0;
double bend;
double bend = 0;
double sProd, detJac;
double tau=0.2, tauMax = 10.0, tauMin = 1e-4, hEps = 1e-3, adaptBend = 0.05;
double tau = 0.2, tauMax = 10.0, tauMin = 1e-4, hEps = 1e-3, adaptBend = 0.05;
int m = solverData->m;
int n = solverData->n;
int initialStep = 1;
Expand Down Expand Up @@ -1878,4 +1878,4 @@ int solveHomotopy(DATA *data, int sysNumber)
debugString(LOG_NLS_V,"Homotopy solver did not converge!");
}
return success;
}
}
26 changes: 13 additions & 13 deletions SimulationRuntime/c/simulation/solver/nonlinearSolverHybrd.c
Expand Up @@ -44,7 +44,7 @@

#include "nonlinearSystem.h"
#include "nonlinearSolverHybrd.h"
extern double enorm_(int *n, double *x);
extern double enorm_(integer *n, double *x);

typedef struct DATA_HYBRD
{
Expand Down Expand Up @@ -91,7 +91,7 @@ struct dataAndSys {
int sysNumber;
};

static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double* fjac, const int* ldjac, const int* iflag, void* data);
static int wrapper_fvec_hybrj(const integer* n, const double* x, double* f, double* fjac, const integer* ldjac, const integer* iflag, void* data);

/*! \fn allocate memory for nonlinear system solver hybrd
*
Expand Down Expand Up @@ -181,7 +181,7 @@ int freeHybrdData(void **voiddata)
*
* \author wbraun
*/
static void printVector(const double *vector, const int *size, const int logLevel, const char *name)
static void printVector(const double *vector, const integer *size, const int logLevel, const char *name)
{
int i;
if (!ACTIVE_STREAM(logLevel)) return;
Expand Down Expand Up @@ -249,7 +249,7 @@ static int getNumericalJacobian(struct dataAndSys* dataAndSysNum, double* jac, c

double delta_h = sqrt(solverData->epsfcn);
double delta_hh, delta_hhh, deltaInv;
int iflag = 1;
integer iflag = 1;
int i, j, l;

memcpy(solverData->xSave, x, solverData->n*sizeof(double));
Expand Down Expand Up @@ -338,7 +338,7 @@ static int getAnalyticalJacobian(struct dataAndSys* dataSys, double* jac)
*
*
*/
static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double* fjac, const int* ldjac, const int* iflag, void* dataAndSysNum)
static int wrapper_fvec_hybrj(const integer* n, const double* x, double* f, double* fjac, const integer* ldjac, const integer* iflag, void* dataAndSysNum)
{
int i,j;
struct dataAndSys *dataSys = (struct dataAndSys*) dataAndSysNum;
Expand All @@ -357,22 +357,22 @@ static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double*

/* debug output */
if(ACTIVE_STREAM(LOG_NLS_RES)) {
infoStreamPrint(LOG_NLS_RES, 0, "-- residual function call %d -- scaling = %d", solverData->nfev, solverData->useXScaling);
infoStreamPrint(LOG_NLS_RES, 0, "-- residual function call %d -- scaling = %d", (int)solverData->nfev, solverData->useXScaling);
printVector(x, n, LOG_NLS_RES, "x vector (scaled)");
printVector(solverData->xScaled, n, LOG_NLS_RES, "x vector");
}

/* call residual function */
if(solverData->useXScaling){
(systemData->residualFunc)(data, (const double*) solverData->xScaled, f, iflag);
(systemData->residualFunc)(data, (const double*) solverData->xScaled, f, (const int*)iflag);
} else {
(systemData->residualFunc)(data, x, f, iflag);
(systemData->residualFunc)(data, x, f, (const int*)iflag);
}

/* debug output */
if(ACTIVE_STREAM(LOG_NLS_RES)) {
printVector(f, n, LOG_NLS_RES, "residuals");
infoStreamPrint(LOG_NLS_RES, 0, "-- end of residual function call %d --", solverData->nfev);
infoStreamPrint(LOG_NLS_RES, 0, "-- end of residual function call %d --", (int)solverData->nfev);
}

break;
Expand All @@ -386,7 +386,7 @@ static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double*

/* call apropreated jacobain function */
if(systemData->jacobianIndex != -1){
int iflagtmp = 1;
integer iflagtmp = 1;
wrapper_fvec_hybrj(n, x, f, fjac, ldjac, &iflagtmp, dataSys);

getAnalyticalJacobian(dataSys, fjac);
Expand All @@ -402,7 +402,7 @@ static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double*
if(ACTIVE_STREAM(LOG_NLS_JAC))
{
char buffer[16384];
infoStreamPrint(LOG_NLS_JAC, 1, "jacobian matrix [%dx%d]", *n, *n);
infoStreamPrint(LOG_NLS_JAC, 1, "jacobian matrix [%dx%d]", (int)*n, (int)*n);
for(i=0; i<*n; i++)
{
buffer[0] = 0;
Expand All @@ -419,7 +419,7 @@ static int wrapper_fvec_hybrj(const int* n, const double* x, double* f, double*
break;

default:
throwStreamPrint(data->threadData, "Well, this is embarrasing. The non-linear solver should never call this case.%d", *iflag);
throwStreamPrint(data->threadData, "Well, this is embarrasing. The non-linear solver should never call this case.%d", (int)*iflag);
break;
}

Expand All @@ -445,7 +445,7 @@ int solveHybrd(DATA *data, int sysNumber)
threadData_t *threadData = data->threadData;

int i, j;
int iflag = 1;
integer iflag = 1;
double xerror, xerror_scaled;
int success = 0;
double local_tol = 1e-12;
Expand Down
8 changes: 4 additions & 4 deletions SimulationRuntime/c/simulation/solver/nonlinearSolverHybrd.h
Expand Up @@ -45,10 +45,10 @@ extern "C" {
#endif

extern
int hybrj_( int(*) (const int*, const double*, double*, double *, const int*, const int*, void*), const int *n, double *x, double *fvec, double *fjac, const int *ldfjac,
const double *xtol, const int *axfev, double *diag, const int *mode,
const double *factor, const int *nprint, int *info, int *nfev, int *njev,
double *r, int *lr, double *qtf, double *wa1, double *wa2,
int hybrj_( int(*) (const integer*, const double*, double*, double *, const integer*, const integer*, void*), const integer *n, double *x, double *fvec, double *fjac, const integer *ldfjac,
const double *xtol, const integer *axfev, double *diag, const integer *mode,
const double *factor, const integer *nprint, integer *info, integer *nfev, integer *njev,
double *r, integer *lr, double *qtf, double *wa1, double *wa2,
double *wa3, double *wa4, void* user_data);

#ifdef __cplusplus
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/simulation/solver/nonlinearSystem.c
Expand Up @@ -295,7 +295,7 @@ int solve_nonlinear_system(DATA *data, int sysNumber)
#endif

((DATA*)data)->simulationInfo.solveContinuous = 0;
nonlinsys->residualFunc((void*) data, nonlinsys->nlsx, fvec, &nonlinsys->size);
nonlinsys->residualFunc((void*) data, nonlinsys->nlsx, fvec, (int*)&nonlinsys->size);
((DATA*)data)->simulationInfo.solveContinuous = 1;

success = 1;
Expand Down

0 comments on commit e4dbe3b

Please sign in to comment.