TulipaEnergyModel.jl icon indicating copy to clipboard operation
TulipaEnergyModel.jl copied to clipboard

Implement relationships for Multiple Inputs Multiple Outputs (MIMO) of an asset

Open datejada opened this issue 10 months ago • 8 comments

Description

Two use cases need this feature to represent the assets' physics correctly:

  1. Cogeneration or combined heat and power (CHP): For each flow of electricity, an X amount of heat is produced.
  2. Hydro assets in cascade: if there are two hydro assets in cascade (one upstream, one downstream). The electricity flow from the upstream asset implies an X amount of water flow (turbined water) to the hydro reservoir downstream.

In both cases, the outputs of the asset are not independent.

Codewise, we need to think through how to make it straightforward for the user to include this data (and also, in the code, it should be clear when and how these constraints work).

Related Issues

No response

datejada avatar Apr 17 '24 16:04 datejada

Use the proposal in SpineOpt as inspiration to include this feature in Tulipa:

https://github.com/spine-tools/SpineOpt.jl/discussions/873

datejada avatar Apr 19 '24 06:04 datejada

Wouldn't the second case be an output flow to an input flow (of water)? Ah wait do you mean the output flow of water is linked to the output of electricity?

clizbe avatar Apr 19 '24 16:04 clizbe

Correct, the output of water depends on the electricity flow.

datejada avatar Apr 19 '24 17:04 datejada

ESDL uses reference flow in their implementation. They developed it for the compatibility of OPERA with ESDL.

Image

datejada avatar Apr 29 '24 14:04 datejada

A comment from Kira about trying to implement in SpineOpt:

"Defining processes with multiple inputs is not very intuitive. For processes with multiple inputs & outputs, all need to be defined in terms of ratios compared to single main inputs & outputs. In the case of steel, I have used the parameter “fix_ratio_out_in_unit_flow” to define the electricity use per unit of steel output, and then used “fix_ratio_in_in_unit_flow” to define all other energy inputs in terms of the ratio of energy per unit of electricity use."

Are we doing this same method? If so, how to make it more intuitive?

clizbe avatar Aug 07 '24 10:08 clizbe

A comment from Kira about trying to implement in SpineOpt:

"Defining processes with multiple inputs is not very intuitive. For processes with multiple inputs & outputs, all need to be defined in terms of ratios compared to single main inputs & outputs. In the case of steel, I have used the parameter “fix_ratio_out_in_unit_flow” to define the electricity use per unit of steel output, and then used “fix_ratio_in_in_unit_flow” to define all other energy inputs in terms of the ratio of energy per unit of electricity use."

Are we doing this same method? If so, how to make it more intuitive?

The names in SpineOpt are not intuitive for that type of application. The idea for Tulipa is the same: having a reference flow and then the other inputs and outputs as fractions. We can define the names with Kira so they make more sense to that type of user 😄

datejada avatar Aug 08 '24 11:08 datejada

There is a summary of the proposals for SpineOpt here: https://github.com/spine-tools/SpineOpt.jl/discussions/873#discussioncomment-10339677

Please use it for further discussions regarding this issue.

datejada avatar Aug 14 '24 16:08 datejada

For storage assets, please consider also the discussion in https://github.com/TulipaEnergy/TulipaEnergyModel.jl/discussions/513 for the hydro units

datejada avatar Sep 20 '24 07:09 datejada

summary of options for MIMO: https://github.com/spine-tools/SpineOpt.jl/discussions/873#discussioncomment-10339677

gnawin avatar Oct 14 '24 12:10 gnawin