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

Commit c17054f

Browse files
rfrankeOpenModelica-Hudson
authored andcommitted
Consider row major ordering when assigning arrays to seed vars
Belonging to [master]: - #2239
1 parent ffb66c3 commit c17054f

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

Compiler/Template/CodegenCppCommon.tpl

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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
469471
end 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
497497
end daeExpCrefRhsArrayBox2;
498498

499499
template daeExpRecordCrefRhs(DAE.Type ty, ComponentRef cr, Context context, Text &preExp, Text &varDecls, SimCode simCode, Text& extraFuncs,

0 commit comments

Comments
 (0)