Skip to content
This repository has been archived by the owner on May 18, 2019. It is now read-only.

Commit

Permalink
Support assignment to arrays of discrete states
Browse files Browse the repository at this point in the history
Belonging to [master]:
  - #2389
  • Loading branch information
rfranke authored and OpenModelica-Hudson committed Apr 24, 2018
1 parent d4122a2 commit d6ea7eb
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions Compiler/Template/CodegenCpp.tpl
Expand Up @@ -9648,7 +9648,7 @@ template equationString(SimEqSystem eq, Context context, Text &varDecls, SimCode
case e as SES_WHEN(__)
then equationWhen(e, context, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
case e as SES_ARRAY_CALL_ASSIGN(__)
then equationArrayCallAssign(e, context, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
then equationArrayCallAssign(e, context, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation, assignToStartValues)
case e as SES_LINEAR(lSystem = ls as LINEARSYSTEM(__))
then
let i = ls.index
Expand Down Expand Up @@ -9865,7 +9865,7 @@ template equation_function_create_single_func(SimEqSystem eq, Context context, S
equationWhen(e, context, &varDeclsLocal, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
case e as SES_ARRAY_CALL_ASSIGN(__)
then
equationArrayCallAssign(e, context, &varDeclsLocal, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
equationArrayCallAssign(e, context, &varDeclsLocal, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation, assignToStartValues)
case e as SES_LINEAR(__)
case e as SES_NONLINEAR(__)
then
Expand Down Expand Up @@ -10955,13 +10955,16 @@ end algloopcppfilenames2;


template equationArrayCallAssign(SimEqSystem eq, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs,
Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation, Boolean assignToStartValues)
"Generates equation on form 'cref_array = call(...)'."
::=
let &varDeclsCref = buffer "" /*BUFD*/
match eq

case eqn as SES_ARRAY_CALL_ASSIGN(lhs=lhs as CREF(__)) then
let startFixedExp = match cref2simvar(lhs.componentRef, simCode)
case SIMVAR(varKind = CLOCKED_STATE(isStartFixed = isStartFixed)) then
'if (<%if isStartFixed then "_clockStart[clockIndex - 1] || "%>_clockSubactive[clockIndex - 1]) return;'
let &preExp = buffer "" /*BUFD*/
let expPart = daeExp(exp, context, &preExp /*BUF let &preExp = buffer "" /*BUFD*/
let &helpInits = buffer "" /*BUFD*/
Expand All @@ -10974,11 +10977,13 @@ case eqn as SES_ARRAY_CALL_ASSIGN(lhs=lhs as CREF(__)) then
case "boolean"
case "int" then
<<
<%if not assignToStartValues then '<%startFixedExp%>'%>
<%preExp%>
<%cref1(lhs.componentRef,simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace, context, varDeclsCref, stateDerVectorName, useFlatArrayNotation)%>=<%expPart%>;
>>
case "double" then
<<
<%if not assignToStartValues then '<%startFixedExp%>'%>
<%preExp%>
<%assignDerArray(context, expPart, lhs, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)%>
>>
Expand Down Expand Up @@ -11271,10 +11276,10 @@ template equationSimpleAssign(SimEqSystem eq, Context context,Text &varDecls, Si
::=
match eq
case SES_SIMPLE_ASSIGN(__) then
let &preExp = buffer "" /*BUFD*/
let startFixedExp = match cref2simvar(cref, simCode)
case SIMVAR(varKind = CLOCKED_STATE(isStartFixed = isStartFixed)) then
'if (<%if isStartFixed then "_clockStart[clockIndex - 1] || "%>_clockSubactive[clockIndex - 1]) return;'
let &preExp = buffer "" /*BUFD*/
let expPart = daeExp(exp, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)

match cref
Expand Down

0 comments on commit d6ea7eb

Please sign in to comment.