@@ -2744,50 +2744,44 @@ template encloseInParantheses(String expStr)
27442744if intEq(stringGet(expStr, 1), stringGet("(", 1)) then '<%expStr%>' else '(<%expStr%>)'
27452745end 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
27912785case 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