@@ -2195,7 +2195,8 @@ def _parse_raw_sam_df(csvdata):
2195
2195
return df
2196
2196
2197
2197
2198
- def sapm (effective_irradiance , temp_cell , module ):
2198
+ def sapm (effective_irradiance , temp_cell , module , reference_temperature = 25 ,
2199
+ reference_irradiance = 1000 ):
2199
2200
'''
2200
2201
The Sandia PV Array Performance Model (SAPM) generates 5 points on a
2201
2202
PV module's I-V curve (Voc, Isc, Ix, Ixx, Vmp/Imp) according to
@@ -2284,16 +2285,11 @@ def sapm(effective_irradiance, temp_cell, module):
2284
2285
pvlib.temperature.sapm_module
2285
2286
'''
2286
2287
2287
- # TODO: someday, change temp_ref and irrad_ref to reference_temperature and
2288
- # reference_irradiance and expose
2289
- temp_ref = 25
2290
- irrad_ref = 1000
2291
-
2292
2288
q = constants .e # Elementary charge in units of coulombs
2293
2289
kb = constants .k # Boltzmann's constant in units of J/K
2294
2290
2295
2291
# avoid problem with integer input
2296
- Ee = np .array (effective_irradiance , dtype = 'float64' ) / irrad_ref
2292
+ Ee = np .array (effective_irradiance , dtype = 'float64' ) / reference_irradiance
2297
2293
2298
2294
# set up masking for 0, positive, and nan inputs
2299
2295
Ee_gt_0 = np .full_like (Ee , False , dtype = 'bool' )
@@ -2316,31 +2312,31 @@ def sapm(effective_irradiance, temp_cell, module):
2316
2312
out = OrderedDict ()
2317
2313
2318
2314
out ['i_sc' ] = (
2319
- module ['Isco' ] * Ee * (1 + module ['Aisc' ]* (temp_cell - temp_ref )))
2315
+ module ['Isco' ] * Ee * (1 + module ['Aisc' ]* (temp_cell - reference_temperature )))
2320
2316
2321
2317
out ['i_mp' ] = (
2322
2318
module ['Impo' ] * (module ['C0' ]* Ee + module ['C1' ]* (Ee ** 2 )) *
2323
- (1 + module ['Aimp' ]* (temp_cell - temp_ref )))
2319
+ (1 + module ['Aimp' ]* (temp_cell - reference_temperature )))
2324
2320
2325
2321
out ['v_oc' ] = np .maximum (0 , (
2326
2322
module ['Voco' ] + cells_in_series * delta * logEe +
2327
- Bvoco * (temp_cell - temp_ref )))
2323
+ Bvoco * (temp_cell - reference_temperature )))
2328
2324
2329
2325
out ['v_mp' ] = np .maximum (0 , (
2330
2326
module ['Vmpo' ] +
2331
2327
module ['C2' ] * cells_in_series * delta * logEe +
2332
2328
module ['C3' ] * cells_in_series * ((delta * logEe ) ** 2 ) +
2333
- Bvmpo * (temp_cell - temp_ref )))
2329
+ Bvmpo * (temp_cell - reference_temperature )))
2334
2330
2335
2331
out ['p_mp' ] = out ['i_mp' ] * out ['v_mp' ]
2336
2332
2337
2333
out ['i_x' ] = (
2338
2334
module ['IXO' ] * (module ['C4' ]* Ee + module ['C5' ]* (Ee ** 2 )) *
2339
- (1 + module ['Aisc' ]* (temp_cell - temp_ref )))
2335
+ (1 + module ['Aisc' ]* (temp_cell - reference_temperature )))
2340
2336
2341
2337
out ['i_xx' ] = (
2342
2338
module ['IXXO' ] * (module ['C6' ]* Ee + module ['C7' ]* (Ee ** 2 )) *
2343
- (1 + module ['Aimp' ]* (temp_cell - temp_ref )))
2339
+ (1 + module ['Aimp' ]* (temp_cell - reference_temperature )))
2344
2340
2345
2341
if isinstance (out ['i_sc' ], pd .Series ):
2346
2342
out = pd .DataFrame (out )
0 commit comments