Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Release notes

## Version 0.6.0 (2025-12-15)

### Bugfix

* Added missing descriptive names for the variables `emissions_link`, `link_opex_var`, `link_opex_fixed` and `emissions_trans`.

### Enhancements

* Enabled exporting topo axis to bmp, tif, tiff, jpg, jpeg, and png file format.
* Enable custom boundary background map instead of the default coastlines (through a `.geojson` file location provided by the keyword argument `map_boundary_file` in the `GUI`-function).

### Adjustments

* Adjusted `descriptive_names` to be more robust to available packages. Introduced module names as intermediate `Dict`s in the `structures` field of `descriptive_names` (this is a breaking change).

## Version 0.5.18 (2025-11-24)

### Bugfix
Expand Down
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "EnergyModelsGUI"
uuid = "737a7361-d3b7-40e9-b1ac-59bee4c5ea2d"
version = "0.5.18"
authors = ["Jon Vegard Venås <JonVegard.Venas@sintef.no>", "Magnus Askeland <Magnus.Askeland@sintef.no>", "Shweta Tiwari <Shweta.Tiwari@sintef.no>"]
version = "0.6.0"
authors = ["Jon Vegard Venås <JonVegard.Venas@sintef.no>", "Dimitri Pinel <Dimitri.Pinel@sintef.no>", "Magnus Askeland <Magnus.Askeland@sintef.no>", "Shweta Tiwari <Shweta.Tiwari@sintef.no>"]

[deps]
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
Expand Down Expand Up @@ -41,7 +41,7 @@ Colors = "0.13"
DataFrames = "1"
Dates = "1"
EnergyModelsBase = "0.9"
EnergyModelsGeography = "0.11"
EnergyModelsGeography = "0.11.3"
EnergyModelsInvestments = "0.8"
FileIO = "1"
GLMakie = "0.13"
Expand Down
2 changes: 2 additions & 0 deletions docs/src/library/public.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ GUI
save_results
set_colors
set_icons
create_descriptive_names
get_descriptive_names
```
2 changes: 0 additions & 2 deletions examples/generate_examples.jl
Original file line number Diff line number Diff line change
Expand Up @@ -483,8 +483,6 @@ function get_sub_system_data(
Dict(CO2 => 1, Power => 0.02), # Input resource with input ratio
# Line above: This implies that storing CO2 requires Power
Dict(CO2 => 1), # Output from the node with output ratio
# In practice, for CO₂ storage, this is never used.
Data[],
),
RefSink(
j + 7, # Node id
Expand Down
1 change: 1 addition & 0 deletions src/EnergyModelsGUI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,6 @@ export EnergySystemDesign
export set_colors
export set_icons
export save_results
export create_descriptive_names, get_descriptive_names

end # module
249 changes: 120 additions & 129 deletions src/descriptive_names.yml
Original file line number Diff line number Diff line change
@@ -1,132 +1,122 @@
# This file contains description of EMX element fields (and potential sub-fields) and variables
# with fields of type TimeStruct.TimeProfile
# with fields of type TimeStruct.TimeProfile and fields that cannot be inherited
# from supertypes.
structures:
# EnergyModelsBase
## node.jl
AbstractStorageParameters:
capacity: "Installed capacity"
opex_var: "Relative variable operating expense per energy unit"
opex_fixed: "Relative fixed operating expense per installed capacity"

Node:
cap: "Installed capacity"
opex_var: "Relative variable operating expense per energy unit produced"
opex_fixed: "Relative fixed operating expense per installed capacity"

Sink:
cap: "Demand"
penalty:
surplus: "Penalties for surplus"
deficit: "Penalties for deficits"

# EnergyModelsGeography
## mode.jl
TransmissionMode:
trans_cap: "Capacity of the transmission mode"
trans_loss: "Relative loss of the transported resource during transmission"
opex_var: "Relative variable operating expense per energy unit transported"
opex_fixed: "Relative fixed operating expense per installed capacity"
consumption_rate: "Rate at which the resource is consumed, as a ratio of the volume of the resource going into the inlet"

# EnergyModelsInvestment
EnergyModelsBase:
## node.jl
AbstractStorageParameters:
capacity: "Installed capacity"
opex_var: "Relative variable operating expense per energy unit"
opex_fixed: "Relative fixed operating expense per installed capacity"

Node:
cap: "Installed capacity"
opex_var: "Relative variable operating expense per energy unit produced"
opex_fixed: "Relative fixed operating expense per installed capacity"

Sink:
cap: "Demand"
penalty:
surplus: "Penalties for surplus"
deficit: "Penalties for deficits"

## data.jl
EmissionsData:
emissions: "The process emissions per capacity usage through the variable `:cap_use`"

EnergyModelsGeography:
TransmissionMode:
## mode.jl
trans_cap: "Capacity of the transmission mode"
trans_loss: "Relative loss of the transported resource during transmission"
opex_var: "Relative variable operating expense per energy unit transported"
opex_fixed: "Relative fixed operating expense per installed capacity"
consumption_rate: "Rate at which the resource is consumed, as a ratio of the volume of the resource going into the inlet"

EnergyModelsInvestments:
## investment_data.jl
AbstractInvData:
capex: "Capital costs for investing in a capacity"
max_inst: "Maximum installed capacity in a strategic period"
initial: "Initial capacity in the first strategic period"

## investment_mode.jl
Investment:
min_add: "Minimum added capacity in a strategic period"
max_add: "Maximum added capacity in a strategic period"
increment: "Used increment for discrete investments"
capex_offset: "Offset for the CAPEX in a strategic period"
FixedInvestment:
cap: "Capacity used for the fixed investments"

BinaryInvestment:
cap: "Capacity used for the binary investments"

## lifetime_mode.jl
LifetimeMode:
lifetime: "Chosen lifetime of the technology"

# EnergyModelsRenewableProducers
## datastructures.jl
AbstractNonDisRES:
profile: "Power production profile as a ratio of installed capacity"

HydroStorage:
level_init: "Initial stored energy in the dam"
level_inflow: "Inflow of power per operational period"
level_min: "Minimum fraction of the reservoir capacity required"

ScheduleConstraint:
value: "The constraint value not to be violated"
flag: "Boolean value indicating if the constraint is active"
penalty: "Penalty for violating the constraint"

HydroReservoir:
vol_inflow: "Water inflow to the reservoir"

HydroGate:
cap: "Installed discharge capacity"
opex_var: "Variable operational costs per water flow"
opex_fixed: "Fixed operational costs"

HydroUnit:
opex_var: "Variable operational costs per energy unit produced"
opex_fixed: "Fixed operational costs"

HydroGenerator:
cap: "Installed discharge or power capacity"

HydroPump:
cap: "Installed pumping capacity"

AbstractBatteryLife:
stack_cost: "Relative cost for replacing a battery stack"

# EnergyModelsHeat
## link.jl
DHPipe:
cap: "Heat transport capacity of the pipe"
t_ground: "Ground temperature in °C"

## node.jl
HeatPump:
t_source: "Heat source temperature"
t_sink: "Heat sink temperature"
eff_carnot: "Carnot Efficiency"

## resource.jl
ResourceHeat:
t_supply: "Supply temperature in °C"
t_return: "Return temperature in °C"

# EnergyModelsHydrogen
## node.jl
AbstractElectrolyzer:
opex_var: "Variable operating expense per capacity used"
stack_replacement_cost: "Replacement cost of electrolyzer stacks"

CommitParameters:
opex: "Operating cost per installed capacity and operational duration"
time: "Minimum time node must remain in a state before transitioning"

AbstractRampParameters:
up: "Maximum positive rate of change of a node"
down: "Maximum negative rate of change of a node"

# EnergyModelsCO2
CO2Source:
opex_var: "Variable operating expense per energy unit produced"

RefNetworkNodeRetrofit:
opex_var: "Variable operating expense per energy unit produced"

CCSRetroFit:
opex_var: "Variable operating expense per unit of CO₂ captured"
AbstractInvData:
capex: "Capital costs for investing in a capacity"
max_inst: "Maximum installed capacity in a strategic period"
initial: "Initial capacity in the first strategic period"

## investment_mode.jl
Investment:
min_add: "Minimum added capacity in a strategic period"
max_add: "Maximum added capacity in a strategic period"
increment: "Used increment for discrete investments"
capex_offset: "Offset for the CAPEX in a strategic period"

FixedInvestment:
cap: "Capacity used for the fixed investments"

BinaryInvestment:
cap: "Capacity used for the binary investments"

## lifetime_mode.jl
LifetimeMode:
lifetime: "Chosen lifetime of the technology"

EnergyModelsRenewableProducers:
## datastructures.jl
AbstractNonDisRES:
profile: "Power production profile as a ratio of installed capacity"

HydroStorage:
level_init: "Initial stored energy in the dam"
level_inflow: "Inflow of power per operational period"
level_min: "Minimum fraction of the reservoir capacity required"

ScheduleConstraint:
value: "The constraint value not to be violated"
flag: "Boolean value indicating if the constraint is active"
penalty: "Penalty for violating the constraint"

HydroReservoir:
vol_inflow: "Water inflow to the reservoir"

HydroGate:
cap: "Installed discharge capacity"
opex_var: "Variable operational costs per water flow"
opex_fixed: "Fixed operational costs"

HydroUnit:
opex_var: "Variable operational costs per energy unit produced"
opex_fixed: "Fixed operational costs"

HydroGenerator:
cap: "Installed discharge or power capacity"

HydroPump:
cap: "Installed pumping capacity"

AbstractBatteryLife:
stack_cost: "Relative cost for replacing a battery stack"

EnergyModelsHydrogen:
## node.jl
AbstractElectrolyzer:
opex_var: "Variable operating expense per capacity used"
stack_replacement_cost: "Replacement cost of electrolyzer stacks"

CommitParameters:
opex: "Operating cost per installed capacity and operational duration"
time: "Minimum time node must remain in a state before transitioning"

AbstractRampParameters:
up: "Maximum positive rate of change of a node"
down: "Maximum negative rate of change of a node"

EnergyModelsCO2:
## datastructures.jl
CO2Source:
opex_var: "Variable operating expense per energy unit produced"

RefNetworkNodeRetrofit:
opex_var: "Variable operating expense per energy unit produced"

CCSRetroFit:
opex_var: "Variable operating expense per unit of CO₂ captured"


variables:
Expand All @@ -148,11 +138,14 @@ variables:
emissions_node: "Emission of a node"
emissions_total: "Total strategic emissions"
emissions_strategic: "Total emissions"
emissions_link: "Emissions of a link"
opex_var: "Absolute variable operating expenses"
opex_fixed: "Absolute fixed operating expenses"
sink_surplus: "Surplus delivered to a sink, i.e., oversatisfied demand"
sink_deficit: "Deficit in a sink, i.e., not satisfied demand"
link_cap_inst: "Installed capacity"
link_opex_var: "Variable operating expenses"
link_opex_fixed: "Fixed operating expenses"

# EnergyModelsGeography
area_exchange: "Area exchange"
Expand All @@ -165,6 +158,7 @@ variables:
trans_neg: "Negative loss during transmission"
trans_pos: "Positive loss during transmission"
linepack_stor_level: "Storage level in linepack"
emissions_trans: "Emissions of a transmission mode"

# EnergyModelsInvestment
cap_capex: "Absolute CAPEX for investments in the capacity of a technology"
Expand Down Expand Up @@ -216,9 +210,6 @@ variables:
bat_res_up: "Upwards reserve of battery storage"
bat_res_down: "Downwards reserve of battery storage"

# EnergyModelsHeat
dh_pipe_loss: "Heat losses in DH pipes"

# EnergyModelsHydrogen
ref_off_b: "Binary variable indicating if the reformer is in the 'off' state"
ref_start_b: "Binary variable indicating if the reformer is in the 'start-up' state"
Expand Down
Loading
Loading