Types of energy system components
This chapter provides details on the parameters of energy system components, which can be used in the project input file. For a detailed description of the mathematical models, see the chapter on the component models.
The description of each component type includes a block with a number of attributes that describe the type and how it connects to other components by its input and output interfaces. An example of such a block:
Type name | BoundedSink |
File | energy_systems/general/bounded_sink.jl |
Available models | default |
System function | bounded_sink |
Medium | medium /None |
Input media | None /auto |
Output media | |
Tracked values | IN , Max_Energy , Losses |
The available models listed are subtypes to the implementation of a component, which each work slightly differently and might use different parameters. An example is the difference between a condensing gas boiler and a traditional one. Note: At the moment there is no argument for the model, as each component currently only has one implemented model. In the future this will be extended to include a default model (when no argument is provided) and additional optional models.
Of particular note are the descriptions of the medium (if it applies) of the component type and its input and output interfaces. The Medium
is used for components that could handle any type of medium and need to be configured to work with a specific medium. The attributes Input media
and Output media
describes which input and output interfaces the type provides and how the media of those can be configured. The syntax name:value
lists the name of the parameter in the input data that defines the medium first, followed by a forward slash and the default value of the medium second, if any. A value of None
implies that no default is set and therefore it must be given in the input data. A value of auto
implies that the value is determined with no required input, usually from the Medium
.
The Tracked values
attribute lists which values of the component can be tracked with the output specification in the input file (see this section for details). Note that a value of IN
or OUT
refers to all input or output interfaces of the component. Which these are can be infered from the input and output media attributes and the chosen medium names if they differ from the default values.
The description further lists which arguments the implementation takes. Let's take a look at an example:
Name | Type | R/D | Example | Description |
---|---|---|---|---|
max_power_profile_file_path |
String |
Y/N | profiles/district/max_power.prf |
Path to the max power profile. |
efficiency |
Float |
Y/Y | 0.8 | Ratio of output over input energies. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the heat output to a constant value. |
The name of the entries should match the keys in the input file, which is carried verbatim as entries to the dictionary argument of the component's constructor. The column R/D
lists if the argument is required (R
) and if it has a default value (D
). If the argument has a default value the example value given in the next column also lists what that default value is. Otherwise the example column shows what a value might look like.
The type refers to the type it is expected to have after being parsed by the JSON library. The type Temperature
is an internal structure and simply refers to either Float
or Nothing
, the null-type in Julia. In general, a temperature of Nothing
implies that any temperature is accepted and only the amount of energy is revelant. More restrictive number types are automatically cast to their superset, but not the other way around, e.g: . Dictionaries given in the {"key":value}
notation in JSON are parsed as Dict{String,Any}
.
Storage un-/loading
All components can be set to be dis-/allowed to un-/load storages to which they output or from which they draw energy. This only makes sense if an intermediary bus exists because direct connections to/from storages must always be allowed to transfer energy. Here are exemplary parameters for a BoundedSupply
:
{
"uac": "TST_SRC_01",
"type": "BoundedSupply",
"medium": "m_h_w_lt1",
...
"control_parameters": {
"load_storages m_h_w_lt1": false
}
}
This would result in the output of the source not being used to fill storages. The name of the load_storages medium
parameter must match the name of the medium of the input/output in question. The medium name m_h_w_lt1
is, in this case, derived from the parameter medium
. The medium name might also be set directly, for example with m_heat_in
for a HeatPump
.
Similarly, components can be configured to be dis-/allowed to draw energy from storages with the corresponding unload_storages medium
parameter. Any input/output not specified in this way is assumed to be allowed to un-/load storages.
Efficiency functions
Various components, particularly transformers, require an efficiency function to determine how much energy is produced from a given input and vice-versa. This is described in more detail in the chapter on general effects and traits. In the simplest case this can be a constant factor, such as a 1:1 ratio, however in the mathematical models of the components this can be almost any continuous function mapping a part-load ratio on [0,1] to an efficiency factor.
Because the efficiency must always be defined in relation on input or output of the component, the functionality supports this interface being defined as linear. This means that the amount of energy on this interface is strictly linear to the PLR multiplied with the design power. The other interfaces of the component are then calculated with efficiencies relative to this linear interface. Example: A fuel boiler defined with linear heat output would have a constant efficiency of 1.0 on the heat output and a different efficiency on the fuel input. If the conversion from fuel to heat is 90% efficient, this results in an efficiency factor of 1.1 on the fuel input.
For the configuration of components a selected number of different cases are implemented. If a function is known, but cannot be precisely modelled using one of these parameterised functions, it is possible to use a piece-wise linear approximation, which is also useful to model data-driven functions.
The definition of an efficiency function in the project file, for example a parameter efficiency_heat_out
, should look like this: <function_model>:<list_of_numbers>
with function_model
being a string (see below) and list_of_numbers
being a comma-seperated list of numbers with a period as decimal seperator and no thousands-seperator. The meaning of the numbers depends on the function model.
Three different function models are implemented:
- const: Takes one number and uses it as a constant efficiency factor. E.g.
const:0.9
. - poly: Takes a list of numbers and uses them as the coefficients of a polynomial with order n-1 where n is the length of coefficients. The list starts with coefficients of the highest order. E.g.
poly:0.5,2.0,0.1
means - pwlin: A piece-wise linear interpolation. Takes a list of numbers and uses them as support values for an even distribution of linear sections on the interval [0,1]. The PLR-values (on the x axis) are implicit with a step size equal to the inverse of the length of support values minus 1. The first and last support values are used as the values for a PLR of 0.0 and 1.0 respectively. E.g.
pwlin:0.6,0.8,0.9
means two sections of step size 0.5 with a value ofe(0.0)==0.6
,e(0.5)==0.8
,e(1.0)=0.9
and linear interpolation inbetween.
Because not all functions are (easily) invertible a numerical approximation of the inverse function is precalculated during initialisation. The size of the discretization step can be controlled with the parameter nr_discretization_steps
, which has a default value of 30 steps. It should not often be necessary to use a different value, but this can be beneficial to balance accuracy vs. performance. In particular if a piece-wise linear interpolation is used it makes sense to use the same number of discretization steps so that the support values overlap for both the efficiency function and its inverse.
Control modules
For a general overview of what control modules do and how they work, see this chapter. In the following the currently implemented control modules and their required parameters are listed.
Some parameters specify behaviour of multiple modules on the same component as well as other control behaviour of the component. As the control_modules
subconfig is a list and cannot hold parameters, these are specified in the control_parameters
subconfig. In addition to the storage un-/loading flags these general control parameters are:
aggregation_plr_limit | How the upper PLR limit is aggregated. Should be either max (take the maximum) or min (take the minimum). Defaults to max . |
aggregation_charge | How the charging flag is aggregated. Should be either all (all must be true ) or any (any one must be true ). Defaults to all . |
aggregation_discharge | How the discharging flag is aggregated. Should be either all (all must be true ) or any (any one must be true ). Defaults to all . |
Economical discharge
Handles the discharging of a battery to only be allowed if sufficient charge is available and a linked PV plant has available power below a given threshold. Mostly used for examplatory purposes.
Note: At the moment there is no mechanism to prevent the battery to be fully discharged in a single timestep. This will be changed in a future update.
This module is implemented for the following component types: Battery
name | Name of the module. Fixed value of economical_discharge |
pv_threshold | Treshold of the PV plant below which discharge is allowed. Absolute value in Wh. |
min_charge | The minimum charge level required for discharge to be allowed. Defaults to 0.2 . |
discharge_limit | The charge level to which the battery is discharged, below which discharge is stopped. Defaults to 0.05 |
pv_plant_uac | The UAC of the PV plant that is linked to the module. |
battery_uac | The UAC of the battery to which the module is attached. |
Profile limited
Sets the maximum PLR of a component to values from a profile. Used to set the operation of a component to a fixed schedule while allowing circumstances to override the schedule in favour of a lower PLR.
This module is implemented for the following component types: CHPP
, Electrolyser
, FuelBoiler
, HeatPump
name | Name of the module. Fixed value of profile_limited |
profile_path | File path to the profile with the limit values. Must be a .prf file. |
Storage-driven
Controls a component to only operate when the charge of a linked storage component falls below a certain threshold and keep operating until a certain higher threshold is reached and minimum operation time has passed. This is often used to avoid components switching on and off rapidly to keep a storage topped up, as realised systems often operate with this kind of hysteresis behaviour.
This module is implemented for the following component types: CHPP
, Electrolyser
, FuelBoiler
, HeatPump
name | Name of the module. Fixed value of storage_driven |
low_threshold | The storage charge threshold below which operation is turned on. Defaults to 0.2 . |
high_treshold | The storage charge threshold above which operation is turned off. Defaults to 0.95 . |
min_run_time | Minimum run time for the "on" state. Absolute value in seconds. Defaults to 1800 . |
storage_uac | The UAC of the storage component linked to the module. |
Boundary and connection components
General bounded sink
Type name | BoundedSink |
File | energy_systems/general/bounded_sink.jl |
Available models | default |
System function | bounded_sink |
Medium | medium /None |
Input media | None /auto |
Output media | |
Tracked values | IN , Max_Energy , Temperature |
Generalised implementation of a bounded sink.
Can be given a profile for the maximum power it can take in, which is scaled by the given scale factor. If the medium supports it, a temperature can be given, either as profile from a .prf file or from the ambient temperature of the project-wide weather file or a constant temperature can be set.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
max_power_profile_file_path |
String |
N/N | profiles/district/max_power.prf |
Path to the max power profile. |
constant_power |
Temperature |
N/N | 4000.0 | If given, sets the max power of the input to a constant value. |
scale |
Float |
N/Y | 1.0 | Factor by which the max power values are multiplied. Only applies to profiles. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the input temperature. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the input to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input to the ambient air temperature of the global weather file. |
Note that either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
(or none of them) should be given!
General bounded supply
Type name | BoundedSupply |
File | energy_systems/general/bounded_supply.jl |
Available models | default |
System function | bounded_source |
Medium | medium /None |
Input media | |
Output media | None /auto |
Tracked values | OUT , Max_Energy , Temperature |
Generalised implementation of a bounded source.
Can be given a profile for the maximum power it can provide, which is scaled by the given scale factor. If the medium supports it, a temperature can be given, either as profile from a .prf file or from the ambient temperature of the project-wide weather file or a constant temperature can be set.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
max_power_profile_file_path |
String |
N/N | profiles/district/max_power.prf |
Path to the max power profile. |
constant_power |
Temperature |
N/N | 4000.0 | If given, sets the max power of the output to a constant value. |
scale |
Float |
N/Y | 1.0 | Factor by which the max power values are multiplied. Only applies to profiles. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the output temperature. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the output to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input to the ambient air temperature of the global weather file. |
Note that either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
(or none of them) should be given!
Bus
Type name | Bus |
File | energy_systems/connections/bus.jl |
Available models | default |
System function | bus |
Medium | medium /None |
Input media | None /auto |
Output media | None /auto |
Tracked values | Balance , Transfer->UAC |
The only implementation of special component Bus
, used to connect multiple components with a shared medium.
Note that the tracked value Transfer->UAC
refers to an output value that corresponds to how much energy the bus has transfered to the bus with the given UAC.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
connections |
Dict{String,Any} |
N/N | Connection config for the bus. See chapter on the input file format for details. |
General fixed sink
Type name | FixedSink |
File | energy_systems/general/fixed_sink.jl |
Available models | default |
System function | fixed_sink |
Medium | medium /None |
Input media | None /auto |
Output media | |
Tracked values | IN , Demand , Temperature |
Generalised implementation of a fixed sink.
Can be given a profile for the energy it requests, which is scaled by the given scale factor. Alternatively a static load can be given. If the medium supports it, a temperature can be given, either as profile from a .prf file or from the ambient temperature of the project-wide weather file or a constant temperature can be set.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
energy_profile_file_path |
String |
N/N | profiles/district/demand.prf |
Path to the input energy profile. |
constant_demand |
Float |
N/N | 4000.0 | [power, not work!] If given, ignores the energy profile and sets the input demand to this constant power. |
scale |
Float |
N/Y | 1.0 | Factor by which the energy profile values are multiplied. Only applies to profiles. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the input temperature. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the input to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input to the ambient air temperature of the global weather file. |
Note that either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
(or none of them) should be given!
General demand
Type name | Demand |
File | energy_systems/general/fixed_sink.jl |
Alias to FixedSink . |
General fixed supply
Type name | FixedSupply |
File | energy_systems/general/fixed_supply.jl |
Available models | default |
System function | fixed_source |
Medium | medium /None |
Input media | |
Output media | None /auto |
Tracked values | OUT , Supply , Temperature |
Generalised implementation of a fixed source.
Can be given a profile for the energy it can provide, which is scaled by the given scale factor. If the medium supports it, a temperature can be given, either as profile from a .prf file or from the ambient temperature of the project-wide weather file or a constant temperature can be set.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
energy_profile_file_path |
String |
N/N | profiles/district/energy_source.prf |
Path to the output energy profile. |
constant_supply |
Float |
N/N | 4000.0 | [power, not work!] If given, ignores the energy profile and sets the output supply to this constant power. |
scale |
Float |
N/Y | 1.0 | Factor by which the energy profile values are multiplied. Only applies to profiles. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the output temperature. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the output to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input to the ambient air temperature of the global weather file. |
Note that either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
(or none of them) should be given!
Grid connection
Type name | GridConnection |
File | energy_systems/connections/grid_connection.jl |
Available models | default |
System function | bounded_source , bounded_sink |
Medium | medium /None |
Input media | None /auto |
Output media | None /auto |
Tracked values | IN , OUT , Input_sum , Output_sum , Temperature |
Used as a source or sink with no limit, which receives or gives off energy from/to outside the system boundary. Optionally, temperatures can be taken into account (constant, from profile or from weather file).
If parameter is_source
is true, acts as a bounded_source
with only one output connection. Otherwise a bounded_sink
with only one input connection. In both cases the amount of energy supplied/taken in is tracked as a cumulutative value.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
is_source |
Boolean |
Y/Y | True |
If true, the grid connection acts as a source. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the input temperature. |
constant_temperature |
Temperature |
N/N | 12.0 | If given, sets the temperature of the input (or output) to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input (or output) to the ambient air temperature of the global weather file. |
Note that either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
(or none of them) should be given!
Other sources and sinks
Photovoltaic plant
Type name | PVPlant |
File | energy_systems/electric_producers/pv_plant.jl |
Available models | default: simplified |
System function | fixed_source |
Medium | |
Input media | |
Output media | m_el_out /m_e_ac_230v |
Tracked values | OUT , Supply |
A photovoltaic (PV) power plant producing electricity.
The energy it produces in each time step must be given as a profile, but can be scaled by a fixed value.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
energy_profile_file_path |
String |
Y/N | profiles/district/pv_output.prf |
Path to the output energy profile. |
scale |
Float |
Y/N | 4000.0 | Factor by which the profile values are multiplied. |
Transformers
Combined Heat and Power plant
Type name | CHPP |
File | energy_systems/electric_producers/chpp.jl |
Available models | default: simplified |
System function | transformer |
Medium | |
Input media | m_gas_in /m_c_g_natgas |
Output media | m_heat_out /m_h_w_ht1 , m_el_out /m_e_ac_230v |
Tracked values | IN , OUT , Losses |
A Combined Heat and Power Plant (CHPP) that transforms fuel into heat and electricity.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
power_el |
Float |
Y/N | 4000.0 | The design power of electrical output. |
min_power_fraction |
Float |
Y/Y | 0.2 | The minimum fraction of the design power that is required for the plant to run. |
min_run_time |
UInt |
Y/Y | 1800 | Minimum run time of the plant in seconds. Will be ignored if other constraints apply. |
output_temperature |
Temperature |
N/N | 90.0 | The temperature of the heat output. |
efficiency_fuel_in |
String |
Y/Y | const:1.0 |
See description of efficiency functions. |
efficiency_el_out |
String |
Y/Y | pwlin:0.01,0.17,0.25,0.31,0.35,0.37,0.38,0.38,0.38 |
See description of efficiency functions. |
efficiency_heat_out |
String |
Y/Y | pwlin:0.8,0.69,0.63,0.58,0.55,0.52,0.5,0.49,0.49 |
See description of efficiency functions. |
linear_interface |
String |
Y/Y | fuel_in |
See description of efficiency functions. |
nr_discretization_steps |
UInt |
Y/Y | 8 |
See description of efficiency functions. |
Electrolyser
Type name | Electrolyser |
File | energy_systems/others/electrolyser.jl |
Available models | default: simplified |
System function | transformer |
Medium | |
Input media | m_el_in /m_e_ac_230v |
Output media | m_heat_ht_out /m_h_w_ht1 , m_heat_lt_out /m_h_w_lt1 , m_h2_out /m_c_g_h2 , m_o2_out /m_c_g_o2 |
Tracked values | IN , OUT , Losses , Losses_heat , Losses_hydrogen |
Implementation of an electrolyser splitting pute water into hydrogen and oxygen while providing the waste heat as output.
If parameter heat_lt_is_usable
is false, the output interface m_heat_lt_out
is not set and does not require to be connected to another component or bus. The energy that is calculated to be put out on this interface is then added to Losses_heat
instead.
Dispatch strategies:
all_equal
: This spreads the load evenly across all units. This is a simplified model that ignoresmin_power_fraction
.equal_with_mpf
: Same as an equal distribution, however if the total PLR is lower thanmin_power_fraction
, then a number of units are activated at a calculated PLR to ensure the minimum restriction is observed and the demand is met.try_optimal
: Attempts to activate a number of units close to their optimal PLR to meet the demand. If no optimal solution exists, typically at very low PLR or close to the nominal power, falls back to activating only one or all units.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
power_el |
Float |
Y/N | 4000.0 | The maximum electrical design power input. |
nr_switchable_units |
UInt |
Y/Y | 1 | The number of units that can be switched on/off to meet demand. |
dispatch_strategy |
String |
Y/Y | equal_with_mpf |
The dispatch strategy to be used to switch on/off units. |
min_power_fraction |
Float |
Y/Y | 0.4 | The minimum PLR that is required for one unit of the electrolyser to run. |
min_power_fraction_total |
Float |
Y/Y | 0.2 | The minimum PLR that is required for the whole plant to run. |
optimal_unit_plr |
Float |
Y/Y | 0.65 | The optimal PLR for each unit at which hydrogen production is most efficient. Only required if dispatch strategy try_optimal is used. |
min_run_time |
UInt |
Y/Y | 3600 | Minimum run time of the plant in seconds. Will be ignored if other constraints apply. |
heat_lt_is_usable |
Bool |
Y/Y | false | Toggle if the low temperature heat output is usable. |
output_temperature_ht |
Temperature |
Y/Y | 55.0 | The temperature of the high temperature heat output. |
output_temperature_lt |
Temperature |
Y/Y | 25.0 | The temperature of the low temperature heat output. |
linear_interface |
String |
Y/Y | el_in |
See description of efficiency functions. |
efficiency_el_in |
String |
Y/Y | const:1.0 |
See description of efficiency functions. |
efficiency_heat_ht_out |
String |
Y/Y | const:0.15 |
See description of efficiency functions. |
efficiency_heat_lt_out |
String |
Y/Y | const:0.07 |
See description of efficiency functions. |
efficiency_h2_out |
String |
Y/Y | const:0.57 |
See description of efficiency functions. |
efficiency_h2_out_lossless |
String |
Y/Y | const:0.6 |
See description of efficiency functions. |
efficiency_o2_out |
String |
Y/Y | const:0.6 |
See description of efficiency functions. |
nr_discretization_steps |
UInt |
Y/Y | 1 |
See description of efficiency functions. |
Fuel boiler
Type name | FuelBoiler |
File | energy_systems/heat_producers/fuel_boiler.jl |
Available models | default: simplified |
System function | transformer |
Medium | |
Input media | m_fuel_in |
Output media | m_heat_out /m_h_w_ht1 |
Tracked values | IN , OUT , Losses |
A boiler that transforms chemical fuel into heat.
This needs to be parameterized with the medium of the fuel intake as the implementation is agnostic towards the kind of fuel under the assumption that the fuel does not influence the behaviour or require/produce by-products such as pure oxygen or ash (more to the point, the by-products do not need to be modelled for an energy simulation.)
Name | Type | R/D | Example | Description |
---|---|---|---|---|
m_fuel_in |
String |
Y/N | m_c_g_natgas |
The medium of the fuel intake. |
power_th |
Float |
Y/N | 4000.0 | The maximum thermal design power output. |
min_power_fraction |
Float |
Y/Y | 0.1 | The minimum fraction of the design power_th that is required for the plant to run. |
min_run_time |
UInt |
Y/Y | 0 | Minimum run time of the plant in seconds. Will be ignored if other constraints apply. |
output_temperature |
Temperature |
N/N | 90.0 | The temperature of the heat output. |
efficiency_fuel_in |
String |
Y/Y | const:1.1 |
See description of efficiency functions. |
efficiency_heat_out |
String |
Y/Y | const:1.0 |
See description of efficiency functions. |
linear_interface |
String |
Y/Y | heat_out |
See description of efficiency functions. |
nr_discretization_steps |
UInt |
Y/Y | 30 |
See description of efficiency functions. |
Heat pump
Type name | HeatPump |
File | energy_systems/heat_producers/heat_pump.jl |
Available models | default: carnot |
System function | transformer |
Medium | |
Input media | m_el_in /m_e_ac_230v , m_heat_in /m_h_w_lt1 |
Output media | m_heat_out /m_h_w_ht1 |
Tracked values | IN , OUT , COP , Losses , MixingTemperature_Input , MixingTemperature_Output |
Elevates supplied low temperature heat to a higher temperature with input electricity.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
power_th |
Float |
Y/N | 4000.0 | The thermal design power at the heating output. |
min_power_fraction |
Float |
Y/Y | 0.2 | The minimum fraction of the design power_th that is required for the plant to run. |
min_run_time |
UInt |
Y/Y | 1800 | Minimum run time of the plant in seconds. Will be ignored if other constraints apply. |
constant_cop |
Float |
N/N | 3.0 | If given, ignores the dynamic COP calculation and uses a constant value. |
input_temperature |
Temperature |
N/N | 20.0 | If given, ignores the supplied temperature and uses a constant one. |
output_temperature |
Temperature |
N/N | 65.0 | If given, ignores the requested temperature and uses a constant one. |
Storage
General storage
Type name | Storage |
File | energy_systems/general/storage.jl |
Available models | default: simplified |
System function | storage |
Medium | medium /None |
Input media | None /auto |
Output media | None /auto |
Tracked values | IN , OUT , Load , Load% , Capacity , Losses |
A generic implementation for energy storage technologies.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
capacity |
Float |
Y/N | 12000.0 | The overall capacity of the storage. |
load |
Float |
Y/N | 6000.0 | The initial load state of the storage. |
Battery
Type name | Battery |
File | energy_systems/storage/battery.jl |
Available models | default: simplified |
System function | storage |
Medium | medium /m_e_ac_230v |
Input media | None /auto |
Output media | None /auto |
Tracked values | IN , OUT , Load , Load% , Capacity , Losses |
A storage for electricity.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
capacity |
Float |
Y/N | 12000.0 | The overall capacity of the battery. |
load |
Float |
Y/N | 6000.0 | The initial load state of the battery. |
Buffer Tank
Type name | BufferTank |
File | energy_systems/storage/buffer_tank.jl |
Available models | default: simplified |
System function | storage |
Medium | medium /m_h_w_ht1 |
Input media | None /auto |
Output media | None /auto |
Tracked values | IN , OUT , Load , Load% , Capacity , Losses , CurrentMaxOutTemp |
A short-term storage for heat of thermal carrier fluids, typically water.
Model simplified
:
If the adaptive temperature calculation is activated, the temperatures for the input/output of the BT depends on the load state. If it is sufficiently full (depends on the switch_point
), the BT can output at the high_temperature
and takes in at the high_temperature
. If the load falls below that, the output temperature drops and reaches the low_temperature
as the load approaches zero.
If the adaptive temperature calculation is deactivated, always assumes the high_temperature
for both input and output.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
capacity |
Float |
Y/N | 12000.0 | The overall capacity of the BT. |
load |
Float |
Y/N | 6000.0 | The initial load state of the BT. |
use_adaptive_temperature |
Float |
Y/Y | False |
If true, enables the adaptive output temperature calculation. |
switch_point |
Float |
Y/Y | 0.15 | Partial load at which the adaptive output temperature calculation switches. |
high_temperature |
Temperature |
Y/Y | 75.0 | The high end of the adaptive in-/output temperature. |
low_temperature |
Temperature |
Y/Y | 20.0 | The low end of the adaptive in-/output temperature. |
Seasonal thermal storage
Type name | SeasonalThermalStorage |
File | energy_systems/storage/seasonal_thermal_storage.jl |
Available models | default: simplified |
System function | storage |
Medium | |
Input media | m_heat_in /m_h_w_ht1 |
Output media | m_heat_out /m_h_w_lt1 |
Tracked values | IN , OUT , Load , Load% , Capacity , Losses |
A long-term storage for heat stored in a stratified artificial aquifer.
Model simplified
:
If the adaptive temperature calculation is activated, the temperatures for the input/output of the STES depends on the load state. If it is sufficiently full (depends on the switch_point
), the STES can output at the high_temperature
and takes in at the high_temperature
. If the load falls below that, the output temperature drops and reaches the low_temperature
as the load approaches zero.
If the adaptive temperature calculation is deactivated, always assumes the high_temperature
for both input and output.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
capacity |
Float |
Y/N | 12000.0 | The overall capacity of the STES. |
load |
Float |
Y/N | 6000.0 | The initial load state of the STES. |
use_adaptive_temperature |
Float |
Y/Y | False |
If true, enables the adaptive output temperature calculation. |
switch_point |
Float |
Y/Y | 0.25 | Partial load at which the adaptive output temperature calculation switches. |
high_temperature |
Temperature |
Y/Y | 90.0 | The high end of the adaptive in-/output temperature. |
low_temperature |
Temperature |
Y/Y | 15.0 | The low end of the adaptive in-/output temperature. |
Heat sources and sinks
Generic heat source
Type name | GenericHeatSource |
File | energy_systems/heat_sources/generic_heat_source.jl |
Available models | simplified (default) |
System function | bounded_source |
Medium | medium /None |
Input media | |
Output media | None /auto |
Tracked values | OUT , Max_Energy , Temperature_src_in , Temperature_snk_out |
A generic heat source for various sources of heat.
Can be given a profile for the maximum power it can provide, which is scaled by the given scale factor. For the temperature either temperature_profile_file_path
, constant_temperature
or temperature_from_global_file
must be given! The given temperature is considered the input source temperature and an optional reduction is applied (compare with model description). If the lmtd
model is used and no min/max temperatures are given, tries to read them from the given profile.
Name | Type | R/D | Example | Description |
---|---|---|---|---|
max_power_profile_file_path |
String |
N/N | profiles/district/max_power.prf |
Path to the max power profile. |
constant_power |
Temperature |
N/N | 4000.0 | If given, sets the max power of the input to a constant value. |
scale |
Float |
N/Y | 1.0 | Factor by which the max power values are multiplied. Only applies to profiles. |
temperature_profile_file_path |
String |
N/N | profiles/district/temperature.prf |
Path to the profile for the input temperature. |
constant_temperature |
Temperature |
N/N | 65.0 | If given, sets the temperature of the input to a constant value. |
temperature_from_global_file |
String |
N/N | temp_ambient_air |
If given, sets the temperature of the input to the ambient air temperature of the global weather file. |
temperature_reduction_model |
String |
Y/Y | none |
Which temperature reduction model is used. Should be one of: none , constant , lmtd |
min_source_in_temperature |
Float |
N/N | -10.0 | Minimum source input temperature. |
max_source_in_temperature |
Float |
N/N | 40.0 | Maximum source input temperature. |
minimal_reduction |
Float |
N/Y | 2.0 | Minimal reduction temperature. For the constant model this exact value is used, for lmtd a slight correction is applied. |
Examplary input file definition
"TST_SRC_01": {
"type": "GenericHeatSource",
"medium": "m_h_w_lt1",
"control_refs": [],
"output_refs": [
"TST_BUS_TH_01"
],
"max_power_profile_file_path": "./profiles/tests/source_heat_max_power.prf",
"temperature_profile_file_path": "./profiles/examples/general/src_heat_temp_var_avg25.prf",
"temperature_reduction_model": "lmtd",
"min_source_in_temperature": 5,
"max_source_in_temperature": 35,
"scale": 2000
}
Geothermal probes
Type name | GeothermalProbes |
File | energy_systems/heat_sources/geothermal_probes.jl |
Available models | simplified (default), detailed |
System function | storage |
Medium | |
Input media | m_heat_in /m_h_w_ht1 |
Output media | m_heat_out /m_h_w_lt1 |
Tracked values | IN , OUT , new_fluid_temperature , current_output_temperature , current_input_temperature , fluid_reynolds_number |
A model of a geothermal probe field or a single geothermal probe. Two models are available, one detailed
and a simplified
version that uses a constant user-defined thermal borehole resistance. This avoids the need of defining 11 additional parameters.
Model simplified
:
The geothermal probe is modeled using precalculated g-functions. The model needs quite many input parameters. Especially the soil properties, including the undisturbed ground temperature, have a significant effect on the results. Therefore is it crucial to know the soil conditions at the investigated site.
The g-function can be either imported from a text file or can be taken from the library provided within the repository. There are different configurations available: rectangle, open_rectangle, zoned_rectangle, U_configurations, lopsided_U_configuration, C_configuration, L_configuration. Each of them can be specified by the number of probes in x and y direction (note that the number of probes defined for x has to be less or equal the number of probes defined for y). Some of the configurations, like zoned rectangles, require an additional key, that is specified in the documentation of the library in detail, available here within the publication doi.org/10.15121/1811518.
A short overview of the included configurations is given in the following. Note that not all configurations are available. Check the documentation linked above or the included text files that contain all possible key combinations for the different probe field configurations. To import a g-function from another source, see the description below.
rectangle
Here, only number_of_probes_x
and number_of_probes_y
are required. They define the number of rows in x and y direction, while y >= x. The rectangle that is defined with these two parameters is filled completely with probes.
Example: o o o o o o o o o o o o
number_of_probes_x = 3
number_of_probes_y = 4
key_2 = ""
open_rectangle
Here, number_of_probes_x
and number_of_probes_y
define a probe field as for a normal rectangle. This rectangle is not filled, instead key_2
defines the number of outer rows that should be considered. This allows for the creation of a single-row rectangle, or a rectangle field that has a "hole" in the middle.
Example: o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
number_of_probes_x = 5
number_of_probes_y = 7
key_2 = "2"
zoned_rectangle
Here, number_of_probes_x
and number_of_probes_y
define an unfilled rectangle with only one row of probes (like an open rectancle with key_2 = 1
). For zoned rectangles, key_2
then defines the shape of the inner assembly of probes forming a rectangle, which can be "1_3" (as "x_y") for an inner set of 1x3 probes, located inside of the outer ring.
Example: o o o o o o o o o o o o o o o o o o o o o o o
number_of_probes_x = 5
number_of_probes_y = 7
key_2 = "1_3"
U_configurations
Here, number_of_probes_x
and number_of_probes_y
define the number of probes forming a single-row rectangle that is left open at the top end. The key_2
then defines the number of rows that are forming this U-shape.
Example: o o o o o o o o o o o o o o o o o o o o o o
number_of_probes_x = 5
number_of_probes_y = 5
key_2 = "2"
lopsided_U_configuration
Lopsided U is an U-configuration with some probes missing at the top right corner. This is only available as single-row U. The keys number_of_probes_x
and number_of_probes_y
define the general shape of the U, while key_2
then represents the number of removed probes from the top right corner at the right side of the U.
Example: o o o o o o o o o o o o o
number_of_probes_x = 5
number_of_probes_y = 6
key_2 = "2"
C_configuration
C-configurations are only available as single-row C-shapes, where the C is turned 90° anti-clockwise. A C-shape is like an U-shape with some more probes at the top row attempting to close the U to form an open rectangle. number_of_probes_x
and number_of_probes_y
define the number of probes forming an unfilled single-row rectangle, while key_2
defines the number of probes that are removed from the top end of the rectangle. If possible, they are removed symmetrically starting from the center. If that is not possible due to an uneven number, the single leftover probe is removed at the left side.
Example: o o o o o o o o o o o o o o o o o o
number_of_probes_x = 6
number_of_probes_y = 6
key_2 = "2"
L_configuration
L-configurations are currently only available as single-row L shapes. They are defined like rectangles, but the probe field then only contains a L with a single row that is not filled with other probes.
Example: o o o o o o o
number_of_probes_x = 3
number_of_probes_y = 5
key_2 = ""
Import g-function from txt-file
A custom g-function for a specific probe field with specific soil conditions can be calculated e.g. using the python package pygfunction and imported as a text file to ReSiE.
The file needs to have the following structure (without the notes):
comment1 // comments can be given without limitation
number_of_probes: 42 // required variable
*** // start of data has to be specified with three stars
-8.84569; 1.07147
-7.90838; 1.38002
-7.24323; 1.65958
-6.68104; 1.99430
-6.16948; 2.28428
-5.68586; 2.62013
-5.21865; 2.90993
-4.76141; 3.01677
...
The first column has to hold the normalized logarithmic time, with as the steady-state time defined by Eskilson.
The second column, separatey by a semicolon, holds the g-function values. Note that the number of probes has to be given as well in the header of the file. An example file can be found here.
If a g_function_file_path
is specified, the following parameters are not used within ReSie: probe_field_geometry
, number_of_probes_x
, number_of_probes_y
, probe_field_key_2
, borehole_spacing
, soil_density
, soil_specific_heat_capacity
.
General parameter
Name | Type | R/D | Example | Unit | Description |
---|---|---|---|---|---|
model_type |
String |
Y/Y | simplified |
[-] | Type of probe model: "simplified" with constant or "detailed" with calculated thermal borehole resistance in every time step. |
max_input_power |
Float |
Y/Y | 50 | [W/m_probe] | maximum input power per probe meter |
max_output_power |
Float |
Y/Y | 50 | [W/m_probe] | maximum output power per probe meter |
regeneration |
Bool |
Y/Y | true | [-] | flag if regeneration should be taken into account |
max_probe_temperature_loading |
Float |
N/N | 50 | [°C] | maximum temperature allowed for regeneration |
min_probe_temperature_unloading |
Float |
N/N | 6 | [°C] | minimum temperature allowed for unloading |
probe_depth |
Float |
Y/Y | 150 | [m] | depth (or length) of a single geothermal probe. Has to be between 24 m and 384 m. |
borehole_diameter |
Float |
Y/Y | 0.15 | [m] | borehole diameter |
loading_temperature |
Temperature |
N/Y | nothing | [°C] | nominal high temperature for loading geothermal probe storage, can also be set from other end of interface |
loading_temperature_spread |
Float |
Y/Y | 3 | [K] | temperature spread between forward and return flow during loading |
unloading_temperature_spread |
Float |
Y/Y | 3 | [K] | temperature spread between forward and return flow during unloading |
soil_undisturbed_ground_temperature |
Float |
Y/Y | 11 | [°C] | undisturbed ground temperature as average over the depth of the probe, considered as constant over time |
boreholewall_start_temperature |
Float |
Y/Y | 4 | [°C] | borehole wall starting temperature |
Parameter for simple model only
Name | Type | R/D | Example | Unit | Description |
---|---|---|---|---|---|
borehole_thermal_resistance |
Float |
Y/Y | 0.1 | [(Km)/W] | thermal resistance of borehole (constant, if not calculated from other parameters in every time step!) |
Parameter to get g-function from the included library
Name | Type | R/D | Example | Unit | Description |
---|---|---|---|---|---|
probe_field_geometry |
String |
Y/Y | rectangle |
[-] | type of probe field geometry, can be one of: rectangle, open_rectangle, zoned_rectangle, U_configurations, lopsided_U_configuration, C_configuration, L_configuration |
number_of_probes_x |
Int |
Y/Y | 1 | [-] | number of probes in x direction, corresponds to value of g-function library. Note that number_of_probes_x <= number_of_probes_y! |
number_of_probes_y |
Int |
Y/Y | 1 | [-] | number of probes in y direction, corresponds to value of g-function library. Note that number_of_probes_x <= number_of_probes_y! |
probe_field_key_2 |
String |
Y/Y | "" | [-] | key2 of g-function library. Can also be "" if none is needed. The value depends on the chosen library type. |
borehole_spacing |
Float |
Y/Y | 5 | [m] | distance between boreholes in the field, assumed to be constant. Set average spacing. |
soil_density |
Float |
Y/Y | 2000 | [kg/m^3] | soil density |
soil_specific_heat_capacity |
Float |
Y/Y | 2400 | [J/(kgK)] | soil specific heat capacity |
soil_heat_conductivity |
Float |
Y/Y | 1.5 | [W/(Km)] | heat conductivity of surrounding soil, homogenous and constant |
Externally importing g-function from a file
Name | Type | R/D | Example | Unit | Description |
---|---|---|---|---|---|
g_function_file_path |
String |
Y/N | "path/to/file.txt" | [-] | absolute or relative path to a txt file containing an externally calculated g-function |
Model detailed
:
The detailed model uses extended parameters to determine the thermal borehole resistance from the fluid to the soil. Therefore, an approach by Hellström (1991) is used to determine the effective thermal borehole resistance using the convective heat transfer coefficient within the pipe. For that, the Reynolds number is calculated in every timestep to determine the heat transmission from fluid to the pipe. The heat conductivity of the pipe and the grout has to be given. The heat transmission from pipe to grout and grout to soil is neglected.
To perform this calculation in every timestep, the following input parameters are required additionally to the ones of the simplified model, while the borehole_thermal_resistance
is not needed anymore:
Name | Type | R/D | Example | Unit | Description |
---|---|---|---|---|---|
probe_type |
Int |
Y/Y | 2 | [-] | probe type: 1: single U-pipe in one probe, 2: double U-pipe in one probe |
pipe_diameter_outer |
Float |
Y/Y | 0.032 | [m] | outer pipe diameter |
pipe_diameter_inner |
Float |
Y/Y | 0.026 | [m] | inner pipe diameter |
pipe_heat_conductivity |
Float |
Y/Y | 0.42 | [W/(Km)] | heat conductivity of inner pipes |
shank_spacing |
Float |
Y/Y | 0.1 | [m] | distance between inner pipes in borehole, diagonal through borehole center. required for calculation of thermal borehole resistance. |
fluid_specific_heat_capacity |
Float |
Y/Y | 3800 | [J/(kgK)] | specific heat capacity of brine at 0 °C (25 % glycol 75 % water) |
fluid_density |
Float |
Y/Y | 1045 | [kg/m^3] | density of brine at 0 °C (25 % glycol 75 % water) |
fluid_kinematic_viscosity |
Float |
Y/Y | 3.9e-6 | [m^2/s] | kinematic viscosity of brine at 0 °C (25 % glycol 75 % water) |
fluid_heat_conductivity |
Float |
Y/Y | 0.5 | [W/(Km)] | heat conductivity of brine at 0 °C (25 % glycol 75 % water) |
fluid_prandtl_number |
Float |
Y/Y | 30 | [-] | Prandtl-number of brine at 0 °C (25 % glycol 75 % water) |
grout_heat_conductivity |
Float |
Y/Y | 2.0 | [W/(Km)] | heat conductivity of grout (filling material) |
soil_heat_conductivity |
Float |
Y/Y | 1.5 | [W/(Km)] | heat conductivity of surrounding soil, homogenous and constant |
Examplary input file definition for geothermal probe:
"TST_GTP_01": {
"type": "GeothermalProbes",
"m_heat_out": "m_h_w_lt1",
"control_refs": [],
"output_refs": [
"TST_HP_01"
],
"model_type": "detailed",
"___GENERAL PARAMETER___": "",
"max_input_power": 150,
"max_output_power": 150,
"regeneration": true,
"max_probe_temperature_loading": 45,
"min_probe_temperature_unloading": 6,
"probe_depth": 150,
"borehole_diameter": 0.16,
"loading_temperature_spread": 4,
"unloading_temperature_spread": 1.5,
"soil_undisturbed_ground_temperature": 13,
"boreholewall_start_temperature": 13,
"___G-FUNCTION FROM LIBRARY___": "",
"probe_field_geometry": "rectangle",
"number_of_probes_x": 3,
"number_of_probes_y": 12,
"probe_field_key_2": "",
"borehole_spacing": 8,
"soil_density": 1800,
"soil_specific_heat_capacity": 2400,
"soil_heat_conductivity": 1.6 , // also needed for detailed model
"___SIMPLIFIED MODEL___": "",
"borehole_thermal_resistance": 0.1,
"___DETAILED MODEL___": "",
"probe_type": 2,
"pipe_diameter_outer": 0.032,
"pipe_diameter_inner": 0.0262,
"pipe_heat_conductivity": 0.42,
"shank_spacing": 0.1,
"fluid_specific_heat_capacity": 3795,
"fluid_density": 1052,
"fluid_kinematic_viscosity": 3.9e-6,
"fluid_heat_conductivity": 0.48,
"fluid_prandtl_number": 31.3,
"grout_heat_conductivity": 2
}