Skip to content

Commit

Permalink
- join constraints and algebraic vars
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19141 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Feb 17, 2014
1 parent dfe54a3 commit 51ac34f
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 38 deletions.
6 changes: 3 additions & 3 deletions Compiler/BackEnd/SimCodeUtil.mo
Expand Up @@ -8718,18 +8718,18 @@ algorithm
stringAlgVars, stringParamVars, extObjVars, constVars, intConstVars, boolConstVars,
stringConstVars, jacobianVars, realOptimizeConstraintsVars;
Integer numStateVars,numInlineVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars;
Integer numBoolAliasVars,numParams,numIntParams,numBoolParams,numOutVars,numInVars,size;
Integer numBoolAliasVars,numParams,numIntParams,numBoolParams,numOutVars,numInVars,numOptimizeConstraints, size;
case (SimCode.MODELINFO(varInfo = SimCode.VARINFO(numStateVars=numStateVars,numInlineVars=numInlineVars,numAlgVars=numAlgVars,
numIntAlgVars=numIntAlgVars,numBoolAlgVars=numBoolAlgVars,numAlgAliasVars=numAlgAliasVars,numIntAliasVars=numIntAliasVars,
numBoolAliasVars=numBoolAliasVars,numParams=numParams,numIntParams=numIntParams,numBoolParams=numBoolParams,
numOutVars=numOutVars,numInVars=numInVars),
numOutVars=numOutVars,numInVars=numInVars, numOptimizeConstraints= numOptimizeConstraints),
vars = SimCode.SIMVARS(
stateVars, derivativeVars, inlineVars, algVars, intAlgVars, boolAlgVars,
_/*inputVars*/, _/*outputVars*/, aliasVars, intAliasVars, boolAliasVars, paramVars, intParamVars, boolParamVars,
stringAlgVars, stringParamVars, stringAliasVars, extObjVars, constVars, intConstVars, boolConstVars, stringConstVars, jacobianVars, realOptimizeConstraintsVars)))
equation
size = numStateVars+numInlineVars+numAlgVars+numIntAlgVars+numBoolAlgVars+numAlgAliasVars+numIntAliasVars+
numBoolAliasVars+numParams+numIntParams+numBoolParams+numOutVars+numInVars;
numBoolAliasVars+numParams+numIntParams+numBoolParams+numOutVars+numInVars + numOptimizeConstraints;
size = intMax(size,1000);
ht = emptyHashTableSized(size);
ht = List.fold(stateVars, addSimVarToHashTable, ht);
Expand Down
33 changes: 18 additions & 15 deletions Compiler/Template/CodegenC.tpl
Expand Up @@ -755,7 +755,7 @@ template populateModelInfo(ModelInfo modelInfo, String fileNamePrefix, String gu
#endif

data->modelData.nStates = <%varInfo.numStateVars%>;
data->modelData.nVariablesReal = 2*<%varInfo.numStateVars%>+<%varInfo.numAlgVars%>;
data->modelData.nVariablesReal = 2*<%varInfo.numStateVars%>+<%varInfo.numAlgVars%>+<%varInfo.numOptimizeConstraints%>;
data->modelData.nDiscreteReal = <%varInfo.numDiscreteReal%>;
data->modelData.nVariablesInteger = <%varInfo.numIntAlgVars%>;
data->modelData.nVariablesBoolean = <%varInfo.numBoolAlgVars%>;
Expand Down Expand Up @@ -858,7 +858,7 @@ template variableDefinitions(ModelInfo modelInfo, BackendDAE.SampleLookup sample
let () = System.tmpTickReset(1000)

match modelInfo
case MODELINFO(varInfo=VARINFO(numStateVars=numStateVars), vars=SIMVARS(__)) then
case MODELINFO(varInfo=VARINFO(numStateVars=numStateVars, numAlgVars= numAlgVars), vars=SIMVARS(__)) then
<<
#define time data->localData[0]->timeValue

Expand All @@ -871,17 +871,22 @@ template variableDefinitions(ModelInfo modelInfo, BackendDAE.SampleLookup sample
<%vars.derivativeVars |> var =>
globalDataVarDefine(var, "realVars", numStateVars)
;separator="\n"%>


/* Algebraic Vars */
<%vars.algVars |> var =>
globalDataVarDefine(var, "realVars", intMul(2, numStateVars) )
;separator="\n"%>

/* Nonlinear Constraints For Optimization */
<%vars.realOptimizeConstraintsVars |> var =>
globalDataVarDefine(var, "realVars", intAdd(intMul(2, numStateVars),numAlgVars))
;separator="\n"%>

/* InlineSolver Vars */
<%vars.inlineVars |> var =>
globalDataVarDefine(var, "inlineVars", 0)
;separator="\n"%>

/* Algebraic Vars */
<%vars.algVars |> var =>
globalDataVarDefine(var, "realVars", intMul(2, numStateVars))
;separator="\n"%>

/* Algebraic Parameter */
<%vars.paramVars |> var =>
globalDataParDefine(var, "realParameter")
Expand Down Expand Up @@ -921,11 +926,6 @@ template variableDefinitions(ModelInfo modelInfo, BackendDAE.SampleLookup sample
<%vars.stringParamVars |> var =>
globalDataParDefine(var, "stringParameter")
;separator="\n"%>

/* Nonlinear Constraints For Optimization */
<%vars.realOptimizeConstraintsVars |> var =>
variableDefinitionsOptimizationsConstraints(var, "optConstraints", 0)
;separator="\n"%>

/* sample */
<%match sampleLookup
Expand Down Expand Up @@ -4275,7 +4275,7 @@ case SIMCODE(modelInfo = MODELINFO(functions = functions, varInfo = vi as VARINF
numberOfFunctions = "<%listLength(functions)%>" cmt_numberOfFunctions = "NFUNC: number of functions used by the simulation, OMC"

numberOfContinuousStates = "<%vi.numStateVars%>" cmt_numberOfContinuousStates = "NX: number of states, FMI"
numberOfRealAlgebraicVariables = "<%vi.numAlgVars%>" cmt_numberOfRealAlgebraicVariables = "NY: number of real variables, OMC"
numberOfRealAlgebraicVariables = "<%intAdd(vi.numAlgVars,vi.numOptimizeConstraints)%>" cmt_numberOfRealAlgebraicVariables = "NY: number of real variables, OMC"
numberOfRealAlgebraicAliasVariables = "<%vi.numAlgAliasVars%>" cmt_numberOfRealAlgebraicAliasVariables = "NA: number of alias variables, OMC"
numberOfRealParameters = "<%vi.numParams%>" cmt_numberOfRealParameters = "NP: number of parameters, OMC"

Expand Down Expand Up @@ -10385,14 +10385,17 @@ template ModelVariables(ModelInfo modelInfo)
"Generates code for ModelVariables file for FMU target."
::=
match modelInfo
case MODELINFO(vars=SIMVARS(__)) then
case MODELINFO(vars=SIMVARS(__),varInfo=VARINFO(numAlgVars= numAlgVars)) then
<<
<ModelVariables>
<%System.tmpTickReset(1000)%>

<%vars.stateVars |> var hasindex i0 => ScalarVariable(var,i0,"rSta") ;separator="\n";empty%>
<%vars.derivativeVars |> var hasindex i0 => ScalarVariable(var,i0,"rDer") ;separator="\n";empty%>
<%vars.algVars |> var hasindex i0 => ScalarVariable(var,i0,"rAlg") ;separator="\n";empty%>
<%vars.realOptimizeConstraintsVars
|> var hasindex i0 => ScalarVariable(var,intAdd(i0,numAlgVars),"rAlg") ;separator="\n";empty%>

<%vars.paramVars |> var hasindex i0 => ScalarVariable(var,i0,"rPar") ;separator="\n";empty%>
<%vars.aliasVars |> var hasindex i0 => ScalarVariable(var,i0,"rAli") ;separator="\n";empty%>

Expand Down
16 changes: 8 additions & 8 deletions SimulationRuntime/c/optimization/constraints/evalfG.c
Expand Up @@ -227,7 +227,7 @@ int num_diff_symColoredODE(double *v, double t, IPOPT_DATA_ *iData, double **J)

functionODE_(x, u, t, iData->lhs, iData);
if(iData->nc > 0)
memcpy(iData->lhs + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(iData->lhs + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);

for(ii = 0; ii<nx; ++ii)
if(cC[ii] == i)
Expand All @@ -238,7 +238,7 @@ int num_diff_symColoredODE(double *v, double t, IPOPT_DATA_ *iData, double **J)

functionODE_(x, u, t, iData->rhs, iData);
if(iData->nc > 0)
iData->data->callback->pathConstraints(iData->data,iData->rhs + iData->nx,&iData->nc);
memcpy(iData->rhs + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);

memcpy(v, iData->vsave, sizeof(double)*nx);

Expand Down Expand Up @@ -322,7 +322,7 @@ static inline int evalG11(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->a1[0]*x0[j] + iData->a1[3]*iData->x3[j] + iData->scalf[j]*iData->dt[i]*iData->dotx1[j]) - (iData->a1[1]*iData->x1[j] + iData->a1[2]*iData->x2[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand All @@ -337,7 +337,7 @@ static inline int evalG12(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->a2[1]*iData->x1[j] + iData->scalf[j]*iData->dt[i]*iData->dotx2[j]) - (iData->a2[0]*x0[j] + iData->a2[2]*iData->x2[j] + iData->a2[3]*iData->x3[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand All @@ -352,7 +352,7 @@ static inline int evalG13(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->a3[0]*x0[j] + iData->a3[2]*iData->x2[j] + iData->scalf[j]*iData->dt[i]*iData->dotx3[j]) - (iData->a3[1]*iData->x1[j] + iData->a3[3]*iData->x3[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand All @@ -367,7 +367,7 @@ static inline int evalG21(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*(iData->dotx1[j] + iData->d1[4]*iData->dotx0[j]) + iData->d1[0]*x0[j] + iData->d1[3]*iData->x3[j]) - (iData->d1[1]*iData->x1[j] + iData->d1[2]*iData->x2[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand All @@ -382,7 +382,7 @@ static inline int evalG22(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*iData->dotx2[j] + iData->d2[1]*iData->x1[j]) - (iData->scalf[j]*iData->dt[i]*iData->d2[4]*iData->dotx0[j] + iData->d2[0]*x0[j] + iData->d2[2]*iData->x2[j] + iData->d2[3]*iData->x3[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand All @@ -397,7 +397,7 @@ static inline int evalG23(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
for(j=0; j<iData->nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*(iData->d3[4]*iData->dotx0[j] + iData->dotx3[j]) + iData->d3[0]*x0[j] + iData->d3[2]*iData->x2[j]) - (iData->d3[1]*iData->x1[j] + iData->d3[3]*iData->x3[j]);

memcpy(g + iData->nx, iData->data->simulationInfo.optConstraints, sizeof(double)*iData->nc);
memcpy(g + iData->nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->nc], sizeof(double)*iData->nc);
return 0;

}
Expand Down
9 changes: 0 additions & 9 deletions SimulationRuntime/c/simulation/solver/model_help.c
Expand Up @@ -490,7 +490,6 @@ void setAllStartToVars(DATA *data)
SIMULATION_DATA *sData = data->localData[0];
MODEL_DATA *mData = &(data->modelData);
long i;

debugStreamPrint(LOG_DEBUG, 1, "the start-attribute of all variables to their current values:");
for(i=0; i<mData->nVariablesReal; ++i)
{
Expand Down Expand Up @@ -854,10 +853,6 @@ void initializeDataStruc(DATA *data)
data->modelData.modelDataXml.functionNames = NULL;
data->modelData.modelDataXml.equationInfo = NULL;

/*optimization: constraints */
data->simulationInfo.optConstraints = (data->modelData.nOptimizeConstraints > 0) ? (modelica_real*) malloc(data->modelData.nOptimizeConstraints*sizeof(modelica_real)) : NULL;


/* buffer for external objects */
data->simulationInfo.extObjs = NULL;
data->simulationInfo.extObjs = (void**) calloc(data->modelData.nExtObjs, sizeof(void*));
Expand Down Expand Up @@ -1022,10 +1017,6 @@ void deInitializeDataStruc(DATA *data)
free(data->simulationInfo.chatteringInfo.lastSteps);
free(data->simulationInfo.chatteringInfo.lastTimes);

/*free optimization: constraints */
if(data->simulationInfo.optConstraints)
free(data->simulationInfo.optConstraints);

/* TODO: Make a free xml function */
freeModelInfoXml(&data->modelData.modelDataXml);

Expand Down
4 changes: 1 addition & 3 deletions SimulationRuntime/c/simulation_data.h
Expand Up @@ -368,7 +368,7 @@ typedef struct MODEL_DATA_XML

typedef struct MODEL_DATA
{
STATIC_REAL_DATA* realVarsData; /* states + derived states + algs + discrete */
STATIC_REAL_DATA* realVarsData; /* states + derived states + algs + constrainsOpt + discrete */
STATIC_INTEGER_DATA* integerVarsData;
STATIC_BOOLEAN_DATA* booleanVarsData;
STATIC_STRING_DATA* stringVarsData;
Expand Down Expand Up @@ -490,8 +490,6 @@ typedef struct SIMULATION_INFO
modelica_real* inputVars;
modelica_real* outputVars;

modelica_real* optConstraints;

ANALYTIC_JACOBIAN* analyticJacobians;

NONLINEAR_SYSTEM_DATA* nonlinearSystemData;
Expand Down

0 comments on commit 51ac34f

Please sign in to comment.