Description
I'm proposing to add capability to model more than one array in a PV system. Defining the term "array", I mean a collection of PV modules at the same orientation (tilt and azimuth). Many actual PV systems have several arrays, distinguished by different orientation and/or number of modules and strings of modules.
The current PVSystem
defines the DC side of a PV system using modules_per_string
and strings_per_inverter
and applies attributes surface_tilt
and surface_azimuth
to all modules. A PV system may have a single inverter. This model implicitly describes a PV system with a single array.
@wholmgren have discussed this a bit offline and think a way forward would be to make PVSystem
attributes iterable. For example, surface_tilt
could contain a list or array, with each element being an array of tilts to be applied to one of the arrays comprising the PV system. PVSystem
and ModelChain
methods would be extended to perform calculations for each array in the PV system, broadcasting where needed.
Two principles guiding this proposal:
- maintain the current interface for modeling systems with a single array. It is simple but effective, and modeling a single array system shouldn't become more complicated.
- methods should return the type indicated by the input attributes, so that a user doesn't need to deal with lists of length 1 when modeling a single array system.
We discussed, and disfavor other approaches:
- a new class for PV systems with multiple arrays, which not appealing when considering the duplication of code, and the likely complication of
ModelChain
methods. - subclassing
PVsystem
or adding attributes, either of which look to be confusing for users.
Open for comments here, before I start a branch to work on this feature.
#457 is relevant. Having multiple arrays lays the groundwork for modeling inverters with multiple MPPTs.