@@ -436,12 +436,14 @@ template daeExpCrefRhsArrayBox(ComponentRef cr, DAE.Type ty, Context context, Te
436436 match varKind
437437 case STATE()
438438 case STATE_DER()
439- case DAE_RESIDUAL_VAR()
439+ case DAE_RESIDUAL_VAR() then
440+ let arrdata = representationCref(cr, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, context, varDecls, stateDerVectorName, useFlatArrayNotation)
441+ daeExpCrefRhsArrayBox2(arrdata, ty, false, context, preExp, varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace)
440442 case JAC_VAR()
441443 case JAC_DIFF_VAR()
442444 case SEED_VAR() then
443445 let arrdata = representationCref(cr, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, context, varDecls, stateDerVectorName, useFlatArrayNotation)
444- daeExpCrefRhsArrayBox2(arrdata, ty, context, preExp, varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace)
446+ daeExpCrefRhsArrayBox2(arrdata, ty, true, context, preExp, varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace)
445447 else
446448 match context
447449 case FUNCTION_CONTEXT(__) then ''
@@ -469,31 +471,29 @@ template daeExpCrefRhsArrayBox(ComponentRef cr, DAE.Type ty, Context context, Te
469471end daeExpCrefRhsArrayBox;
470472
471473
472- template daeExpCrefRhsArrayBox2(Text var, DAE.Type type , Context context, Text &preExp /*BUFP*/,
473- Text &varDecls /*BUFP*/,SimCode simCode, Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace) ::=
474- match type
475- case t as T_ARRAY(ty=aty,dims=dims) then
476-
474+ template daeExpCrefRhsArrayBox2(Text arrayData, DAE.Type ty, Boolean isRowMajorData , Context context, Text &preExp /*BUFP*/,
475+ Text &varDecls /*BUFP*/, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl, Text extraFuncsNamespace)
476+ ::=
477+ match ty
478+ case t as T_ARRAY(ty=aty,dims=dims) then
477479 let dimstr = checkDimension(dims)
478-
479- let arraytype = match dimstr
480- case "" then 'DynArrayDim<%listLength(dims)%><<%expTypeShort(type)%>>'
481- else 'StatArrayDim<%listLength(dims)%><<%expTypeShort(type)%>,<%dimstr%>> /*testarray3*/'
480+ let arrayType = match dimstr
481+ case "" then 'DynArrayDim<%listLength(dims)%><<%expTypeShort(ty)%>>'
482+ else 'StatArrayDim<%listLength(dims)%><<%expTypeShort(ty)%>,<%dimstr%>>'
482483 end match
483484 let &tmpdecl = buffer "" /*BUFD*/
484- let arrayVar = tempDecl(arraytype, &tmpdecl /*BUFD*/)
485- let boostExtents = '<%arraytype%><%arrayVar%>;'
486- //let size = (dims |> dim => dimension(dim) ;separator="+")
487- // let arrayassign = '<%arrayVar%>.assign(&<%var%>,&<%var%>+(<%size%>));<%\n%>'
488- let arrayassign = '<%arrayVar%>.assign(&<%var%>);<%\n%>'
485+ let arrayVar = tempDecl(arrayType, &tmpdecl /*BUFD*/)
486+ let arrayAssign = if isRowMajorData then
487+ 'assignRowMajorData(&<%arrayData%>, <%arrayVar%>)' else
488+ '<%arrayVar%>.assign(&<%arrayData%>)'
489489 let &preExp +=
490490 <<
491- <%boostExtents%>
492- <%arrayassign %>
491+ <%arrayType%> <%arrayVar%>;
492+ <%arrayAssign%>;<%\n %>
493493 >>
494494 arrayVar
495495 else
496- var
496+ arrayData
497497end daeExpCrefRhsArrayBox2;
498498
499499template daeExpRecordCrefRhs(DAE.Type ty, ComponentRef cr, Context context, Text &preExp, Text &varDecls, SimCode simCode, Text& extraFuncs,
0 commit comments