-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add polo-smm #2491
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
base: main
Are you sure you want to change the base?
Add polo-smm #2491
Changes from 1 commit
3363ace
ceba758
36c9b43
eaa90b4
794ed98
7926a3d
988557c
45e768f
38e5694
c24e013
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -710,3 +710,102 @@ def spectral_factor_jrc(airmass, clearsky_index, module_type=None, | |||||
+ coeff[2] * (airmass - 1.5) | ||||||
) | ||||||
return mismatch | ||||||
|
||||||
def spectral_factor_polo(precipitable_water, airmass_absolute, aod500, aoi, altitude, | ||||||
module_type=None, coefficients=None, albedo=0.2): | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
""" | ||||||
Estimation of spectral mismatch for BIPV application in vertical facades. | ||||||
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.
Suggested change
I think the imperative form is standard practice for the summary line |
||||||
|
||||||
|
||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
Parameters | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
---------- | ||||||
precipitable_water : numeric | ||||||
atmospheric precipitable water. [cm] | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
airmass_absolute : numeric | ||||||
absolute (pressure-adjusted) airmass. [unitless] | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
aod500 : numeric | ||||||
atmospheric aerosol optical depth at 500 nm. [unitless] | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
aoi : numeric | ||||||
angle of incidence. [degrees] | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
altitude: numeric | ||||||
altitude over sea level. [m] | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
module_type : str, optional | ||||||
One of the following PV technology strings from [1]_: | ||||||
|
||||||
* ``'cdte'`` - anonymous CdTe module. | ||||||
* ``'monosi'`` - anonymous sc-si module. | ||||||
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.
Suggested change
What is "sc-si"? Is this a typo and should be "monocrystalline Si"? |
||||||
* ``'cigs'`` - anonymous copper indium gallium selenide module. | ||||||
* ``'asi'`` - anonymous amorphous silicon module. | ||||||
albedo | ||||||
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. Can albedo both be a float and an array? 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. Not sure, I always thought it as a float, since it refers to a total albedo. 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 was more wondering if the code allows for albedo being passed in as a time series? 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.
+1 to making this possible if not already |
||||||
Ground albedo (default value if 0.2). [unitless] | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
coefficients : array-like, optional | ||||||
user-defined coefficients, if not using one of the default coefficient | ||||||
sets via the ``module_type`` parameter. | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
Returns | ||||||
------- | ||||||
modifier: numeric | ||||||
spectral mismatch factor (unitless) which is multiplied | ||||||
with broadband irradiance reaching a module's cells to estimate | ||||||
effective irradiance, i.e., the irradiance that is converted to | ||||||
electrical current. | ||||||
|
||||||
References | ||||||
---------- | ||||||
[1]. Polo, J., Sanz-saiz, C., Development of spectral mismatch models | ||||||
for BIPV applications in building façades Abbreviations : Renew. Energy 245, 122820, 2025. | ||||||
https://doi.org/10.1016/j.renene.2025.122820 | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
""" | ||||||
if module_type is None and coefficients is None: | ||||||
raise ValueError('Must provide either `module_type` or `coefficients`') | ||||||
if module_type is not None and coefficients is not None: | ||||||
raise ValueError('Only one of `module_type` and `coefficients` should ' | ||||||
'be provided') | ||||||
|
||||||
am_aoi=pvlib.atmosphere.get_relative_airmass(aoi) | ||||||
pressure=pvlib.atmosphere.alt2pres(altitude) | ||||||
am90=pvlib.atmosphere.get_absolute_airmass(am_aoi,pressure) | ||||||
Ram=am90/airmass_absolute | ||||||
|
||||||
_coefficients={} | ||||||
_coefficients['cdte']=( | ||||||
-0.0009,46.80,49.20,-0.87, 0.00041,0.053 ) | ||||||
_coefficients['monosi']=( | ||||||
0.0027,10.34,9.48,0.307,0.00077,0.006 ) | ||||||
_coefficients['cigs']=( | ||||||
0.0017,2.33,1.30,0.11,0.00098,-0.0177 ) | ||||||
_coefficients['asi']=( | ||||||
0.0024,7.32,7.09,-0.72,-0.0013,0.089 ) | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
c={} | ||||||
c['asi']=(0.0056,-0.020,1.014) | ||||||
c['cigs']=(-0.0009,-0.0003,1) | ||||||
c['cdte']=(0.0021,-0.01,1.01) | ||||||
c['monosi']=(0,-0.003,1.0) | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
if module_type is not None: | ||||||
coeff = _coefficients[module_type] | ||||||
c_albedo=c[module_type] | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
else: | ||||||
coeff = coefficients | ||||||
c_albedo=(0.0,0.0,1.0) # 0.2 albedo assumed | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
albedo=0.2 | ||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
|
||||||
smm=coeff[0]*Ram+coeff[1]/(coeff[2]+Ram**coeff[3])+coeff[4]/aod500+coeff[5]*np.sqrt(precipitable_water) | ||||||
# Ground albedo correction | ||||||
|
||||||
g=c_albedo[0]*(albedo/0.2)**2+c_albedo[1]*(albedo/0.2)+c_albedo[2] | ||||||
|
||||||
|
||||||
return g*smm | ||||||
|
||||||
jesuspolo marked this conversation as resolved.
Show resolved
Hide resolved
|
Uh oh!
There was an error while loading. Please reload this page.