Diversion Mode#

Using hydropower_type = Diversion allows computing hydropower potential for a diversion or run-of-river project.

A diversion, sometimes called a run-of-river facility, channels a portion of a river through a canal and/or a penstock to utilize the natural decline of the river bed elevation to produce energy. A penstock is a closed conduit that channels the flow of water to turbines with water flow regulated by gates, valves, and turbines. A diversion may not require the use of a dam. Check DOE - Types of Hydropower Plant for additional information.

In diversion projects, HydroGenerate focuses on calculating hydropower under different configurations.

In this calculation, the flow given is assumed to be the flow aaliable for hydropower generation, i.e., no reservoir storage operation.

from HydroGenerate.hydropower_potential import calculate_hp_potential
import numpy as np

Head, power, and length of penstock are known. Flow is a single value.#

In this scenario HydroGenerate will select a turbine, compute efficiency for the given flow and values within 0.6 to 1.2 the given flow, penstock diameter (assuming steel if no material is given), head loss for all flows, rater power, power a given range of flow.

flow = 5000 # cfs
head = 330 # ft
power = None
penstock_length = 400 # ft
hp_type = 'Diversion'

hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
                            penstock_headloss_calculation= True,
                            # penstock_headloss_method= 'Hazen-Williams',
                            units= 'US',
                            hydropower_type= hp_type, penstock_length= penstock_length,
                            # penstock_diameter= 15,
                            max_headloss_allowed= 10)

# Explore output
print('Design flow (cfs):', hp.design_flow)
print('Turbine type:', hp.turbine_type)
print('Rated Power (MW):', round(hp.rated_power/1000, 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('\nFlow range evaluated (cfs):', np.round(hp.flow, 1))
print('Turbine Efficiency for the given flow range:', np.round(hp.turbine_efficiency, 3))
print('Power (Kw) for the given flow range:', np.round(hp.power,1))
Design flow (cfs): 5000.0
Turbine type: Francis
Rated Power (MW): 116.74
Net head (ft): 298.06
Generator Efficiency: 0.98
Head Loss method: Darcy-Weisbach
Penstock length (ft): 400.0
Penstock diameter (ft): 11.84
Runner diameter (ft): 14.0

Flow range evaluated (cfs): [2500.  2647.1 2794.1 2941.2 3088.2 3235.3 3382.4 3529.4 3676.5 3823.5
 3970.6 4117.6 4264.7 4411.8 4558.8 4705.9 4852.9 5000. ]
Turbine Efficiency for the given flow range: [0.867 0.887 0.902 0.915 0.925 0.932 0.938 0.941 0.943 0.944 0.944 0.944
 0.944 0.944 0.943 0.943 0.943 0.943]
Power (Kw) for the given flow range: [ 57943.8  62522.7  66959.4  71235.5  75338.2  79260.6  83001.7  86566.9
  89968.8  93227.9  96375.4  99438.2 102444.2 105393.8 108284.9 111115.8
 113884.6 116589.4]

Exploring additional options:#

HydroGenerate includes two functions for head loss calculation: 1) Darcy-Weisbach (default) 2) Hazen-Williams.

# Using Hazen-Williams for head loss calculation.

flow = 8000 # cfs
head = 20 # ft
power = None
penstock_length = 50 # ft
hp_type = 'Diversion'
headloss_method= "Hazen-Williams"

hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
                            penstock_headloss_calculation= True,
                           hydropower_type= hp_type, penstock_length= penstock_length,
                           penstock_headloss_method= headloss_method)



# 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('\nFlow range evaluated (cfs):', np.round(hp.flow, 1))
print('Turbine Efficiency for the given flow range:', np.round(hp.turbine_efficiency ,3))
print('Power (kW) for the given flow range:', np.round(hp.power, 1))
Design flow (cfs): 8000.0
Head_loss at design flow (ft): 2.0
Turbine type: Kaplan
Rated Power (Kw): 10885.57
Net head (ft): 18.0
Generator Efficiency: 0.98
Head Loss method: Hazen-Williams
Penstock length (ft): 50.0
Penstock diameter (ft): 12.24
Runner diameter (ft): 17.49

Flow range evaluated (cfs): [4000.  4235.3 4470.6 4705.9 4941.2 5176.5 5411.8 5647.1 5882.4 6117.6
 6352.9 6588.2 6823.5 7058.8 7294.1 7529.4 7764.7 8000. ]
Turbine Efficiency for the given flow range: [0.907 0.909 0.91  0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911
 0.911 0.911 0.911 0.91  0.909 0.907]
Power (kW) for the given flow range: [ 5851.8  6192.   6522.7  6846.   7163.7  7476.6  7785.2  8089.8  8390.2
  8686.4  8978.2  9265.4  9547.8  9824.7 10094.9 10356.2 10604.5 10833.3]
# Exploring additional options:
# Using Hazen-Williams for head loss calculation and a concrete penstock
#  Selecting a diffrent material for the penstock

flow = 8000 # cfs
head = 20 # ft
power = None
penstock_length = 50 # ft
hp_type = 'Diversion'
headloss_method= "Hazen-Williams"
penstock_material = 'Concrete'

hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
                           hydropower_type= hp_type, penstock_length= penstock_length,
                           penstock_headloss_calculation= True,
                           penstock_headloss_method= headloss_method, penstock_material= penstock_material)

# 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('\nFlow range evaluated (cfs):', np.round(hp.flow, 1))
print('Turbine Efficiency for the given flow range:', np.round(hp.turbine_efficiency ,3))
print('Power (kW) for the given flow range:', np.round(hp.power, 1))
Design flow (cfs): 8000.0
Head_loss at design flow (ft): 2.0
Turbine type: Kaplan
Rated Power (Kw): 10885.57
Net head (ft): 18.0
Generator Efficiency: 0.98
Head Loss method: Hazen-Williams
Penstock length (ft): 50.0
Penstock diameter (ft): 12.76
Runner diameter (ft): 17.49

Flow range evaluated (cfs): [4000.  4235.3 4470.6 4705.9 4941.2 5176.5 5411.8 5647.1 5882.4 6117.6
 6352.9 6588.2 6823.5 7058.8 7294.1 7529.4 7764.7 8000. ]
Turbine Efficiency for the given flow range: [0.907 0.909 0.91  0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911
 0.911 0.911 0.911 0.91  0.909 0.907]
Power (kW) for the given flow range: [ 5851.8  6192.   6522.7  6846.   7163.7  7476.6  7785.2  8089.8  8390.2
  8686.4  8978.2  9265.4  9547.8  9824.7 10094.9 10356.2 10604.5 10833.3]
# Exploring additional options:
#  Using Hazen-Williams for head loss calculation and using a diffrent C value
# Note: editing hydraulic_processing.py allows adding materials that can be called by name.

flow = 8000 # cfs
head = 20 # ft
power = None
penstock_length = 50 # ft
hp_type = 'Diversion'
headloss_method= "Hazen-Williams"
C = 100 # Hazen_williamns C

hp = calculate_hp_potential(flow= flow, rated_power= power, head= head,
                           penstock_headloss_calculation= True,
                           hydropower_type= hp_type, penstock_length= penstock_length,
                           penstock_headloss_method= headloss_method, penstock_frictionfactor= C)

# 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('\nFlow range evaluated (cfs):', np.round(hp.flow, 1))
print('Turbine Efficiency for the given flow range:', np.round(hp.turbine_efficiency ,3))
print('Power (kW) for the given flow range:', np.round(hp.power, 1))
Design flow (cfs): 8000.0
Head_loss at design flow (ft): 2.0
Turbine type: Kaplan
Rated Power (Kw): 10885.57
Net head (ft): 18.0
Generator Efficiency: 0.98
Head Loss method: Hazen-Williams
Penstock length (ft): 50.0
Penstock diameter (ft): 14.1
Runner diameter (ft): 17.49

Flow range evaluated (cfs): [4000.  4235.3 4470.6 4705.9 4941.2 5176.5 5411.8 5647.1 5882.4 6117.6
 6352.9 6588.2 6823.5 7058.8 7294.1 7529.4 7764.7 8000. ]
Turbine Efficiency for the given flow range: [0.907 0.909 0.91  0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911 0.911
 0.911 0.911 0.911 0.91  0.909 0.907]
Power (kW) for the given flow range: [ 5851.8  6192.   6522.7  6846.   7163.7  7476.6  7785.2  8089.8  8390.2
  8686.4  8978.2  9265.4  9547.8  9824.7 10094.9 10356.2 10604.5 10833.3]