Skip to content

Commit fe146b6

Browse files
committed
add _2025 to function name
1 parent bb86a53 commit fe146b6

File tree

5 files changed

+60
-55
lines changed

5 files changed

+60
-55
lines changed

docs/sphinx/source/reference/pv_modeling/parameters.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Functions for fitting single diode models
1212
ivtools.sdm.fit_cec_sam
1313
ivtools.sdm.fit_desoto
1414
ivtools.sdm.fit_pvsyst_sandia
15-
ivtools.sdm.fit_pvsyst_iec61853_sandia
15+
ivtools.sdm.fit_pvsyst_iec61853_sandia_2025
1616
ivtools.sdm.fit_desoto_sandia
1717

1818
Functions for fitting the single diode equation

docs/sphinx/source/whatsnew/v0.12.1.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Enhancements
1616
~~~~~~~~~~~~
1717
* :py:mod:`pvlib.ivtools.sdm` is now a subpackage. (:issue:`2252`, :pull:`2256`)
1818
* Add a function for estimating PVsyst SDM parameters from IEC 61853-1 matrix
19-
data (:py:func:`~pvlib.ivtools.sdm.fit_pvsyst_iec61853_sandia`). (:issue:`2185`, :pull:`2429`)
19+
data (:py:func:`~pvlib.ivtools.sdm.fit_pvsyst_iec61853_sandia_2025`). (:issue:`2185`, :pull:`2429`)
2020

2121
Documentation
2222
~~~~~~~~~~~~~

pvlib/ivtools/sdm/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515

1616
from pvlib.ivtools.sdm.pvsyst import ( # noqa: F401
1717
fit_pvsyst_sandia,
18-
fit_pvsyst_iec61853_sandia,
18+
fit_pvsyst_iec61853_sandia_2025,
1919
pvsyst_temperature_coeff,
2020
)

pvlib/ivtools/sdm/pvsyst.py

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,14 @@ def maxp(temp_cell, irrad_ref, alpha_sc, gamma_ref, mu_gamma, I_L_ref,
310310
return gamma_pdc / pmp
311311

312312

313-
def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
314-
i_sc, v_oc, i_mp, v_mp,
315-
cells_in_series, EgRef=1.121,
316-
alpha_sc=None, beta_mp=None,
317-
R_s=None, r_sh_coeff=0.12,
318-
min_Rsh_irradiance=None,
319-
irradiance_tolerance=20,
320-
temperature_tolerance=1):
313+
def fit_pvsyst_iec61853_sandia_2025(effective_irradiance, temp_cell,
314+
i_sc, v_oc, i_mp, v_mp,
315+
cells_in_series, EgRef=1.121,
316+
alpha_sc=None, beta_mp=None,
317+
R_s=None, r_sh_coeff=0.12,
318+
min_Rsh_irradiance=None,
319+
irradiance_tolerance=20,
320+
temperature_tolerance=1):
321321
"""
322322
Estimate parameters for the PVsyst module performance model using
323323
IEC 61853-1 matrix measurements.
@@ -420,42 +420,45 @@ def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
420420
atol=temperature_tolerance)
421421

422422
if alpha_sc is None:
423-
mu_i_sc = _fit_tempco_pvsyst_iec61853_sandia(i_sc[is_g_stc],
424-
temp_cell[is_g_stc])
423+
mu_i_sc = _fit_tempco_pvsyst_iec61853_sandia_2025(i_sc[is_g_stc],
424+
temp_cell[is_g_stc])
425425
i_sc_ref = float(i_sc[is_g_stc & is_t_stc].item())
426426
alpha_sc = mu_i_sc * i_sc_ref
427427

428428
if beta_mp is None:
429-
beta_mp = _fit_tempco_pvsyst_iec61853_sandia(v_mp[is_g_stc],
430-
temp_cell[is_g_stc])
429+
beta_mp = _fit_tempco_pvsyst_iec61853_sandia_2025(v_mp[is_g_stc],
430+
temp_cell[is_g_stc])
431431

432-
R_sh_ref, R_sh_0, R_sh_exp = _fit_shunt_resistances_pvsyst_iec61853_sandia(
433-
i_sc, i_mp, v_mp, effective_irradiance, temp_cell, beta_mp,
434-
coeff=r_sh_coeff, min_irradiance=min_Rsh_irradiance
432+
R_sh_ref, R_sh_0, R_sh_exp = \
433+
_fit_shunt_resistances_pvsyst_iec61853_sandia_2025(
434+
i_sc, i_mp, v_mp, effective_irradiance, temp_cell, beta_mp,
435+
coeff=r_sh_coeff, min_irradiance=min_Rsh_irradiance
435436
)
436437

437438
if R_s is None:
438-
R_s = _fit_series_resistance_pvsyst_iec61853_sandia(v_oc, i_mp, v_mp)
439+
R_s = _fit_series_resistance_pvsyst_iec61853_sandia_2025(v_oc, i_mp,
440+
v_mp)
439441

440-
gamma_ref, mu_gamma = _fit_diode_ideality_factor_pvsyst_iec61853_sandia(
441-
i_sc[is_t_stc], v_oc[is_t_stc], i_mp[is_t_stc], v_mp[is_t_stc],
442-
effective_irradiance[is_t_stc], temp_cell[is_t_stc],
443-
R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series
442+
gamma_ref, mu_gamma = \
443+
_fit_diode_ideality_factor_pvsyst_iec61853_sandia_2025(
444+
i_sc[is_t_stc], v_oc[is_t_stc], i_mp[is_t_stc], v_mp[is_t_stc],
445+
effective_irradiance[is_t_stc], temp_cell[is_t_stc],
446+
R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series
444447
)
445448

446-
I_o_ref = _fit_saturation_current_pvsyst_iec61853_sandia(
449+
I_o_ref = _fit_saturation_current_pvsyst_iec61853_sandia_2025(
447450
i_sc, v_oc, effective_irradiance, temp_cell, gamma_ref, mu_gamma,
448451
R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series, EgRef
449452
)
450453

451-
I_L_ref = _fit_photocurrent_pvsyst_iec61853_sandia(
454+
I_L_ref = _fit_photocurrent_pvsyst_iec61853_sandia_2025(
452455
i_sc, effective_irradiance, temp_cell, alpha_sc,
453456
gamma_ref, mu_gamma,
454457
I_o_ref, R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series, EgRef
455458
)
456459

457460
gamma_ref, mu_gamma = \
458-
_fit_diode_ideality_factor_post_pvsyst_iec61853_sandia(
461+
_fit_diode_ideality_factor_post_pvsyst_iec61853_sandia_2025(
459462
i_mp, v_mp, effective_irradiance, temp_cell, alpha_sc, I_L_ref,
460463
I_o_ref, R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series, EgRef)
461464

@@ -475,14 +478,15 @@ def fit_pvsyst_iec61853_sandia(effective_irradiance, temp_cell,
475478
return fitted_params
476479

477480

478-
def _fit_tempco_pvsyst_iec61853_sandia(values, temp_cell, temp_cell_ref=25):
481+
def _fit_tempco_pvsyst_iec61853_sandia_2025(values, temp_cell,
482+
temp_cell_ref=25):
479483
fit = np.polynomial.polynomial.Polynomial.fit(temp_cell, values, deg=1)
480484
intercept, slope = fit.convert().coef
481485
value_ref = intercept + slope*temp_cell_ref
482486
return slope / value_ref
483487

484488

485-
def _fit_shunt_resistances_pvsyst_iec61853_sandia(
489+
def _fit_shunt_resistances_pvsyst_iec61853_sandia_2025(
486490
i_sc, i_mp, v_mp, effective_irradiance, temp_cell,
487491
beta_v_mp, coeff=0.2, min_irradiance=None):
488492
if min_irradiance is None:
@@ -518,7 +522,7 @@ def _fit_shunt_resistances_pvsyst_iec61853_sandia(
518522
return Rshref, Rsh0, Rshexp
519523

520524

521-
def _fit_series_resistance_pvsyst_iec61853_sandia(v_oc, i_mp, v_mp):
525+
def _fit_series_resistance_pvsyst_iec61853_sandia_2025(v_oc, i_mp, v_mp):
522526
# Stein et al 2014, https://doi.org/10.1109/PVSC.2014.6925326
523527

524528
# Eq 13
@@ -530,7 +534,7 @@ def _fit_series_resistance_pvsyst_iec61853_sandia(v_oc, i_mp, v_mp):
530534
return R_s
531535

532536

533-
def _fit_diode_ideality_factor_pvsyst_iec61853_sandia(
537+
def _fit_diode_ideality_factor_pvsyst_iec61853_sandia_2025(
534538
i_sc, v_oc, i_mp, v_mp, effective_irradiance, temp_cell,
535539
R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series):
536540

@@ -550,7 +554,7 @@ def _fit_diode_ideality_factor_pvsyst_iec61853_sandia(
550554
return gamma_ref, 0
551555

552556

553-
def _fit_saturation_current_pvsyst_iec61853_sandia(
557+
def _fit_saturation_current_pvsyst_iec61853_sandia_2025(
554558
i_sc, v_oc, effective_irradiance, temp_cell, gamma_ref, mu_gamma,
555559
R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series, EgRef):
556560
R_sh = _pvsyst_Rsh(effective_irradiance, R_sh_ref, R_sh_0, R_sh_exp)
@@ -568,7 +572,7 @@ def _fit_saturation_current_pvsyst_iec61853_sandia(
568572
return I_o_ref
569573

570574

571-
def _fit_photocurrent_pvsyst_iec61853_sandia(
575+
def _fit_photocurrent_pvsyst_iec61853_sandia_2025(
572576
i_sc, effective_irradiance, temp_cell, alpha_sc, gamma_ref,
573577
mu_gamma, I_o_ref, R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series,
574578
EgRef):
@@ -588,7 +592,7 @@ def _fit_photocurrent_pvsyst_iec61853_sandia(
588592
return I_L_ref
589593

590594

591-
def _fit_diode_ideality_factor_post_pvsyst_iec61853_sandia(
595+
def _fit_diode_ideality_factor_post_pvsyst_iec61853_sandia_2025(
592596
i_mp, v_mp, effective_irradiance, temp_cell, alpha_sc, I_L_ref,
593597
I_o_ref, R_sh_ref, R_sh_0, R_sh_exp, R_s, cells_in_series, EgRef):
594598

tests/ivtools/sdm/test_pvsyst.py

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ def iec61853_conditions():
238238
return ee, tc
239239

240240

241-
def test_fit_pvsyst_iec61853_sandia(pvsyst_iec61853_table3,
242-
iec61853_conditions):
241+
def test_fit_pvsyst_iec61853_sandia_2025(pvsyst_iec61853_table3,
242+
iec61853_conditions):
243243
ee, tc = iec61853_conditions
244244
for _, case in pvsyst_iec61853_table3.items():
245245
true_params = case['true']
@@ -248,7 +248,7 @@ def test_fit_pvsyst_iec61853_sandia(pvsyst_iec61853_table3,
248248
sde_params = pvsystem.calcparams_pvsyst(ee, tc, **true_params)
249249
iv = pvsystem.singlediode(*sde_params)
250250

251-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(
251+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(
252252
ee, tc, iv['i_sc'], iv['v_oc'], iv['i_mp'], iv['v_mp'],
253253
true_params['cells_in_series'], EgRef=true_params['EgRef'],
254254
)
@@ -257,8 +257,8 @@ def test_fit_pvsyst_iec61853_sandia(pvsyst_iec61853_table3,
257257
atol=0, rtol=1e-3)
258258

259259

260-
def test_fit_pvsyst_iec61853_sandia_optional(pvsyst_iec61853_table3,
261-
iec61853_conditions):
260+
def test_fit_pvsyst_iec61853_sandia_2025_optional(pvsyst_iec61853_table3,
261+
iec61853_conditions):
262262
# verify that modifying each optional parameter results in different output
263263
ee, tc = iec61853_conditions
264264
case = pvsyst_iec61853_table3['high current']
@@ -273,39 +273,39 @@ def test_fit_pvsyst_iec61853_sandia_optional(pvsyst_iec61853_table3,
273273
cells_in_series=true_params['cells_in_series']
274274
)
275275

276-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
277-
EgRef=1.0)
276+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
277+
EgRef=1.0)
278278
assert not np.isclose(fitted_params['I_o_ref'], expected['I_o_ref'],
279279
atol=0, rtol=1e-3)
280280

281-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
282-
alpha_sc=0.5e-3)
281+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
282+
alpha_sc=0.5e-3)
283283
assert not np.isclose(fitted_params['alpha_sc'], expected['alpha_sc'],
284284
atol=0, rtol=1e-3)
285285

286-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
287-
beta_mp=-1e-4)
286+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
287+
beta_mp=-1e-4)
288288
assert not np.isclose(fitted_params['R_sh_ref'], expected['R_sh_ref'],
289289
atol=0, rtol=1e-3)
290290

291-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
292-
r_sh_coeff=0.3)
291+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
292+
r_sh_coeff=0.3)
293293
assert not np.isclose(fitted_params['R_sh_ref'], expected['R_sh_ref'],
294294
atol=0, rtol=1e-3)
295295

296-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
297-
R_s=0.5)
296+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
297+
R_s=0.5)
298298
assert not np.isclose(fitted_params['R_s'], expected['R_s'],
299299
atol=0, rtol=1e-3)
300300

301-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**main_inputs,
302-
min_Rsh_irradiance=500)
301+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**main_inputs,
302+
min_Rsh_irradiance=500)
303303
assert not np.isclose(fitted_params['R_sh_ref'], expected['R_sh_ref'],
304304
atol=0, rtol=1e-3)
305305

306306

307-
def test_fit_pvsyst_iec61853_sandia_tolerance(pvsyst_iec61853_table3,
308-
iec61853_conditions):
307+
def test_fit_pvsyst_iec61853_sandia_2025_tolerance(pvsyst_iec61853_table3,
308+
iec61853_conditions):
309309
# verify that the *_tolerance parameters allow non-"perfect" irradiance
310310
# and temperature values
311311
ee, tc = iec61853_conditions
@@ -322,15 +322,16 @@ def test_fit_pvsyst_iec61853_sandia_tolerance(pvsyst_iec61853_table3,
322322
v_oc=iv['v_oc'], i_mp=iv['i_mp'], v_mp=iv['v_mp'],
323323
cells_in_series=true_params['cells_in_series']
324324
)
325-
fitted_params = sdm.fit_pvsyst_iec61853_sandia(**inputs)
325+
fitted_params = sdm.fit_pvsyst_iec61853_sandia_2025(**inputs)
326326
# still get approximately the expected values
327327
for key in expected.keys():
328328
assert np.isclose(fitted_params[key], expected[key], atol=0, rtol=1e-2)
329329

330330
# but if the changes exceed the specified tolerance, then error:
331331
with pytest.raises(ValueError, match='Coefficient array is empty'):
332-
sdm.fit_pvsyst_iec61853_sandia(**inputs, irradiance_tolerance=0.1)
332+
sdm.fit_pvsyst_iec61853_sandia_2025(**inputs, irradiance_tolerance=0.1)
333333

334334
with pytest.raises(ValueError,
335335
match='can only convert an array of size 1'):
336-
sdm.fit_pvsyst_iec61853_sandia(**inputs, temperature_tolerance=0.1)
336+
sdm.fit_pvsyst_iec61853_sandia_2025(**inputs,
337+
temperature_tolerance=0.1)

0 commit comments

Comments
 (0)