Skip to content

Commit 302b4f8

Browse files
committed
accomodate partial initial dict
1 parent d984b61 commit 302b4f8

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

pvlib/ivtools/sdm.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def fit_cec_sam(celltype, v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc,
120120

121121
def fit_desoto(v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc, cells_in_series,
122122
EgRef=1.121, dEgdT=-0.0002677, temp_ref=25, irrad_ref=1000,
123-
init_guess=None, root_kwargs={}):
123+
init_guess={}, root_kwargs={}):
124124
"""
125125
Calculates the parameters for the De Soto single diode model.
126126
@@ -167,7 +167,7 @@ def fit_desoto(v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc, cells_in_series,
167167
irrad_ref: float, default 1000
168168
Reference irradiance condition [Wm⁻²]
169169
init_guess: dict, optional
170-
Initial values for optimization, must have keys `'Rsh_0'`, `'a_0'`,
170+
Initial values for optimization. Keys can be `'Rsh_0'`, `'a_0'`,
171171
`'IL_0'`, `'Io_0'`, `'Rs_0'`.
172172
root_kwargs : dictionary, optional
173173
Dictionary of arguments to pass onto scipy.optimize.root()
@@ -218,23 +218,23 @@ def fit_desoto(v_mp, i_mp, v_oc, i_sc, alpha_sc, beta_voc, cells_in_series,
218218
k = constants.value('Boltzmann constant in eV/K') # in eV/K
219219
Tref = temp_ref + 273.15 # [K]
220220

221-
if init_guess is None:
222-
# initial guesses of variables for computing convergence:
223-
# Values are taken from [2], p753
224-
IL_0 = i_sc
225-
a_0 = 1.5*k*Tref*cells_in_series
226-
Io_0 = i_sc * np.exp(-v_oc/a_0)
227-
Rs_0 = (a_0*np.log1p((IL_0-i_mp)/Io_0) - v_mp)/i_mp
228-
Rsh_0 = 100.0
229-
else:
230-
IL_0 = init_guess['IL_0']
231-
Io_0 = init_guess['Io_0']
232-
Rs_0 = init_guess['Rs_0']
233-
Rsh_0 = init_guess['Rsh_0']
234-
a_0 = init_guess['a_0']
221+
# initial guesses of variables for computing convergence:
222+
# Default values are taken from [2], p753
223+
init = {}
224+
init_guess_keys = ['IL_0', 'Io_0', 'Rs_0', 'Rsh_0', 'a_0']
225+
init['IL_0'] = i_sc
226+
init['a_0'] = 1.5*k*Tref*cells_in_series
227+
init['Io_0'] = i_sc * np.exp(-v_oc/init['a_0'])
228+
init['Rs_0'] = (init['a_0']*np.log1p((init['IL_0'] - i_mp)/init['Io_0']) \
229+
- v_mp) / i_mp
230+
init['Rsh_0'] = 100.0
231+
# overwrite if optional init_guess is provided
232+
for k in init_guess:
233+
if k in init_guess_keys:
234+
init[k] = init_guess[k]
235235

236236
# params_i : initial values vector
237-
params_i = np.array([IL_0, Io_0, Rs_0, Rsh_0, a_0])
237+
params_i = np.array([init_guess[k] for k in init_guess_keys])
238238

239239
# specs of module
240240
specs = (i_sc, v_oc, i_mp, v_mp, beta_voc, alpha_sc, EgRef, dEgdT,

0 commit comments

Comments
 (0)