Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
1886a71
Tests to capture existing depreciation allocation behavior and some c…
brtietz Apr 23, 2026
54926f6
Fix variable assignment in single owner
brtietz Apr 23, 2026
282cee5
Add new depreciation matrix input as an alternative for the automated…
brtietz Apr 24, 2026
d5c4ccb
Add test for non-depreciable assets
brtietz Apr 24, 2026
8029a24
Merge branch 'develop' of https://github.com/NREL/ssc into itc_basis_…
brtietz May 5, 2026
f66a529
Merge branch 'develop' into itc_basis_updates
mjprilliman May 7, 2026
65dfe80
Merge branch 'develop' of https://github.com/NREL/ssc into itc_basis_…
brtietz May 7, 2026
851424b
Move itc and depreciation outputs to common.cpp where possible (sale …
brtietz May 8, 2026
77edda4
Merge branch 'itc_basis_updates' of https://github.com/NREL/ssc into …
brtietz May 8, 2026
1d1950d
Merge branch 'develop' of https://github.com/NREL/ssc into itc_basis_…
brtietz May 8, 2026
fca375b
Merge branch 'develop' of https://github.com/NREL/ssc into itc_basis_…
brtietz May 11, 2026
7f12189
Get the new itc code working with residential. Who knows what else br…
brtietz May 11, 2026
9bde1b7
Input json updates for new cashloan code
brtietz May 11, 2026
084918a
Update json test comparison for "nan" values to work with both develo…
sjanzou May 12, 2026
5b7a2f4
Fix logic error in NaN testing - note that CMPvsamv1BatteryIntegratio…
sjanzou May 12, 2026
4a97075
Merge branch 'develop' of https://github.com/NREL/ssc into itc_basis_…
brtietz May 14, 2026
fe74004
Add new cashloan inputs to lcos test. Value drops due to tax credits …
May 14, 2026
aaf589f
Apply new itc basis and depreciation inputs to cashloan heat
brtietz May 19, 2026
1e227ce
Add new inputs to custom generation commercial tests
brtietz May 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
342 changes: 101 additions & 241 deletions ssc/cmod_cashloan.cpp

Large diffs are not rendered by default.

339 changes: 119 additions & 220 deletions ssc/cmod_cashloan_heat.cpp

Large diffs are not rendered by default.

303 changes: 4 additions & 299 deletions ssc/cmod_communitysolar.cpp

Large diffs are not rendered by default.

310 changes: 4 additions & 306 deletions ssc/cmod_equpartflip.cpp

Large diffs are not rendered by default.

310 changes: 8 additions & 302 deletions ssc/cmod_host_developer.cpp

Large diffs are not rendered by default.

308 changes: 4 additions & 304 deletions ssc/cmod_levpartflip.cpp

Large diffs are not rendered by default.

304 changes: 4 additions & 300 deletions ssc/cmod_merchantplant.cpp

Large diffs are not rendered by default.

312 changes: 9 additions & 303 deletions ssc/cmod_singleowner.cpp

Large diffs are not rendered by default.

303 changes: 4 additions & 299 deletions ssc/cmod_singleowner_heat.cpp

Large diffs are not rendered by default.

336 changes: 326 additions & 10 deletions ssc/common.cpp

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions ssc/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ extern var_info vtab_equip_reserve[];
extern var_info vtab_depreciation[];
extern var_info vtab_depreciation_inputs[];
extern var_info vtab_depreciation_outputs[];
extern var_info vtab_tax_outputs[];
extern var_info vtab_itc_outputs[];
extern var_info vtab_tax_credits[];
extern var_info vtab_payment_incentives[];
extern var_info vtab_tax_credits_heat[];
Expand Down
290 changes: 204 additions & 86 deletions ssc/common_financial.cpp

Large diffs are not rendered by default.

9 changes: 7 additions & 2 deletions ssc/common_financial.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ class itc_and_depreciation_calculations
public:
itc_and_depreciation_calculations(compute_module* cm, size_t n_years);

void calc_basis(double pre_depr_alloc_basis, double pre_itc_qual_basis);
void calc_basis(double in_pre_depr_alloc_basis, double in_pre_itc_qual_basis);
void set_depr_schedules(compute_module* cm);
void major_equipment_depreciation(compute_module* cm, util::matrix_t<double>& main_cf, int cf_equipment_expenditure, int expenditure_year, int analysis_period, int cf_equipment_depreciation);

Expand Down Expand Up @@ -177,12 +177,13 @@ class itc_and_depreciation_calculations

double itc_fed_amount;
double itc_sta_amount;
double itc_fed_per;
double itc_fed_per; // Still in $, even though it has per in the name
double itc_sta_per;

double pre_depr_alloc_basis; // Total costs that could qualify for depreciation before allocations
double pre_itc_qual_basis; // Total costs that could qualify for ITC before allocations

// Variables with 'frac' in the name have % as units, others are in $
double depr_alloc_macrs_5_frac;
double depr_alloc_macrs_15_frac;
double depr_alloc_sl_5_frac;
Expand Down Expand Up @@ -227,6 +228,7 @@ class itc_and_depreciation_calculations
double itc_sta_qual_sl_20_frac;
double itc_sta_qual_sl_39_frac;
double itc_sta_qual_custom_frac;
double itc_sta_qual_none_frac;

double itc_sta_qual_total;

Expand All @@ -237,6 +239,7 @@ class itc_and_depreciation_calculations
double itc_sta_qual_sl_20;
double itc_sta_qual_sl_39;
double itc_sta_qual_custom;
double itc_sta_qual_none;

double itc_sta_disallow_factor;

Expand Down Expand Up @@ -264,6 +267,7 @@ class itc_and_depreciation_calculations
double itc_fed_qual_sl_20_frac;
double itc_fed_qual_sl_39_frac;
double itc_fed_qual_custom_frac;
double itc_fed_qual_none_frac;

double itc_fed_qual_total;

Expand All @@ -274,6 +278,7 @@ class itc_and_depreciation_calculations
double itc_fed_qual_sl_20;
double itc_fed_qual_sl_39;
double itc_fed_qual_custom;
double itc_fed_qual_none;

double itc_fed_disallow_factor;

Expand Down
3 changes: 2 additions & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ set(SRC_TO_TEST
../ssc/cmod_utilityrate5.cpp
../ssc/cmod_battery.cpp
../ssc/cmod_battwatts.cpp
../ssc/cmod_fuelcell.cpp)
../ssc/cmod_fuelcell.cpp
../ssc/common_financial.cpp)


#####################################################################################################################
Expand Down
40 changes: 40 additions & 0 deletions test/input_cases/custom_generation_common_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -738,5 +738,45 @@ void custom_generation_commerical_battery_60min(ssc_data_t &data)
ssc_data_set_number(data, "batt_replacement_cost_escal", 0);
ssc_data_set_number(data, "total_installed_cost", 86827.921875);
ssc_data_set_number(data, "salvage_percentage", 0);

ssc_data_set_number(data, "depr_alloc_macrs_5_percent", 90);
ssc_data_set_number(data, "depr_alloc_macrs_15_percent", 1.5);
ssc_data_set_number(data, "depr_alloc_sl_5_percent", 0);
ssc_data_set_number(data, "depr_alloc_sl_15_percent", 2.5);
ssc_data_set_number(data, "depr_alloc_sl_20_percent", 3);
ssc_data_set_number(data, "depr_alloc_sl_39_percent", 0);
ssc_data_set_number(data, "depr_alloc_custom_percent", 0);
ssc_number_t p_depr_custom_schedule[1] = { 0 };
ssc_data_set_array(data, "depr_custom_schedule", p_depr_custom_schedule, 1);
ssc_data_set_number(data, "depr_bonus_sta", 0);
ssc_data_set_number(data, "depr_bonus_sta_macrs_5", 1);
ssc_data_set_number(data, "depr_bonus_sta_macrs_15", 1);
ssc_data_set_number(data, "depr_bonus_sta_sl_5", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_15", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_20", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_39", 0);
ssc_data_set_number(data, "depr_bonus_sta_custom", 0);
ssc_data_set_number(data, "depr_bonus_fed", 0);
ssc_data_set_number(data, "depr_bonus_fed_macrs_5", 1);
ssc_data_set_number(data, "depr_bonus_fed_macrs_15", 1);
ssc_data_set_number(data, "depr_bonus_fed_sl_5", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_15", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_20", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_39", 0);
ssc_data_set_number(data, "depr_bonus_fed_custom", 0);
ssc_data_set_number(data, "depr_itc_sta_macrs_5", 1);
ssc_data_set_number(data, "depr_itc_sta_macrs_15", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_5", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_15", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_20", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_39", 0);
ssc_data_set_number(data, "depr_itc_sta_custom", 0);
ssc_data_set_number(data, "depr_itc_fed_macrs_5", 1);
ssc_data_set_number(data, "depr_itc_fed_macrs_15", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_5", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_15", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_20", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_39", 0);
ssc_data_set_number(data, "depr_itc_fed_custom", 0);
}
#endif
66 changes: 66 additions & 0 deletions test/input_cases/pvsamv1_battery_common_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,72 @@ void commercial_multiarray_default(ssc_data_t& data) {
ssc_data_set_number(data, "prop_tax_assessed_decline", 0);
ssc_data_set_number(data, "real_discount_rate", 6.4000000000000004);
ssc_data_set_number(data, "insurance_rate", 0.5);

ssc_number_t itc_amount[1] = { 0 };
ssc_number_t itc_fed_percent[1] = { 26 };
ssc_number_t itc_amount_max[1] = { 1e+38 };
ssc_data_set_array(data, "itc_fed_amount", itc_amount, 1);
ssc_data_set_array(data, "itc_sta_amount", itc_amount, 1);
ssc_data_set_array(data, "itc_fed_percent", itc_fed_percent, 1);
ssc_data_set_array(data, "itc_sta_percent", itc_amount, 1);
ssc_data_set_array(data, "itc_fed_percent_maxvalue", itc_amount_max, 1);
ssc_data_set_array(data, "itc_sta_percent_maxvalue", itc_amount_max, 1);
ssc_data_set_number(data, "itc_fed_amount_deprbas_fed", 1);
ssc_data_set_number(data, "itc_fed_amount_deprbas_sta", 1);
ssc_data_set_number(data, "itc_sta_amount_deprbas_fed", 0);
ssc_data_set_number(data, "itc_sta_amount_deprbas_sta", 0);
ssc_data_set_number(data, "itc_fed_percent_deprbas_fed", 1);
ssc_data_set_number(data, "itc_fed_percent_deprbas_sta", 1);
ssc_data_set_number(data, "itc_sta_percent_deprbas_fed", 0);
ssc_data_set_number(data, "itc_sta_percent_deprbas_sta", 0);
ssc_number_t p_ptc_fed_amount[1] = { 0 };
ssc_data_set_array(data, "ptc_fed_amount", p_ptc_fed_amount, 1);
ssc_data_set_number(data, "ptc_fed_term", 10);
ssc_data_set_number(data, "ptc_fed_escal", 0);
ssc_number_t p_ptc_sta_amount[1] = { 0 };
ssc_data_set_array(data, "ptc_sta_amount", p_ptc_sta_amount, 1);
ssc_data_set_number(data, "ptc_sta_term", 10);
ssc_data_set_number(data, "ptc_sta_escal", 0);
ssc_data_set_number(data, "depr_alloc_macrs_5_percent", 90);
ssc_data_set_number(data, "depr_alloc_macrs_15_percent", 1.5);
ssc_data_set_number(data, "depr_alloc_sl_5_percent", 0);
ssc_data_set_number(data, "depr_alloc_sl_15_percent", 2.5);
ssc_data_set_number(data, "depr_alloc_sl_20_percent", 3);
ssc_data_set_number(data, "depr_alloc_sl_39_percent", 0);
ssc_data_set_number(data, "depr_alloc_custom_percent", 0);
ssc_number_t p_depr_custom_schedule[1] = { 0 };
ssc_data_set_array(data, "depr_custom_schedule", p_depr_custom_schedule, 1);
ssc_data_set_number(data, "depr_bonus_sta", 0);
ssc_data_set_number(data, "depr_bonus_sta_macrs_5", 1);
ssc_data_set_number(data, "depr_bonus_sta_macrs_15", 1);
ssc_data_set_number(data, "depr_bonus_sta_sl_5", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_15", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_20", 0);
ssc_data_set_number(data, "depr_bonus_sta_sl_39", 0);
ssc_data_set_number(data, "depr_bonus_sta_custom", 0);
ssc_data_set_number(data, "depr_bonus_fed", 0);
ssc_data_set_number(data, "depr_bonus_fed_macrs_5", 1);
ssc_data_set_number(data, "depr_bonus_fed_macrs_15", 1);
ssc_data_set_number(data, "depr_bonus_fed_sl_5", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_15", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_20", 0);
ssc_data_set_number(data, "depr_bonus_fed_sl_39", 0);
ssc_data_set_number(data, "depr_bonus_fed_custom", 0);
ssc_data_set_number(data, "depr_itc_sta_macrs_5", 1);
ssc_data_set_number(data, "depr_itc_sta_macrs_15", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_5", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_15", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_20", 0);
ssc_data_set_number(data, "depr_itc_sta_sl_39", 0);
ssc_data_set_number(data, "depr_itc_sta_custom", 0);
ssc_data_set_number(data, "depr_itc_fed_macrs_5", 1);
ssc_data_set_number(data, "depr_itc_fed_macrs_15", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_5", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_15", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_20", 0);
ssc_data_set_number(data, "depr_itc_fed_sl_39", 0);
ssc_data_set_number(data, "depr_itc_fed_custom", 0);

ssc_number_t p_dc_degradation[1] = { 0.5 };
ssc_data_set_array(data, "dc_degradation", p_dc_degradation, 1);
ssc_data_set_number(data, "en_dc_lifetime_losses", 0);
Expand Down
Loading
Loading