Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mapping ESDL terminology to Tulipa #1

Open
suvayu opened this issue May 30, 2024 · 6 comments
Open

Mapping ESDL terminology to Tulipa #1

suvayu opened this issue May 30, 2024 · 6 comments

Comments

@suvayu
Copy link
Member

suvayu commented May 30, 2024

Using this to track my progress updating the ESDL file:

Tulipa ESDL Comment Added to Norse ESDL
CONSUMERS
active state (ENABLED/DISABLED) X
peak_demand power X
:--------------- :---------- :---------- :------
PRODUCERS
active state X
investable Not in ESDL - add or have separate file?
investment_cost (kEUR/MW/year) asset.CostInformation.investmentCosts (EUR/MWh/yr) the unit doesn't match X
variable_cost asset.CostInformation.variableOperationalAndMaintenanceCosts If there is no data, we put zero for the time being X
lifetime TechnicalLifetime X
investment_limit Potential? Not in ESDL - add or have separate file or try to use Potential property of the area
capacity Not in ESDL - ask to add This is the upgrade increment when invested in
initial_capacity power X
:--------------- :---------- :---------- :------
CONVERSION
active state X
investment_cost (kEUR/MW/year) asset.CostInformation.investmentCosts (EUR/MWh/yr) the unit doesn't match X
variable_cost asset.CostInformation.variableOperationalAndMaintenanceCosts If there is no data, we put zero for the time being X
lifetime TechnicalLifetime X
investment_limit Potential? We need to include it in ESDL or try to use Potential property of the area
capacity Not in ESDL - ask to add This is the upgrade increment when invested in
initial_capacity power X
efficiency efficiency or InputOutputRelation * See below
:--------------- :---------- :---------- :------
STORAGE
active state X
investment_cost asset.CostInformation.investmentCosts the unit doesn't match X
variable_cost asset.CostInformation.variableOperationalAndMaintenanceCosts If there is no data, we put zero for the time being X
lifetime TechnicalLifetime X
investment_limit Potential? We need to include it in ESDL or try to use Potential property of the area
capacity Not in ESDL - ask to add This is the upgrade increment when invested in
capacity (charge/discharge) maxDischargeRate and maxChargeRate Tulipa uses only one value, but might change it to consider both ** X
initial_storage_level fillLevel ESDL uses p.u., Tulipa uses MW X
energy_to_power_ratio ? Include in ESDL? or calculate it from the ratio of capacity (MWh)/maxDischargeRate (MW)
initial_storage_capacity capacity double-check the units ESDL uses J and we use MWh X
:--------------- :---------- :---------- :------
TRANSPORT
from_asset port I assume there is a port in or something
to_asset port I assume there is a port outor something
active state
is_transport assetType
investable Not in ESDL - Maybe in the scenario definition
investment_integer Not in ESDL - Maybe in the scenario definition
variable_cost this value will come from the asset that is connected from_asset
investment_cost (kEUR/MW/year) asset.CostInformation.investmentCosts (EUR/MWh/yr) the unit doesn't match
lifetime TechnicalLifetime X
investment_limit Potential? We need to include it in ESDL or try to use Potential property of the area
capacity capacity
capacity capacity
initial_export_capacity Not in ESDL - we can use capacity for now
initial_import_capacity Not in ESDL - we can use capacity for now
efficiency efficiency

*The efficiency from the asset goes to the outgoing flow. For assets connected to two carriers, then, we need two different efficiencies between the input and outputs; ESDL has electrical efficiency and heat efficiency (but not for all assets; we need to double-check), For heat pumps -> COP to efficiency and other conventions assets -> Efficiency to efficiency
** The charging and discharging efficiencies are defined in the asset but must be mapped to the flow asset data.

We can do multiple efficiencies using this InputOutputRelation feature. It doesn't exist yet in the MapEditor, but it's in ESDL and we can push for it to be added to the MapEditor:

Image

Image

Originally posted by @clizbe in TulipaEnergy/TulipaIO.jl#1 (comment)

@clizbe
Copy link
Member

clizbe commented Jun 3, 2024

(WIP) ToDos IF we want Tulipa to match ESDL:

  • Change "active" to "state"
  • Change active/state field values from "true/false" to "ENABLED/DISABLED/OPTIONAL"
  • Change "peak_demand" of Consumer to "power"
    • Do we want to do this? Seems weird.
  • Change unites of peak_demand/power from "MW" to "W"
    • This might not be necessary since they say they support multiple unit types, but I think for power/capacity it's always in W.
  • Change investment_cost units from "kEUR/MW/year" to "EUR/MWh/yr"
    • Might not be necessary since they support multiple unit types. Might just ask ESDL to add ours.
  • To be continued....

Missing from ESDL:

  • investable (true/false)
  • investment_limit (MW)
  • capacity (MW) - incremental increase when investing
    • Should rename in Tulipa for clarity
  • energy_to_power_ratio (h)
    • Use output energy divided by power for this?
  • storage_type (short/long)
    • Could be derived from storage capacity? Don't think so because it depends how you define your partitions.

@suvayu
Copy link
Member Author

suvayu commented Jul 2, 2024

@datejada the table in the top post documents the mapping from Tulipa terminology to ESDL, but only for assets. Could you compile a similar table for Tulipa flows to ESDL transport assets (what we talked about yesterday, the connections). For now I'll come up with something generic based on my best guess.

@suvayu
Copy link
Member Author

suvayu commented Jul 2, 2024

@datejada Nothing useful in the Transport assets ☹️

In [56]: {k: v for k, v in vars(hn).items() if not k.startswith("_") and v}
Out[56]: 
{'name': <pyecore.valuecontainer.EValue at 0x7f99987dd2e0>,
 'id': <pyecore.valuecontainer.EValue at 0x7f99987dec30>,
 'area': <pyecore.valuecontainer.EValue at 0x7f99987de930>,
 'geometry': <pyecore.valuecontainer.EValue at 0x7f99987def90>,
 'port': EOrderedSet([<esdl.esdl.InPort object at 0x7f999875a030>, <esdl.esdl.OutPort object at 0x7f99987593d0>])}

In [57]: {k: v for k, v in vars(gn).items() if not k.startswith("_") and v}
Out[57]: 
{'name': <pyecore.valuecontainer.EValue at 0x7f999875ac60>,
 'id': <pyecore.valuecontainer.EValue at 0x7f999ba51340>,
 'area': <pyecore.valuecontainer.EValue at 0x7f9998758290>,
 'geometry': <pyecore.valuecontainer.EValue at 0x7f99987590d0>,
 'port': EOrderedSet([<esdl.esdl.InPort object at 0x7f9998df24b0>, <esdl.esdl.OutPort object at 0x7f9998cdce00>])}

In [58]: gn
Out[58]: <esdl.esdl.GasNetwork at 0x7f9998759880>

In [59]: hn
Out[59]: <esdl.esdl.HeatNetwork at 0x7f99987f3170>
  • name & id are just identifiers
  • area points to the region that has the transport asset
  • geometry is (lat,lon)
  • port is as list of EnergyAssets connected to it

@suvayu
Copy link
Member Author

suvayu commented Jul 2, 2024

Looks like there are useful, attributes, but they are all optional.

In [70]: [a for a in dir(gn) if not a.startswith("_")]
Out[70]: 
['KPIs',
 'aggregated',
 'aggregationCount',
 'area',
 'assetType',
 'behaviour',
 'bufferDistance',
 'capacity',
 'commissioningDate',
 'constraint',
 'containingAsset',
 'containingBuilding',
 'controlStrategy',
 'costInformation',
 'dataSource',
 'decommissioningDate',
 'description',
 'efficiency',
 'fullLoadHours',
 'geometry',
 'id',
 'installationDuration',
 'isOwnedBy',
 'manufacturer',
 'material',
 'name',
 'operationalHours',
 'originalIdInSource',
 'owner',
 'port',
 'pressure',
 'sector',
 'shortName',
 'state',
 'surfaceArea',
 'technicalLifetime']

@datejada
Copy link
Member

datejada commented Jul 3, 2024

@suvayu I have updated the table in the first comment of this issue.

My takeaway with the mapping to ESDL is that we will only take the basic information, and there will be a set of default values that TulipaEnergyModel will need to run properly (that a user can edit/change after the ESDL basic information import). It is okay to continue like that since ESDL is meant to describe energy assets data and not to be the interface of an optimization model like Tulipa.

@datejada
Copy link
Member

datejada commented Jul 8, 2024

@suvayu as we discussed, all ESDL networks are hub assets in Tulipa:

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants