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