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

Commit 88c4d61

Browse files
rfrankeOpenModelica-Hudson
authored andcommitted
Reduce common template code from assignDerArray to assignJacArray
See failing tests cppruntime/solveTest and cppruntime/RefArrayDim2 Belonging to [master]: - #2230
1 parent 2cb619a commit 88c4d61

File tree

2 files changed

+57
-33
lines changed

2 files changed

+57
-33
lines changed

Compiler/Template/CodegenCpp.tpl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10977,6 +10977,36 @@ case eqn as SES_ARRAY_CALL_ASSIGN(lhs=lhs as CREF(__)) then
1097710977
>>
1097810978
end equationArrayCallAssign;
1097910979

10980+
template assignDerArray(Context context, String arr, Exp lhs_ecr, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl, Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
10981+
"Assign array considering special treatment of states and Jacobian vars"
10982+
::=
10983+
match lhs_ecr
10984+
case CREF(componentRef=c, ty=ty as DAE.T_ARRAY(ty=elty, dims=dims)) then
10985+
let &varDeclsCref = buffer "" /*BUFD*/
10986+
let lhsStr = cref1(c, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, context, varDeclsCref, stateDerVectorName, useFlatArrayNotation)
10987+
match cref2simvar(c, simCode)
10988+
case SIMVAR(varKind=varKind) then
10989+
match varKind
10990+
case STATE()
10991+
case STATE_DER() then
10992+
//STATE vars are flat vectors
10993+
<<
10994+
/*assign to <%cref(c,useFlatArrayNotation)%>*/
10995+
memcpy(&<%lhsStr%>, <%arr%>.getData(), <%arr%>.getNumElems()*sizeof(double));
10996+
>>
10997+
case JAC_VAR()
10998+
case JAC_DIFF_VAR()
10999+
case SEED_VAR() then
11000+
<<
11001+
<%assignJacArray(lhsStr, arr, ty)%>
11002+
>>
11003+
else
11004+
<<
11005+
/*default array assign*/
11006+
<%lhsStr%>.assign(<%arr%>);
11007+
>>
11008+
end assignDerArray;
11009+
1098011010
template equationWhen(SimEqSystem eq, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl,
1098111011
Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
1098211012
"Generates a when equation."

Compiler/Template/CodegenCppCommon.tpl

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2744,50 +2744,44 @@ template encloseInParantheses(String expStr)
27442744
if intEq(stringGet(expStr, 1), stringGet("(", 1)) then '<%expStr%>' else '(<%expStr%>)'
27452745
end encloseInParantheses;
27462746

2747-
template assignDerArray(Context context, String arr, Exp lhs_ecr, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl, Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
2748-
"Assign array considering special treatment of states and Jacobian vars"
2747+
template assignJacArray(String lhsStr, String rhsStr, DAE.Type ty)
2748+
"Assign array to JAC/DIFF/SEED vars that are flat vectors with row major odering"
27492749
::=
2750-
match lhs_ecr
2751-
case CREF(componentRef=c, ty=ty as DAE.T_ARRAY(ty=elty, dims=dims)) then
2752-
let &varDeclsCref = buffer "" /*BUFD*/
2753-
let lhsStr = cref1(c, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, context, varDeclsCref, stateDerVectorName, useFlatArrayNotation)
2754-
match cref2simvar(c, simCode)
2750+
match ty
2751+
case DAE.T_ARRAY(ty=elty, dims=dims) then
2752+
let dimstr = listDimsFlat(dims, elty)
2753+
let arrayWrapper = 'tmp<%System.tmpTick()%>'
2754+
<<
2755+
/*assign through wrapper array*/
2756+
StatArrayDim<%nDimsFlat(dims, elty, 0)%><<%expTypeShort(elty)%>, <%dimstr%>, true> <%arrayWrapper%>(&<%lhsStr%>);
2757+
assignRowMajorData(<%rhsStr%>.getData(), <%arrayWrapper%>);
2758+
>>
2759+
end assignJacArray;
2760+
2761+
template writeLhsCref(Exp exp, String rhsStr, Context context, Text &preExp, Text &varDecls, SimCode simCode,
2762+
Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName, Boolean useFlatArrayNotation)
2763+
"Generates code for writing a returnStructur to var."
2764+
::=
2765+
match exp
2766+
case ecr as CREF(componentRef=WILD(__)) then
2767+
''
2768+
case ecr as CREF(componentRef=cr, ty=ty as DAE.T_ARRAY()) then
2769+
let lhsStr = scalarLhsCref(exp, context, &preExp /*BUFC*/, &varDecls /*BUFD*/,simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
2770+
match cref2simvar(cr, simCode)
27552771
case SIMVAR(varKind=varKind) then
27562772
match varKind
2757-
case STATE()
2758-
case STATE_DER() then
2759-
//STATE vars are flat vectors
2760-
<<
2761-
/*assign to <%cref(c,useFlatArrayNotation)%>*/
2762-
memcpy(&<%lhsStr%>, <%arr%>.getData(), <%arr%>.getNumElems()*sizeof(double));
2763-
>>
27642773
case JAC_VAR()
27652774
case JAC_DIFF_VAR()
27662775
case SEED_VAR() then
2767-
//JAC/DIFF/SEED vars are flat vectors with row major odering
2768-
let dimstr = listDimsFlat(dims, elty)
2769-
let arrayWrapper = 'tmp<%System.tmpTick()%>'
27702776
<<
2771-
/*assign through wrapper array*/
2772-
StatArrayDim<%nDimsFlat(dims, elty, 0)%><<%expTypeShort(elty)%>, <%dimstr%>, true> <%arrayWrapper%>(&<%lhsStr%>);
2773-
assignRowMajorData(<%arr%>.getData(), <%arrayWrapper%>);
2777+
<%assignJacArray(lhsStr, rhsStr, ty)%>
27742778
>>
27752779
else
27762780
<<
2777-
/*default array assign*/
2778-
<%lhsStr%>.assign(<%arr%>);
2781+
<%lhsStr%>.assign(<%rhsStr%>);
27792782
>>
2780-
end assignDerArray;
2781-
2782-
template writeLhsCref(Exp exp, String rhsStr, Context context, Text &preExp, Text &varDecls, SimCode simCode,
2783-
Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName, Boolean useFlatArrayNotation)
2784-
"Generates code for writing a returnStructur to var."
2785-
::=
2786-
match exp
2787-
case ecr as CREF(componentRef=WILD(__)) then
2788-
''
2789-
case ecr as CREF(ty= t as DAE.T_ARRAY(__)) then
2790-
'<%assignDerArray(context, rhsStr, exp, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)%>'
2783+
end match
2784+
end match
27912785
case UNARY(exp = e as CREF(ty= t as DAE.T_ARRAY(__))) then
27922786
let lhsStr = scalarLhsCref(e, context, &preExp /*BUFC*/, &varDecls /*BUFD*/,simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
27932787
match context

0 commit comments

Comments
 (0)