Skip to content

Commit d32cb14

Browse files
committed
Speed up Dymola compilation for identic calls
With Dymola 2025x Refresh 1 the compilation time can be drastically reduced using this annotation when the same value is read many times to set parameters. It allows Dymola to cache the result of the function call and treat the function as pure when reading values for parameters, as long as no regular impure function (one without this annotation) is called in-between. This is e.g. beneficial for Battery packs with hundreds of cells, where each cell of an array of cells reads the same parameter values from an sdf file, like the number of RC elements they should use.
1 parent 599fa87 commit d32cb14

16 files changed

Lines changed: 16 additions & 0 deletions

SDF/Functions/readDatasetDouble.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ algorithm
1313
datasetName,
1414
unit);
1515
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
16+
annotation(__Dymola_impureConstant=true);
1617
end readDatasetDouble;

SDF/Functions/readDatasetDouble1D.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ algorithm
1414
datasetName,
1515
unit);
1616
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
17+
annotation(__Dymola_impureConstant=true);
1718
end readDatasetDouble1D;

SDF/Functions/readDatasetDouble2D.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ algorithm
1616
datasetName,
1717
unit);
1818
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
19+
annotation(__Dymola_impureConstant=true);
1920
end readDatasetDouble2D;

SDF/Functions/readDatasetInteger.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ algorithm
1313
datasetName,
1414
unit);
1515
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
16+
annotation(__Dymola_impureConstant=true);
1617
end readDatasetInteger;

SDF/Functions/readDatasetInteger1D.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ algorithm
1414
datasetName,
1515
unit);
1616
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
17+
annotation(__Dymola_impureConstant=true);
1718
end readDatasetInteger1D;

SDF/Functions/readDatasetInteger2D.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ algorithm
1616
datasetName,
1717
unit);
1818
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
19+
annotation(__Dymola_impureConstant=true);
1920
end readDatasetInteger2D;

SDF/Functions/readTableData.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ algorithm
1616
scaleUnits,
1717
size(data, 1));
1818
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
19+
annotation(__Dymola_impureConstant=true);
1920
end readTableData;

SDF/Functions/readTimeSeries.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ algorithm
1717
scaleUnit,
1818
size(data, 1));
1919
assert(Modelica.Utilities.Strings.isEmpty(errorMessage), errorMessage);
20+
annotation(__Dymola_impureConstant=true);
2021
end readTimeSeries;

SDF/Internal/Functions/readDatasetDouble.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ impure function readDatasetDouble
99
external "C" errorMessage = ModelicaSDF_read_dataset_double(fileName, datasetName, unit, data) annotation (
1010
Library={"ModelicaSDF"},
1111
LibraryDirectory="modelica://SDF/Resources/Library");
12+
annotation(__Dymola_impureConstant=true);
1213
end readDatasetDouble;

SDF/Internal/Functions/readDatasetDouble1D.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ impure function readDatasetDouble1D
99
external "C" errorMessage= ModelicaSDF_read_dataset_double(fileName, datasetName, unit, data) annotation (
1010
Library={"ModelicaSDF"},
1111
LibraryDirectory="modelica://SDF/Resources/Library");
12+
annotation(__Dymola_impureConstant=true);
1213
end readDatasetDouble1D;

0 commit comments

Comments
 (0)