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