-
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 5 commits
3363ace
ceba758
36c9b43
eaa90b4
794ed98
7926a3d
988557c
45e768f
38e5694
c24e013
0a00f1b
2a9d0db
f296c7b
ce862d8
11336ab
e418218
fb0ad0e
450dd37
1eb3293
4892e8d
7513f3e
3e4dd56
b9d21ac
49c8c91
fa3ff32
31fe508
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,86 @@ | |
| + 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): | ||
| """ | ||
| Estimation of spectral mismatch for BIPV application in vertical facades. | ||
AdamRJensen marked this conversation as resolved.
Outdated
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.
Outdated
Show resolved
Hide resolved
|
||
| airmass_absolute : numeric | ||
| absolute (pressure-adjusted) airmass. [unitless] | ||
| aod500 : numeric | ||
| atmospheric aerosol optical depth at 500 nm. [unitless] | ||
| aoi : numeric | ||
| angle of incidence. [degrees] | ||
AdamRJensen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| altitude: numeric | ||
| altitude over sea level. [m] | ||
| module_type : str, optional | ||
| One of the following PV technology strings from [1]_: | ||
|
Member
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. Are the SR curves used to develop this model open data? |
||
| * ``'cdte'`` - anonymous CdTe module. | ||
| * ``'monosi'`` - anonymous sc-si module. | ||
AdamRJensen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| * ``'cigs'`` - anonymous copper indium gallium selenide module. | ||
| * ``'asi'`` - anonymous amorphous silicon module. | ||
| albedo | ||
|
||
| Ground albedo (default value if 0.2). [unitless] | ||
AdamRJensen marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| coefficients : array-like, optional | ||
| user-defined coefficients, if not using one of the default coefficient | ||
| set via the ``module_type`` parameter. | ||
AdamRJensen marked this conversation as resolved.
Outdated
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.:doi:`10.1016/j.renene.2025.122820` | ||
AdamRJensen marked this conversation as resolved.
Outdated
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) | ||
AdamRJensen marked this conversation as resolved.
Show resolved
Hide resolved
Member
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. This will produce a |
||
| 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), | ||
| 'monosi': (0.0027, 10.34, 9.48, 0.307, 0.00077, 0.006), | ||
| 'cigs': (0.0017, 2.33, 1.30, 0.11, 0.00098, -0.0177), | ||
| 'asi': (0.0024, 7.32, 7.09, -0.72, -0.0013, 0.089), | ||
| } | ||
| c = { | ||
| 'asi': (0.0056, -0.020, 1.014), | ||
| 'cigs': (-0.0009, -0.0003, 1), | ||
| 'cdte': (0.0021, -0.01, 1.01), | ||
| 'monosi': (0, -0.003, 1.0), | ||
| } | ||
| if module_type is not None: | ||
| coeff = _coefficients[module_type] | ||
| c_albedo = c[module_type] | ||
| else: | ||
| coeff = coefficients | ||
| c_albedo = (0.0, 0.0, 1.0) # 0.2 albedo assumed | ||
| albedo = 0.2 | ||
AdamRJensen marked this conversation as resolved.
Outdated
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 | ||
Uh oh!
There was an error while loading. Please reload this page.