Skip to content

Commit 70d5d5f

Browse files
committed
review
1 parent 775b746 commit 70d5d5f

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

docs/notebooks/2.3 Dust Soiling with Kimber.ipynb

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
"id": "43cd9359-32f3-455a-b9a2-3f419adacc32",
66
"metadata": {},
77
"source": [
8-
"July 2024 has been an exceptional month in terms of irradiance anomalies in North America. In one of [Solcast's weekly PVMag publications](https://www.pv-magazine.com/2024/08/02/aerosols-from-wildfires-slash-north-american-solar-production/) we have highlighted how irradiance was severely impacted in the north west of the continent by aerosols deriving from the raging Canadian wildfires.\n",
8+
"July 2024 was an exceptional month in terms of irradiance anomalies in North America. In one of [Solcast's weekly PVMag publications](https://www.pv-magazine.com/2024/08/02/aerosols-from-wildfires-slash-north-american-solar-production/) we have highlighted how irradiance was severely impacted in the north west of the continent by aerosols deriving from the raging Canadian wildfires.\n",
99
"\n",
10-
"In addition to the reduced irradiance from the aerosol's absorption, another factor to take into account into the overall impact of these aerosols on solar generation is dust soilig as the accumulated particles block or scatter incident light, further reducing power output.g.\n",
10+
"In addition to the reduced irradiance from the aerosol's absorption, another factor to take into account into the overall impact of these aerosols on solar generation is dust soiling as the accumulated particles block or scatter incident light, further reducing power output.\n",
1111
"\n",
12-
"In this tutorial we are going to see how we can model aerosols using PVLib and Solcast's weather data while trying to see the impact of these aerosols on a site that may have been affected by these wildfires.\n",
12+
"In this tutorial we are going to see how we can model aerosols using the `pvlib` python toolbox and Solcast's weather data while trying to see the impact of these aerosols on a site that may have been affected by these wildfires.\n",
1313
"\n",
14-
"First off, install `PVlib`."
14+
"First off, install `pvlib`."
1515
]
1616
},
1717
{
@@ -21,7 +21,7 @@
2121
"metadata": {},
2222
"outputs": [],
2323
"source": [
24-
"#!pip install pvlib"
24+
"!pip install pvlib"
2525
]
2626
},
2727
{
@@ -47,7 +47,7 @@
4747
"id": "ee2cf545-b391-408f-9f6e-d83f1a55c2a8",
4848
"metadata": {},
4949
"source": [
50-
"lets use one of [Solcast's unmetered locations](https://docs.solcast.com.au/#unmetered-locations) so you don't use up your requests. We choose Fort Peck from SURFRAD sites"
50+
"We can use one of [Solcast's unmetered locations](https://docs.solcast.com.au/#unmetered-locations) so you don't use up your requests. We choose Fort Peck from SURFRAD sites."
5151
]
5252
},
5353
{
@@ -67,7 +67,7 @@
6767
"id": "cfb8ef5b-8072-4b51-afff-75c6dcf72304",
6868
"metadata": {},
6969
"source": [
70-
"now lets use `pvlib.iotools.solcast` to fetch the hourly precipitation rate"
70+
"now let's use `pvlib.iotools.solcast` to fetch the hourly precipitation rate."
7171
]
7272
},
7373
{
@@ -161,7 +161,9 @@
161161
"id": "e14906a4-5289-4e81-ad54-f0ac02184edc",
162162
"metadata": {},
163163
"source": [
164-
"We create a new column `accumulated_rainfall` with the daily total rainfall, i.e. the total rainfall in the preceding 24h. This is the same that the Kimber algorithm does: when this accumulation reaches the cleaning threshold, the soiling rate returns to 0."
164+
"To assist in the interpretation of results, we create a new column `accumulated_rainfall` with the daily total rainfall, i.e. the total rainfall in the preceding 24h. This matches what the Kimber algorithm does: when this accumulation reaches the cleaning threshold, the soiling rate returns to 0.\n",
165+
"\n",
166+
"We also set up a plotting function to superimpose the accumulation on the soiling rate results."
165167
]
166168
},
167169
{
@@ -184,8 +186,14 @@
184186
"metadata": {},
185187
"outputs": [],
186188
"source": [
187-
"def plot(time_labels: pd.DatetimeIndex, precip_rate: pd.Series, precipt_daily: pd.Series, soiling: pd.Series, threshold: int=15):\n",
188-
" \"\"\"function that plots the precipitation accumulation alognside soiling rate.\n",
189+
"def plot(\n",
190+
" time_labels: pd.DatetimeIndex, \n",
191+
" precip_rate: pd.Series, \n",
192+
" precip_daily: pd.Series, \n",
193+
" soiling: pd.Series, \n",
194+
" threshold: int=15\n",
195+
"):\n",
196+
" \"\"\"function that plots the precipitation accumulation alongside soiling rate.\n",
189197
"\n",
190198
" Args:\n",
191199
" time_labels: the datetime values to use for the x-axis\n",
@@ -207,7 +215,7 @@
207215
" ax2.hlines(y=threshold, xmin=time_labels.min(), xmax=time_labels.max(), linestyle='--', label='cleaning threshold')\n",
208216
" \n",
209217
" # bar plot of the daily sum of the rainfall\n",
210-
" ax2.plot(time_labels, precipt_daily, label=\"daily rain accumulation\", alpha=0.5)\n",
218+
" ax2.plot(time_labels, precip_daily, label=\"daily rain accumulation\", alpha=0.5)\n",
211219
" ax2.plot(time_labels, precip_rate, label=\"precipitation rate\", color='blue', linewidth=0.5)\n",
212220
" ax2.set_ylabel(\"precipitation (mm)\", color='blue')\n",
213221
" \n",
@@ -220,7 +228,7 @@
220228
"id": "b41002b6-f460-438b-b833-9dc4270207d7",
221229
"metadata": {},
222230
"source": [
223-
"once we have the rainfall data we can use `pvlib.soiling.kimber` to compute the energy loss from soiling, starting from the rainfall obtained and a daily soiling loss rate. More information regarding the algorithm and the parameters can be found in [PVLib's documentation](https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.soiling.kimber.html)."
231+
"Once we have the rainfall data we can use `pvlib.soiling.kimber` to compute the energy loss from soiling, starting from the rainfall obtained and a daily soiling loss rate. More information regarding the algorithm and the parameters can be found in [pvlib's documentation](https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.soiling.kimber.html)."
224232
]
225233
},
226234
{
@@ -251,7 +259,8 @@
251259
"soiling = kimber(\n",
252260
" rainfall_data.precipitation_rate, \n",
253261
" cleaning_threshold=15.0, \n",
254-
" grace_period=3, # Number of days after a rainfall event when it’s assumed the ground is damp, and so it’s assumed there is no soiling. \n",
262+
" grace_period=3, # Number of days after a rainfall event \n",
263+
" # when it’s assumed the ground is damp, and so it’s assumed there is no soiling. \n",
255264
" soiling_loss_rate=0.0015 # Fraction of energy lost due to one day of soiling.\n",
256265
")\n",
257266
"\n",
@@ -267,7 +276,7 @@
267276
"id": "e40e524d-e69a-46e4-ad0d-1de99e345df8",
268277
"metadata": {},
269278
"source": [
270-
"As we can see May and July have rarely seen enough rainfall to surpass our rainfall accumulation threshold and therefore soiling losses increase throughout the month, reaching a rate as high as ~6% if no cleaning is applied. Soiling rate averages 3% across the period. Lowering the cleaning threshold, like for tilted panels, will give us a lower rate: with 10mm of rain set as the threshold the average soiling rate is 1.5%."
279+
"As we can see, May and July have rarely experienced enough rainfall to surpass our rainfall accumulation threshold and therefore soiling losses increase throughout the month, reaching a rate as high as ~6% if no cleaning is applied. Soiling rate averages 3% across the period. Lowering the cleaning threshold, e.g. for more tilted panels, will give us a lower rate: with 10mm of rain set as the threshold, the average soiling rate is 1.5%."
271280
]
272281
},
273282
{
@@ -314,7 +323,7 @@
314323
"id": "8415b306-64db-4115-88e4-92c25abde8c9",
315324
"metadata": {},
316325
"source": [
317-
"The Kimber implementation in PVLib allows to specify `manual_wash_dates`. Below we set a biweekly schedule when our panels will be cleaned, bringing the soling loss back to zero without starting a \"grace period\":"
326+
"The Kimber implementation in `pvlib` allows specification of `manual_wash_dates`. Below we set a biweekly schedule on which our panels will be cleaned, bringing the soiling loss back to zero without starting a \"grace period\":"
318327
]
319328
},
320329
{
@@ -362,7 +371,7 @@
362371
"id": "aebc90fe-e944-403d-8872-d2652c7c57a8",
363372
"metadata": {},
364373
"source": [
365-
"The result is that, given our soiling rates assumptions, the soiling losses are 1/3 or less of the losses that this site would have seen during this period if a bi-weekly cleaning schedule was to be implemented."
374+
"The result is that, given our soiling rate assumptions, the soiling losses are 1/3 or less of the losses that this site would have seen during this period if a bi weekly cleaning schedule was to be implemented."
366375
]
367376
},
368377
{

0 commit comments

Comments
 (0)