-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Reconsider storage performance model outputs
This came up somewhat during PR #493
This is somewhat related to Issue #498, and was briefly mentioned in this comment on Issue #485 which says:
the battery capacity factor and rated capacity will not result in the same "battery production" as using "battery.electricity_out" because "battery.electricity_out" is equal to:
electricity_in - electricity_for_charging + electricity_discharged - excess_electricitywhereas the battery capacity factor and rated capacity are based only on electricity_discharged. This would only be a concern where the battery is specified as the commodity stream (for a finance subgroup).
I'll stick to using the battery for this example, but this applies to any storage component. Control strategies for storage components (currently, this is only the DemandOpenLoopStorageController model) have inputs of:
commodity_incommodity_demand
and outputs of:
commodity_unmet_demandcommodity_unused_commoditycommodity_set_pointtotal_commodity_unmet_demand
and the storage performance models have an input of commodity_set_point and output the standard outputs of the PerformanceModelBaseClass such as
commodity_outrated_commodity_productiontotal_commodity_producedannual_commodity_producedcapacity_factor
In the case of using the DemandOpenLoopStorageController with the PerformanceModelBaseClass (which is done in 6 examples) and perhaps instances of using Pyomo dispatch controllers with the PySAM battery, there will be "issues" when using the storage component as the commodity_stream in a finance subgroup (done in Example 14, 18, 19, and 29) because the battery capacity factor and rated capacity are not as "tied" to the "electricity_out" of the battery as is the case for converter performance models. The battery capacity factor and rated capacity are based on the power discharged from the battery. The electricity_out of the battery is the electricity_in - battery_charged + battery_discharged - excess_electricity.
For most cases where a converter is defined as the commodity_stream, the finance subgroup results should not change if we use capacity_factor and rated_commodity_production instead of sum_comp.total_commodity_produced. This is not the case for storage, because the capacity factor and rated production are calculated on the commodity discharged not the commodity_out.
I think that we need to:
- standardize what's passed from storage control strategies to storage performance models (Issue Standardize use of controller output
commodity_set_pointacross storage models #498) - standardize make all control strategies compatible with all storage performance models (I can't find the issue right now, but be able to use Pyomo control strategies with a storage performance model that isn't the PySAM battery)
- redefine/recalculate/refactor the outputs of storage performance models
Proposed solution
- Standardize (and define) what is input/output of storage controller strategies and how that should be interpreted by the performance model its connected to (Issue Standardize use of controller output
commodity_set_pointacross storage models #498) - Remove saturating
commodity_outof storage performance models to be limited to the demand profile, the demand profile for a storage component should only used to decide when to charge/discharge storage. Aka -commodity_outorcommodity_set_pointshould not be saturated at the demand profile. - Change the calculation of
commodity_outfrom the storage performance models to instead be a timeseries of the battery charge and discharge profiles.commodity_outis negative if the storage is being charged, and positive if the storage is being discharged. - Use a combiner to combine the electricity stream that was going into the battery with the electricity stream out of the battery. The output of the combiner would be equal to
commodity_in - commodity_to_charge_storage + commodity_discharged_from_storage