@@ -409,15 +409,16 @@ def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
409409 except ImportError :
410410 raise ImportError ('fit_pvsyst_iec61853_sandia requires statsmodels' )
411411
412+ is_g_stc = effective_irradiance == 1000
413+ is_t_stc = temp_cell == 25
414+
412415 if alpha_sc is None :
413- mu_i_sc = _fit_tempco (i_sc [effective_irradiance == 1000 ],
414- temp_cell [effective_irradiance == 1000 ])
415- i_sc_ref = float (i_sc [(effective_irradiance == 1000 ) & (temp_cell == 25 )])
416+ mu_i_sc = _fit_tempco (i_sc [is_g_stc ], temp_cell [is_g_stc ])
417+ i_sc_ref = float (i_sc [is_g_stc & is_t_stc ])
416418 alpha_sc = mu_i_sc * i_sc_ref
417419
418420 if beta_mp is None :
419- beta_mp = _fit_tempco (v_mp [effective_irradiance == 1000 ],
420- temp_cell [effective_irradiance == 1000 ])
421+ beta_mp = _fit_tempco (v_mp [is_g_stc ], temp_cell [is_g_stc ])
421422
422423 R_sh_ref , R_sh_0 , R_sh_exp = _fit_shunt_resistances (
423424 i_sc , i_mp , v_mp , effective_irradiance , temp_cell , beta_mp ,
@@ -427,10 +428,9 @@ def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
427428 if R_s is None :
428429 R_s = _fit_series_resistance (sm , v_oc , i_mp , v_mp )
429430
430- filt = temp_cell == 25
431431 gamma_ref , mu_gamma = _fit_diode_ideality_factor (
432- sm , i_sc [filt ], v_oc [filt ], i_mp [filt ], v_mp [filt ],
433- effective_irradiance [filt ], temp_cell [filt ],
432+ sm , i_sc [is_t_stc ], v_oc [is_t_stc ], i_mp [is_t_stc ], v_mp [is_t_stc ],
433+ effective_irradiance [is_t_stc ], temp_cell [is_t_stc ],
434434 R_sh_ref , R_sh_0 , R_sh_exp , R_s , cells_in_series
435435 )
436436
@@ -447,7 +447,7 @@ def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
447447
448448 gamma_ref , mu_gamma = \
449449 _fit_diode_ideality_factor_post (sm , i_mp , v_mp , effective_irradiance ,
450- temp_cell , alpha_sc , I_L_ref , I_o_ref ,
450+ temp_cell , alpha_sc , I_L_ref , I_o_ref ,
451451 R_sh_ref , R_sh_0 , R_sh_exp , R_s ,
452452 cells_in_series , EgRef )
453453
@@ -485,18 +485,18 @@ def _fit_shunt_resistances(i_sc, i_mp, v_mp, effective_irradiance, temp_cell,
485485 v_mp = v_mp [mask ]
486486 effective_irradiance = effective_irradiance [mask ]
487487 temp_cell = temp_cell [mask ]
488-
488+
489489 # Equation 10
490490 Rsh_est = (
491491 (v_mp / (1 + beta_v_mp * (temp_cell - 25 )))
492492 / (coeff * (i_sc - i_mp ))
493493 )
494494 Rshexp = 5.5
495-
495+
496496 # Eq 11
497497 y = Rsh_est
498498 x = np .exp (- Rshexp * effective_irradiance / 1000 )
499-
499+
500500 fit = np .polynomial .polynomial .Polynomial .fit (x , y , deg = 1 )
501501 intercept , slope = fit .convert ().coef
502502 Rshbase = intercept
@@ -511,12 +511,12 @@ def _fit_shunt_resistances(i_sc, i_mp, v_mp, effective_irradiance, temp_cell,
511511
512512def _fit_series_resistance (sm , v_oc , i_mp , v_mp ):
513513 # Stein et al 2014, https://doi.org/10.1109/PVSC.2014.6925326
514-
514+
515515 # Eq 13
516516 x = np .array ([i_mp , np .log (i_mp ), v_mp ]).T
517517 x = sm .add_constant (x )
518518 y = v_oc
519-
519+
520520 results = sm .OLS (endog = y , exog = x ).fit ()
521521 R_s = results .params ['x1' ]
522522 return R_s
@@ -563,7 +563,7 @@ def _fit_saturation_current(i_sc, v_oc, effective_irradiance, temp_cell,
563563
564564
565565def _fit_photocurrent (sm , i_sc , effective_irradiance , temp_cell ,
566- alpha_sc , gamma_ref , mu_gamma , I_o_ref ,
566+ alpha_sc , gamma_ref , mu_gamma , I_o_ref ,
567567 R_sh_ref , R_sh_0 , R_sh_exp , R_s ,
568568 cells_in_series , EgRef ):
569569 R_sh = _pvsyst_Rsh (effective_irradiance , R_sh_ref , R_sh_0 , R_sh_exp )
@@ -583,7 +583,7 @@ def _fit_photocurrent(sm, i_sc, effective_irradiance, temp_cell,
583583
584584
585585def _fit_diode_ideality_factor_post (sm , i_mp , v_mp , effective_irradiance ,
586- temp_cell , alpha_sc , I_L_ref , I_o_ref ,
586+ temp_cell , alpha_sc , I_L_ref , I_o_ref ,
587587 R_sh_ref , R_sh_0 , R_sh_exp , R_s ,
588588 cells_in_series , EgRef ):
589589
0 commit comments