-
Notifications
You must be signed in to change notification settings - Fork 27
Description
This issue is intended to capture a follow-on PR to PR #463
Currently, the ProFAST finances models represent the annual commodity production by setting the 'capacity' parameter based on the actual commodity production and the long term utilization as 1. For models that account for variable commodity production over the lifetime (like the electrolyzer model), this is not accurately represented in the finance results. This can only be represented in the finance results by setting the long term utilization to the capacity factor of the tech and setting the capacity as the actual tech's rated production capacity.
Timeline for this: 3-10 days after PR #463 is merged.
Note: May result in changed test values depending on whether the electrolyzer model outputs the life average capacity factor vs the capacity factor per year of the plant life (see PR #491)
Benefits of this development:
- Allow for lifetime performance to be reflected in financials
- Reduction in amount of hard-coded tech-specific and/or commodity-specific logic in
H2IntegrateModel - Lays the groundwork to potentially fully remove hard-coded tech-specific and/or commodity-specific logic in
H2IntegrateModel. This would also allow for more consistent logic when commodity streams are not defined and not rely on the use of summer components. - Removal of tech-specific hard-coded logic in the finance models (all technologies in the finance subgroup would pass the replacement schedule to the finance model)
- Allows more flexibility in what commodities and/or commodity streams may be connected to the finance models
Background
Currently, the only enforced naming convention in H2I is the use of "commodity_in" and "commodity_out" for models. The commodity_out stream is connected to a summer model, which sums the timeseries profile over the length of the simulation. The outputs of these summers are only accurate if a simulation is one year and has an hourly timestep. The output of the summer is connected to the finance models as total_commodity_produced, which sets the following values ProFAST:
capacity = inputs[f"total_{self.options['commodity_type']}_produced"][0] / 365.0
profast_params["capacity"] = capacity
profast_params["long term utilization"] = 1 The capacity parameter cannot be set as an array to account for varying production over the lifetime of the plant. The long term utilization parameter (equivalent to capacity factor) can account for varying production over the lifetime of the plant. To allow for accurate accounting of annual variation of commodity production that some technology models are capable of estimating, we would have to move towards a framework where the ProFAST parameters are set as:
# create years of operation list
years_of_operation = create_years_of_operation(
self.params.plant_life,
self.params.analysis_start_year,
self.params.installation_time,
)
# below would assume hourly timestep
capacity = inputs[f"rated_{self.options['commodity_type']}_production"][0] * 24 # has to be in commodity/day
utilization = inputs[f"self.options['commodity_type']_capacity_factor"] # this is an array equal to the plant life
profast_params["capacity"] = capacity
profast_params["long term utilization"] = dict(zip(years_of_operation, utilization))Sub tasks:
The steps to do this are:
- [/] update the storage models to have standardized outputs (PR Standardized Performance Outputs: Generic Storage & Control #493)
- [/] update combiner model to have standardized outputs (PR Standard Combiner Outputs (follow-on to 463) #501)
- update splitter model to have standardized outputs (unsure if necessary, I don't think we have a way of handling a finance stream output from a splitter but I may be wrong)
- update feedstock model to have standardized outputs
- remove "ElectricitySumComp" and replace with "GenericSummerPerformanceModel" (perhaps)
- remove use of summer components (perhaps)
- move tech-specific hard-coded logic in
connect_technologies()when connecting technology streams to the finance model tocreate_finance_model()and format as defining the commodity stream if its not specified - update finance model to use utilization and rated commodity production from the commodity stream, will require updates to finance models and H2IntegrateModel. This depends on most of the previous steps to be complete.
Optional steps but perhaps may be necessary:
- create a finance model baseclass, update tech-specific finance models as needed
- make a generic transport model (and/or update the pipe model) that has to be defined in the tech config, this would allow for more commodities to be introduced for transport
- more often enforce use of
commodity_streamin finance subgroups - add a generic subtractor to account for possible differences with use of storage components as commodity streams.