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.

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
-
Support for lifetime and subhourly arrays: Could be implemented by using DataLifetimeArray instead of DataArray for the current "Enable hourly values" option.
-
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.
-
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
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_outageinput, 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.
Adjustment Factors Class in SSC
The
adjustment_factorsclass 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, anddc_adjustinputs to SSC compute modules. Search the Visual Studio SAM project for "adjustment_factors" to find all instances of the class in SSC.Suggested Modifications
Support for lifetime and subhourly arrays: Could be implemented by using DataLifetimeArray instead of DataArray for the current "Enable hourly values" option.
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.
Add Description and Label properties.
Considerations
If the widget returns an array of values, then the
adjustment_factorsclass would no longer be needed to handle the special table format and the conversion from percentages to factors. Making this change would require updating alladjust,sf_adjust, anddc_adjustvariables 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