diff --git a/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileCommercial.json b/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileCommercial.json index 9e09f2db9..fa4e2a7bb 100644 --- a/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileCommercial.json +++ b/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileCommercial.json @@ -179,7 +179,7 @@ "gen": [0] }, "Lifetime": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "LCOS": { "batt_salvage_percentage": 0 diff --git a/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileResidential.json b/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileResidential.json index ccd29cb6a..7d1144383 100644 --- a/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileResidential.json +++ b/api/api_autogen/library/defaults/Cashloan_CustomGenerationProfileResidential.json @@ -175,7 +175,7 @@ "gen": [0] }, "Lifetime": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "LCOS": { "batt_salvage_percentage": 0 diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryAllEquityPartnershipFlip.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryAllEquityPartnershipFlip.json index fb4335e8d..999fda168 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryAllEquityPartnershipFlip.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryAllEquityPartnershipFlip.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 20000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryCommercial.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryCommercial.json index b76ebb802..f696b0afa 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryCommercial.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryCommercial.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 215, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryHostDeveloper.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryHostDeveloper.json index b76ebb802..f696b0afa 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryHostDeveloper.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryHostDeveloper.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 215, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryLeveragedPartnershipFlip.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryLeveragedPartnershipFlip.json index fb4335e8d..999fda168 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryLeveragedPartnershipFlip.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryLeveragedPartnershipFlip.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 20000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryMerchantPlant.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryMerchantPlant.json index b79dfb3ee..2b88967df 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryMerchantPlant.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryMerchantPlant.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 20000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryResidential.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryResidential.json index 531044425..0e5fa8d1d 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryResidential.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryResidential.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 8, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySaleLeaseback.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySaleLeaseback.json index fb4335e8d..999fda168 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySaleLeaseback.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySaleLeaseback.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 20000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySingleOwner.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySingleOwner.json index b79dfb3ee..2b88967df 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySingleOwner.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatterySingleOwner.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 20000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryThirdParty.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryThirdParty.json index 84b588ab8..f2dd00e13 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryThirdParty.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationBatteryThirdParty.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 4, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileAllEquityPartnershipFlip.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileAllEquityPartnershipFlip.json index f08fb0039..7dea0063c 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileAllEquityPartnershipFlip.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileAllEquityPartnershipFlip.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileCommercial.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileCommercial.json index 9531b54fe..de8473f85 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileCommercial.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileCommercial.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 9707.12, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileHostDeveloper.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileHostDeveloper.json index 3674b6a2e..bdf08cc58 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileHostDeveloper.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileHostDeveloper.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 9707.12, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLCOECalculator.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLCOECalculator.json index a78d0c5fd..48ebab323 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLCOECalculator.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLCOECalculator.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLeveragedPartnershipFlip.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLeveragedPartnershipFlip.json index 9cb3653a0..f9484f058 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLeveragedPartnershipFlip.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileLeveragedPartnershipFlip.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileMerchantPlant.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileMerchantPlant.json index f08fb0039..7dea0063c 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileMerchantPlant.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileMerchantPlant.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileNone.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileNone.json index a78d0c5fd..48ebab323 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileNone.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileNone.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileResidential.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileResidential.json index f2d940ac5..79a9f660a 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileResidential.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileResidential.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 8, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSaleLeaseback.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSaleLeaseback.json index f08fb0039..7dea0063c 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSaleLeaseback.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSaleLeaseback.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSingleOwner.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSingleOwner.json index f08fb0039..7dea0063c 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSingleOwner.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileSingleOwner.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 100000, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileThirdParty.json b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileThirdParty.json index 4ac646a9e..7df8462ce 100644 --- a/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileThirdParty.json +++ b/api/api_autogen/library/defaults/CustomGeneration_CustomGenerationProfileThirdParty.json @@ -4,6 +4,7 @@ "conv_eff": 34.118, "derate": 4, "energy_output_array": [0.000000], + "energy_output_array_lifetime": [0.000000], "heat_rate": 10, "spec_mode": 0, "system_capacity": 4, @@ -11,7 +12,8 @@ }, "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "generic_degradation": [0.000000], + "system_use_lifetime_output": 1 }, "AdjustmentFactors": { "adjust_constant": 0, diff --git a/api/api_autogen/library/defaults/Equpartflip_CustomGenerationProfileAllEquityPartnershipFlip.json b/api/api_autogen/library/defaults/Equpartflip_CustomGenerationProfileAllEquityPartnershipFlip.json index 62fcab1cb..5f93bc098 100644 --- a/api/api_autogen/library/defaults/Equpartflip_CustomGenerationProfileAllEquityPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Equpartflip_CustomGenerationProfileAllEquityPartnershipFlip.json @@ -239,7 +239,7 @@ "Recapitalization": { }, "TimeOfDelivery": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "UtilityBill": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileAllEquityPartnershipFlip.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileAllEquityPartnershipFlip.json index ed411063f..d10f0e6ad 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileAllEquityPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileAllEquityPartnershipFlip.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileCommercial.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileCommercial.json index 610ff0ee1..f21e44438 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileCommercial.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileCommercial.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileHostDeveloper.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileHostDeveloper.json index 610ff0ee1..f21e44438 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileHostDeveloper.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileHostDeveloper.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileLeveragedPartnershipFlip.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileLeveragedPartnershipFlip.json index ed411063f..d10f0e6ad 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileLeveragedPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileLeveragedPartnershipFlip.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileMerchantPlant.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileMerchantPlant.json index ed411063f..d10f0e6ad 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileMerchantPlant.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileMerchantPlant.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileResidential.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileResidential.json index 6f8b747f3..a9c634337 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileResidential.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileResidential.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSaleLeaseback.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSaleLeaseback.json index ed411063f..d10f0e6ad 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSaleLeaseback.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSaleLeaseback.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSingleOwner.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSingleOwner.json index ed411063f..d10f0e6ad 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSingleOwner.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileSingleOwner.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileThirdParty.json b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileThirdParty.json index 6f8b747f3..a9c634337 100644 --- a/api/api_autogen/library/defaults/Grid_CustomGenerationProfileThirdParty.json +++ b/api/api_autogen/library/defaults/Grid_CustomGenerationProfileThirdParty.json @@ -2,7 +2,7 @@ "defaults": { "Lifetime": { "analysis_period": 25, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "SystemOutput": { }, diff --git a/api/api_autogen/library/defaults/HostDeveloper_CustomGenerationProfileHostDeveloper.json b/api/api_autogen/library/defaults/HostDeveloper_CustomGenerationProfileHostDeveloper.json index 644dae9f0..66c2446ec 100644 --- a/api/api_autogen/library/defaults/HostDeveloper_CustomGenerationProfileHostDeveloper.json +++ b/api/api_autogen/library/defaults/HostDeveloper_CustomGenerationProfileHostDeveloper.json @@ -278,7 +278,7 @@ "Recapitalization": { }, "TimeOfDelivery": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ConstructionFinancing": { "construction_financing_cost": 0 diff --git a/api/api_autogen/library/defaults/Levpartflip_CustomGenerationProfileLeveragedPartnershipFlip.json b/api/api_autogen/library/defaults/Levpartflip_CustomGenerationProfileLeveragedPartnershipFlip.json index ff5b410bd..d9ebf6357 100644 --- a/api/api_autogen/library/defaults/Levpartflip_CustomGenerationProfileLeveragedPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Levpartflip_CustomGenerationProfileLeveragedPartnershipFlip.json @@ -262,7 +262,7 @@ "Recapitalization": { }, "TimeOfDelivery": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "UtilityBill": { }, diff --git a/api/api_autogen/library/defaults/Merchantplant_CustomGenerationProfileMerchantPlant.json b/api/api_autogen/library/defaults/Merchantplant_CustomGenerationProfileMerchantPlant.json index a6125a708..7a506a1e6 100644 --- a/api/api_autogen/library/defaults/Merchantplant_CustomGenerationProfileMerchantPlant.json +++ b/api/api_autogen/library/defaults/Merchantplant_CustomGenerationProfileMerchantPlant.json @@ -219272,7 +219272,7 @@ "UtilityBill": { }, "Lifetime": { - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "FuelCell": { }, diff --git a/api/api_autogen/library/defaults/Saleleaseback_CustomGenerationProfileSaleLeaseback.json b/api/api_autogen/library/defaults/Saleleaseback_CustomGenerationProfileSaleLeaseback.json index d823307ab..adeeba1e0 100644 --- a/api/api_autogen/library/defaults/Saleleaseback_CustomGenerationProfileSaleLeaseback.json +++ b/api/api_autogen/library/defaults/Saleleaseback_CustomGenerationProfileSaleLeaseback.json @@ -243,7 +243,7 @@ "salvage_percentage": 0, "sponsor_operating_margin": 20, "sponsor_operating_margin_escalation": 2, - "system_use_lifetime_output": 0, + "system_use_lifetime_output": 1, "tax_investor_required_lease_reserve": 6, "total_installed_cost": 1.092e+08 }, diff --git a/api/api_autogen/library/defaults/Singleowner_CustomGenerationProfileSingleOwner.json b/api/api_autogen/library/defaults/Singleowner_CustomGenerationProfileSingleOwner.json index ef4a0093d..fd7903894 100644 --- a/api/api_autogen/library/defaults/Singleowner_CustomGenerationProfileSingleOwner.json +++ b/api/api_autogen/library/defaults/Singleowner_CustomGenerationProfileSingleOwner.json @@ -377,7 +377,7 @@ }, "Lifetime": { "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "FuelCell": { }, diff --git a/api/api_autogen/library/defaults/Thirdpartyownership_CustomGenerationProfileThirdParty.json b/api/api_autogen/library/defaults/Thirdpartyownership_CustomGenerationProfileThirdParty.json index ebdb36fb7..79fdff7b0 100644 --- a/api/api_autogen/library/defaults/Thirdpartyownership_CustomGenerationProfileThirdParty.json +++ b/api/api_autogen/library/defaults/Thirdpartyownership_CustomGenerationProfileThirdParty.json @@ -16,7 +16,7 @@ }, "AnnualOutput": { "degradation": [0.000000], - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "CashFlow": { "lease_escalation": 1, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileAllEquityPartnershipFlip.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileAllEquityPartnershipFlip.json index 5707055e0..3dd734119 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileAllEquityPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileAllEquityPartnershipFlip.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "en_electricity_rates": 0, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileCommercial.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileCommercial.json index 9ce35f75b..105a7c7de 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileCommercial.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileCommercial.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "rate_escalation": [0.000000], diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileHostDeveloper.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileHostDeveloper.json index 24732544b..209bfbcf6 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileHostDeveloper.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileHostDeveloper.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "rate_escalation": [0.000000], diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileLeveragedPartnershipFlip.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileLeveragedPartnershipFlip.json index 5707055e0..3dd734119 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileLeveragedPartnershipFlip.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileLeveragedPartnershipFlip.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "en_electricity_rates": 0, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileMerchantPlant.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileMerchantPlant.json index ac1a71cf2..fe9e76d52 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileMerchantPlant.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileMerchantPlant.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "en_electricity_rates": 0, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileResidential.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileResidential.json index 3f503a1af..da46e1b9b 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileResidential.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileResidential.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "rate_escalation": [0.000000], diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSaleLeaseback.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSaleLeaseback.json index 5707055e0..3dd734119 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSaleLeaseback.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSaleLeaseback.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "en_electricity_rates": 0, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSingleOwner.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSingleOwner.json index 082ec409a..cc7fc5523 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSingleOwner.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileSingleOwner.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "en_electricity_rates": 0, diff --git a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileThirdParty.json b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileThirdParty.json index cdc5e55ff..8606521f5 100644 --- a/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileThirdParty.json +++ b/api/api_autogen/library/defaults/Utilityrate5_CustomGenerationProfileThirdParty.json @@ -3,7 +3,7 @@ "Lifetime": { "analysis_period": 25, "inflation_rate": 2.5, - "system_use_lifetime_output": 0 + "system_use_lifetime_output": 1 }, "ElectricityRates": { "rate_escalation": [0.000000], diff --git a/api/include/SAM_CustomGeneration.h b/api/include/SAM_CustomGeneration.h index f5302d697..c39c44385 100644 --- a/api/include/SAM_CustomGeneration.h +++ b/api/include/SAM_CustomGeneration.h @@ -55,6 +55,14 @@ extern "C" */ SAM_EXPORT void SAM_CustomGeneration_Plant_energy_output_array_aset(SAM_table ptr, double* arr, int length, SAM_error *err); + /** + * Set energy_output_array_lifetime: Array of Energy Output Profile [kW] + * options: None + * constraints: None + * required if: spec_mode=2 + */ + SAM_EXPORT void SAM_CustomGeneration_Plant_energy_output_array_lifetime_aset(SAM_table ptr, double* arr, int length, SAM_error *err); + /** * Set heat_rate: Heat Rate [MMBTUs/MWhe] * options: None @@ -64,7 +72,7 @@ extern "C" SAM_EXPORT void SAM_CustomGeneration_Plant_heat_rate_nset(SAM_table ptr, double number, SAM_error *err); /** - * Set spec_mode: Spec mode: 0=constant CF,1=profile + * Set spec_mode: Spec mode: 0=constant CF,1=profile,2=lifetime profile * options: None * constraints: None * required if: * @@ -289,6 +297,8 @@ extern "C" SAM_EXPORT double* SAM_CustomGeneration_Plant_energy_output_array_aget(SAM_table ptr, int* length, SAM_error *err); + SAM_EXPORT double* SAM_CustomGeneration_Plant_energy_output_array_lifetime_aget(SAM_table ptr, int* length, SAM_error *err); + SAM_EXPORT double SAM_CustomGeneration_Plant_heat_rate_nget(SAM_table ptr, SAM_error *err); SAM_EXPORT double SAM_CustomGeneration_Plant_spec_mode_nget(SAM_table ptr, SAM_error *err); diff --git a/api/modules/SAM_CustomGeneration.cpp b/api/modules/SAM_CustomGeneration.cpp index 8a7f623a4..aa8dba388 100644 --- a/api/modules/SAM_CustomGeneration.cpp +++ b/api/modules/SAM_CustomGeneration.cpp @@ -32,6 +32,12 @@ SAM_EXPORT void SAM_CustomGeneration_Plant_energy_output_array_aset(SAM_table pt }); } +SAM_EXPORT void SAM_CustomGeneration_Plant_energy_output_array_lifetime_aset(SAM_table ptr, double* arr, int length, SAM_error *err){ + translateExceptions(err, [&]{ + ssc_data_set_array(ptr, "energy_output_array_lifetime", arr, length); + }); +} + SAM_EXPORT void SAM_CustomGeneration_Plant_heat_rate_nset(SAM_table ptr, double number, SAM_error *err){ translateExceptions(err, [&]{ ssc_data_set_number(ptr, "heat_rate", number); @@ -216,6 +222,16 @@ SAM_EXPORT double* SAM_CustomGeneration_Plant_energy_output_array_aget(SAM_table return result; } +SAM_EXPORT double* SAM_CustomGeneration_Plant_energy_output_array_lifetime_aget(SAM_table ptr, int* length, SAM_error *err){ + double* result = nullptr; + translateExceptions(err, [&]{ + result = ssc_data_get_array(ptr, "energy_output_array_lifetime", length); + if (!result) + make_access_error("SAM_CustomGeneration", "energy_output_array_lifetime"); + }); + return result; +} + SAM_EXPORT double SAM_CustomGeneration_Plant_heat_rate_nget(SAM_table ptr, SAM_error *err){ double result; translateExceptions(err, [&]{ diff --git a/deploy/runtime/defaults/Custom Generation Battery_All Equity Partnership Flip.json b/deploy/runtime/defaults/Custom Generation Battery_All Equity Partnership Flip.json index 8d74abcec..15b7dd25a 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_All Equity Partnership Flip.json +++ b/deploy/runtime/defaults/Custom Generation Battery_All Equity Partnership Flip.json @@ -20176,6 +20176,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Commercial.json b/deploy/runtime/defaults/Custom Generation Battery_Commercial.json index dc17df1ae..79d56934b 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Commercial.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Commercial.json @@ -37018,6 +37018,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], diff --git a/deploy/runtime/defaults/Custom Generation Battery_Host Developer.json b/deploy/runtime/defaults/Custom Generation Battery_Host Developer.json index 23c72f3f2..2c0cf5949 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Host Developer.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Host Developer.json @@ -46505,6 +46505,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Leveraged Partnership Flip.json b/deploy/runtime/defaults/Custom Generation Battery_Leveraged Partnership Flip.json index 4395abd94..d928995e1 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Leveraged Partnership Flip.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Leveraged Partnership Flip.json @@ -20184,6 +20184,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Merchant Plant.json b/deploy/runtime/defaults/Custom Generation Battery_Merchant Plant.json index b05608bd7..6ef26d476 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Merchant Plant.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Merchant Plant.json @@ -10791,6 +10791,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Residential.json b/deploy/runtime/defaults/Custom Generation Battery_Residential.json index 63e2a6c5d..b65ce5d0c 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Residential.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Residential.json @@ -8857,9 +8857,9 @@ "batt_computed_stacks_series": 1.0, "batt_computed_strings": 107.0, "batt_computed_voltage": 51.74, - "batt_current_charge_max": 96.30000000000001, + "batt_current_charge_max": 96.3, "batt_current_choice": 1.0, - "batt_current_discharge_max": 96.30000000000001, + "batt_current_discharge_max": 96.3, "batt_custom_dispatch": [ 0.0 ], @@ -9825,7 +9825,7 @@ 0.0, 0.0 ], - "batt_mass": 177.94864285714287, + "batt_mass": 177.9486428571429, "batt_maximum_SOC": 95.0, "batt_meter_position": 0.0, "batt_minimum_SOC": 30.0, @@ -9890,7 +9890,7 @@ "batt_size_choice": 0.0, "batt_specific_energy_per_mass": 70.0, "batt_specific_energy_per_volume": 82.0, - "batt_surface_area": 1.7081938826471875, + "batt_surface_area": 1.7081938826471877, "batt_target_choice": 0.0, "batt_target_power": [ 1.0, @@ -18695,7 +18695,7 @@ "battery_power": 4.982562000000001, "battery_thermal_shown": 0.0, "battery_total": 7404.087132000001, - "battery_total_cost_lcos": 9231.464459635201, + "battery_total_cost_lcos": 9231.464459635199, "battery_voltage_shown": 0.0, "cap_vs_temp": [ [ @@ -37008,6 +37008,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], @@ -37020,7 +37023,7 @@ "federal_tax_rate": [ 15.0 ], - "first_year_output": 13455.359999999999, + "first_year_output": 13455.36, "first_year_output_peak": 7.68, "fixed_plant_input": 0.0, "generic_degradation": [ @@ -63423,7 +63426,7 @@ 1.87435 ], "nameplate_capacity": 8.0, - "nominal_discount_rate": 9.060000000000003, + "nominal_discount_rate": 9.060000000000004, "normalize_to_utility_bill": 0.0, "om_batt_capacity_cost": [ 15.0 @@ -63558,7 +63561,7 @@ "system_capacity": 8.0, "system_capacity_combined": 0.0, "system_use_lifetime_output": 1.0, - "total_battery_indirect_cost": 1827.3773276352002, + "total_battery_indirect_cost": 1827.3773276352, "total_direct_cost": 16174.2914886, "total_indirect_cost": 9136.886638176, "total_installed_cost": 26119.892701206, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Sale Leaseback.json b/deploy/runtime/defaults/Custom Generation Battery_Sale Leaseback.json index da4e6fffc..3ed3d9567 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Sale Leaseback.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Sale Leaseback.json @@ -20171,6 +20171,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Single Owner.json b/deploy/runtime/defaults/Custom Generation Battery_Single Owner.json index 9478e26ce..37c49289b 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Single Owner.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Single Owner.json @@ -20185,6 +20185,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 15.0, "equip2_reserve_cost": 0.0, diff --git a/deploy/runtime/defaults/Custom Generation Battery_Third Party.json b/deploy/runtime/defaults/Custom Generation Battery_Third Party.json index 8959708ab..2ab04720b 100644 --- a/deploy/runtime/defaults/Custom Generation Battery_Third Party.json +++ b/deploy/runtime/defaults/Custom Generation Battery_Third Party.json @@ -36954,6 +36954,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], diff --git a/deploy/runtime/defaults/Custom Generation Profile_All Equity Partnership Flip.json b/deploy/runtime/defaults/Custom Generation Profile_All Equity Partnership Flip.json index 80ca1abe9..734151307 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_All Equity Partnership Flip.json +++ b/deploy/runtime/defaults/Custom Generation Profile_All Equity Partnership Flip.json @@ -9578,6 +9578,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 12.0, "equip2_reserve_cost": 0.0, @@ -9594,6 +9597,9 @@ "fixed_plant_input": 0.0, "flip_target_percent": 11.0, "flip_target_year": 20.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -19169,7 +19175,7 @@ ], "system_capacity": 100000.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "tax_investor_equity_percent": 98.0, "tax_investor_postflip_cash_percent": 10.0, "tax_investor_postflip_tax_percent": 10.0, diff --git a/deploy/runtime/defaults/Custom Generation Profile_Commercial.json b/deploy/runtime/defaults/Custom Generation Profile_Commercial.json index d7a8bf614..7a97e8048 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Commercial.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Commercial.json @@ -115,6 +115,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], @@ -130,6 +133,9 @@ "first_year_output": 35591986.409472, "first_year_output_peak": 9318.8352, "fixed_plant_input": 0.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -26608,7 +26614,7 @@ ], "system_capacity": 9707.12, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "total_direct_cost": 10192476.0, "total_indirect_cost": 1375984.26, "total_installed_cost": 11976159.3, diff --git a/deploy/runtime/defaults/Custom Generation Profile_Host Developer.json b/deploy/runtime/defaults/Custom Generation Profile_Host Developer.json index 887a7ef6e..3d6b97ee6 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Host Developer.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Host Developer.json @@ -9602,6 +9602,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 0.0, "equip2_reserve_cost": 0.0, @@ -9627,6 +9630,9 @@ "fixed_plant_input": 0.0, "flip_target_percent": 10.0, "flip_target_year": 10.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -36763,7 +36769,7 @@ ], "system_capacity": 9707.12, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "term_int_rate": 7.0, "term_tenor": 0.0, "tod_library": "Uniform Dispatch", diff --git a/deploy/runtime/defaults/Custom Generation Profile_LCOE Calculator.json b/deploy/runtime/defaults/Custom Generation Profile_LCOE Calculator.json index e0cdeb042..9bb7e171c 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_LCOE Calculator.json +++ b/deploy/runtime/defaults/Custom Generation Profile_LCOE Calculator.json @@ -50,9 +50,12 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "first_year_output": 756864000.0, "first_year_output_peak": 96000.0, - "fixed_charge_rate": 0.09243041098233787, + "fixed_charge_rate": 0.09243041098233788, "fixed_operating_cost": 2500000.0, "grid_curtailment": [ 1e38, @@ -8824,12 +8827,12 @@ "system_capacity_combined": 0.0, "ui_capital_cost_capacity": 1000.0, "ui_capital_cost_fixed": 27405000.0, - "ui_cfin": 1.0202725306040699, + "ui_cfin": 1.02027253060407, "ui_cost_input_option": 1.0, "ui_crf": 0.08426619052849123, "ui_fcr_input_option": 1.0, "ui_fixed_charge_rate": 0.098, - "ui_ireal": 0.043902439024390508, + "ui_ireal": 0.04390243902439051, "ui_lbl_cff_msg": "", "ui_operating_cost_capacity": 25.0, "ui_operating_cost_fixed": 765000.0, @@ -8837,7 +8840,7 @@ "ui_step_minutes": 60.0, "ui_system_capacity": 100000.0, "ui_variable_operating_cost": 0.0, - "ui_wacc": 0.055843902439024487, + "ui_wacc": 0.05584390243902449, "user_capacity_factor": 90.0, "variable_operating_cost": 0.0 } \ No newline at end of file diff --git a/deploy/runtime/defaults/Custom Generation Profile_Leveraged Partnership Flip.json b/deploy/runtime/defaults/Custom Generation Profile_Leveraged Partnership Flip.json index 9f3e532fa..6115a46fb 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Leveraged Partnership Flip.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Leveraged Partnership Flip.json @@ -9586,6 +9586,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 12.0, "equip2_reserve_cost": 0.0, @@ -9602,6 +9605,9 @@ "fixed_plant_input": 0.0, "flip_target_percent": 11.0, "flip_target_year": 20.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -19178,7 +19184,7 @@ ], "system_capacity": 100000.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "tax_investor_equity_percent": 98.0, "tax_investor_postflip_cash_percent": 10.0, "tax_investor_postflip_tax_percent": 10.0, diff --git a/deploy/runtime/defaults/Custom Generation Profile_Merchant Plant.json b/deploy/runtime/defaults/Custom Generation Profile_Merchant Plant.json index c0fafb2a7..78e6dfcc0 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Merchant Plant.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Merchant Plant.json @@ -193,6 +193,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 12.0, "equip2_reserve_cost": 0.0, @@ -208,6 +211,9 @@ "first_year_output_peak": 96000.0, "fixed_plant_input": 0.0, "forecast_price_signal_model": 1.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -666264,7 +666270,7 @@ ], "system_capacity": 100000.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "term_int_rate": 7.0, "term_tenor": 18.0, "total_direct_cost": 105000000.0, diff --git a/deploy/runtime/defaults/Custom Generation Profile_None.json b/deploy/runtime/defaults/Custom Generation Profile_None.json index 04d16ade5..16f3eac55 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_None.json +++ b/deploy/runtime/defaults/Custom Generation Profile_None.json @@ -28,6 +28,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "first_year_output": 756864000.0, "first_year_output_peak": 96000.0, "grid_curtailment": [ diff --git a/deploy/runtime/defaults/Custom Generation Profile_Residential.json b/deploy/runtime/defaults/Custom Generation Profile_Residential.json index 02166d327..da56388f2 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Residential.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Residential.json @@ -105,6 +105,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], @@ -120,6 +123,9 @@ "first_year_output": 60549.119999999995, "first_year_output_peak": 7.68, "fixed_plant_input": 0.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -26601,7 +26607,7 @@ ], "system_capacity": 8.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "total_direct_cost": 8400.0, "total_indirect_cost": 0.0, "total_installed_cost": 8736.0, diff --git a/deploy/runtime/defaults/Custom Generation Profile_Sale Leaseback.json b/deploy/runtime/defaults/Custom Generation Profile_Sale Leaseback.json index 5c71a2319..1eb0d52c1 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Sale Leaseback.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Sale Leaseback.json @@ -9573,6 +9573,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 12.0, "equip2_reserve_cost": 0.0, @@ -9589,6 +9592,9 @@ "fixed_plant_input": 0.0, "flip_target_percent": 11.0, "flip_target_year": 20.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -19166,7 +19172,7 @@ ], "system_capacity": 100000.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "tax_investor_required_lease_reserve": 6.0, "tod_library": "Uniform Dispatch", "total_direct_cost": 105000000.0, diff --git a/deploy/runtime/defaults/Custom Generation Profile_Single Owner.json b/deploy/runtime/defaults/Custom Generation Profile_Single Owner.json index af6244711..0ea72b45a 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Single Owner.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Single Owner.json @@ -9587,6 +9587,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "equip1_reserve_cost": 0.0, "equip1_reserve_freq": 12.0, "equip2_reserve_cost": 0.0, @@ -9603,6 +9606,9 @@ "fixed_plant_input": 0.0, "flip_target_percent": 11.0, "flip_target_year": 20.0, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -19186,7 +19192,7 @@ ], "system_capacity": 100000.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "term_int_rate": 7.0, "term_tenor": 18.0, "tod_library": "Uniform Dispatch", diff --git a/deploy/runtime/defaults/Custom Generation Profile_Third Party.json b/deploy/runtime/defaults/Custom Generation Profile_Third Party.json index b6e734950..31c5354d2 100644 --- a/deploy/runtime/defaults/Custom Generation Profile_Third Party.json +++ b/deploy/runtime/defaults/Custom Generation Profile_Third Party.json @@ -59,6 +59,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "escal_belpe": [ 0.0 ], @@ -70,6 +73,9 @@ ], "first_year_output": 30274.56, "first_year_output_peak": 3.84, + "generic_degradation": [ + 0.0 + ], "grid_curtailment": [ 1e38, 1e38, @@ -26409,7 +26415,7 @@ "start_day_of_year_load_ui": 3.335046e-317, "system_capacity": 4.0, "system_capacity_combined": 0.0, - "system_use_lifetime_output": 0.0, + "system_use_lifetime_output": 1.0, "ui_annual_load": 0.0, "ui_step_minutes": 60.0, "ur_annual_min_charge": 0.0, diff --git a/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Host Developer.json b/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Host Developer.json index d0436c43d..10aeab912 100644 --- a/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Host Developer.json +++ b/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Host Developer.json @@ -41,6 +41,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "first_year_output": 756864000.0, "first_year_output_peak": 96000.0, "fixed_plant_input": 0.0, diff --git a/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Single Owner.json b/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Single Owner.json index 9ccf8ddb9..88123255b 100644 --- a/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Single Owner.json +++ b/deploy/runtime/defaults/CustomGeneration PVWatts Wind FuelCell Battery Hybrid_Single Owner.json @@ -41,6 +41,9 @@ "energy_output_array": [ 0.0 ], + "energy_output_array_lifetime": [ + 0.0 + ], "first_year_output": 756864000.0, "first_year_output_peak": 96000.0, "fixed_plant_input": 0.0, diff --git a/deploy/runtime/startup.lk b/deploy/runtime/startup.lk index 142c6b44d..87845c94d 100644 --- a/deploy/runtime/startup.lk +++ b/deploy/runtime/startup.lk @@ -1584,7 +1584,7 @@ function setup_custom_generation_pages() setconfig( 'Custom Generation Profile', 'Residential' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'cashloan']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_residential_pages( LOAD_SIMPLE ); //does not include building load calculator @@ -1593,14 +1593,14 @@ setup_residential_pages( LOAD_SIMPLE ); //does not include building load calcula setconfig( 'Custom Generation Profile', 'Third Party' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'thirdpartyownership']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); setup_thirdparty_pages( LOAD_SIMPLE ); //----------------------------------------------------- setconfig( 'Custom Generation Profile', 'Commercial' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'cashloan']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_commercial_pages(LOAD_SIMPLE); //does not include building load calculator @@ -1609,7 +1609,7 @@ setup_commercial_pages(LOAD_SIMPLE); //does not include building load calculator setconfig( 'Custom Generation Profile', 'Leveraged Partnership Flip' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'levpartflip']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_leveraged_partnership_flip_pages(); @@ -1619,7 +1619,7 @@ setup_electricity_purchases(); setconfig( 'Custom Generation Profile', 'All Equity Partnership Flip' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'equpartflip']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_all_equity_partnership_flip_pages(); @@ -1629,7 +1629,7 @@ setup_electricity_purchases(); setconfig( 'Custom Generation Profile', 'Sale Leaseback' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'saleleaseback']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_sale_leaseback_pages(); @@ -1639,7 +1639,7 @@ setup_electricity_purchases(); setconfig( 'Custom Generation Profile', 'Single Owner' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'singleowner']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_single_owner_pages(); @@ -1648,7 +1648,7 @@ setup_electricity_purchases(); setconfig( 'Custom Generation Profile', 'Merchant Plant' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'merchantplant']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_merchant_plant_pages(); @@ -1657,7 +1657,7 @@ setup_electricity_purchases(); setconfig( 'Custom Generation Profile', 'Host Developer' ); setmodules( ['custom_generation', 'grid', 'utilityrate5', 'host_developer']); setup_custom_generation_pages(); -setup_lifetime_page( DEGRADATION_AC_SINGLE_YEAR ); +setup_lifetime_page( DEGRADATION_AC_LIFETIME ); addpage( [[ 'Custom Generation Costs']],{ 'sidebar'='Installation Costs', 'help'='installation-costs/cc_custom_generation' } ); addpage( [[ 'Operating Costs Fuel' ]], {'sidebar' = 'Operating Costs', 'help'='operating-costs/oc_operating'} ); setup_host_developer_pages( LOAD_SIMPLE ); //includes building load calculator by default in this function diff --git a/deploy/runtime/ui/Custom Generation Plant.json b/deploy/runtime/ui/Custom Generation Plant.json index 40d1eb656..5c684d6af 100644 --- a/deploy/runtime/ui/Custom Generation Plant.json +++ b/deploy/runtime/ui/Custom Generation Plant.json @@ -1,7 +1,7 @@ { "Name": "Custom Generation Plant", - "Width": 788.0, - "Height": 581.0, + "Width": 795.0, + "Height": 666.0, "FormObjects": { "GroupBox": { "Visible": 1.0, @@ -24,7 +24,7 @@ }, "Height": { "Type": 3.0, - "Integer": 440.0 + "Integer": 532.0 }, "Tool Tip": { "Type": 5.0, @@ -53,7 +53,7 @@ }, "Y": { "Type": 3.0, - "Integer": 441.0 + "Integer": 537.0 }, "Width": { "Type": 3.0, @@ -61,7 +61,7 @@ }, "Height": { "Type": 3.0, - "Integer": 132.0 + "Integer": 126.0 }, "Tool Tip": { "Type": 5.0, @@ -127,7 +127,7 @@ }, "Y": { "Type": 3.0, - "Integer": 471.0 + "Integer": 561.0 }, "Width": { "Type": 3.0, @@ -188,7 +188,7 @@ }, "Y": { "Type": 3.0, - "Integer": 141.0 + "Integer": 183.0 }, "Width": { "Type": 3.0, @@ -221,11 +221,11 @@ }, "X": { "Type": 3.0, - "Integer": 432.0 + "Integer": 429.0 }, "Y": { "Type": 3.0, - "Integer": 351.0 + "Integer": 447.0 }, "Width": { "Type": 3.0, @@ -304,11 +304,11 @@ }, "X": { "Type": 3.0, - "Integer": 453.0 + "Integer": 450.0 }, "Y": { "Type": 3.0, - "Integer": 414.0 + "Integer": 510.0 }, "Width": { "Type": 3.0, @@ -387,11 +387,11 @@ }, "X": { "Type": 3.0, - "Integer": 453.0 + "Integer": 450.0 }, "Y": { "Type": 3.0, - "Integer": 255.0 + "Integer": 351.0 }, "Width": { "Type": 3.0, @@ -474,7 +474,52 @@ }, "Y": { "Type": 3.0, - "Integer": 111.0 + "Integer": 126.0 + }, + "Width": { + "Type": 3.0, + "Integer": 140.0 + }, + "Height": { + "Type": 3.0, + "Integer": 24.0 + }, + "Tool Tip": { + "Type": 5.0, + "String": "" + }, + "Mode": { + "Type": 3.0, + "Integer": 1.0 + }, + "Label": { + "Type": 5.0, + "String": "" + }, + "Description": { + "Type": 5.0, + "String": "" + }, + "TabOrder": { + "Type": 3.0, + "Integer": -1.0 + } + } + }, + "DataLifetimeArray": { + "Visible": 1.0, + "ObjectProperties": { + "Name": { + "Type": 5.0, + "String": "energy_output_array_lifetime" + }, + "X": { + "Type": 3.0, + "Integer": 252.0 + }, + "Y": { + "Type": 3.0, + "Integer": 153.0 }, "Width": { "Type": 3.0, @@ -490,19 +535,39 @@ }, "Mode": { "Type": 3.0, - "Integer": 1.0 + "Integer": 3.0 }, "Label": { "Type": 5.0, "String": "" }, + "ColumnLabel": { + "Type": 5.0, + "String": "" + }, "Description": { "Type": 5.0, "String": "" }, "TabOrder": { "Type": 3.0, - "Integer": 4.0 + "Integer": -1.0 + }, + "AnalysisPeriod": { + "Type": 3.0, + "Integer": 25.0 + }, + "AnnualEnabled": { + "Type": 2.0, + "Boolean": 1.0 + }, + "WeeklyEnabled": { + "Type": 2.0, + "Boolean": 1.0 + }, + "ShowMode": { + "Type": 2.0, + "Boolean": 1.0 } } }, @@ -515,11 +580,11 @@ }, "X": { "Type": 3.0, - "Integer": 432.0 + "Integer": 429.0 }, "Y": { "Type": 3.0, - "Integer": 297.0 + "Integer": 393.0 }, "Width": { "Type": 3.0, @@ -598,11 +663,11 @@ }, "X": { "Type": 3.0, - "Integer": 432.0 + "Integer": 429.0 }, "Y": { "Type": 3.0, - "Integer": 324.0 + "Integer": 420.0 }, "Width": { "Type": 3.0, @@ -681,11 +746,11 @@ }, "X": { "Type": 3.0, - "Integer": 453.0 + "Integer": 450.0 }, "Y": { "Type": 3.0, - "Integer": 387.0 + "Integer": 483.0 }, "Width": { "Type": 3.0, @@ -768,7 +833,7 @@ }, "Y": { "Type": 3.0, - "Integer": 183.0 + "Integer": 279.0 }, "Width": { "Type": 3.0, @@ -826,11 +891,11 @@ }, "X": { "Type": 3.0, - "Integer": 48.0 + "Integer": 45.0 }, "Y": { "Type": 3.0, - "Integer": 369.0 + "Integer": 465.0 }, "Width": { "Type": 3.0, @@ -876,11 +941,11 @@ }, "X": { "Type": 3.0, - "Integer": 48.0 + "Integer": 45.0 }, "Y": { "Type": 3.0, - "Integer": 276.0 + "Integer": 372.0 }, "Width": { "Type": 3.0, @@ -926,11 +991,11 @@ }, "X": { "Type": 3.0, - "Integer": 48.0 + "Integer": 45.0 }, "Y": { "Type": 3.0, - "Integer": 237.0 + "Integer": 333.0 }, "Width": { "Type": 3.0, @@ -980,7 +1045,7 @@ }, "Y": { "Type": 3.0, - "Integer": 471.0 + "Integer": 561.0 }, "Width": { "Type": 3.0, @@ -1046,11 +1111,11 @@ }, "Width": { "Type": 3.0, - "Integer": 689.0 + "Integer": 662.0 }, "Height": { "Type": 3.0, - "Integer": 71.0 + "Integer": 90.0 }, "Tool Tip": { "Type": 5.0, @@ -1062,7 +1127,7 @@ }, "Items": { "Type": 6.0, - "StringList": "Constant generation profile from nameplate capacity and capacity factor|Import hourly or subhourly generation profile from file|Calculate generation profiles and nameplate capacity from open cases" + "StringList": "Constant generation profile from nameplate capacity and capacity factor|Import hourly or subhourly generation profile from file|Import lifetime hourly or subhourly generation profile from file|Calculate generation profiles and nameplate capacity from open cases" }, "ShowCaptions": { "Type": 2.0, @@ -1074,7 +1139,7 @@ }, "TabOrder": { "Type": 3.0, - "Integer": 1.0 + "Integer": -1.0 } } }, @@ -1091,7 +1156,7 @@ }, "Y": { "Type": 3.0, - "Integer": 111.0 + "Integer": 117.0 }, "Width": { "Type": 3.0, @@ -1174,7 +1239,7 @@ }, "Y": { "Type": 3.0, - "Integer": 159.0 + "Integer": 165.0 }, "Width": { "Type": 3.0, @@ -1257,7 +1322,7 @@ }, "Y": { "Type": 3.0, - "Integer": 135.0 + "Integer": 141.0 }, "Width": { "Type": 3.0, @@ -1463,7 +1528,22 @@ "DefaultValue": [ 0.0 ], - "UIObject": "DataArray", + "UIObject": "DataLifetimeArray", + "sscVariableName": "", + "sscVariableValue": "" + }, + "energy_output_array_lifetime": { + "Version": 4.0, + "Type": 2.0, + "Label": "Lifetime generation profile", + "Units": "kWac", + "Group": "Custom Generation Profile", + "IndexLabels": "", + "Flags": 0.0, + "DefaultValue": [ + 0.0 + ], + "UIObject": "DataLifetimeArray", "sscVariableName": "", "sscVariableValue": "" }, @@ -1525,7 +1605,7 @@ "Label": "Generic system plant output specification mode", "Units": " ", "Group": "Custom Generation Profile", - "IndexLabels": "Constant generation profile from nameplate capacity and capacity factor|Import hourly or subhourly generation profile from file|Calculate generation profiles and nameplate capacity from open cases", + "IndexLabels": "Constant generation profile from nameplate capacity and capacity factor|Import hourly or subhourly generation profile from file|Import lifetime hourly or subhourly generation profile from file|Calculate generation profiles and nameplate capacity from open cases", "Flags": 1.0, "DefaultValue": 0.0, "UIObject": "RadioChoice", @@ -1593,8 +1673,7 @@ "\t\t", "\t// 1MMBTU = 0.2931 MWh www.convert-measurement-units.com/conversion-calculator.php?type=energy", "\treturn 100.0/(${heat_rate} * 0.2931);", - "};", - "", + "};\r", "", "equations{ 'first_year_output' } = define() {", "\toutput = 0.0;", @@ -1606,6 +1685,23 @@ "\t\t\t* ${user_capacity_factor}/100", "\t\t\t* derate;", "\t}", + "\telseif(${spec_mode} == 2) {\r", + "\t\tgen = ${energy_output_array_lifetime};\r", + "\t\tif (#gen > 1) {\r", + "\t\t\tsteps_per_year = #(gen) / ${analysis_period};\r", + "\t\t\thours_per_step = 8760.0 / steps_per_year;\r", + "\t\t\t\r", + "\t\t\tstep_per_hr = 1.0 / hours_per_step;\r", + "\t\t\toutput = 0;\r", + "\t\t\tfor (i = 0; i < 8760 * step_per_hr; i++) {\r", + "\t\t\t\toutput += gen[i]*derate;\r", + "\t\t\t}\r", + "\t\t\toutput *= hours_per_step;\r", + "\t\t}\r", + "\t\telse {\r", + "\t\t\toutput = gen[0] * 8760 *derate;\r", + "\t\t}\r", + "\t}\r", "\telse", "\t{", "\t\toutput = sum(${energy_output_array})*(8760/#(${energy_output_array}))*derate;", @@ -1621,10 +1717,23 @@ "\t\toutput = ${system_capacity}", "\t\t\t* derate;", "\t}", - "\telse", + "\telse if (${spec_mode} == 1 || ${spec_mode} == 3)", "\t{", "\t\toutput = max(${energy_output_array});", - "\t}", + "\t}\r", + "\telse if (${spec_mode} == 2) {\r", + "\t\tgen = ${energy_output_array_lifetime};\r", + "\t\tsteps_per_year = #(gen) / ${analysis_period};\r", + "\t\thours_per_step = 8760.0 / steps_per_year;\r", + "\t\tstep_per_hr = 1.0 / hours_per_step;\r", + "\t\toutput = 0;\r", + "\t\tfor (i = 0; i < 8760 * step_per_hr; i++) {\r", + "\t\t\tif (gen[i] > output) output = gen[i];\r", + "\t\t}\r", + "\t\t\t\r", + "\t\t\r", + "\t}\r", + "\t", "\treturn output;", "};", "", @@ -1638,7 +1747,8 @@ "\t{", "\t\tif ( ${first_year_output_peak} != 0 )", "\t\t\toutput = ${first_year_output}/${system_capacity}/8760*100;", - "\t}", + "\t}\r", + "\t\t", "\treturn output;", "};", "", @@ -1670,7 +1780,7 @@ "};", "", "on_change{'btn_selectcases'} = define() {", - "\tif ( value('spec_mode') == 2 ) {", + "\tif ( value('spec_mode') == 3 ) {", "\t\tcombine_cases();", " }", "};", @@ -1691,21 +1801,27 @@ "}", "", "function check_inputs() {", - "\tmode = value('spec_mode');", + "\tmode = value('spec_mode');\r", + "\tsingle_year_tech = financing() == \"LCOE Calculator\" || financing() == \"None\";", "\tenable('system_capacity',", - "\t\tmode == 0 || mode == 1);", + "\t\tmode != 3);", "\tenable('user_capacity_factor', ", "\t\tmode == 0 );", "\tenable('energy_output_array',", - "\t\tmode == 1 || mode == 2);", + "\t\tmode == 1 || mode == 3);\r", + "\tenable('energy_output_array_lifetime',\r", + "\t\tmode == 2);\t", "\tenable('btn_selectcases',", - "\t\tmode == 2);", + "\t\tmode == 3);", "\tenable('system_capacity_combined',", - "\t\tmode == 2);", - "\tcolor = 'black';\t", - "\tif ( mode == 1 )", - "\t\ttxt = 'Click \"Edit array...\" to import generation data from a file. After importing the data, type a value for the nameplate capacity, which SAM uses to calculate the capacity factor and dollar amounts from any costs or incentives expressed $/W. Use the calculated values below to help you choose a nameplate capacity value. See Help for details.';", - "\telseif ( mode == 2 )", + "\t\tmode == 3);", + "\tcolor = 'black';\r", + "\t// single_year_tech\r", + "\tif ( mode == 1 )\r", + " txt = 'Click \"Edit array...\" to import generation data from a file. After importing the data, type a value for the nameplate capacity, which SAM uses to calculate the capacity factor and dollar amounts from any costs or incentives expressed $/W. Use the calculated values below to help you choose a nameplate capacity value. See Help for details.';\t", + "\telseif ( mode == 2 )\r", + "\t\ttxt = 'Click \"Edit lifetime array...\" to import generation data from a file. After importing the data, type a value for the nameplate capacity, which SAM uses to calculate the capacity factor and dollar amounts from any costs or incentives expressed $/W. Use the calculated values below to help you choose a nameplate capacity value. See Help for details.';\r", + "\telseif ( mode == 3 )", "\t\ttxt = 'Click \"Select cases...\" to select open cases, simulate those cases and combine their generation profiles into a single profile to be used with this generic case. Click \"Edit array...\" to view or edit the combined simulated productions.';", "\telse", "\t\ttxt = '';", @@ -1713,7 +1829,13 @@ "\t\t\ttxt += ' Nameplate capacity exceeds 110% of peak generation.';", "\t\t\tcolor = 'red';", "\t\t}\t", - "*/\t\t", + "*/\t\r", + "\t// Overwrite text with error message\r", + "\tif (mode == 2 && single_year_tech) {\r", + "\t\tcolor = 'red';\r", + "\t\ttxt = 'This financial model only runs single year data. To avoid the model interpreting lifetime data as subhourly, please choose an option besides importing lifetime data.';\r", + "\t}\r", + "", "\tproperty('import_message','caption',txt);", "\tproperty('import_message','TextColour',color);", "}", @@ -1731,7 +1853,6 @@ "\telse {", "\t\tproperty('adjust', 'AnalysisPeriod', 1);", "\t}", - "}", - "" + "}" ] } \ No newline at end of file diff --git a/deploy/runtime/versions.lk b/deploy/runtime/versions.lk index 05afe28e3..e627dda0b 100644 --- a/deploy/runtime/versions.lk +++ b/deploy/runtime/versions.lk @@ -202,6 +202,13 @@ version_upgrade{'2026.2.19'} = define() { if (cfg.tech == 'Wind Power' || strpos(cfg.tech, "Hybrid") > -1) { message('Wind balance of system cost estimators have been removed. Total capital costs remain the same in this version. Please uses SAM 2025.4.16 or older if you need access to the balance of system cost estimators within SAM.', 'warning'); } + + if (cfg.tech == 'Custom Generation Profile' || cfg.tech == 'CustomGeneration PVWatts Wind FuelCell Battery Hybrid') { + spec_mode = oldvalue('spec_mode'); + if (spec_mode == 2) { + value('spec_mode', 3, "Additional options have been added to custom generation profile, combined cases is now spec_mode 3"); + } + } }; version_upgrade{'2024.12.12'} = define() { diff --git a/doc/sam-help-revision-log.md b/doc/sam-help-revision-log.md index f528d2092..0a459bc74 100644 --- a/doc/sam-help-revision-log.md +++ b/doc/sam-help-revision-log.md @@ -22,6 +22,8 @@ DSCR debt sizing note, see Brian email 10/31/2025 "Addtional thoughts on debt si ## Complete +Custom generation lifetime data per https://github.com/NatLabRockies/SAM/pull/2166. 4/7/2026 + New topic for snow download window. 2/3/2026 New revised topics for PV UI redesign. 2/3/2026 diff --git a/doc/source/custom-generation/custom_generation_profile.rst b/doc/source/custom-generation/custom_generation_profile.rst index 63e84fede..0bd19f050 100644 --- a/doc/source/custom-generation/custom_generation_profile.rst +++ b/doc/source/custom-generation/custom_generation_profile.rst @@ -3,9 +3,6 @@ Generation Profile The Custom Generation Profile model allows you to represent a power plant using a simple model based on capacity factor and nameplate capacity, or to import hourly or subhourly electric generation data from another simulation model or measured from an operating system. -Custom Generation Profile Model -............................... - You can use the Custom Generation profile model for the following applications: * Model a thermal power plant as a baseline case for comparison with renewable alternatives. @@ -14,13 +11,10 @@ You can use the Custom Generation profile model for the following applications: * Use measured data from an installed plant with SAM's financial models. -Custom Generation Profile - Battery Model -......................................... - -The Custom Generation Profile - Battery model combines the Custom Generation Profile model with the battery storage model from the PV battery model. You can use the Custom Generation Profile - Battery model for a battery system that responds to an hourly or subhourly generation profile from another model or from data measured from a real system. +The Custom Generation Profile - Battery model combines the Custom Generation Profile model with the battery storage model. You can use the Custom Generation Profile - Battery model for a battery system that responds to an hourly or subhourly generation profile from another model or from data measured from a real system. Combine Cases -............. +~~~~~~~~~~~~~ Versions of SAM before SAM 2021.12.02 came with the "Combine Cases" macro that you could use to automatically calculate the generation profile by adding up generation data from other cases in the SAM file. This macro has been replaced by the **Generate production profiles and nameplate capacity from open cases** option described below. @@ -29,74 +23,85 @@ After running a simulation, you can see the hourly energy values in the :doc:`Ta Custom Generation Profile ~~~~~~~~~~~~~~~~~~~~~~~~~ -The custom generic profile model provides two options for describing the system's performance. You can either specify a nameplate capacity and capacity factor to model a constant generation profile, or you can import hourly or subhourly generation data from a file. +The custom generation profile model provides two overall options for describing the system's performance: + +* Specify a nameplate capacity and capacity factor to model a constant generation profile. + +* Import hourly or subhourly generation data from a file. **Constant generation profile from nameplate capacity and capacity factor** - Choose this option to model a generation profile that remains constant throughout the day and year. For this option, you provide the nameplate capacity, capacity factor, and loss values as inputs, and SAM calculates a constant generation profile to match. + Model a generation profile that remains constant throughout the day and year. For this option, you provide the nameplate capacity, capacity factor, and loss values as inputs, and SAM calculates a constant generation profile to match. **Import hourly or subhourly generation profile from file** - Choose this option when you have data describing the system's generation profile to import into SAM. + Import hourly or subhourly generation data over one year into SAM. SAM will use the same generation profile for each year in the analysis period. + +.. note:: The analysis period is specified on the Financial Parameters page. + +**Import lifetime hourly or subhourly generation profile from file** + Import hourly or subhourly generation data over the analysis period. **Calculate generation profiles and nameplate capacity from open cases** - Choose this option to combine the generation profiles from other cases in the file to use as input for this case. + Combine the generation profiles from other cases in the file to use as input for this case. This option only works for cases that run hourly simulations. For cases that run a simulation over the analysis period (lifetime simulation), SAM only uses the Year 1 data to generate the combined generation profile. .. note:: As of SAM 2023, hybrid system configurations are available that combine the output of PV, wind, custom generation profile and fuel cell models as an alternative to this Calculate Generation Profiles option. **Nameplate Capacity, kWe** The system's nameplate electrical capacity in electric kilowatts. - If your analysis involves a financial model, SAM uses the nameplate capacity to calculate any capacity-based costs that you specify in $/W on the :doc:`Installation costs <../installation-costs/cc_custom_generation>` and :doc:`Operating costs <../operating-costs/oc_operating>` pages and any capacity-based incentives on the :doc:`Incentives <../incentives-and-depreciation/incentives>` page. + If your analysis involves a financial model, SAM uses the nameplate capacity to calculate any capacity-based costs that you specify in $/W on the :doc:`Installation costs <../installation-costs/cc_custom_generation>` and :doc:`Operating costs <../operating-costs/oc_operating>` pages and any capacity-based incentives on the :doc:`Incentives <../incentives-and-depreciation/incentives>` page. It also uses the nameplate capacity to calculate the capacity factor when you import power generation data as input. - This input is disabled for the Generate production profiles and nameplate capacity from open cases option because SAM automatically calculates the nameplate capacity from the values in the cases being combined. + This input is disabled for **Calculate generation profiles and nameplate capacity from open cases** because SAM automatically calculates the nameplate capacity from the values in the cases being combined. **Nominal capacity factor** The nominal capacity factor is the plant capacity factor, not including plant losses or reduction in output due to system availability. - The nominal capacity factor is only available with the **Constant generation profile** option. SAM uses the value to calculate the total annual generation value as described below. + The nominal capacity factor is only available with the **Constant generation profile from nameplate capacity and capacity factor** option. SAM uses the value to calculate the total annual generation value as described below. When you import or generate power generation data, this input is disabled because for these options, SAM does not use the capacity factor to calculate the generation profile. .. note:: SAM reports a separate :doc:`capacity factor <../performance-metrics/mtp_capacity_factor>` in the results after you run a simulation that reflects plant losses and any reduction in output due to system availability. **Combined nameplate capacity, kWe** - When you use the **Generate production profiles and nameplate capacity** from open cases option, SAM automatically calculates the nameplate capacity as the sum of nameplate capacities of each case. You can edit this value if you want to use a different value than the calculated value. + When you choose **Calculate generation profiles and nameplate capacity from open cases**, SAM automatically calculates the nameplate capacity as the sum of nameplate capacities of each case. You can edit this value if you want to use a different value than the calculated value. -To import generation profile data: +**To import generation profile data:** -#. Choose **Import hourly or subhourly generation profile from file**. +#. If you have generation data for a single year, choose **Import hourly or subhourly generation profile from file**. If you have generation data over the analysis period, choose **Import lifetime hourly or subhourly generation profile from file**. -#. Click **Edit data** to open a window for importing data from a text file for pasting the data from your computer's clipboard. +#. Click **Edit data** or single-year data, or **Edit lifetime data** for lifetime data to open a window for importing data. -#. If you are importing subhourly data, click **Change time step** and enter the time step in minutes. For hourly data, the time step should be 60 minutes. +#. If you are importing subhourly data for a single eyar, click **Change time step** and enter the time step in minutes. For hourly data, the time step should be 60 minutes. If you are importing lifetime data, choose the appropriate **Mode** (for the **Subhourly** mode, choose **Time step in minutes**). #. Click **Import** to import the data from a text file. -The data must be in a single column with one row for each time step. Each row should contain a value in kW of electricity generated per time step. For example, an hourly data set should contain 8,760 rows of kW values. A 15-minute data set would contain 35,040 rows of kW values. +The data must be in a single column with one row for each time step. Each row should contain a value in kW of electricity generated per time step. For example, an hourly data set for a single year should contain 8,760 rows of kW values. A 15-minute data set for one year would contain 35,040 rows of kW values. Lifetime data sets should contain data over the same number of years as the analysis period on the Financial Parameters page. -The first row is reserved for a header, so do not include any electricity generation data in the first row. SAM checks the number of data rows in the file to ensure it is consistent with the time step you specify. For example, for a 60-minute time step, the text file should contain 8761 rows: One row at the top of the file for the header followed by 8760 data rows. A 15-minute data set would contain a total of 35,041 rows. +The first row is reserved for a header, so do not include any electricity generation data in the first row. SAM checks the number of data rows in the file to ensure it is consistent with the time step you specify. For example, for a 60-minute time step over a single year, the text file should contain 8761 rows: One row at the top of the file for the header followed by 8760 data rows. A 15-minute data set would contain a total of 35,041 rows. -To paste the data from a text editor, spreadsheet, or other software, copy the data to your clipboard, and then click Paste. +To paste the data from a text editor, spreadsheet, or other software, copy the data to your clipboard, and then click **Paste**. #. Click **OK** to return to the Power Plant page. #. Type a value for **Nameplate capacity**. This number might be the same as the peak annual generation, or a different value. -To generate generation profiles from other cases: +**To generate generation profiles from other cases:** -#. Click **Add** to create a case for each system's output that you want to include in the generation profile. +#. Click **Add** in the menu bar at the top of the window to create a case for each system's output that you want to include in the generation profile. -#. Choose **Generate generation profiles and nameplate capacity from open cases**. +#. Choose **Calculate generation profiles and nameplate capacity from open cases**. #. Click **Select cases** to choose the cases you want to use to calculate the production profile. +#. Click **OK** to start the process: SAM automatically runs a simulation for each case you selected and generates the combined generation profile. + #. Verify that the value in **Nameplate capacity** is the value you want to use for your analysis and change it if necessary. #. Click **Edit array** to verify the time series production data. Losses -...... +------ The power plant loss accounts for output reductions caused by inefficiencies in the system, such as from wiring losses or other factors. @@ -104,7 +109,7 @@ The power plant loss accounts for output reductions caused by inefficiencies i A percentage applied to the system's output in each time step for both the constant generation and imported data options. For example, a value of 5% would reduce the system output in each time step by 5%. Set the loss percentage to zero if all losses are accounted for in the nameplate capacity, capacity factor, or imported generation data. Calculated Values Based on Input Assumptions -............................................ +-------------------------------------------- The calculated values are equivalent to the metrics shown on the Results page after a simulation. Use these values to verify that the nameplate capacity and capacity factor are correct, or that data you imported from a file and nameplate capacity are correct. @@ -130,7 +135,7 @@ The calculated values are equivalent to the metrics shown on the Results page af For the import generation from file option: *Capacity Factor After Plant Loss (%) = Total Annual Generation (kWh) ÷ Peak Annual Generation (kW) ÷ 8760 hours/year × 100%* Heat Rate for Fuel Cost Calculation -................................... +------------------------------------ You only need to specify a heat rate if you are using the custom generation profile model for a thermal power plant that consumes a fuel. diff --git a/src/combinecases.cpp b/src/combinecases.cpp index 6dd742821..d7179b19e 100644 --- a/src/combinecases.cpp +++ b/src/combinecases.cpp @@ -411,7 +411,7 @@ void CombineCasesDialog::OnEvt(wxCommandEvent& e) // sets the hidden 'Nameplate capacity' widget value m_custom_generation_case->Values(0).Get("system_capacity")->Set(nameplate); // the actual used system_capacity, which corresponds to the // 'Nameplate capacity' widget that is hidden when combining cases - m_custom_generation_case->Values(0).Get("spec_mode")->Set(2); // specify the third radio button + m_custom_generation_case->Values(0).Get("spec_mode")->Set(3); // specify the third radio button m_custom_generation_case->Values(0).Get("derate")->Set(0); // no additional losses- losses were computed in the individual models m_custom_generation_case->Values(0).Get("heat_rate")->Set(0); // no fuel costs- accounted for in O&M fuel costs from subsystem cash flows m_custom_generation_case->Values(0).Get("energy_output_array")->Set(hourly_energy.data(), hourly_energy.ncells());