PVMismatch can use different PVconstants for strings and modules, which in certain situations can provide a system where each string has its own pvconstants or systems can share PVconstants as previously as well. Therefore PVMismatch CAN have modules and strings with different temperatures and cell properties through some very clever use of pvconstants in pvmismatch. See the example below where we create a system with 2 strings, ie one east facing and one west facing that have different properties, in this case only temperature is different.
Unfortunately, this granularity of control is limited to strings and above, but I think it can easily be extended to modules, and the extremely few places where it’s broken can be patched. There are a few cases where a larger component, eg: a PVstring exerts its own version of PVconstants on its constituents, but in all of those cases, there are like 4, the property used is not actually a module property, eg: number of points, etc, or the way it’s used doesn’t affect the calculation. Nevertheless, delegation to the constituent should be the paradigm everywhere.
Why does it work? Because each component - modules and strings – have their own PVconstants object that contains cell parameters and cell temperatures. Originally my intention was that all of the components in a system model would share a single PVconstants object, however, you can create a system with two strings each which uses its own PVconstants object as in the example below. Or in a more complex example, you could create a string made of modules that each have different PVconstants objects, then combine strings together to make the system.
Remember that modules and strings can share PVconstants objects so you only need to create as many as needed.
# import pvmismatch packages
from pvmismatch import *
# low temp string
pvconst_0C = pvconstants.PVconstants(Tcell=(0+273.15)) # a low temperature set of constants
pvstr_0C = pvstring.PVstring(pvconst=pvconst_0C) # string with low temperature modules
# high temp string
# a high temperature set of constants
pvconst_100C = pvconstants.PVconstants(Tcell=(100+273.15))
pvstr_100C = pvstring.PVstring(pvconst=pvconst_100C) # string with high temperature modules
# system with 1 low temp string and 1 high temp string
pvsys = pvsystem.PVsystem(pvstrs=[pvstr_0C, pvstr_100C])
# low temp system
pvsys_0C = pvsystem.PVsystem(pvconst=pvconstants.PVconstants(
Tcell=(0+273.15)),numberStrs=2
)
# high temp system
pvsys_100C = pvsystem.PVsystem(pvconst=pvconstants.PVconstants(
Tcell=(100+273.15)),numberStrs=2
)
PVMismatch can use different PVconstants for strings and modules, which in certain situations can provide a system where each string has its own pvconstants or systems can share PVconstants as previously as well. Therefore PVMismatch CAN have modules and strings with different temperatures and cell properties through some very clever use of pvconstants in pvmismatch. See the example below where we create a system with 2 strings, ie one east facing and one west facing that have different properties, in this case only temperature is different.
Unfortunately, this granularity of control is limited to strings and above, but I think it can easily be extended to modules, and the extremely few places where it’s broken can be patched. There are a few cases where a larger component, eg: a PVstring exerts its own version of PVconstants on its constituents, but in all of those cases, there are like 4, the property used is not actually a module property, eg: number of points, etc, or the way it’s used doesn’t affect the calculation. Nevertheless, delegation to the constituent should be the paradigm everywhere.
Why does it work? Because each component - modules and strings – have their own PVconstants object that contains cell parameters and cell temperatures. Originally my intention was that all of the components in a system model would share a single PVconstants object, however, you can create a system with two strings each which uses its own PVconstants object as in the example below. Or in a more complex example, you could create a string made of modules that each have different PVconstants objects, then combine strings together to make the system.
Remember that modules and strings can share PVconstants objects so you only need to create as many as needed.
EG:
Here’s an example: