CALCPARAMS_DESOTO
This function translates reference single-diode parameters to operating conditions using the De Soto photovoltaic module model. It adjusts the light-generated current, diode saturation current, shunt resistance, and thermal-voltage term for the supplied irradiance and cell temperature while preserving the series resistance reference value.
A key relationship in the model is the irradiance and temperature adjustment of photocurrent:
I_L = \frac{G}{G_{ref}} \left(I_{L,ref} + \alpha_{sc}(T_c - T_{ref})\right)
The returned values are ordered as photocurrent, saturation current, series resistance, shunt resistance, and nN_sV_{th}. These outputs are intended to be passed directly into the single-diode solvers such as singlediode or max_power_point.
Excel Usage
=CALCPARAMS_DESOTO(effective_irradiance, temp_cell, alpha_sc, a_ref, I_L_ref, I_o_ref, R_sh_ref, R_s, EgRef, dEgdT, irrad_ref, temp_ref)
effective_irradiance(float, required): Irradiance converted to photocurrent (W/m^2).temp_cell(float, required): Average cell temperature (C).alpha_sc(float, required): Short-circuit current temp coefficient (A/C).a_ref(float, required): Modified diode ideality factor term at reference (V).I_L_ref(float, required): Light-generated current at reference (A).I_o_ref(float, required): Diode saturation current at reference (A).R_sh_ref(float, required): Shunt resistance at reference (ohms).R_s(float, required): Series resistance at reference (ohms).EgRef(float, optional, default: 1.121): Energy bandgap at reference temperature (eV).dEgdT(float, optional, default: -0.0002677): Temperature dependence of energy bandgap (1/K).irrad_ref(float, optional, default: 1000): Reference irradiance (W/m^2).temp_ref(float, optional, default: 25): Reference cell temperature (C).
Returns (list[list]): 2D list containing [[photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth]], or an error string.
Example 1: Standard test conditions
Inputs:
| effective_irradiance | temp_cell | alpha_sc | a_ref | I_L_ref | I_o_ref | R_sh_ref | R_s | EgRef | dEgdT | irrad_ref | temp_ref |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1000 | 25 | 0.004 | 1.5 | 5.5 | 2e-10 | 300 | 0.5 | 1.121 | -0.0002677 | 1000 | 25 |
Excel formula:
=CALCPARAMS_DESOTO(1000, 25, 0.004, 1.5, 5.5, 2e-10, 300, 0.5, 1.121, -0.0002677, 1000, 25)
Expected output:
| Result | ||||
|---|---|---|---|---|
| 5.5 | 2e-10 | 0.5 | 300 | 1.5 |
Example 2: Default reference constants
Inputs:
| effective_irradiance | temp_cell | alpha_sc | a_ref | I_L_ref | I_o_ref | R_sh_ref | R_s |
|---|---|---|---|---|---|---|---|
| 1000 | 25 | 0.004 | 1.5 | 5.5 | 2e-10 | 300 | 0.5 |
Excel formula:
=CALCPARAMS_DESOTO(1000, 25, 0.004, 1.5, 5.5, 2e-10, 300, 0.5)
Expected output:
| Result | ||||
|---|---|---|---|---|
| 5.5 | 2e-10 | 0.5 | 300 | 1.5 |
Example 3: Reduced irradiance and warmer cell
Inputs:
| effective_irradiance | temp_cell | alpha_sc | a_ref | I_L_ref | I_o_ref | R_sh_ref | R_s | EgRef | dEgdT | irrad_ref | temp_ref |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 800 | 45 | 0.004 | 1.5 | 5.5 | 2e-10 | 300 | 0.5 | 1.121 | -0.0002677 | 1000 | 25 |
Excel formula:
=CALCPARAMS_DESOTO(800, 45, 0.004, 1.5, 5.5, 2e-10, 300, 0.5, 1.121, -0.0002677, 1000, 25)
Expected output:
| Result | ||||
|---|---|---|---|---|
| 4.464 | 4.69768e-9 | 0.5 | 375 | 1.60062 |
Example 4: Cool cell at elevated irradiance
Inputs:
| effective_irradiance | temp_cell | alpha_sc | a_ref | I_L_ref | I_o_ref | R_sh_ref | R_s | EgRef | dEgdT | irrad_ref | temp_ref |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1100 | 10 | 0.004 | 1.5 | 5.5 | 2e-10 | 300 | 0.5 | 1.121 | -0.0002677 | 1000 | 25 |
Excel formula:
=CALCPARAMS_DESOTO(1100, 10, 0.004, 1.5, 5.5, 2e-10, 300, 0.5, 1.121, -0.0002677, 1000, 25)
Expected output:
| Result | ||||
|---|---|---|---|---|
| 5.984 | 1.41199e-11 | 0.5 | 272.727 | 1.42453 |
Python Code
Show Code
from pvlib.pvsystem import calcparams_desoto as result_func
def calcparams_desoto(effective_irradiance, temp_cell, alpha_sc, a_ref, I_L_ref, I_o_ref, R_sh_ref, R_s, EgRef=1.121, dEgdT=-0.0002677, irrad_ref=1000, temp_ref=25):
"""
Calculate five single-diode model parameter values using the De Soto model.
See: https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.pvsystem.calcparams_desoto.html
This example function is provided as-is without any representation of accuracy.
Args:
effective_irradiance (float): Irradiance converted to photocurrent (W/m^2).
temp_cell (float): Average cell temperature (C).
alpha_sc (float): Short-circuit current temp coefficient (A/C).
a_ref (float): Modified diode ideality factor term at reference (V).
I_L_ref (float): Light-generated current at reference (A).
I_o_ref (float): Diode saturation current at reference (A).
R_sh_ref (float): Shunt resistance at reference (ohms).
R_s (float): Series resistance at reference (ohms).
EgRef (float, optional): Energy bandgap at reference temperature (eV). Default is 1.121.
dEgdT (float, optional): Temperature dependence of energy bandgap (1/K). Default is -0.0002677.
irrad_ref (float, optional): Reference irradiance (W/m^2). Default is 1000.
temp_ref (float, optional): Reference cell temperature (C). Default is 25.
Returns:
list[list]: 2D list containing [[photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth]], or an error string.
"""
try:
irrad = float(effective_irradiance)
tc = float(temp_cell)
asc = float(alpha_sc)
ar = float(a_ref)
ilr = float(I_L_ref)
ior = float(I_o_ref)
rshr = float(R_sh_ref)
rs = float(R_s)
eg = float(EgRef) if EgRef is not None else 1.121
dt = float(dEgdT) if dEgdT is not None else -0.0002677
ir = float(irrad_ref) if irrad_ref is not None else 1000.0
tr = float(temp_ref) if temp_ref is not None else 25.0
# Returns tuple: photocurrent, saturation_current, resistance_series, resistance_shunt, nNsVth
res = result_func(
effective_irradiance=irrad,
temp_cell=tc,
alpha_sc=asc,
a_ref=ar,
I_L_ref=ilr,
I_o_ref=ior,
R_sh_ref=rshr,
R_s=rs,
EgRef=eg,
dEgdT=dt,
irrad_ref=ir,
temp_ref=tr
)
return [[float(v) for v in res]]
except Exception as e:
return f"Error: {str(e)}"