Open and run in Colab (interactive) Edit on Gitlab Open and run in Kaggle (interactive) Launch with Binder

Hybridize

Evaluating hybridizing of a single technology power plant

Imports

Install hydesign if needed. Import basic libraries. Import HPP model assembly class. Import the examples file path.

[1]:
# Install hydesign if needed
import importlib
if not importlib.util.find_spec("hydesign"):
    !pip install git+https://gitlab.windenergy.dtu.dk/TOPFARM/hydesign.git
[2]:
import time
import pandas as pd
from hydesign.examples import examples_filepath

Existing PV

[3]:
%%capture
from hydesign.assembly.hpp_assembly_hybridization_pv import hpp_model
[4]:
examples_sites = pd.read_csv(f'{examples_filepath}examples_sites.csv', index_col=0, sep=';')
name = 'Denmark_hybridization_solar_Langelinie'
ex_site = examples_sites.loc[examples_sites.name == name]
ex_site
[4]:
case name longitude latitude altitude input_ts_fn sim_pars_fn price_fn price_col H2_demand_col input_HA_ts_fn price_up_ts price_dwn_ts
13 Europe Denmark_hybridization_solar_Langelinie 11.290641 54.717469 0.042 Europe/GWA2/input_ts_Denmark_hybridization_sol... Europe/hpp_pars_Langelinie.yml Europe/2030-EL_PRICE.csv DK_E Europe/H2_demand.csv NaN NaN NaN

select a site to run

[5]:
longitude = ex_site['longitude'].values[0]
latitude = ex_site['latitude'].values[0]
altitude = ex_site['altitude'].values[0]
[6]:
sim_pars_fn = examples_filepath+ex_site['sim_pars_fn'].values[0]
input_ts_fn = examples_filepath+ex_site['input_ts_fn'].values[0]
[7]:
clearance = 50
sp = 301
p_rated = 2
Nwt = 3
wind_MW_per_km2 = 10
b_P =  10 #MW
b_E_h = 3 #hours
cost_of_battery_P_fluct_in_peak_price_ratio = 0
delta_life = 5

x = [
# Wind plant design
clearance, sp, p_rated, Nwt, wind_MW_per_km2,
# Energy storage & EMS price constrains
b_P, b_E_h, cost_of_battery_P_fluct_in_peak_price_ratio,
# Time design
delta_life
]

Initializing the HPP model

Initialize the HPP model (hpp_model class) with the coordinates and the necessary input files.

[8]:
hpp = hpp_model(
    latitude=latitude,
    longitude=longitude,
    altitude=altitude,
    num_batteries = 10,
    work_dir = './',
    sim_pars_fn = sim_pars_fn,
    input_ts_fn = input_ts_fn,
)


Fixed parameters on the site
-------------------------------
longitude = 11.290641
latitude = 54.717469
altitude = 0.042
[9]:
start = time.time()

outs = hpp.evaluate(*x)

hpp.print_design()

end = time.time()

print('exec. time [min]:', (end - start)/60 )


Design:
---------------
clearance [m]: 50.000
sp [W/m2]: 301.000
p_rated [MW]: 2.000
Nwt: 3.000
wind_MW_per_km2 [MW/km2]: 10.000
b_P [MW]: 10.000
b_E_h [h]: 3.000
cost_of_battery_P_fluct_in_peak_price_ratio: 0.000
delta_life [years]: 5.000


NPV_over_CAPEX: 0.338
NPV [MEuro]: 3.989
IRR: 0.081
LCOE [Euro/MWh]: 39.052
COVE [-]: 15.779
CAPEX [MEuro]: 11.786
OPEX [MEuro]: 0.143
Wind CAPEX [MEuro]: 5.879
Wind OPEX [MEuro]: 0.088
PV CAPEX [MEuro]: 2.779
PV OPEX [MEuro]: 0.056
Batt CAPEX [MEuro]: 1.677
Batt OPEX [MEuro]: 0.000
Shared CAPEX [MEuro]: 0.152
Shared OPEX W [MEuro]: 1.299
Shared OPEX S [MEuro]: 0.000
penalty lifetime [MEuro]: 0.000
AEP [GWh]: 18.057
GUF: 0.206
grid [MW]: 10.000
wind [MW]: 6.000
solar [MW]: 7.480
Battery Energy [MWh]: 30.000
Battery Power [MW]: 10.000
Total curtailment [GWh]: 0.010
Awpp [km2]: 0.600
Apvp [km2]: 0.092
Plant area [km2]: 0.600
Rotor diam [m]: 91.979
Hub height [m]: 95.989
Number of batteries used in lifetime: 3.000
Break-even PPA price [Euro/MWh]: 5.000
Capacity factor wind [-]: 0.236

exec. time [min]: 0.23894066015879314

Existing wind

[10]:
from hydesign.assembly.hpp_assembly_hybridization_wind import hpp_model

[11]:
name = 'Denmark_hybridization_wind_Norhede_Hjortmose'
ex_site = examples_sites.loc[examples_sites.name == name]
longitude = ex_site['longitude'].values[0]
latitude = ex_site['latitude'].values[0]
altitude = ex_site['altitude'].values[0]

sim_pars_fn = examples_filepath+ex_site['sim_pars_fn'].values[0]
input_ts_fn = examples_filepath+ex_site['input_ts_fn'].values[0]

hpp = hpp_model(
latitude=latitude,
longitude=longitude,
altitude=altitude,
num_batteries = 10,
work_dir = './',
sim_pars_fn = sim_pars_fn,
input_ts_fn = input_ts_fn,
)


Fixed parameters on the site
-------------------------------
longitude = 8.3664
latitude = 56.0954
altitude = 16.662
[12]:
solar_MW = 100
surface_tilt = 25
surface_azimuth = 180
DC_AC_ratio =  1.475
b_P = 18 #MW
b_E_h = 6 #hours
cost_of_battery_P_fluct_in_peak_price_ratio = 0.319
delta_life = 5


x = [
# PV plant design
solar_MW,  surface_tilt, surface_azimuth, DC_AC_ratio,
# Energy storage & EMS price constrains
b_P, b_E_h, cost_of_battery_P_fluct_in_peak_price_ratio,
# Time design
delta_life
]

[13]:
start = time.time()

outs = hpp.evaluate(*x)

hpp.print_design()

end = time.time()

print('exec. time [min]:', (end - start)/60 )


Design:
---------------
solar_MW [MW]: 100.000
surface_tilt [deg]: 25.000
surface_azimuth [deg]: 180.000
DC_AC_ratio: 1.475
b_P [MW]: 18.000
b_E_h [h]: 6.000
cost_of_battery_P_fluct_in_peak_price_ratio: 0.319
delta_life [years]: 5.000


NPV_over_CAPEX: 0.091
NPV [MEuro]: 11.025
IRR: 0.070
LCOE [Euro/MWh]: 43.152
COVE [-]: 16.883
CAPEX [MEuro]: 1.930
OPEX [MEuro]: 121.360
Wind CAPEX [MEuro]: 61.000
Wind OPEX [MEuro]: 1.100
PV CAPEX [MEuro]: 41.219
PV OPEX [MEuro]: 0.830
Batt CAPEX [MEuro]: 5.303
Batt OPEX [MEuro]: 0.000
Shared CAPEX W [MEuro]: 13.838
Shared CAPEX S [MEuro]: 0.000
Shared OPEX [MEuro]: 0.000
penalty lifetime [MEuro]: 0.000
AEP per year [GWh]: 235.897
GUF: 0.371
grid [MW]: 72.600
wind [MW]: 72.600
solar [MW]: 100.000
Battery Energy [MWh]: 108.000
Battery Power [MW]: 18.000
Total curtailment [GWh]: 575.760
Awpp [km2]: 5.000
Apvp [km2]: 1.226
Plant area [km2]: 5.000
Rotor diam [m]: 112.000
Hub height [m]: 94.000
Number of batteries used in lifetime: 3.000
Break-even PPA price [Euro/MWh]: 5.000
Capacity factor wind [-]: 0.286

exec. time [min]: 0.22785449425379437