diff --git a/OMCompiler/Compiler/Template/CodegenCpp.tpl b/OMCompiler/Compiler/Template/CodegenCpp.tpl index 2f3f2b65b40..eda3c6372b6 100644 --- a/OMCompiler/Compiler/Template/CodegenCpp.tpl +++ b/OMCompiler/Compiler/Template/CodegenCpp.tpl @@ -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') @@ -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 @@ -449,7 +449,8 @@ case SIMCODE(modelInfo=MODELINFO(vars = vars as SIMVARS(__))) then virtual shared_ptr getSimObjects(); private: //update residual methods - <%simulationDAEMethodsDeclaration(simCode)%> + <%extraResidualsFuncsDecl%> + <%simulationDAEMethodsDeclaration(simCode)%> }; >> end simulationMixedSystemHeaderFile; @@ -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*/ << diff --git a/OMCompiler/Compiler/Template/CodegenCppHpcom.tpl b/OMCompiler/Compiler/Template/CodegenCppHpcom.tpl index 694c82761dd..d1699db8628 100644 --- a/OMCompiler/Compiler/Template/CodegenCppHpcom.tpl +++ b/OMCompiler/Compiler/Template/CodegenCppHpcom.tpl @@ -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) @@ -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') diff --git a/OMCompiler/Compiler/Template/CodegenCppHpcomOld.tpl b/OMCompiler/Compiler/Template/CodegenCppHpcomOld.tpl index efaa841d22a..53f2a631dcb 100644 --- a/OMCompiler/Compiler/Template/CodegenCppHpcomOld.tpl +++ b/OMCompiler/Compiler/Template/CodegenCppHpcomOld.tpl @@ -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) @@ -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') diff --git a/OMCompiler/Compiler/Template/CodegenCppOld.tpl b/OMCompiler/Compiler/Template/CodegenCppOld.tpl index 33de4410580..7df5d20ad05 100644 --- a/OMCompiler/Compiler/Template/CodegenCppOld.tpl +++ b/OMCompiler/Compiler/Template/CodegenCppOld.tpl @@ -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') @@ -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 @@ -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; @@ -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 @@ -1175,8 +1176,8 @@ case SIMCODE(modelInfo = MODELINFO(__)) then { return "<%fileNamePrefix%>"; } - <%updateResidualFunctionsCode%> + <%updateResidualFunctionsCode%> >> end simulationMixedSystemCppFile; @@ -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> DAEEquations,Text method) @@ -13863,7 +13853,7 @@ template generateDAEEquationMemberFuncDecls(list> 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 @@ -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); @@ -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) { @@ -13902,7 +13888,6 @@ template simulationDAEMethods(SimCode simCode,Text& extraFuncs,Text& extraFuncsD } void <%modelNamePrefixStr%>Mixed::evaluateDAE(const UPDATETYPE command ) { - } >> end match @@ -13966,11 +13951,11 @@ template evaluateDAEResiduals(list> 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 ) {