From cb328b28c76f211316a033dfa737cd6897b1e621 Mon Sep 17 00:00:00 2001 From: Cory Frontin Date: Wed, 9 Aug 2023 09:24:50 -0600 Subject: [PATCH 1/4] added option for run_h2_PEM model to use IVcurve model. --- .../hydrogen/electrolysis/run_h2_PEM.py | 124 +++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) diff --git a/hopp/simulation/technologies/hydrogen/electrolysis/run_h2_PEM.py b/hopp/simulation/technologies/hydrogen/electrolysis/run_h2_PEM.py index 612bf51c4..b43b4a898 100644 --- a/hopp/simulation/technologies/hydrogen/electrolysis/run_h2_PEM.py +++ b/hopp/simulation/technologies/hydrogen/electrolysis/run_h2_PEM.py @@ -1,9 +1,10 @@ -# from hybrid.PEM_H2_LT_electrolyzer import PEM_electrolyzer_LT + from numpy.lib.function_base import average import hopp.to_organize.H2_Analysis.H2AModel as H2AModel import numpy as np import pandas as pd from hopp.to_organize.PEM_Model_2Push.run_PEM_master import run_PEM_clusters +from hopp.simulation.technologies.hydrogen.electrolysis.PEM_electrolyzer_IVcurve import PEM_electrolyzer_LT def run_h2_PEM(electrical_generation_timeseries, electrolyzer_size, @@ -114,4 +115,125 @@ def run_h2_PEM(electrical_generation_timeseries, electrolyzer_size, +def kernel_PEM_IVcurve( + electrical_generation_timeseries, + electrolyzer_size, + useful_life, + kw_continuous, + forced_electrolyzer_cost_kw, + lcoe, + adjusted_installed_cost, + net_capital_costs, + voltage_type="constant", stack_input_voltage_DC=250, min_V_cell=1.62, + p_s_h2_bar=31, stack_input_current_lower_bound=500, cell_active_area=1250, + N_cells=130, total_system_electrical_usage=55.5 +): + + in_dict = dict() + out_dict = dict() + in_dict['P_input_external_kW'] = electrical_generation_timeseries + in_dict['electrolyzer_system_size_MW'] = electrolyzer_size + el = PEM_electrolyzer_LT(in_dict, out_dict) + + el.h2_production_rate() + el.water_supply() + + avg_generation = np.mean(electrical_generation_timeseries) # Avg Generation + cap_factor = avg_generation / kw_continuous + + hydrogen_hourly_production = out_dict['h2_produced_kg_hr_system'] + water_hourly_usage = out_dict['water_used_kg_hr'] + water_annual_usage = out_dict['water_used_kg_annual'] + electrolyzer_total_efficiency = out_dict['total_efficiency'] + + # Get Daily Hydrogen Production - Add Every 24 hours + i = 0 + daily_H2_production = [] + while i <= 8760: + x = sum(hydrogen_hourly_production[i:i + 24]) + daily_H2_production.append(x) + i = i + 24 + + avg_daily_H2_production = np.mean(daily_H2_production) # kgH2/day + hydrogen_annual_output = sum(hydrogen_hourly_production) # kgH2/year + # elec_remainder_after_h2 = combined_pv_wind_curtailment_hopp + + H2A_Results = H2AModel.H2AModel(cap_factor, avg_daily_H2_production, hydrogen_annual_output, force_system_size=True, + forced_system_size=electrolyzer_size, force_electrolyzer_cost=True, + forced_electrolyzer_cost_kw=forced_electrolyzer_cost_kw, useful_life = useful_life) + + + feedstock_cost_h2_levelized_hopp = lcoe * total_system_electrical_usage / 100 # $/kg + # Hybrid Plant - levelized H2 Cost - HOPP + feedstock_cost_h2_via_net_cap_cost_lifetime_h2_hopp = adjusted_installed_cost / \ + (hydrogen_annual_output * useful_life) # $/kgH2 + + # Total Hydrogen Cost ($/kgH2) + h2a_costs = H2A_Results['Total Hydrogen Cost ($/kgH2)'] + total_unit_cost_of_hydrogen = h2a_costs + feedstock_cost_h2_levelized_hopp + feedstock_cost_h2_via_net_cap_cost_lifetime_h2_reopt = net_capital_costs / ( + (kw_continuous / total_system_electrical_usage) * (8760 * useful_life)) + + H2_Results = {'hydrogen_annual_output': + hydrogen_annual_output, + 'feedstock_cost_h2_levelized_hopp': + feedstock_cost_h2_levelized_hopp, + 'feedstock_cost_h2_via_net_cap_cost_lifetime_h2_hopp': + feedstock_cost_h2_via_net_cap_cost_lifetime_h2_hopp, + 'feedstock_cost_h2_via_net_cap_cost_lifetime_h2_reopt': + feedstock_cost_h2_via_net_cap_cost_lifetime_h2_reopt, + 'total_unit_cost_of_hydrogen': + total_unit_cost_of_hydrogen, + 'cap_factor': + cap_factor, + 'hydrogen_hourly_production': + hydrogen_hourly_production, + 'water_hourly_usage': + water_hourly_usage, + 'water_annual_usage': + water_annual_usage, + 'electrolyzer_total_efficiency': + electrolyzer_total_efficiency + } + + return H2_Results, H2A_Results + + +def run_h2_PEM_IVcurve( + energy_to_electrolyzer, + electrolyzer_size_mw, + kw_continuous, + electrolyzer_capex_kw, + lcoe, + adjusted_installed_cost, + useful_life, + net_capital_costs=0, +): + + # electrical_generation_timeseries = combined_pv_wind_storage_power_production_hopp + electrical_generation_timeseries = np.zeros_like(energy_to_electrolyzer) + electrical_generation_timeseries[:] = energy_to_electrolyzer[:] + + # system_rating = electrolyzer_size + H2_Results, H2A_Results = kernel_PEM_IVcurve( + electrical_generation_timeseries, + electrolyzer_size_mw, + useful_life, + kw_continuous, + electrolyzer_capex_kw, + lcoe, + adjusted_installed_cost, + net_capital_costs) + + + H2_Results['hydrogen_annual_output'] = H2_Results['hydrogen_annual_output'] + H2_Results['cap_factor'] = H2_Results['cap_factor'] + + print("Total power input to electrolyzer: {}".format(np.sum(electrical_generation_timeseries))) + print("Hydrogen Annual Output (kg): {}".format(H2_Results['hydrogen_annual_output'])) + print("Water Consumption (kg) Total: {}".format(H2_Results['water_annual_usage'])) + + + return H2_Results, H2A_Results # , electrical_generation_timeseries + From b3b057b24260b084f011c33ea1844976c48ba279 Mon Sep 17 00:00:00 2001 From: Cory Frontin Date: Wed, 9 Aug 2023 09:26:26 -0600 Subject: [PATCH 2/4] fix conflict w/ pull --- hopp/eco/electrolyzer.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/hopp/eco/electrolyzer.py b/hopp/eco/electrolyzer.py index eb8440584..c0b2d3b3b 100644 --- a/hopp/eco/electrolyzer.py +++ b/hopp/eco/electrolyzer.py @@ -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 import RO_desal_eco as RO_desal from hopp.simulation.technologies.hydrogen.electrolysis.pem_mass_and_footprint import ( mass as run_electrolyzer_mass, ) @@ -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( @@ -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( @@ -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"] @@ -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] @@ -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] @@ -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 = { @@ -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 From 252f2ff056156c7e5a7202fdeabfbdcc5ce567c2 Mon Sep 17 00:00:00 2001 From: Cory Frontin Date: Wed, 9 Aug 2023 11:49:21 -0600 Subject: [PATCH 3/4] less some plots, eco example working. --- .../input/plant/orbit-config-osw_18MW.yaml | 66 +++++++++++++------ hopp/eco/electrolyzer.py | 2 +- hopp/eco/finance.py | 58 ++++++++-------- 3 files changed, 75 insertions(+), 51 deletions(-) diff --git a/examples/eco/05-offshore-h2/input/plant/orbit-config-osw_18MW.yaml b/examples/eco/05-offshore-h2/input/plant/orbit-config-osw_18MW.yaml index 7ab7b581f..e1f3fe3bc 100644 --- a/examples/eco/05-offshore-h2/input/plant/orbit-config-osw_18MW.yaml +++ b/examples/eco/05-offshore-h2/input/plant/orbit-config-osw_18MW.yaml @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -122,7 +123,7 @@ 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: @@ -130,7 +131,7 @@ h2_storage_compressor: 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: @@ -144,13 +145,36 @@ 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 @@ -158,7 +182,7 @@ policy_parameters: # these should be adjusted for inflation prior to application 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 @@ -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) @@ -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 newline at end of file + # no storage diff --git a/hopp/eco/electrolyzer.py b/hopp/eco/electrolyzer.py index c0b2d3b3b..832e9aabf 100644 --- a/hopp/eco/electrolyzer.py +++ b/hopp/eco/electrolyzer.py @@ -5,7 +5,7 @@ # import hopp.tools.hopp_tools as hopp_tools -from hopp.simulation.technologies.hydrogen.desal.desal_model import RO_desal_eco as RO_desal +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, ) diff --git a/hopp/eco/finance.py b/hopp/eco/finance.py index 6dd00cd08..a9b6f50b3 100644 --- a/hopp/eco/finance.py +++ b/hopp/eco/finance.py @@ -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(): @@ -497,11 +497,11 @@ def run_profast_lcoe( % (design_scenario["id"]), show_plot=show_plots, ) - pf.plot_capital_expenses( - fileout="figures/wind_only/capital_expense_only_%i.png" - % (design_scenario["id"]), - show_plot=show_plots, - ) + # pf.plot_capital_expenses( + # fileout="figures/wind_only/capital_expense_only_%i.png" + # % (design_scenario["id"]), + # show_plot=show_plots, + # ) pf.plot_cashflow( fileout="figures/wind_only/cash_flow_wind_only_%i.png" % (design_scenario["id"]), @@ -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, @@ -735,15 +735,15 @@ def run_profast_grid_only( if not os.path.exists(savepath): os.mkdir(savepath) - pf.plot_capital_expenses( - fileout="figures/capex/capital_expense_grid_only_%i.pdf" % (design_scenario["id"]), - show_plot=show_plots, - ) - pf.plot_cashflow( - fileout="figures/annual_cash_flow/cash_flow_grid_only_%i.png" - % (design_scenario["id"]), - show_plot=show_plots, - ) + # pf.plot_capital_expenses( + # fileout="figures/capex/capital_expense_grid_only_%i.pdf" % (design_scenario["id"]), + # show_plot=show_plots, + # ) + # pf.plot_cashflow( + # fileout="figures/annual_cash_flow/cash_flow_grid_only_%i.png" + # % (design_scenario["id"]), + # show_plot=show_plots, + # ) pf.cash_flow_out_table.to_csv("data/cash_flow_grid_only_%i.csv" % (design_scenario["id"])) @@ -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, @@ -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, @@ -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 @@ -1163,15 +1163,15 @@ def run_profast_full_plant_model( if not os.path.exists(savepath): os.mkdir(savepath) - pf.plot_capital_expenses( - fileout="figures/capex/capital_expense_%i.pdf" % (design_scenario["id"]), - show_plot=show_plots, - ) - pf.plot_cashflow( - fileout="figures/annual_cash_flow/cash_flow_%i.png" - % (design_scenario["id"]), - show_plot=show_plots, - ) + # pf.plot_capital_expenses( + # fileout="figures/capex/capital_expense_%i.pdf" % (design_scenario["id"]), + # show_plot=show_plots, + # ) + # pf.plot_cashflow( + # fileout="figures/annual_cash_flow/cash_flow_%i.png" + # % (design_scenario["id"]), + # show_plot=show_plots, + # ) pf.cash_flow_out_table.to_csv("data/cash_flow_%i.csv" % (design_scenario["id"])) From 34adb51d2f51bdefb5047bf2230e522c7afa1f52 Mon Sep 17 00:00:00 2001 From: Cory Frontin Date: Wed, 9 Aug 2023 16:50:01 -0600 Subject: [PATCH 4/4] remove comments --- hopp/eco/finance.py | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/hopp/eco/finance.py b/hopp/eco/finance.py index a9b6f50b3..bcc05d7c7 100644 --- a/hopp/eco/finance.py +++ b/hopp/eco/finance.py @@ -497,11 +497,11 @@ def run_profast_lcoe( % (design_scenario["id"]), show_plot=show_plots, ) - # pf.plot_capital_expenses( - # fileout="figures/wind_only/capital_expense_only_%i.png" - # % (design_scenario["id"]), - # show_plot=show_plots, - # ) + pf.plot_capital_expenses( + fileout="figures/wind_only/capital_expense_only_%i.png" + % (design_scenario["id"]), + show_plot=show_plots, + ) pf.plot_cashflow( fileout="figures/wind_only/cash_flow_wind_only_%i.png" % (design_scenario["id"]), @@ -735,15 +735,15 @@ def run_profast_grid_only( if not os.path.exists(savepath): os.mkdir(savepath) - # pf.plot_capital_expenses( - # fileout="figures/capex/capital_expense_grid_only_%i.pdf" % (design_scenario["id"]), - # show_plot=show_plots, - # ) - # pf.plot_cashflow( - # fileout="figures/annual_cash_flow/cash_flow_grid_only_%i.png" - # % (design_scenario["id"]), - # show_plot=show_plots, - # ) + pf.plot_capital_expenses( + fileout="figures/capex/capital_expense_grid_only_%i.pdf" % (design_scenario["id"]), + show_plot=show_plots, + ) + pf.plot_cashflow( + fileout="figures/annual_cash_flow/cash_flow_grid_only_%i.png" + % (design_scenario["id"]), + show_plot=show_plots, + ) pf.cash_flow_out_table.to_csv("data/cash_flow_grid_only_%i.csv" % (design_scenario["id"])) @@ -1163,15 +1163,15 @@ def run_profast_full_plant_model( if not os.path.exists(savepath): os.mkdir(savepath) - # pf.plot_capital_expenses( - # fileout="figures/capex/capital_expense_%i.pdf" % (design_scenario["id"]), - # show_plot=show_plots, - # ) - # pf.plot_cashflow( - # fileout="figures/annual_cash_flow/cash_flow_%i.png" - # % (design_scenario["id"]), - # show_plot=show_plots, - # ) + pf.plot_capital_expenses( + fileout="figures/capex/capital_expense_%i.pdf" % (design_scenario["id"]), + show_plot=show_plots, + ) + pf.plot_cashflow( + fileout="figures/annual_cash_flow/cash_flow_%i.png" + % (design_scenario["id"]), + show_plot=show_plots, + ) pf.cash_flow_out_table.to_csv("data/cash_flow_%i.csv" % (design_scenario["id"]))