Skip to content

Loss Adjustment improvements #703

@cpaulgilman

Description

@cpaulgilman

Overview

The LossAdjustment widget is currently designed to read loss inputs over one year as percentages in a combination of 1) a constant percentage, 2) array of hourly percentages, and/or 3) array of [start hour, end hour, percentage] arrays. This makes it unsuitable to use for a the new grid_outage input, which is a lifetime time series array of 0/1 values, or for other time series inputs such as curtailment that are not percentages and may be subhourly.

The widget is currently used as a "system availability" input for some models: CSP System Design or Power Cycle input pages, Detailed PV Losses page for DC and AC availability, etc. Note that Wind uses the DataArray widget to support subhourly values. See below for a list of all UI forms that use the widget.

loss-adjustment

Adjustment Factors Class in SSC

The adjustment_factors class defined in common.cpp converts the percentage values to factors, and calculates a total loss factor for each hour from the three inputs, returning an 8760 array of factors.

The widget is used on the UI forms listed below for the adjust, sf_adjust, and dc_adjust inputs to SSC compute modules. Search the Visual Studio SAM project for "adjustment_factors" to find all instances of the class in SSC.

Suggested Modifications

  1. Support for lifetime and subhourly arrays: Could be implemented by using DataLifetimeArray instead of DataArray for the current "Enable hourly values" option.

  2. Return an array of values instead of a table of percentages. This would allow the widget to be used for any lifetime time series input with hourly or subhourly time steps.

  3. Add Description and Label properties.

Considerations

If the widget returns an array of values, then the adjustment_factors class would no longer be needed to handle the special table format and the conversion from percentages to factors. Making this change would require updating all adjust, sf_adjust, and dc_adjust variables SSC.

This change would break code written by SDK or PySAM users that uses those variables. This could be handled by writing a function to detect and convert those variables.

An alternative would be to keep the current widget and SSC class, and to create a new widget for "time series values with custom periods" that converts a set of [ start time step, stop time step, value ] arrays to a lifetime array. Then, options for entering lifetime inputs could be handled in the UI, for example, three inputs for Constant, Time Series, Custom Periods would be defined as separate widgets in the UI and a UI equation would process those inputs into a single time series array.

List of UI Forms Using the LossAdjustment Widget

form object: Biopower Plant Specifications.object{adjust} = LossAdjustment
form object: Dish Solar Field.object{adjust} = LossAdjustment
form object: Empirical Trough Power Block.object{adjust} = LossAdjustment
form object: Generic CSP Power Block.object{adjust} = LossAdjustment
form object: Generic CSP Solar Field.object{sf_adjust} = LossAdjustment
form object: Generic System Plant.object{adjust} = LossAdjustment
form object: Geothermal Plant and Equipment.object{adjust} = LossAdjustment
form object: Grid Outage.object{} = LossAdjustment
form object: HCPV Array.object{adjust} = LossAdjustment
form object: ISCC Receiver and Powerblock.object{adjust} = LossAdjustment
form object: LF DSG System Design.object{adjust} = LossAdjustment
form object: Molten Salt Linear Fresnel Power Cycle.object{adjust} = LossAdjustment
form object: MSLF Power Cycle Common.object{adjust} = LossAdjustment
form object: MSPT System Control.object{adjust} = LossAdjustment
form object: PBNS Power Block.object{adjust} = LossAdjustment
form object: Phys Trough System Control.object{adjust} = LossAdjustment
form object: Physical Trough Power Block Common.object{adjust} = LossAdjustment
form object: Physical Trough Power Block.object{adjust} = LossAdjustment
form object: Physical Trough System Control.object{adjust} = LossAdjustment
form object: PV Losses.object{adjust} = LossAdjustment
form object: PV Losses.object{dc_adjust} = LossAdjustment
form object: PV2 Interconnection.object{adjust} = LossAdjustment
form object: PVWatts.object{adjust} = LossAdjustment
form object: Solar Water Heating.object{adjust} = LossAdjustment
form object: Tower Solar Field.object{sf_adjust} = LossAdjustment
form object: Tower SolarPilot Solar Field.object{sf_adjust} = LossAdjustment

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions