Skip to content

Commit

Permalink
Merge pull request NREL#159 from cfrontin/green_steel_cleanup
Browse files Browse the repository at this point in the history
Green steel cleanup
  • Loading branch information
jaredthomas68 authored Aug 10, 2023
2 parents c667c46 + 34adb51 commit beb7f97
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 43 deletions.
66 changes: 45 additions & 21 deletions examples/eco/05-offshore-h2/input/plant/orbit-config-osw_18MW.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
turbine: "osw_18MW"
wind:
flag: True
flag: True
performance_model: "floris" # can be one of ["floris", "sam"]
atb_year: 2025 # as per discussions of operational by 2027. This also makes the estimates a little more conservative
cost_year: 2022 # to match ATB
Expand All @@ -13,7 +13,7 @@ site:
area: 142 # km^2
depth: 45 # m
distance: 80 # km
distance_to_landfall: 85 # km
distance_to_landfall: 85 # km
mean_windspeed: False #8.45863584474886 # required input for ORBIT, provide desired mean wind speed or set to False to give ORBIT the mean wind speed from the lat/lon selection
plant:
capacity: 180 # MW
Expand Down Expand Up @@ -42,17 +42,17 @@ OffshoreSubstationInstallation:
num_feeders: 1 # from ORBIT/examples/configs/example_fixed_project.yaml
array_system_design:
cables:
- XLPE_630mm_66kV
- XLPE_630mm_66kV
export_system_design:
cables: HVDC_2000mm_320kV
cables: HVDC_2000mm_320kV
percent_added_length: 0.0
scour_protection_design:
cost_per_tonne: 40
cost_per_tonne: 40
scour_protection_depth: 1 # ORBIT default
MonopileDesign:
monopile_steel_cost: 2250 #OSW
tp_steel_cost: 3230 #OSW
# Configured Phases
# Configured Phases
design_phases:
- ArraySystemDesign # from ORBIT/examples/configs/example_fixed_project.yaml
- MonopileDesign # from ORBIT/examples/configs/example_fixed_project.yaml
Expand All @@ -75,6 +75,7 @@ project_parameters:
grid_connection: False # option, can be turned on or off
ppa_price: 0.025 # $/kWh based on 2022 land based wind market report (ERCOT area ppa prices) https://www.energy.gov/sites/default/files/2022-08/land_based_wind_market_report_2202.pdf
solar: True
wind: True
project_lifetime: 30 # 2022 ATB capital recovery period for offshore wind
finance_parameters:
general_inflation: 0.025 # based on 2022 ATB
Expand All @@ -85,7 +86,7 @@ finance_parameters:
total_income_tax_rate: 0.257 # 0.257 tax rate in 2022 atb baseline workbook # current federal income tax rate, but proposed 2023 rate is 0.28. No state income tax in Texas
capital_gains_tax_rate: 0.15 # H2FAST default
sales_tax_rate: 0.0 #Verify that a different rate shouldn't be used # minimum total sales tax rate in Corpus Christi https://www.cctexas.com/detail/corpus-christi-type-fund-purpose - does this apply to H2?
debt_interest_rate: 0.06
debt_interest_rate: 0.06
debt_type: "Revolving debt" # can be "Revolving debt" or "One time loan". Revolving debt is H2FAST default and leads to much lower LCOH
loan_period: 0 # H2FAST default, not used for revolving debt
cash_onhand_months: 1 # H2FAST default
Expand All @@ -100,7 +101,7 @@ finance_parameters:
electrical_export_system: 2022 # also from ORBIT, so match wind assumptions. TODO ask Sophie Bradenkamp
desal: 2013 # from code citation: https://www.nrel.gov/docs/fy16osti/66073.pdf
electrolyzer: 2020 # 2020 for singlitico2021, 2016 # for simple h2 cost model in hopp (see https://www.hydrogen.energy.gov/pdfs/19009_h2_production_cost_pem_electrolysis_2019.pdf) ## 2020 # based on IRENA report https://www.irena.org/-/media/Files/IRENA/Agency/Publication/2020/Dec/IRENA_Green_hydrogen_cost_2020.pdf
h2_transport_compressor: 2016 # listed in code header
h2_transport_compressor: 2016 # listed in code header
h2_storage:
pressure_vessel: 2022 # based on readme for Compressed_gas_function
pipe: 2019 # Papadias 2021
Expand All @@ -122,15 +123,15 @@ electrolyzer:
# energy_rating: 802 # kWe (aka 1 kWh)
# mean_days_between_failures: 200 # days
# useful_life: 15 # was default in compressor script
# # annual_h2_throughput: 18750 # [kg/yr] -> kg of H2 per year
# # annual_h2_throughput: 18750 # [kg/yr] -> kg of H2 per year
h2_transport_compressor:
outlet_pressure: 68 # bar based on HDSAM
h2_storage_compressor:
output_pressure: 100 # bar (1 bar = 100 kPa)
flow_rate: 89 # kg/hr
energy_rating: 802 # kWe (aka 1 kWh)
mean_days_between_failures: 200 # days
# annual_h2_throughput: 18750 # [kg/yr] -> kg of H2 per year
# annual_h2_throughput: 18750 # [kg/yr] -> kg of H2 per year
h2_transport_pipe:
outlet_pressure: 10 # bar - from example in code from Jamie #TODO check this value
h2_storage:
Expand All @@ -144,21 +145,44 @@ pv:
battery:
flag: False
system_capacity_kwh: 400
system_capacity_kw: 100
system_capacity_kw: 100
# platform:
# opex_rate: 0.0111 # % of capex to determine opex (see table 5 in https://www.acm.nl/sites/default/files/documents/study-on-estimation-method-for-additional-efficient-offshore-grid-opex.pdf)
# installation_days: 14 # days
# site:
# depth: -1
# distance: -1
# equipment:
# tech_combined_mass: -1
# tech_required_area: -1
platform:
opex_rate: 0.0111 # % of capex to determine opex (see table 5 in https://www.acm.nl/sites/default/files/documents/study-on-estimation-method-for-additional-efficient-offshore-grid-opex.pdf)
installation_days: 14 # days
policy_parameters: # these should be adjusted for inflation prior to application - order of operations: rate in 1992 $,
# Modified orbit configuration file for a single platform to carry "X technology"
design_phases:
- FixedPlatformDesign # Register Design Phase
install_phases:
FixedPlatformInstallation: 0 # Register Install Phase
oss_install_vessel: example_heavy_lift_vessel
site:
depth: -1 # site depth [m] (if -1, then will use the full plant depth)
distance: -1 # distance to port [km] (if -1, then will use the full plant distance)
equipment:
tech_required_area: -1. # equipment area [m**2] (-1 will require the input during run)
tech_combined_mass: -1 # equipment mass [t] (-1 will require the input during run)
topside_design_cost: 4500000 # topside design cost [USD]
installation_duration: 14 # time at sea [days]

policy_parameters: # these should be adjusted for inflation prior to application - order of operations: rate in 1992 $,
#then prevailing wage multiplier if applicable, then inflation
option1: # base # no policy included ---> see files/task1/regulation and policy revue/ page 4 of 13 middle - read this
option1: # base # no policy included ---> see files/task1/regulation and policy revue/ page 4 of 13 middle - read this
# and look at assumptions
wind_itc: 0
wind_ptc: 0
h2_ptc: 0
option2: # base credit levels with H2
wind_itc: 0
wind_ptc: 0.003 # $0.003/kW (this is base, see inflation adjustment in option 3)
h2_ptc: 0.6 # $0.60/kg h2 produced - assumes net zero but not meeting prevailing wage requirements - does this need to be
h2_ptc: 0.6 # $0.60/kg h2 produced - assumes net zero but not meeting prevailing wage requirements - does this need to be
# adjusted for inflation from 2022 dollars to claim date, probably constant after claim date?
option3: # same as option 5, but assuming prevailing wages are met --> 5x multiplier on both PTCs
wind_itc: 0
Expand All @@ -168,18 +192,18 @@ policy_parameters: # these should be adjusted for inflation prior to application
option4: # prevailing wages not met
wind_itc: 0.06 # %/100 capex
wind_ptc: 0.00 # $/kW 1992 dollars
h2_ptc: 0.6 # $0.60/kg produced 2022 dollars - assumes net zero but not meeting prevailing wage requirements - does this need to be
h2_ptc: 0.6 # $0.60/kg produced 2022 dollars - assumes net zero but not meeting prevailing wage requirements - does this need to be
# do not adjust for inflation, probably constant after claim date?
option5: # prevailing wages met
wind_itc: 0.30 # %/100 capex
wind_ptc: 0.0 # $/kWh 1992 dollars
h2_ptc: 3.00 # $/kg of h2 produced 2022 dollars - do adjust for inflation every year applied and until application year
option6: # assumes prevailing wages are met, and includes 10% bonus credit of domestic content (100% of steel and iron
option6: # assumes prevailing wages are met, and includes 10% bonus credit of domestic content (100% of steel and iron
# and mfg. components from the US)
wind_itc: 0.40 # %/100 capex
wind_ptc: 0.0 # $/kWh 1992 dollars
h2_ptc: 3.00 # $/kg of h2 produced 2022 dollars - do adjust for inflation every year applied and until application year
option7: # assumes prevailing wages are met, and includes 10% bonus credit of domestic content (100% of steel and iron
option7: # assumes prevailing wages are met, and includes 10% bonus credit of domestic content (100% of steel and iron
# and mfg. components from the US)
wind_itc: 0.0 # %/100 capex
wind_ptc: 0.0165 # $/kWh 1992 dollars (0.015*1.1)
Expand Down Expand Up @@ -220,12 +244,12 @@ plant_design:
electrolyzer_location: "platform" # can be one of ["onshore", "turbine", "platform"]
transportation: "pipeline" # can be one of ["hvdc", "pipeline", "none"]
h2_storage_location: "onshore" # can be one of ["onshore", "turbine", "platform"]

# design A -> scenario 1
# onshore electrolysis
# onshore electrolysis
# HVDC transport, HVDC_2000mm_320kV
# no storage
# design B -> scenario 7
# electrolysis on platform
# pipe transport to shore
# no storage
# no storage
33 changes: 18 additions & 15 deletions hopp/eco/electrolyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

# import hopp.tools.hopp_tools as hopp_tools

from hopp.simulation.technologies.hydrogen.desal.desal_model_eco import RO_desal_eco
from hopp.simulation.technologies.hydrogen.desal.desal_model_eco import RO_desal_eco as RO_desal
from hopp.simulation.technologies.hydrogen.electrolysis.pem_mass_and_footprint import (
mass as run_electrolyzer_mass,
)
Expand All @@ -14,7 +14,7 @@
)
from hopp.simulation.technologies.hydrogen.electrolysis.H2_cost_model import basic_H2_cost_model
from hopp.simulation.technologies.hydrogen.electrolysis.PEM_costs_Singlitico_model import PEMCostsSingliticoModel
from hopp.simulation.technologies.hydrogen.electrolysis.run_h2_PEM import run_h2_PEM
from hopp.simulation.technologies.hydrogen.electrolysis.run_h2_PEM import run_h2_PEM_IVcurve as run_h2_PEM


def run_electrolyzer_physics(
Expand Down Expand Up @@ -55,14 +55,17 @@ def run_electrolyzer_physics(
#NB: adjusted_installed_cost does NOT include the electrolyzer cost
# system_rating = electrolyzer_size
system_rating = wind_size_mw + solar_size_mw
H2_Results, H2A_Results = run_h2_PEM(energy_to_electrolyzer_kw,
electrolyzer_size_mw,
kw_continuous,
electrolyzer_capex_kw,
lcoe,
adjusted_installed_cost,
useful_life=useful_life,
net_capital_costs=0)
H2_Results, H2A_Results = run_h2_PEM(
energy_to_electrolyzer_kw,
electrolyzer_size_mw,
kw_continuous,
electrolyzer_capex_kw,
lcoe,
adjusted_installed_cost,
useful_life,
net_capital_costs=0
)

#############
# # run electrolyzer model
# H2_Results, _, electrical_generation_timeseries = hopp_tools.run_H2_PEM_sim(
Expand Down Expand Up @@ -234,7 +237,7 @@ def run_electrolyzer_cost(
design_scenario,
verbose=False
):

# unpack inputs
H2_Results = electrolyzer_physics_results["H2_Results"]
electrolyzer_size_mw = plant_config["electrolyzer"]["rating"]
Expand Down Expand Up @@ -284,7 +287,7 @@ def run_electrolyzer_cost(
)

elif electrolyzer_cost_model == "singlitico2021":

P_elec = per_turb_electrolyzer_size_mw*1E-3 # [GW]
RC_elec = plant_config["electrolyzer"]["electrolyzer_capex"] # [USD/kW]

Expand Down Expand Up @@ -324,7 +327,7 @@ def run_electrolyzer_cost(
offshore=offshore,
)
elif electrolyzer_cost_model == "singlitico2021":

P_elec = electrolyzer_size_mw*1E-3 # [GW]
RC_elec = plant_config["electrolyzer"]["electrolyzer_capex"] # [USD/kW]

Expand Down Expand Up @@ -396,7 +399,7 @@ def run_desal(
desal_opex,
desal_mass_kg,
desal_size_m2,
) = RO_desal_eco(freshwater_kg_per_hr, salinity="Seawater")
) = RO_desal(freshwater_kg_per_hr, salinity="Seawater")

# package outputs
desal_results = {
Expand Down Expand Up @@ -426,7 +429,7 @@ def run_desal(
per_turb_desal_opex,
per_turb_desal_mass_kg,
per_turb_desal_size_m2,
) = RO_desal_eco(in_turb_freshwater_kg_per_hr, salinity="Seawater")
) = RO_desal(in_turb_freshwater_kg_per_hr, salinity="Seawater")

fresh_water_flowrate = nturbines * per_turb_desal_capacity_m3_per_hour
feed_water_flowrate = nturbines * per_turb_feedwater_m3_per_hr
Expand Down
12 changes: 6 additions & 6 deletions hopp/eco/finance.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def adjust_orbit_costs(orbit_project, plant_config):
wind_capex_multiplier = (plant_config["wind"]["expected_plant_cost"]*1E9)/orbit_project.total_capex
else:
wind_capex_multiplier = 1.0

wind_total_capex = orbit_project.total_capex*wind_capex_multiplier
wind_capex_breakdown = orbit_project.capex_breakdown
for key in wind_capex_breakdown.keys():
Expand Down Expand Up @@ -523,7 +523,7 @@ def run_profast_grid_only(
opex_breakdown,
hopp_results,
design_scenario,
total_accessory_power_renewable_kw,
total_accessory_power_renewable_kw,
total_accessory_power_grid_kw,
verbose=False,
show_plots=False,
Expand Down Expand Up @@ -763,7 +763,7 @@ def run_profast_full_plant_model(
hopp_results,
incentive_option,
design_scenario,
total_accessory_power_renewable_kw,
total_accessory_power_renewable_kw,
total_accessory_power_grid_kw,
verbose=False,
show_plots=False,
Expand Down Expand Up @@ -1032,13 +1032,13 @@ def run_profast_full_plant_model(
)

if plant_config["project_parameters"]["grid_connection"] or total_accessory_power_grid_kw > 0:

energy_purchase = total_accessory_power_grid_kw*365*24

if plant_config["project_parameters"]["grid_connection"]:
annual_energy_shortfall = np.sum(hopp_results["energy_shortfall_hopp"])
energy_purchase += annual_energy_shortfall

pf.add_fixed_cost(
name="Electricity from grid",
usage=1.0,
Expand All @@ -1048,7 +1048,7 @@ def run_profast_full_plant_model(
)

# ------------------------------------- add incentives -----------------------------------
""" Note: units must be given to ProFAST in terms of dollars per unit of the primary commodity being produced
""" Note: units must be given to ProFAST in terms of dollars per unit of the primary commodity being produced
Note: full tech-nutral (wind) tax credits are no longer available if constructions starts after Jan. 1 2034 (Jan 1. 2033 for h2 ptc)"""

# catch incentive option and add relevant incentives
Expand Down
Loading

0 comments on commit beb7f97

Please sign in to comment.