@@ -794,6 +794,116 @@ def spectral_factor_pvspec(airmass_absolute, clearsky_index,
794
794
return mismatch
795
795
796
796
797
+ def spectral_factor_jrc (airmass , clearsky_index , module_type = None ,
798
+ coefficients = None ):
799
+ r"""
800
+ Estimate a technology-specific spectral mismatch modifier from
801
+ airmass and clear sky index using the JRC model.
802
+
803
+ The JRC spectral mismatch model includes the effects of cloud cover on
804
+ the irradiance spectrum. Model coefficients are derived using measurements
805
+ of irradiance and module performance at the Joint Research Centre (JRC) in
806
+ Ispra, Italy (45.80N, 8.62E). Coefficients for two module types are
807
+ available via the ``module_type`` parameter. More details on the model can
808
+ be found in [1]_.
809
+
810
+ Parameters
811
+ ----------
812
+ airmass : numeric
813
+ relative airmass. [unitless]
814
+
815
+ clearsky_index: numeric
816
+ clear sky index. [unitless]
817
+
818
+ module_type : str, optional
819
+ One of the following PV technology strings from [1]_:
820
+
821
+ * ``'cdte'`` - anonymous CdTe module.
822
+ * ``'multisi'`` - anonymous multicrystalline Si module.
823
+
824
+ coefficients : array-like, optional
825
+ user-defined coefficients, if not using one of the default coefficient
826
+ sets via the ``module_type`` parameter.
827
+
828
+ Returns
829
+ -------
830
+ mismatch: numeric
831
+ spectral mismatch factor (unitless) which is multiplied
832
+ with broadband irradiance reaching a module's cells to estimate
833
+ effective irradiance, i.e., the irradiance that is converted to
834
+ electrical current.
835
+
836
+ Notes
837
+ -----
838
+ The JRC model parameterises the spectral mismatch factor as a function
839
+ of air mass and the clear sky index as follows:
840
+
841
+ .. math::
842
+
843
+ M = 1 + a_1(e^{-k_c}-e^{-1}) + a_2(k_c-1)+a_3(AM-1.5),
844
+
845
+ where :math:`M` is the spectral mismatch factor, :math:`k_c` is the clear
846
+ sky index, :math:`AM` is the air mass, :math:`e` is Euler's number, and
847
+ :math:`a_1, a_2, a_3` are module-specific coefficients. The :math:`a_n`
848
+ coefficients available via the ``coefficients`` parameter differ from the
849
+ :math:`k_n` coefficients documented in [1]_ in that they are normalised by
850
+ the specific short-circuit current value, :math:`I_{sc0}^*`, which is the
851
+ expected short-circuit current at standard test conditions indoors. The
852
+ model used to estimate the air mass (denoted as :math:`AM`) is not stated
853
+ in the original publication. The authors of [1]_ used the ESRA model [2]_
854
+ to estimate the clear sky GHI for the clear sky index, which is the ratio
855
+ of GHI to clear sky GHI. Also, prior to the calculation of :math:`k_c`, the
856
+ irradiance measurements were corrected for angle of incidence using the
857
+ Martin and Ruiz model [3]_.
858
+
859
+ References
860
+ ----------
861
+ .. [1] Huld, T., Sample, T., and Dunlop, E., 2009. A simple model
862
+ for estimating the influence of spectrum variations on PV performance.
863
+ In Proceedings of the 24th European Photovoltaic Solar Energy
864
+ Conference, Hamburg, Germany pp. 3385-3389. 2009. Accessed at:
865
+ https://www.researchgate.net/publication/256080247
866
+ .. [2] Rigollier, C., Bauer, O., and Wald, L., 2000. On the clear sky model
867
+ of the ESRA—European Solar Radiation Atlas—with respect to the Heliosat
868
+ method. Solar energy, 68(1), pp.33-48.
869
+ :doi:`10.1016/S0038-092X(99)00055-9`
870
+ .. [3] Martin, N. and Ruiz, J. M., 2001. Calculation of the PV modules
871
+ angular losses under field conditions by means of an analytical model.
872
+ Solar Energy Materials and Solar Cells, 70(1), 25-38.
873
+ :doi:`10.1016/S0927-0248(00)00408-6`
874
+ """
875
+
876
+ _coefficients = {}
877
+ _coefficients ['multisi' ] = (0.00172 , 0.000508 , 0.00000357 )
878
+ _coefficients ['cdte' ] = (0.000643 , 0.000130 , 0.0000108 )
879
+ # normalise coefficients by I*sc0, see [1]
880
+ _coefficients = {
881
+ 'multisi' : tuple (x / 0.00348 for x in _coefficients ['multisi' ]),
882
+ 'cdte' : tuple (x / 0.001150 for x in _coefficients ['cdte' ])
883
+ }
884
+ if module_type is not None and coefficients is None :
885
+ coefficients = _coefficients [module_type .lower ()]
886
+ elif module_type is None and coefficients is not None :
887
+ pass
888
+ elif module_type is None and coefficients is None :
889
+ raise ValueError ('No valid input provided, both module_type and ' +
890
+ 'coefficients are None. module_type can be one of ' +
891
+ ", " .join (_coefficients .keys ()))
892
+ else :
893
+ raise ValueError ('Cannot resolve input, must supply only one of ' +
894
+ 'module_type and coefficients. module_type can be ' +
895
+ 'one of' ", " .join (_coefficients .keys ()))
896
+
897
+ coeff = coefficients
898
+ mismatch = (
899
+ 1
900
+ + coeff [0 ] * (np .exp (- clearsky_index ) - np .exp (- 1 ))
901
+ + coeff [1 ] * (clearsky_index - 1 )
902
+ + coeff [2 ] * (airmass - 1.5 )
903
+ )
904
+ return mismatch
905
+
906
+
797
907
def sr_to_qe (sr , wavelength = None , normalize = False ):
798
908
"""
799
909
Convert spectral responsivities to quantum efficiencies.
0 commit comments