Cost and Revenue Calculations#
HydroGenerate will compute a project cost, O&M, and revenue. Cost and O&M are computed using the Hydropower Baseline Cost Modeling, Version 2 report, developed by Oak Ridge National Laboratory.
Revenue is computed using the weigthed average wholesale electricity price in 2023 (0.0582 $/kWh) obtained from the EIA by default, or a user entered price.
Exploring economic calcualtion options#
from HydroGenerate.hydropower_potential import calculate_hp_potential
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 1) Cost and Annual O&M as part of a project. Resource_category = 'Non-PoweredDam'
flow = 2000 # cfs
head = 1000 # ft
power = None
hydropower_type = 'Diversion'
penstock_length = 1200
resource_category = 'NewStream-reach'
capacity_factor = 0.6
hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
penstock_headloss_calculation= True,
hydropower_type= hydropower_type, penstock_length = penstock_length,
resource_category= resource_category,
capacity_factor = capacity_factor,
annual_caclulation = True)
print('\nResource Category:', hp.resource_category)
print('Initial Capital Cost (M$):', np.round(hp.icc,2))
print('Annual Operation and Maintennance (M$):', np.round(hp.annual_om,2))
print('Annual Revenue (M$):', np.round(hp.annual_revenue,2))
Resource Category: NewStream-reach
Initial Capital Cost (M$): 511.0
Annual Operation and Maintennance (M$): 3.26
Annual Revenue (M$): 33.3
# 2) resource_category: 'Non-PoweredDam'
head = 1000 # ft
power = 20000 # kW
hp = calculate_hp_potential(rated_power= power, head= head,
hydropower_type= None,
resource_category= 'Non-PoweredDam')
print('\nResource Category:', hp.resource_category)
print('Initial Capital Cost (M$):', np.round(hp.icc,2))
print('Annual Operation and Maintennance (M$):', np.round(hp.annual_om,2))
Resource Category: Non-PoweredDam
Initial Capital Cost (M$): 40.75
Annual Operation and Maintennance (M$): 1.02
# 3 Rewinding a generator. resource_caterogy= 'GeneratorRewind')
head = 104 # ft
power = 20500 # kWred dev
hp = calculate_hp_potential(rated_power= power, head= head,
hydropower_type= None,
resource_category= 'GeneratorRewind')
print('\nResource Category:', hp.resource_category)
print('Initial Capital Cost (M$):', np.round(hp.icc,1))
print('Annual Operation and Maintennance (M$):', np.round(hp.annual_om,1))
Resource Category: GeneratorRewind
Initial Capital Cost (M$): 3.0
Annual Operation and Maintennance (M$): 1.2
# 4 Adding a new unit. resource_caterogy= 'UnitAddition')
head = 104 # ft
power = 20500 # kW
hp = calculate_hp_potential(rated_power= power, head= head,
hydropower_type= None, resource_category= 'UnitAddition')
print('\nResource Category:', hp.resource_category)
print('Initial Capital Cost (M$):', np.round(hp.icc,1))
print('Annual Operation and Maintennance (M$):', np.round(hp.annual_om,1))
Resource Category: UnitAddition
Initial Capital Cost (M$): 39.0
Annual Operation and Maintennance (M$): 1.0
Using flow as a pandas dataframe and energy calculation#
flow = pd.read_csv('data_test.csv') # pandas data frame
flow['dateTime'] = pd.to_datetime(flow['dateTime']) # preprocessing convert to datetime
flow = flow.set_index('dateTime') # set datetime index # flolw is in cfs
head = 20 # ft
power = None
penstock_length = 50 # ft
hp_type = 'Diversion'
hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
pctime_runfull = 30,
penstock_headloss_calculation= True,
design_flow= None,
electricity_sell_price = 0.05,
resource_category= 'CanalConduit',
hydropower_type= hp_type, penstock_length= penstock_length,
flow_column= 'discharge_cfs', annual_caclulation= True)
pd.set_option('display.max_columns', 10) #
pd.set_option('display.width', 1000)
# Explore output
# print('Design flow (cfs):', hp.design_flow)
# print('Head_loss at design flow (ft):', round(hp.penstock_design_headloss, 2))
# print('Turbine type:', hp.turbine_type)
# print('Rated Power (Kw):', round(hp.rated_power, 2))
# print('Net head (ft):', round(hp.net_head, 2))
# print('Generator Efficiency:',hp.generator_efficiency)
# print('Head Loss method:',hp.penstock_headloss_method)
# print('Penstock length (ft):', hp.penstock_length)
# print('Penstock diameter (ft):', round(hp.penstock_diameter,2))
# print('Runner diameter (ft):', round(hp.runner_diameter,2))
print('\nResource Category:', hp.resource_category)
print('Initial Capital Cost (M$):', np.round(hp.icc,1))
print('Annual Operation and Maintennance (M$):', np.round(hp.annual_om,1))
print('\nPandas dataframe output: \n', hp.dataframe_output)
print('Annual output: \n', hp.annual_dataframe_output) # annual energy generated and revenue
Resource Category: CanalConduit
Initial Capital Cost (M$): 56.1
Annual Operation and Maintennance (M$): 0.9
Pandas dataframe output:
discharge_cfs site_id power_kW turbine_flow_cfs efficiency energy_kWh
dateTime
2010-01-01 08:00:00+00:00 3260.0 11370500 4417.413411 3260.0 0.825791 NaN
2010-01-01 08:15:00+00:00 3270.0 11370500 4437.662487 3270.0 0.827097 1109.415622
2010-01-01 08:30:00+00:00 3250.0 11370500 4397.114770 3250.0 0.824469 1099.278692
2010-01-01 08:45:00+00:00 3270.0 11370500 4437.662487 3270.0 0.827097 1109.415622
2010-01-01 09:00:00+00:00 3270.0 11370500 4437.662487 3270.0 0.827097 1109.415622
... ... ... ... ... ... ...
2021-01-01 06:45:00+00:00 3100.0 11370500 4086.646847 3100.0 0.802515 1021.661712
2021-01-01 07:00:00+00:00 3190.0 11370500 4274.278135 3190.0 0.816173 1068.569534
2021-01-01 07:15:00+00:00 3170.0 11370500 4232.933171 3170.0 0.813268 1058.233293
2021-01-01 07:30:00+00:00 3100.0 11370500 4086.646847 3100.0 0.802515 1021.661712
2021-01-01 07:45:00+00:00 3150.0 11370500 4191.387888 3150.0 0.810289 1047.846972
[385416 rows x 6 columns]
Annual output:
annual_turbinedvolume_ft3 mean_annual_effienciency total_annual_energy_KWh revenue_M$ capacity_factor
dateTime
2010 6.605955e+06 0.890552 8.136850e+07 4.068425 0.706769
2011 7.696602e+06 0.907936 9.468480e+07 4.734240 0.822435
2012 6.511915e+06 0.899117 8.102678e+07 4.051339 0.703801
2013 6.685759e+06 0.901904 8.281361e+07 4.140681 0.719322
2014 5.637207e+06 0.883477 6.988931e+07 3.494465 0.607061
2015 5.444864e+06 0.882418 6.832364e+07 3.416182 0.593461
2016 6.545640e+06 0.895130 8.106022e+07 4.053011 0.704092
2017 8.507096e+06 0.909318 1.037434e+08 5.187168 0.901118
2018 6.269139e+06 0.886202 7.704975e+07 3.852487 0.669257
2019 7.354655e+06 0.899037 9.021813e+07 4.510907 0.783638
2020 6.719952e+06 0.902407 8.339807e+07 4.169903 0.724398
2021 2.825733e+03 0.805338 3.300123e+04 0.001650 0.000287