Skip to content

Commit

Permalink
Merge pull request #1861 from ibpsa/1860_weeklyschedule
Browse files Browse the repository at this point in the history
avoiding memory leaks on errors in weekly schedule for #1860
  • Loading branch information
mwetter authored Apr 5, 2024
2 parents 05edf84 + f6d0326 commit 96088a7
Show file tree
Hide file tree
Showing 10 changed files with 316 additions and 98 deletions.
303 changes: 209 additions & 94 deletions IBPSA/Resources/C-Sources/WeeklySchedule.c

Large diffs are not rendered by default.

15 changes: 12 additions & 3 deletions IBPSA/Resources/C-Sources/WeeklySchedule.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#ifndef WEEKCAL_h
#define WEEKCAL_h


typedef struct TimeDataTuple {
double time; /* Time relative to monday midnight. */
double *data; /* Corresponding column data */
Expand All @@ -26,20 +27,28 @@ typedef struct WeeklySchedule {
double t_offset; /* Time offset for monday, midnight. */
int n_rows_in; /* Number of input rows */
int n_cols_in; /* Number of input columns */
int n_rowsUnpacked; /* Number of rows: number of rows after unpacking the date */

double previousTimestamp; /* Time where the schedule was called the previous time */
int previousIndex; /* Index where the schedule was called the previous time */

struct TimeDataTuple ** schedule;
int n_allocatedRules;
int n_allocatedRulesData;
double * lastData;
char * token;
FILE* fp;
char* buff2;
struct TimeDataTuple **rules;

} WeeklySchedule;



void* weeklyScheduleInit(const int tableOnFile, const char* name, const double t_offset, char* stringData);
void* weeklyScheduleInit(const int tableOnFile, const char* name, const double t_offset, const char* stringData);

void weeklyScheduleFree(void * ID);

void weeklyScheduleFreeInit(void * ID);

double getScheduleValue(void * ID, const int column, const double time);

#endif
7 changes: 7 additions & 0 deletions IBPSA/Resources/Data/scheduleWindows.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Comments start with a #
# The user is responsible for making sure that the header dimensions are correct
double tab1(3,5) # Comments can be added at the end of a line for adding local documentation
mon:0:0:10 - 3 1 -
# Comments can be added in the table too
tue,thu:20:30:59 123 - 45 -
wed 12 1 4 -
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
last-generated=2024-04-02
statistics-simulation=
{
"linear": " ",
"nonlinear": " ",
"numerical Jacobians": "0"
}
time=[-1e+04, 1e+06]
weeSchLin.y[1]=[1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02, 1.23e+02]
weeSchLin.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00]
weeSchLin.y[3]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4.5e+01, 4.5e+01, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01, 4.5e+01]
weeSchLin.y[4]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00]
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
simulateModel("IBPSA.Utilities.IO.Files.Validation.WeeklyScheduleWindowsLineEndings", startTime=-10000, stopTime=1000000, tolerance=1e-6, method="dassl", resultFile="WeeklyScheduleWindowsLineEndings");
createPlot(id=1, position={15, 15, 592, 364}, y={"weeSchLin.y[1]", "weeSchLin.y[2]", "weeSchLin.y[3]", "weeSchLin.y[4]"}, range={-100000.0, 1000000.0, -20.0, 140.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, timeUnit="s");
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
within IBPSA.Utilities.IO.Files.Validation;
model WeeklyScheduleWindowsLineEndings "Weekly schedule example"
extends Modelica.Icons.Example;
parameter String data = "double tab1(3,5) #test:
mon:0:0:10 - 3 1 -
tue,thu:20:30:59 123 - 45 -
wed 12 1 4 -" "Contents of schedule.txt";
IBPSA.Utilities.IO.Files.WeeklySchedule weeSchLin(
columns={2,3,4,5},
tableOnFile=true,
fileName=Modelica.Utilities.Files.loadResource("modelica://IBPSA/Resources/Data/schedule.txt"),
t_offset=1e6) "Weekly schedule example using file data source"
annotation (Placement(transformation(extent={{-10,20},{10,40}})));

IBPSA.Utilities.IO.Files.WeeklySchedule weeSchWin(
columns={2,3,4,5},
tableOnFile=true,
fileName=Modelica.Utilities.Files.loadResource("modelica://IBPSA/Resources/Data/scheduleWindows.txt"),
t_offset=1e6) "Weekly schedule example using parameter data source"
annotation (Placement(transformation(extent={{-10,-32},{10,-12}})));
Diagnostics.AssertEquality assEqu[4](
each startTime=-10000,
each threShold=Modelica.Constants.small)
"Trigger an assertion if the outputs differ"
annotation (Placement(transformation(extent={{40,-10},{60,10}})));
equation
connect(weeSchLin.y, assEqu.u1)
annotation (Line(points={{11,30},{24,30},{24,6},{38,6}}, color={0,0,127}));
connect(weeSchWin.y, assEqu.u2) annotation (Line(points={{11,-22},{24,-22},{24,
-6},{38,-6}}, color={0,0,127}));
annotation (
Documentation(info="<html>
<p>
Example for a weekly schedule that reads the schedule data from a file.
There are two file readers, one reading a file with Windows line endings and the other with Linux line endings.
</p>
</html>",
revisions="<html>
<ul>
<li>
April 2, 2024, by Michael Wetter:<br/>
First implementation.<br/>
This is for
<a href=\"https://github.com/ibpsa/modelica-ibpsa/issues/1860\">IBPSA, #1860</a>.
</li>
</ul>
</html>"),
experiment(
StartTime=-10000,
StopTime=1000000,
Tolerance=1e-06),
__Dymola_Commands(file=
"modelica://IBPSA/Resources/Scripts/Dymola/Utilities/IO/Files/Validation/WeeklyScheduleWindowsLineEndings.mos"
"Simulate and plot"));
end WeeklyScheduleWindowsLineEndings;
12 changes: 12 additions & 0 deletions IBPSA/Utilities/IO/Files/Validation/package.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
within IBPSA.Utilities.IO.Files;
package Validation "Collection of models that validate the models that access files"
extends Modelica.Icons.ExamplesPackage;

annotation (preferredView="info", Documentation(info="<html>
<p>
This package contains models that validate the models that access files.
The examples plot various outputs. These model outputs are stored as reference data to
allow continuous validation whenever models in the library change.
</p>
</html>"));
end Validation;
1 change: 1 addition & 0 deletions IBPSA/Utilities/IO/Files/Validation/package.order
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
WeeklyScheduleWindowsLineEndings
6 changes: 5 additions & 1 deletion IBPSA/Utilities/IO/Files/WeeklySchedule.mo
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ protected
revisions="<html>
<ul>
<li>
March 30 2024, by Filip Jorissen:<br/>
Avoiding memory leaks for <a href=\"https://github.com/ibpsa/modelica-ibpsa/pull/1861\">IBPSA, #1860</a>.
</li>
<li>
April 10 2022, by Filip Jorissen:<br/>
Added parameter source implementation.
</li>
Expand Down Expand Up @@ -90,7 +94,7 @@ The parameter <code>columns</code> is used to specify which columns of the table
The first column is time, hence for the above example, set <code>columns = {2}</code>.
</p>
<p>
See <a href=\"modelica://IBPSA/Resources/Data/schedule.txt\">IBPSA/Resources/Data/schedule.txt</a>
See <a href=\"modelica://IBPSA/Resources/Data/schedule.txt\">IBPSA/Resources/Data/schedule.txt</a>
for an example of the supported file format.
</p>
</html>"),
Expand Down
1 change: 1 addition & 0 deletions IBPSA/Utilities/IO/Files/package.order
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ CombiTimeTableWriter
JSONWriter
WeeklySchedule
Examples
Validation
BaseClasses

0 comments on commit 96088a7

Please sign in to comment.