- 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 6 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] J. Polo and C. Sanz-Saiz, 'Development of spectral mismatch models | ||
| for BIPV applications in building façades', Renewable Energy, vol. 245, | ||
| p. 122820, Jun. 2025,:doi:`10.1016/j.renene.2025.122820` | ||
| """ | ||
| 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.