Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
lochel committed May 19, 2015
2 parents d01c904 + dcf2a05 commit 7abb7cc
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 92 deletions.
9 changes: 2 additions & 7 deletions Compiler/Template/CodegenC.tpl
Expand Up @@ -3803,8 +3803,7 @@ case SES_SIMPLE_ASSIGN(__) then
>>
end equationSimpleAssign;

template equationForLoop(SimEqSystem eq, Context context,
Text &varDecls, Text &auxFunction)
template equationForLoop(SimEqSystem eq, Context context, Text &varDecls, Text &auxFunction)
"Generates an equation that is a for-loop."
::=
match eq
Expand All @@ -3819,12 +3818,8 @@ case SES_FOR_LOOP(__) then
<<
<%modelicaLine(eqInfo(eq))%>
modelica_integer $P<%printExpStr(iter)%> = 0; // the iterator
//BLUB
//<%crefStr(cref)%>
///<%printExpStr(crefExp(cref))%>
//BLUB2
// the for-equation
for($P<%printExpStr(iter)%> = <%start%>; $P<%printExpStr(iter)%> < <%stop%>; $P<%printExpStr(iter)%>++)
for($P<%printExpStr(iter)%> = <%start%>; $P<%printExpStr(iter)%> != <%stop%>+1; $P<%printExpStr(iter)%>++)
{
<%crefPart%> += <%expPart%>;
}
Expand Down
81 changes: 14 additions & 67 deletions Compiler/Template/CodegenCpp.tpl
Expand Up @@ -4055,26 +4055,10 @@ template daeExpSum(Exp exp, Context context, Text &preExp, Text &varDecls, SimCo
let iterExp = daeExp(iterator, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
let startItExp = daeExp(startIt, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
let endItExp = daeExp(endIt, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
let &preExp += 'double sum = 0.0;<%\n%>for(size_t <%iterExp%> = <%startItExp%>; <%iterExp%> != <%endItExp%>+1; <%iterExp%>++)<%\n%> sum += <%bodyExp%>[<%iterExp%>]<%\n%>'
let &preExp += 'double sum = 0.0;<%\n%>for(size_t <%iterExp%> = <%startItExp%>; <%iterExp%> != <%endItExp%>+1; <%iterExp%>++)<%\n%> sum += <%bodyExp%>(<%iterExp%>);<%\n%>'
<<
sum
>>

//C-Codegen:
//let start = printExpStr(startIt)
//let &anotherPre = buffer ""
//let stop = printExpStr(endIt)
//let bodyStr = daeExpIteratedCref(body)
//let summationVar = <<sum>>
//let iterVar = printExpStr(iterator)
//let &preExp +=<<

//modelica_integer $P<%iterVar%> = 0; // the iterator
//modelica_real <%summationVar%> = 0.0; //the sum
//for($P<%iterVar%> = <%start%>; $P<%iterVar%> < <%stop%>; $P<%iterVar%>++)
//{
// <%summationVar%> += <%bodyStr%>($P<%iterVar%>);
//}
end daeExpSum;


Expand Down Expand Up @@ -7587,10 +7571,9 @@ template crefToCStrForArray(ComponentRef cr, Text& dims)
::=
match cr
case CREF_IDENT(__) then
let &dims+=listLength(subscriptLst)
'<%ident%>'
case CREF_QUAL(__) then '<%ident%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStrForArray(componentRef,dims)%>'

let &dims+=listLength(subscriptLst)
'<%ident%>'
case CREF_QUAL(__) then '<%ident%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStrForArray(componentRef,dims)%>'
case WILD(__) then ' '
else "CREF_NOT_IDENT_OR_QUAL"
end crefToCStrForArray;
Expand All @@ -7600,8 +7583,7 @@ template crefToCStr1(ComponentRef cr, Boolean useFlatArrayNotation)
::=
match cr
case CREF_IDENT(__) then '<%ident%>'
case CREF_QUAL(__) then '<%ident%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStr1(componentRef,useFlatArrayNotation)%>'

case CREF_QUAL(__) then '<%ident%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStr1(componentRef,useFlatArrayNotation)%>'
case WILD(__) then ' '
else "CREF_NOT_IDENT_OR_QUAL"
end crefToCStr1;
Expand Down Expand Up @@ -10341,12 +10323,6 @@ case SIM_WHEN_CLAUSE(__) then
end helpvarvector1;



template preCref(ComponentRef cr, SimCode simCode ,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Context context, Text stateDerVectorName, Boolean useFlatArrayNotation) ::=
let &varDeclsCref = buffer "" /*BUFD*/
'pre<%representationCref(cr, simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace,context,varDeclsCref, stateDerVectorName, useFlatArrayNotation)%>'
end preCref;

template equationSimpleAssign(SimEqSystem eq, Context context,Text &varDecls, SimCode simCode ,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
"Generates an equation that is just a simple assignment."
::=
Expand Down Expand Up @@ -10467,7 +10443,12 @@ template equationLinearOrNonLinear(SimEqSystem eq, Context context,Text &varDecl
end equationLinearOrNonLinear;


template equationForLoop(SimEqSystem eq, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
template equationForLoop(SimEqSystem eq, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs,Text& extraFuncsDecl,
Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
"Generates equations with a for loop, e.g.:
for(size_t it = 1; t != 100; it++)
A_i(it) = B_i(it) + C_i(it)
"
::=
match eq
case SES_FOR_LOOP(__) then
Expand All @@ -10476,61 +10457,27 @@ template equationForLoop(SimEqSystem eq, Context context, Text &varDecls, SimCod
let startExp = daeExp(startIt, context, preExp, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, false)
let endExp = daeExp(endIt, context, preExp, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, false)
let expPart = daeExp(exp, context, preExp, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, false)
let crefPart = daeExp(crefExp(cref), context, preExp, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, false)
let crefWithIdx = crefWithIndex(cref, context, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName /*=__zDot*/, useFlatArrayNotation)
let lhs = getLHS(cref, startExp, useFlatArrayNotation)
<<
<%preExp%>
//double *result = &<%cref(cref, false)%>[0];
double *result = &<%lhs%>;
for(int <%iterExp%> = <%startExp%>; <%iterExp%> != <%endExp%>+1; <%iterExp%>++)
result[i] = <%expPart%>;
>>
end match
end equationForLoop;


template getLHS(ComponentRef cr, Text startExp, Boolean useFlatArrayNotation)
"Returns the left hand side of a for loop with the right var index, e.g., _resistor1_P_i.
"Returns the left hand side of a for loop with the right var index, e.g., _resistor_P_i(1).
Assumption: lhs = 'cref' + 'startIndex of for loop'."
::=
match cr
case CREF_QUAL(__) then
//"_" + '<%ident%><%startExp%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStr(componentRef,useFlatArrayNotation)%>'
"_" + '<%crefAppendedSubs(cr)%>'
"_" + '<%crefToCStr1(cr, useFlatArrayNotation)%>' + "(" + '<%startExp%>' + ")"
else "CREF_NOT_QUAL"
end match
end getLHS;

template crefWithIndex(ComponentRef cr, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl,
Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
"Return cref with index for the lhs of a for loop, i.e., _resistori_P_i."
::=
match cr
case CREF_QUAL(__) then
"_" + crefToCStrWithIndex(cr, context, varDecls, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, stateDerVectorName /*=__zDot*/, useFlatArrayNotation)
end match
end crefWithIndex;

template crefToCStrWithIndex(ComponentRef cr, Context context, Text &varDecls, SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl,
Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
"Helper function to crefWithIndex."
::=
let &preExp = buffer ""
let tmp = ""
match cr
case CREF_QUAL(__) then
let identTmp = '<%ident%>'
match listHead(subscriptLst)
case INDEX(__) then
match exp case e as CREF(__) then
let tmp = daeExpCrefRhs(e, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
'<%identTmp%><%tmp%><%subscriptsToCStrForArray(subscriptLst)%>_P_<%crefToCStr(componentRef,useFlatArrayNotation)%>'
end match
end match
else "CREF_NOT_IDENT_OR_QUAL"
end crefToCStrWithIndex;



template testDaeDimensionExp(Exp exp)
"Generates code for an expression."
Expand Down
25 changes: 7 additions & 18 deletions Compiler/Template/CodegenUtil.tpl
Expand Up @@ -439,34 +439,23 @@ template dumpEqs(list<SimEqSystem> eqs)
>>
case e as SES_FOR_LOOP(__) then
let &forstatement = buffer ""
let &forstatement += 'for(size_t ' + escapeCComments(printExpStr(e.iter)) + ' = ' + escapeCComments(printExpStr(e.startIt)) + ';'
let &forstatement += escapeCComments(printExpStr(e.iter)) + ' != ' + escapeCComments(printExpStr(e.endIt)) + ' 1;'
let &forstatement += 'for(size_t ' + escapeCComments(printExpStr(e.iter)) + ' = ' + escapeCComments(printExpStr(e.startIt)) + '; '
let &forstatement += escapeCComments(printExpStr(e.iter)) + ' != ' + escapeCComments(printExpStr(e.endIt)) + '+1; '
let &forstatement += escapeCComments(printExpStr(e.iter)) + '++) {<%\n%>'
let &forstatement += ' <%crefStr(e.cref)%> = <%escapeCComments(printExpStr(e.exp))%><%\n%>'
let &forstatement += '}'
<<
equation index: <%equationIndex(e)%>
type: FOR_LOOP
for(size_t <%escapeCComments(printExpStr(e.iter))%> = <%escapeCComments(printExpStr(e.startIt))%>;
<%escapeCComments(printExpStr(e.iter))%> != <%escapeCComments(printExpStr(e.endIt)) + 1%>;
++<%escapeCComments(printExpStr(e.iter))%>

<%forstatement%>
>>

else
<<
unknown equation
>>
end dumpEqs;
//let forstatement1 = equationIndex(e)
//for(size_t <%escapeCComments(printExpStr(e.iter))%> = <%escapeCComments(printExpStr(e.startIt))%>; "
//let &forstatement += '<%escapeCComments(printExpStr(e.iter))%> != <%escapeCComments(printExpStr(e.endIt)) + 1%>; '
//let &forstatement += '++<%escapeCComments(printExpStr(e.iter))%>'
//<%crefStr(e.cref)%> = <%escapeCComments(printExpStr(e.exp))%>
// DAE.Exp iter;
//DAE.Exp startIt;
//DAE.Exp endIt;
//DAE.ComponentRef cref;//lhs
//DAE.Exp exp;//rhs
//DAE.ElementSource source;


/************************************************************************************************/


Expand Down

0 comments on commit 7abb7cc

Please sign in to comment.