shading fraction makes sense need to fix optimiser
This commit is contained in:
parent
5792640d30
commit
2cae51ccbf
@ -27,7 +27,7 @@ def optimise_vertical_panel_pitch(c):
|
|||||||
# perform minimization
|
# perform minimization
|
||||||
initial_pitch = c["array"]["spacing"]
|
initial_pitch = c["array"]["spacing"]
|
||||||
result = minimize(
|
result = minimize(
|
||||||
objective, initial_pitch, bounds=[(0, 5)], tol=1e-8, options={"eps": 0.5}
|
objective, initial_pitch, bounds=[(0, 20)], tol=1e-8, options={"eps": 1}
|
||||||
)
|
)
|
||||||
optimal_pitch = result.x[0]
|
optimal_pitch = result.x[0]
|
||||||
c["array"]["spacing"] = optimal_pitch
|
c["array"]["spacing"] = optimal_pitch
|
||||||
|
@ -128,9 +128,9 @@ def get_solar_data(c):
|
|||||||
def sanity_check_minimum_pitch(c):
|
def sanity_check_minimum_pitch(c):
|
||||||
solar_positions, _ = get_solar_data(c)
|
solar_positions, _ = get_solar_data(c)
|
||||||
zenith = solar_positions["zenith"].values
|
zenith = solar_positions["zenith"].values
|
||||||
solar_positions["shadow_length"] = (
|
solar_positions["shadow_length"] = (c["panel"]["dimensions"]["length"]) * np.tan(
|
||||||
c["panel"]["dimensions"]["length"] + c["environment"]["height"]
|
zenith / 180 * np.pi
|
||||||
) * np.tan(zenith / 180 * np.pi)
|
)
|
||||||
return solar_positions
|
return solar_positions
|
||||||
|
|
||||||
|
|
||||||
@ -150,10 +150,17 @@ def calculate_energy_production_vertical(c):
|
|||||||
shaded_row_rotation = 90
|
shaded_row_rotation = 90
|
||||||
shading_row_rotation = 90
|
shading_row_rotation = 90
|
||||||
axis_tilt = 0
|
axis_tilt = 0
|
||||||
axis_azimuth = 90
|
axis_azimuth = 180
|
||||||
|
|
||||||
|
morning_projected_solar_zenith = pvlib.shading.projected_solar_zenith_angle(
|
||||||
|
solar_zenith=solar_positions["apparent_zenith"],
|
||||||
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
|
axis_azimuth=axis_azimuth,
|
||||||
|
axis_tilt=axis_tilt,
|
||||||
|
)
|
||||||
|
|
||||||
morning_shaded_fraction = pvlib.shading.shaded_fraction1d(
|
morning_shaded_fraction = pvlib.shading.shaded_fraction1d(
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=morning_projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
axis_azimuth=axis_azimuth,
|
axis_azimuth=axis_azimuth,
|
||||||
shaded_row_rotation=shaded_row_rotation,
|
shaded_row_rotation=shaded_row_rotation,
|
||||||
@ -165,8 +172,14 @@ def calculate_energy_production_vertical(c):
|
|||||||
)
|
)
|
||||||
morning_shaded_fraction = morning_shaded_fraction * no_of_shaded_rows / no_of_rows
|
morning_shaded_fraction = morning_shaded_fraction * no_of_shaded_rows / no_of_rows
|
||||||
|
|
||||||
|
afternoon_projected_solar_zenith = pvlib.shading.projected_solar_zenith_angle(
|
||||||
|
solar_zenith=solar_positions["apparent_zenith"],
|
||||||
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
|
axis_azimuth=axis_azimuth + 180,
|
||||||
|
axis_tilt=axis_tilt,
|
||||||
|
)
|
||||||
afternoon_shaded_fraction = pvlib.shading.shaded_fraction1d(
|
afternoon_shaded_fraction = pvlib.shading.shaded_fraction1d(
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=afternoon_projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
axis_azimuth=axis_azimuth + 180,
|
axis_azimuth=axis_azimuth + 180,
|
||||||
shaded_row_rotation=shaded_row_rotation,
|
shaded_row_rotation=shaded_row_rotation,
|
||||||
@ -185,8 +198,8 @@ def calculate_energy_production_vertical(c):
|
|||||||
# calculate irradiance on plane of array
|
# calculate irradiance on plane of array
|
||||||
poa_front = pvlib.irradiance.get_total_irradiance(
|
poa_front = pvlib.irradiance.get_total_irradiance(
|
||||||
surface_tilt=90,
|
surface_tilt=90,
|
||||||
surface_azimuth=axis_azimuth,
|
surface_azimuth=90,
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=morning_projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
dni=clearsky_data["dni"],
|
dni=clearsky_data["dni"],
|
||||||
ghi=clearsky_data["ghi"],
|
ghi=clearsky_data["ghi"],
|
||||||
@ -198,8 +211,8 @@ def calculate_energy_production_vertical(c):
|
|||||||
|
|
||||||
poa_rear = pvlib.irradiance.get_total_irradiance(
|
poa_rear = pvlib.irradiance.get_total_irradiance(
|
||||||
surface_tilt=180 - 90,
|
surface_tilt=180 - 90,
|
||||||
surface_azimuth=axis_azimuth + 180,
|
surface_azimuth=90 + 180,
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=afternoon_projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
dni=clearsky_data["dni"],
|
dni=clearsky_data["dni"],
|
||||||
ghi=clearsky_data["ghi"],
|
ghi=clearsky_data["ghi"],
|
||||||
@ -254,10 +267,17 @@ def calculate_energy_production_horizontal(c):
|
|||||||
shaded_row_rotation = 0
|
shaded_row_rotation = 0
|
||||||
shading_row_rotation = 0
|
shading_row_rotation = 0
|
||||||
axis_tilt = 0
|
axis_tilt = 0
|
||||||
axis_azimuth = 180 # south facing
|
axis_azimuth = 90 # south facing
|
||||||
|
|
||||||
|
projected_solar_zenith = pvlib.shading.projected_solar_zenith_angle(
|
||||||
|
solar_zenith=solar_positions["apparent_zenith"],
|
||||||
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
|
axis_azimuth=axis_azimuth,
|
||||||
|
axis_tilt=axis_tilt,
|
||||||
|
)
|
||||||
|
|
||||||
shaded_fraction = pvlib.shading.shaded_fraction1d(
|
shaded_fraction = pvlib.shading.shaded_fraction1d(
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
axis_azimuth=axis_azimuth,
|
axis_azimuth=axis_azimuth,
|
||||||
shaded_row_rotation=shaded_row_rotation,
|
shaded_row_rotation=shaded_row_rotation,
|
||||||
@ -271,8 +291,8 @@ def calculate_energy_production_horizontal(c):
|
|||||||
|
|
||||||
poa = pvlib.irradiance.get_total_irradiance(
|
poa = pvlib.irradiance.get_total_irradiance(
|
||||||
surface_tilt=0,
|
surface_tilt=0,
|
||||||
surface_azimuth=axis_azimuth,
|
surface_azimuth=180,
|
||||||
solar_zenith=solar_positions["zenith"],
|
solar_zenith=projected_solar_zenith,
|
||||||
solar_azimuth=solar_positions["azimuth"],
|
solar_azimuth=solar_positions["azimuth"],
|
||||||
dni=clearsky_data["dni"],
|
dni=clearsky_data["dni"],
|
||||||
ghi=clearsky_data["ghi"],
|
ghi=clearsky_data["ghi"],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
array:
|
array:
|
||||||
peak_power_demand: 900 # in kWac
|
peak_power_demand: 900 # in kWac
|
||||||
DC_AC_ratio: 1.2 # ratio of DC to AC power
|
DC_AC_ratio: 1.2 # ratio of DC to AC power
|
||||||
spacing: 0.4 # spacing between adjacent panel rows in m
|
spacing: 3 # spacing between adjacent panel rows in m
|
||||||
edge_setback: 1.8 # distance from the edge of the roof to the array
|
edge_setback: 1.8 # distance from the edge of the roof to the array
|
||||||
roof_slope: 0
|
roof_slope: 0
|
||||||
slope: 0 # degrees from horizontal (+ve means shaded row is higher than the row in front)
|
slope: 0 # degrees from horizontal (+ve means shaded row is higher than the row in front)
|
||||||
@ -16,7 +16,7 @@ environment:
|
|||||||
roof:
|
roof:
|
||||||
dimensions:
|
dimensions:
|
||||||
# dimensions all in m
|
# dimensions all in m
|
||||||
length: 50
|
length: 100
|
||||||
width: 40
|
width: 40
|
||||||
albedo: 0.2 # % of light reflected from the surface
|
albedo: 0.2 # % of light reflected from the surface
|
||||||
tilt: 0 # degrees from horizontal
|
tilt: 0 # degrees from horizontal
|
||||||
|
Loading…
x
Reference in New Issue
Block a user