Skip to content

Commit

Permalink
Fix declaration of C++ methods for DAE residuals
Browse files Browse the repository at this point in the history
  • Loading branch information
rfranke committed Apr 20, 2023
1 parent c90b816 commit f77c006
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 50 deletions.
11 changes: 6 additions & 5 deletions OMCompiler/Compiler/Template/CodegenCpp.tpl
Expand Up @@ -72,9 +72,9 @@ template translateModel(SimCode simCode)
let()= textFile(simulationJacobianCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", &jacobianVarsInit, stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>Jacobian.cpp')
let()= textFile(simulationStateSelectionCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>StateSelection.cpp')
let()= textFile(simulationStateSelectionHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>StateSelection.h')
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraFuncs, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
&extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>Mixed.cpp')
let()= textFile(simulationMixedSystemHeaderFile(simCode, &extraFuncs, &extraResidualsFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>Mixed.h')
let()= textFile(simulationMixedSystemHeaderFile(simCode, &extraResidualsFuncsDecl), 'OMCpp<%fileNamePrefix%>Mixed.h')
let _ = match Config.simCodeTarget()
case "Cpp" then
let()= textFile(simulationWriteOutputCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
Expand Down Expand Up @@ -398,7 +398,7 @@ template getPreVarsCount(ModelInfo modelInfo)
end getPreVarsCount;


template simulationMixedSystemHeaderFile(SimCode simCode ,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace)
template simulationMixedSystemHeaderFile(SimCode simCode, Text& extraResidualsFuncsDecl)
"Generates code for header file for simulation target."
::=
match simCode
Expand Down Expand Up @@ -449,7 +449,8 @@ case SIMCODE(modelInfo=MODELINFO(vars = vars as SIMVARS(__))) then
virtual shared_ptr<ISimObjects> getSimObjects();
private:
//update residual methods
<%simulationDAEMethodsDeclaration(simCode)%>
<%extraResidualsFuncsDecl%>
<%simulationDAEMethodsDeclaration(simCode)%>
};
>>
end simulationMixedSystemHeaderFile;
Expand Down Expand Up @@ -13713,7 +13714,7 @@ match simCode
>>
end simulationDAEMethodsDeclaration;

template updateResiduals(SimCode simCode,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
template updateResiduals(SimCode simCode,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
::=
let &extraFuncsResidual = buffer "" /*BUFD*/
<<
Expand Down
8 changes: 4 additions & 4 deletions OMCompiler/Compiler/Template/CodegenCppHpcom.tpl
Expand Up @@ -23,7 +23,7 @@ template translateModel(SimCode simCode)
let target = simulationCodeTarget()
let &extraFuncs = buffer "" /*BUFD*/
let &extraFuncsDecl = buffer "" /*BUFD*/
let &extraResidualsFuncsDecl = buffer "" /*BUFD*/
let &extraResidualsFuncsDecl = buffer "" /*BUFD*/
let &dummyTypeElemCreation = buffer "" //remove this workaround if GCC > 4.4 is the default compiler
let stateDerVectorName = "__zDot"
let useMemoryOptimization = Flags.isSet(Flags.HPCOM_MEMORY_OPT)
Expand Down Expand Up @@ -84,9 +84,9 @@ template translateModel(SimCode simCode)
let() = textFile(simulationStateSelectionCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>StateSelection.cpp')
let() = textFile(simulationStateSelectionHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>StateSelection.h')

let()= textFile(simulationMixedSystemCppFile(simCode ,updateResiduals(simCode,extraFuncs,extraResidualsFuncsDecl,className,stateDerVectorName /*=__zDot*/, false)
, &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Mixed.cpp')
let() = textFile(simulationMixedSystemHeaderFile(simCode, &extraFuncs, &extraResidualsFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>Mixed.h')
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
&extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Mixed.cpp')
let() = textFile(simulationMixedSystemHeaderFile(simCode, &extraResidualsFuncsDecl), 'OMCpp<%fileNamePrefix%>Mixed.h')
let() = textFile(simulationWriteOutputHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>WriteOutput.h')
let() = textFile(simulationWriteOutputCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
let() = textFile(simulationFactoryFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>FactoryExport.cpp')
Expand Down
8 changes: 4 additions & 4 deletions OMCompiler/Compiler/Template/CodegenCppHpcomOld.tpl
Expand Up @@ -23,7 +23,7 @@ template translateModel(SimCode simCode)
let target = simulationCodeTarget()
let &extraFuncs = buffer "" /*BUFD*/
let &extraFuncsDecl = buffer "" /*BUFD*/
let &extraResidualsFuncsDecl = buffer "" /*BUFD*/
let &extraResidualsFuncsDecl = buffer "" /*BUFD*/
let &dummyTypeElemCreation = buffer "" //remove this workaround if GCC > 4.4 is the default compiler
let stateDerVectorName = "__zDot"
let useMemoryOptimization = Flags.isSet(Flags.HPCOM_MEMORY_OPT)
Expand Down Expand Up @@ -84,9 +84,9 @@ template translateModel(SimCode simCode)
let() = textFile(simulationStateSelectionCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>StateSelection.cpp')
let() = textFile(simulationStateSelectionHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>StateSelection.h')

let()= textFile(simulationMixedSystemCppFile(simCode ,updateResiduals(simCode,extraFuncs,extraResidualsFuncsDecl,className,stateDerVectorName /*=__zDot*/, false)
, &extraFuncs , &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Mixed.cpp')
let() = textFile(simulationMixedSystemHeaderFile(simCode, &extraFuncs, &extraResidualsFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>Mixed.h')
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
&extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false),'OMCpp<%fileNamePrefix%>Mixed.cpp')
let() = textFile(simulationMixedSystemHeaderFile(simCode, &extraResidualsFuncsDecl), 'OMCpp<%fileNamePrefix%>Mixed.h')
let() = textFile(simulationWriteOutputHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>WriteOutput.h')
let() = textFile(simulationWriteOutputCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
let() = textFile(simulationFactoryFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>FactoryExport.cpp')
Expand Down
59 changes: 22 additions & 37 deletions OMCompiler/Compiler/Template/CodegenCppOld.tpl
Expand Up @@ -65,9 +65,9 @@ template translateModel(SimCode simCode)
let()= textFile(simulationJacobianCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", &jacobianVarsInit, stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>Jacobian.cpp')
let()= textFile(simulationStateSelectionCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>StateSelection.cpp')
let()= textFile(simulationStateSelectionHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>StateSelection.h')
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraFuncs, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
let()= textFile(simulationMixedSystemCppFile(simCode, updateResiduals(simCode, extraResidualsFuncsDecl, className, stateDerVectorName /*=__zDot*/, false),
&extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>Mixed.cpp')
let()= textFile(simulationMixedSystemHeaderFile(simCode, &extraFuncs, &extraResidualsFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>Mixed.h')
let()= textFile(simulationMixedSystemHeaderFile(simCode, &extraResidualsFuncsDecl), 'OMCpp<%fileNamePrefix%>Mixed.h')

let()= textFile(simulationWriteOutputCppFile(simCode, &extraFuncs, &extraFuncsDecl, "", stateDerVectorName, false), 'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
let()= textFile(simulationWriteOutputHeaderFile(simCode, &extraFuncs, &extraFuncsDecl, ""), 'OMCpp<%fileNamePrefix%>WriteOutput.h')
Expand Down Expand Up @@ -386,7 +386,7 @@ template getPreVarsCount(ModelInfo modelInfo)
end getPreVarsCount;


template simulationMixedSystemHeaderFile(SimCode simCode ,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace)
template simulationMixedSystemHeaderFile(SimCode simCode, Text& extraResidualsFuncsDecl)
"Generates code for header file for simulation target."
::=
match simCode
Expand Down Expand Up @@ -435,8 +435,9 @@ case SIMCODE(modelInfo=MODELINFO(vars = vars as SIMVARS(__))) then
virtual bool isJacobianSparse();//true if getSparseJacobian is implemented and getJacobian is not, false if getJacobian is implemented and getSparseJacobian is not.
virtual bool isAnalyticJacobianGenerated();//true if the flag --generateSymbolicJacobian is true, false if not.
private:
//update residual methods
<%simulationDAEMethodsDeclaration(simCode)%>
// update residual methods
<%extraResidualsFuncsDecl%>
<%simulationDAEMethodsDeclaration(simCode)%>
};
>>
end simulationMixedSystemHeaderFile;
Expand Down Expand Up @@ -970,7 +971,7 @@ case modelInfo as MODELINFO(vars=SIMVARS(__)) then
>>
end simulationWriteOutputAliasVarsCppFile;

template simulationMixedSystemCppFile(SimCode simCode , Text updateResidualFunctionsCode, Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
template simulationMixedSystemCppFile(SimCode simCode, Text updateResidualFunctionsCode, Text& extraFuncs, Text& extraFuncsDecl, Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
"Generates code for main cpp file for simulation target."
::=
match simCode
Expand Down Expand Up @@ -1175,8 +1176,8 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
{
return "<%fileNamePrefix%>";
}
<%updateResidualFunctionsCode%>

<%updateResidualFunctionsCode%>
>>
end simulationMixedSystemCppFile;

Expand Down Expand Up @@ -13816,38 +13817,27 @@ template generateMeasureTimeEndCode(String varNameStartValues, String varNameEnd
end generateMeasureTimeEndCode;



/*daeMode templates*/






template simulationDAEMethodsDeclaration(SimCode simCode)
::=
match simCode
case SIMCODE(modelInfo=MODELINFO(vars=SIMVARS(__)),
daeModeData=SOME(DAEMODEDATA(daeEquations=daeEquations, sparsityPattern=sparsityPattern,
algebraicVars=algebraicDAEVars, residualVars=residualVars))) then
<<
<%generateDAEEquationMemberFuncDecls(daeEquations,"evaluateDAE")%>

>>
<<
<%generateDAEEquationMemberFuncDecls(daeEquations, "evaluateDAE")%>
>>
end simulationDAEMethodsDeclaration;

template updateResiduals(SimCode simCode,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
template updateResiduals(SimCode simCode, Text& extraResidualsFuncsDecl, Text extraFuncsNamespace, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation)
::=
let &extraFuncsResidual = buffer "" /*BUFD*/
<<
<%simulationDAEMethods(simCode, extraFuncsResidual,extraFuncsDecl, extraFuncsNamespace,contextOther,stateDerVectorName,useFlatArrayNotation,boolNot(stringEq(getConfigString(PROFILING_LEVEL),"none")))%>

<%extraFuncsResidual%>



let &extraResidualsFuncs = buffer "" /*BUFD*/
<<
<%simulationDAEMethods(simCode, extraResidualsFuncs, extraResidualsFuncsDecl, extraFuncsNamespace, contextOther, stateDerVectorName, useFlatArrayNotation, boolNot(stringEq(getConfigString(PROFILING_LEVEL), "none")))%>

>>
<%extraResidualsFuncs%>
>>
end updateResiduals;

template generateDAEEquationMemberFuncDecls(list<list<SimEqSystem>> DAEEquations,Text method)
Expand All @@ -13863,7 +13853,7 @@ template generateDAEEquationMemberFuncDecls(list<list<SimEqSystem>> DAEEquations
end generateDAEEquationMemberFuncDecls;


template simulationDAEMethods(SimCode simCode,Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace, Context context, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation, Boolean enableMeasureTime)
template simulationDAEMethods(SimCode simCode, Text& extraFuncs, Text& extraFuncsDecl, Text extraFuncsNamespace, Context context, Text stateDerVectorName /*=__zDot*/, Boolean useFlatArrayNotation, Boolean enableMeasureTime)
"DAEmode equations generation"
::=
match simCode
Expand All @@ -13873,12 +13863,9 @@ template simulationDAEMethods(SimCode simCode,Text& extraFuncs,Text& extraFuncsD
let modelNamePrefixStr = lastIdentOfPath(modelInfo.name)

<<



<%algebraicDAEVar(algebraicDAEVars, modelNamePrefixStr)%>
<%evaluateDAEResiduals(daeEquations, simCode ,extraFuncs,extraFuncsDecl,extraFuncsNamespace, context, enableMeasureTime)%>
<%equationResidualFunctions(daeEquations,simCode ,extraFuncs,extraFuncsDecl,extraFuncsNamespace, context, stateDerVectorName , useFlatArrayNotation, enableMeasureTime)%>
<%evaluateDAEResiduals(daeEquations, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, context, enableMeasureTime)%>
<%equationResidualFunctions(daeEquations, simCode, extraFuncs, extraFuncsDecl, extraFuncsNamespace, context, stateDerVectorName, useFlatArrayNotation, enableMeasureTime)%>
void <%modelNamePrefixStr%>Mixed::getResidual(double* f)
{
SystemDefaultImplementation::getResidual(f);
Expand All @@ -13891,7 +13878,6 @@ template simulationDAEMethods(SimCode simCode,Text& extraFuncs,Text& extraFuncsD
/* DAE residuals is empty */
void <%modelNamePrefixStr%>Mixed::getResidual(double* f)
{

}
void <%modelNamePrefixStr%>Mixed::setAlgebraicDAEVars(const double* y)
{
Expand All @@ -13902,7 +13888,6 @@ template simulationDAEMethods(SimCode simCode,Text& extraFuncs,Text& extraFuncsD
}
void <%modelNamePrefixStr%>Mixed::evaluateDAE(const UPDATETYPE command )
{

}
>>
end match
Expand Down Expand Up @@ -13966,11 +13951,11 @@ template evaluateDAEResiduals(list<list<SimEqSystem>> resEquations, SimCode simC
let &varDecls = buffer ""

let equation_dae_func_calls = if not Flags.isSet(Flags.MULTIRATE_PARTITION) then (List.partition(List.flatten(resEquations), 100) |> eqs hasindex i0 =>
createEvaluateWithSplit(i0, context, eqs, "evaluateDAE","evaluateDAE", className, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace)
createEvaluateWithSplit(i0, context, eqs, "evaluateDAE", "evaluateDAE", className, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace)
;separator="\n")
else ( List.intRange(partitionData.numPartitions) |> partIdx =>
createEvaluatePartitions(partIdx, context, List.flatten(resEquations), listGet(partitions, partIdx),
listGet(activatorsForPartitions,partIdx), className,simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace) ;separator="\n")
listGet(activatorsForPartitions,partIdx), className, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace) ;separator="\n")
<<
void <%className%>::evaluateDAE(const UPDATETYPE command )
{
Expand Down

0 comments on commit f77c006

Please sign in to comment.