Skip to content

Commit

Permalink
Update Spawn to EnergyPlus 24.2.0 (#4018)
Browse files Browse the repository at this point in the history
* Implemented support for RunPeriod for #2926

* Updated EnergyPlus coupling to add EnergyPlus 24.2.0 for #3911
  • Loading branch information
mwetter authored Nov 9, 2024
1 parent ef8df7a commit 0881724
Show file tree
Hide file tree
Showing 321 changed files with 38,368 additions and 95 deletions.
8 changes: 4 additions & 4 deletions Buildings/DHC/Loads/BaseClasses/BuildingSpawnZ1.mo
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ model BuildingSpawnZ1
"Load side medium";
parameter Integer nZon=1
"Number of thermal zones";
parameter String idfName="modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.idf"
parameter String idfName="modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus_24_2_0/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.idf"
"Name of the IDF file";
parameter String epwName="modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw"
"Name of the weather file";
Expand All @@ -32,13 +32,13 @@ model BuildingSpawnZ1
k=0)
"Latent heat gain"
annotation (Placement(transformation(extent={{-80,-10},{-60,10}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone zon(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone zon(
redeclare package Medium=Medium2,
zoneName="Core_ZN",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{40,-20},{80,20}})));
inner Buildings.ThermalZones.EnergyPlus_9_6_0.Building building(
inner Buildings.ThermalZones.EnergyPlus_24_2_0.Building building(
idfName=Modelica.Utilities.Files.loadResource(
idfName),
epwName=Modelica.Utilities.Files.loadResource(
Expand Down Expand Up @@ -176,5 +176,5 @@ First implementation.
graphics={
Bitmap(
extent={{-108,-100},{92,100}},
fileName="modelica://Buildings/Resources/Images/ThermalZones/EnergyPlus_9_6_0/EnergyPlusLogo.png")}));
fileName="modelica://Buildings/Resources/Images/ThermalZones/EnergyPlus/EnergyPlusLogo.png")}));
end BuildingSpawnZ1;
18 changes: 9 additions & 9 deletions Buildings/DHC/Loads/BaseClasses/BuildingSpawnZ6.mo
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ model BuildingSpawnZ6
nZon) ./ facMulTerUni
"Design cooling heat flow rate (single terminal unit)"
annotation (Dialog(group="Nominal condition"));
parameter String idfName="modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus_9_6_0/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.idf"
parameter String idfName="modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus_24_2_0/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.idf"
"Name of the IDF file";
parameter String epwName="modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw"
"Name of the weather file";
Expand Down Expand Up @@ -62,42 +62,42 @@ model BuildingSpawnZ6
k=0)
"Latent heat gain"
annotation (Placement(transformation(extent={{-60,64},{-40,84}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znAttic(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znAttic(
redeclare package Medium=Medium2,
zoneName="Attic")
"Thermal zone"
annotation (Placement(transformation(extent={{24,84},{64,124}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znCore_ZN(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znCore_ZN(
redeclare package Medium=Medium2,
zoneName="Core_ZN",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{24,42},{64,82}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znPerimeter_ZN_1(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znPerimeter_ZN_1(
redeclare package Medium=Medium2,
zoneName="Perimeter_ZN_1",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{24,0},{64,40}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znPerimeter_ZN_2(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znPerimeter_ZN_2(
redeclare package Medium=Medium2,
zoneName="Perimeter_ZN_2",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{24,-40},{64,0}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znPerimeter_ZN_3(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znPerimeter_ZN_3(
redeclare package Medium=Medium2,
zoneName="Perimeter_ZN_3",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{24,-80},{64,-40}})));
Buildings.ThermalZones.EnergyPlus_9_6_0.ThermalZone znPerimeter_ZN_4(
Buildings.ThermalZones.EnergyPlus_24_2_0.ThermalZone znPerimeter_ZN_4(
redeclare package Medium=Medium2,
zoneName="Perimeter_ZN_4",
nPorts=2)
"Thermal zone"
annotation (Placement(transformation(extent={{24,-120},{64,-80}})));
inner Buildings.ThermalZones.EnergyPlus_9_6_0.Building building(
inner Buildings.ThermalZones.EnergyPlus_24_2_0.Building building(
idfName=Modelica.Utilities.Files.loadResource(
idfName),
epwName=Modelica.Utilities.Files.loadResource(
Expand Down Expand Up @@ -280,5 +280,5 @@ First implementation.
graphics={
Bitmap(
extent={{-108,-100},{92,100}},
fileName="modelica://Buildings/Resources/Images/ThermalZones/EnergyPlus_9_6_0/EnergyPlusLogo.png")}));
fileName="modelica://Buildings/Resources/Images/ThermalZones/EnergyPlus/EnergyPlusLogo.png")}));
end BuildingSpawnZ6;
4 changes: 2 additions & 2 deletions Buildings/DHC/Loads/BaseClasses/Examples/CouplingSpawnZ6.mo
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ secondary pumps.
<p>
Simulation with Dymola requires minimum version 2020x and setting
<code>Hidden.AvoidDoubleComputation=true</code>, see
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_9_6_0.UsersGuide\">
Buildings.ThermalZones.EnergyPlus_9_6_0.UsersGuide</a>.
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_24_2_0.UsersGuide\">
Buildings.ThermalZones.EnergyPlus_24_2_0.UsersGuide</a>.
</p>
</html>",
revisions="<html>
Expand Down
16 changes: 8 additions & 8 deletions Buildings/Examples/VAVReheat/package.mo
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ for office buildings.
<h4>Note</h4>
<p>
The models
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice.ASHRAE2006Winter\">
Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice.ASHRAE2006Winter</a>
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice.ASHRAE2006Winter\">
Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice.ASHRAE2006Winter</a>
and
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice.Guideline36Winter\">
Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice.Guideline36Winter</a>
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice.Guideline36Winter\">
Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice.Guideline36Winter</a>
appear to be quite similar to
<a href=\"modelica://Buildings.Examples.VAVReheat.ASHRAE2006\">
Buildings.Examples.VAVReheat.ASHRAE2006</a>
Expand All @@ -25,8 +25,8 @@ Buildings.Examples.VAVReheat.Guideline36</a>,
respectively, because they all have the same HVAC system, control sequences,
and all have five thermal zones.
However, the models in
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice\">
Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice</a>
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice\">
Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice</a>
are from the
<i>DOE Commercial Reference Building,
Small Office, new construction, ASHRAE 90.1-2004,
Expand All @@ -39,8 +39,8 @@ are from the
Medium Office, new construction, ASHRAE 90.1-2004,
version 1.2_4.0</i>.
Therefore, the dimensions of the thermal zones in
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice\">
Buildings.ThermalZones.EnergyPlus_9_6_0.Examples.SmallOffice</a>
<a href=\"modelica://Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice\">
Buildings.ThermalZones.EnergyPlus_24_2_0.Examples.SmallOffice</a>
are considerably smaller than in
<a href=\"modelica://Buildings.Examples.VAVReheat\">
Buildings.Examples.VAVReheat</a>.
Expand Down
155 changes: 155 additions & 0 deletions Buildings/Resources/C-Sources/EnergyPlus_24_2_0_Wrapper.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#ifndef Spawn_declared
#define Spawn_declared

#include "EnergyPlus_24_2_0_Wrapper.h"

/* *********************************************************
Wrapper functions that connect to the library which
generates and loads the EnergyPlus fmu.
Note that ModelicaMessage, ModelicaError,
ModelicaFormatMessage and ModelicaFormatError are passed
as function pointers. These functions are provided by,
and may differ among, the Modelica environments.
Using function pointers allows the library to load the
correct version provided by the Modelica simulation
environment that compiles the Modelica model.
********************************************************* */

/* Custom implementation of ModelicaFormatMessage that prints to stdout
#define my_printf(...) MyModelicaFormatMessage(__VA_ARGS__)
void my_printf(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
fflush(stdout);
}
*/

void* allocate_Modelica_EnergyPlus_24_2_0(
const int objectType,
double startTime,
const char* modelicaNameBuilding,
const char* modelicaNameThermalZone,
const char* spawnExe,
const char* idfVersion,
const char* idfName,
const char* epwName,
int runPeriod_dayOfWeekForStartDay,
int runPeriod_applyWeekEndHolidayRule,
int runPeriod_use_weatherFileDaylightSavingPeriod,
int runPeriod_use_weatherFileHolidaysAndSpecialDays,
int runPeriod_use_weatherFileRainIndicators,
int runPeriod_use_weatherFileSnowIndicators,
double relativeSurfaceTolerance,
const char* epName,
int usePrecompiledFMU,
const char* fmuName,
const char* buildingsRootFileLocation,
const int logLevel,
const int printUnit,
const char* jsonName,
const char* jsonKeysValues,
const char** parOutNames,
const size_t nParOut,
const char** parOutUnits,
const size_t nParOutUni,
const char** inpNames,
const size_t nInp,
const char** inpUnits,
const size_t nInpUni,
const char** outNames,
const size_t nOut,
const char** outUnits,
const size_t nOutUni,
const int* derivatives_structure,
size_t k,
size_t n,
const double* derivatives_delta,
const size_t nDer){


runPeriod runPer;
runPer.dayOfWeekForStartDay = runPeriod_dayOfWeekForStartDay;
runPer.applyWeekEndHolidayRule = runPeriod_applyWeekEndHolidayRule;
runPer.use_weatherFileDaylightSavingPeriod = runPeriod_use_weatherFileDaylightSavingPeriod;
runPer.use_weatherFileHolidaysAndSpecialDays = runPeriod_use_weatherFileHolidaysAndSpecialDays;
runPer.use_weatherFileRainIndicators = runPeriod_use_weatherFileRainIndicators;
runPer.use_weatherFileSnowIndicators = runPeriod_use_weatherFileSnowIndicators;


return allocate_Spawn_EnergyPlus_24_2_0(
objectType,
startTime,
modelicaNameBuilding,
modelicaNameThermalZone,
spawnExe,
idfVersion,
idfName,
epwName,
&runPer,
relativeSurfaceTolerance,
epName,
usePrecompiledFMU,
fmuName,
buildingsRootFileLocation,
logLevel,
printUnit,
jsonName,
jsonKeysValues,
parOutNames,
nParOut,
parOutUnits,
nParOutUni,
inpNames,
nInp,
inpUnits,
nInpUni,
outNames,
nOut,
outUnits,
nOutUni,
derivatives_structure,
k, /* k = 2 in Modelica */
n,
derivatives_delta,
nDer,
ModelicaMessage,
ModelicaError,
ModelicaFormatMessage,
ModelicaFormatError);
}

void initialize_Modelica_EnergyPlus_24_2_0(
void* object,
double isSynchronized,
int *nObj){
initialize_Spawn_EnergyPlus_24_2_0(object, nObj);
}

void getParameters_Modelica_EnergyPlus_24_2_0(
void* object,
double isSynchronized,
double *parOut){
getParameters_Spawn_EnergyPlus_24_2_0(object, parOut);
}

void exchange_Modelica_EnergyPlus_24_2_0(
void* object,
const double* u,
double dummy,
double* y){

exchange_Spawn_EnergyPlus_24_2_0(
object,
0, /* Argument initialCall is hard-coded to false, and can be removed when binaries need to be recompiled. */
u,
y);
}

void free_Modelica_EnergyPlus_24_2_0(void* object){
free_Spawn_EnergyPlus_24_2_0(object);
}

#endif
96 changes: 96 additions & 0 deletions Buildings/Resources/C-Sources/EnergyPlus_24_2_0_Wrapper.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#ifndef EnergyPlus_24_2_0_Wrapper_h
#define EnergyPlus_24_2_0_Wrapper_h

#include <stdint.h>


/* Check for 64 bit */
/* Windows */
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

/* gcc */
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

#ifndef ENVIRONMENT64
#error Modelica Spawn coupling is only supported for Windows and Linux 64 bit. Your operating system is not 64 bit.
#endif

#include "ModelicaUtilities.h"

typedef struct {
int dayOfWeekForStartDay; /* Day of week from Buildings.ThermalZones.EnergyPlus_24_2_0.Types.WeekDays */
int applyWeekEndHolidayRule;
int use_weatherFileDaylightSavingPeriod;
int use_weatherFileHolidaysAndSpecialDays;
int use_weatherFileRainIndicators;
int use_weatherFileSnowIndicators;
} runPeriod;

/* ********************************************************* */
/* Thermal zone */
extern void* allocate_Spawn_EnergyPlus_24_2_0(
const int objectType,
double startTime,
const char* modelicaNameBuilding,
const char* modelicaNameThermalZone,
const char* spawnExe,
const char* idfVersion,
const char* idfName,
const char* epwName,
const runPeriod* runPer,
double relativeSurfaceTolerance,
const char* epName,
int usePrecompiledFMU,
const char* fmuName,
const char* buildingsRootFileLocation,
const int logLevel,
const int printUnit,
const char* jsonName,
const char* jsonKeysValues,
const char** parOutNames,
const size_t nParOut,
const char** parOutUnits,
const size_t nParOutUni,
const char** inpNames,
const size_t nInp,
const char** inpUnits,
const size_t nInpUni,
const char** outNames,
const size_t nOut,
const char** outUnits,
const size_t nOutUni,
const int* derivatives_structure,
const size_t k,
const size_t n,
const double* derivatives_delta,
const size_t nDer,
void (*SpawnMessage)(const char *string),
void (*SpawnError)(const char *string),
void (*SpawnFormatMessage)(const char *string, ...),
void (*SpawnFormatError)(const char *string, ...));

extern void initialize_Spawn_EnergyPlus_24_2_0(void* object, int *nObj);

extern void getParameters_Spawn_EnergyPlus_24_2_0(void* object, double *parOut);

extern void exchange_Spawn_EnergyPlus_24_2_0(
void* object,
int initialCall,
const double* u,
double* y);

extern void free_Spawn_EnergyPlus_24_2_0(void* object);

#endif
Loading

0 comments on commit 0881724

Please sign in to comment.