pvlib.pvsystem.singlediode#
- pvlib.pvsystem.singlediode(photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth, method='lambertw')[source]#
Solve the single diode equation to obtain a photovoltaic IV curve.
Solves the single diode equation [1]
\[I = I_L - I_0 \left[ \exp \left(\frac{V+I R_s}{n N_s V_{th}} \right)-1 \right] - \frac{V + I R_s}{R_{sh}}\]for \(I\) and \(V\) when given \(I_L, I_0, R_s, R_{sh},\) and \(n N_s V_{th}\) which are described later. The five points on the I-V curve specified in [3] are returned. If \(I_L, I_0, R_s, R_{sh},\) and \(n N_s V_{th}\) are all scalars, a single curve is returned. If any are array-like (of the same length), multiple IV curves are calculated.
The input parameters can be calculated from meteorological data using a function for a single diode model, e.g.,
calcparams_desoto()
.- Parameters:
photocurrent (numeric) – Light-generated current \(I_L\) (photocurrent)
0 <= photocurrent
. [A]saturation_current (numeric) – Diode saturation \(I_0\) current under desired IV curve conditions.
0 < saturation_current
. [A]resistance_series (numeric) – Series resistance \(R_s\) under desired IV curve conditions.
0 <= resistance_series < numpy.inf
. [ohm]resistance_shunt (numeric) – Shunt resistance \(R_{sh}\) under desired IV curve conditions.
0 < resistance_shunt <= numpy.inf
. [ohm]nNsVth (numeric) – The product of three components: 1) the usual diode ideality factor \(n\), 2) the number of cells in series \(N_s\), and 3) the cell thermal voltage \(V_{th}\). The thermal voltage of the cell (in volts) may be calculated as \(k_B T_c / q\), where \(k_B\) is Boltzmann’s constant (J/K), \(T_c\) is the temperature of the p-n junction in Kelvin, and \(q\) is the charge of an electron (coulombs).
0 < nNsVth
. [V]method (str, default 'lambertw') – Determines the method used to calculate points on the IV curve. The options are
'lambertw'
,'newton'
, or'brentq'
.
- Returns:
dict or pandas.DataFrame – The returned dict-like object always contains the keys/columns:
i_sc - short circuit current in amperes.
v_oc - open circuit voltage in volts.
i_mp - current at maximum power point in amperes.
v_mp - voltage at maximum power point in volts.
p_mp - power at maximum power point in watts.
i_x - current, in amperes, at
v = 0.5*v_oc
.i_xx - current, in amperes, at
v = 0.5*(v_oc+v_mp)
.
A dict is returned when the input parameters are scalars.
Notes
If the method is
'lambertw'
then the solution employed to solve the implicit diode equation utilizes the Lambert W function to obtain an explicit function of \(V=f(I)\) and \(I=f(V)\) as shown in [2].If the method is
'newton'
then the root-finding Newton-Raphson method is used. It should be safe for well behaved IV-curves, but the'brentq'
method is recommended for reliability.If the method is
'brentq'
then Brent’s bisection search method is used that guarantees convergence by bounding the voltage between zero and open-circuit.References