Skip to content

Commit 2ab9ff8

Browse files
authored
Issue4851 (#12030)
* fix ticket #4851, split 16dae.c into parts * add test for #4581 fix
1 parent 11e78ec commit 2ab9ff8

File tree

4 files changed

+1630
-9
lines changed

4 files changed

+1630
-9
lines changed

OMCompiler/Compiler/Template/CodegenC.tpl

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ template simulationFile_dae(SimCode simCode)
10791079
extern "C" {
10801080
#endif
10811081
1082-
<%evaluateDAEResiduals(daeEquations, modelNamePrefixStr)%>
1082+
<%evaluateDAEResiduals(daeEquations, fileNamePrefix, fullPathPrefix, modelNamePrefixStr)%>
10831083
10841084
<%initDAEmode%>
10851085
@@ -4469,14 +4469,52 @@ template functionXXX_systems(list<list<SimEqSystem>> eqs, String name, Text &loo
44694469
>>
44704470
end functionXXX_systems;
44714471
4472-
template createEquationsAndCalls(list<list<SimEqSystem>> systems, String name, Context context, String modelNamePrefixStr, Text eqCalls, Text eqFuncs)
4472+
4473+
template functionDAEModeEquationsMultiFiles(list<SimEqSystem> inEqs, Integer numEqs, Integer equationsPerFile, Context context, String fileNamePrefix, String fullPathPrefix, String modelNamePrefix, String funcName, String partName, Text &eqFuncs, Boolean static, Boolean noOpt, Boolean init)
4474+
::=
4475+
let &file = buffer ""
4476+
let multiFile = if intGt(numEqs, equationsPerFile) then "x"
4477+
let fncalls = (List.balancedPartition(inEqs, equationsPerFile) |> eqs hasindex i0 =>
4478+
// To file
4479+
let &file += ((if multiFile then
4480+
(let fileName = addFunctionIndex('<%fileNamePrefix%>_<%partName%>_part', ".c")
4481+
redirectToFile(fullPathPrefix + fileName) +
4482+
<<
4483+
<%simulationFileHeader(fileNamePrefix)%>
4484+
#if defined(__cplusplus)
4485+
extern "C" {
4486+
#endif<%\n%>
4487+
>>)) +
4488+
(eqs |> eq => equation_impl_options(-1, -1, eq, context, modelNamePrefix, static, noOpt, init); separator="\n") +
4489+
<<
4490+
>>
4491+
+
4492+
(if multiFile then
4493+
(<<
4494+
4495+
#if defined(__cplusplus)
4496+
}
4497+
#endif
4498+
>> +
4499+
closeFile())))
4500+
4501+
// fncalls
4502+
'<%(eqs |> eq => equationNames_(eq, context, modelNamePrefix); separator="\n")%>'
4503+
4504+
)
4505+
4506+
let &eqFuncs += file
4507+
fncalls
4508+
end functionDAEModeEquationsMultiFiles;
4509+
4510+
template createEquationsAndCalls(list<list<SimEqSystem>> systems, String name, Context context, String fileNamePrefix, String fullPathPrefix, String modelNamePrefix, Text eqCalls, Text eqFuncs)
44734511
::=
44744512
let _ = (systems |> equations => (
4475-
equations |> eq => (
4476-
let &eqFuncs += equation_impl(-1, -1, eq, context, modelNamePrefixStr, false)
4477-
let &eqCalls += equationNames_(eq, context, modelNamePrefixStr)
4478-
<<>>
4479-
)
4513+
let fncalls = functionDAEModeEquationsMultiFiles(equations, listLength(equations),
4514+
Flags.getConfigInt(Flags.EQUATIONS_PER_FILE), context, fileNamePrefix, fullPathPrefix, modelNamePrefix,
4515+
"evaluateDAEResiduals", "16dae", &eqFuncs, /* Static? */ false, true /* No optimization */, /* initial? */ false)
4516+
let &eqCalls += fncalls
4517+
<<>>
44804518
)
44814519
)
44824520
<<>>
@@ -4627,13 +4665,14 @@ template functionAlgebraic(list<list<SimEqSystem>> algebraicEquations, String mo
46274665
>>
46284666
end functionAlgebraic;
46294667
4630-
template evaluateDAEResiduals(list<list<SimEqSystem>> resEquations, String modelNamePrefix)
4668+
template evaluateDAEResiduals(list<list<SimEqSystem>> resEquations, String fileNamePrefix, String fullPathPrefix, String modelNamePrefix)
46314669
"Generates function in simulation file."
46324670
::=
4671+
let () = System.tmpTickReset(0)
46334672
let &eqFuncs = buffer ""
46344673
let &eqCalls = buffer ""
46354674
4636-
let systems = createEquationsAndCalls(resEquations, "DAERes", contextDAEmode, modelNamePrefix, &eqCalls, &eqFuncs)
4675+
let systems = createEquationsAndCalls(resEquations, "DAERes", contextDAEmode, fileNamePrefix, fullPathPrefix, modelNamePrefix, &eqCalls, &eqFuncs)
46374676
<<
46384677
/*residual equations*/
46394678
<%eqFuncs%>

testsuite/simulation/modelica/daemode/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ testDAEp9.mos \
1313
testDAEmodeDrumBoiler.mos \
1414
testDAEScaling.mos \
1515
testDAE10.mos \
16+
testDAEModeFileSplit_Issue4851.mos \
1617

1718
# Dependency files that are not .mo .mos or Makefile
1819
# Add them here or they will be cleaned.

0 commit comments

Comments
 (0)