-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Townsend snow #1251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Townsend snow #1251
Changes from 1 commit
0b736d4
3f2c40d
974d516
655fa79
c0c8b4d
f0e1f3a
78716f7
5e06a40
a5c5315
f79e906
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -214,26 +214,52 @@ def townsend_Se(S, N): | |
Available at https://www.researchgate.net/publication/261042016_Photovoltaics_and_snow_An_update_from_two_winters_of_measurements_in_the_SIERRA | ||
|
||
''' | ||
return (0.5 * S * (1 + 1/N)) | ||
return(np.where(N>0, 0.5 * S * (1 + 1/N), 0)) | ||
|
||
def townsend_snow_loss_model(x): | ||
def townsend_snow_loss_model(S, N, tilt, RH, T_air, POA, R, H, P=40): | ||
''' | ||
Loss, % = C1 x Se’ x cos2 | ||
(tilt) x GIT x RH / TAIR2 | ||
/ POA0.67Eqn. 3 | ||
Calculates monthly snow loss based on a generalized monthly snow loss model discussed in [1]_. | ||
|
||
Parameters | ||
---------- | ||
snow_coverage : numeric | ||
The fraction of row slant height covered by snow at each time step. | ||
S : numeric | ||
Inches of snow received in the current month | ||
|
||
num_strings: int | ||
The number of parallel-connected strings along a row slant height. | ||
N : numeric | ||
Number of snowfall events with snowfall > 1" | ||
|
||
tilt : numeric | ||
kandersolar marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Array tilt in degrees | ||
|
||
RH : numeric | ||
Relative humidity in percentage | ||
|
||
T_air : numeric | ||
Ambient temperature in celcius | ||
kandersolar marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
POA : numeric | ||
Plane of array irradiance in kWh/m2/month | ||
kandersolar marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
R : numeric | ||
Row length in the slanted plane of array dimension in inches | ||
|
||
H : numeric | ||
Drop height from array edge to ground in inches | ||
|
||
P : numeric | ||
piled snow angle, assumed to stabilize at 40° , the midpoint of | ||
25°-55° avalanching slope angles | ||
|
||
S_prev : numeric | ||
Inches of snow received in the previous month | ||
|
||
N_prev : numeric | ||
Number of 1" or greater snow events in the previous month | ||
|
||
Returns | ||
------- | ||
loss : numeric | ||
fraction of DC capacity loss due to snow coverage at each time step. | ||
Average monthly DC capacity loss in percentage due to snow coverage | ||
kandersolar marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's add a |
||
References | ||
---------- | ||
|
@@ -243,13 +269,20 @@ def townsend_snow_loss_model(x): | |
003231-003236. 10.1109/PVSC.2011.6186627. | ||
Available at https://www.researchgate.net/publication/261042016_Photovoltaics_and_snow_An_update_from_two_winters_of_measurements_in_the_SIERRA | ||
''' | ||
|
||
C1 = 5.7e04 | ||
C2 = 0.51 | ||
|
||
|
||
gamma = [R*Se’*cos(tilt)]/[(H2 – Se’2)/2*tan(P)] | ||
|
||
S_prev = np.roll(S,1) | ||
N_prev = np.roll(N,1) | ||
|
||
Se = townsend_Se(S, N) | ||
Se_prev = townsend_Se(S_prev, N_prev) | ||
|
||
Se_weighted = 1/3 * Se_prev + 2/3 * Se | ||
gamma = (R * Se_weighted * np.cos(np.deg2rad(tilt)))/(np.clip((H**2 - Se_weighted**2),a_min=0.01,a_max=None)/2/np.tan(np.deg2rad(P))) | ||
|
||
GIT = 1 - C2 * np.exp(-gamma) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd also change this to |
||
loss = C1 * Se_ * (np.cos(tilt))**2 * GIT * RH / T_air**2 / POA**0.67 | ||
loss = C1 * Se_weighted * (np.cos(np.deg2rad(tilt)))**2 * GIT * RH / (T_air+273.15)**2 / POA**0.67 | ||
|
||
return x**2 | ||
return (np.round(loss,2)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prefer
loss_townsend
, and would prefer more descriptive parameter names e.g.,snow_total
instead ofS
,num_events
instead ofN
. It's a good idea to maintain traceability to the terms used in the reference but we can do that in the description of each parameter.