############### # Sets # ############### # set DAILYTIMEBRACKET; set DAYTYPE; set EMISSION; set FUEL; set MODE_OF_OPERATION; set PLnPSEG; set REGION; set SEASON; set STGE; set STORAGE; set TECHNOLOGY; set TIMESLICE; set YEAR; # ##################### # Parameters # ##################### # param AccumulatedAnnualDemand{r in REGION, f in FUEL, y in YEAR}; param AnnualEmissionLimit{r in REGION, e in EMISSION, y in YEAR}; param AnnualExogenousEmission{r in REGION, e in EMISSION, y in YEAR}; param AvailabilityFactor{r in REGION, t in TECHNOLOGY, y in YEAR}; param CO2Base; param CO2ReductionFlag; param CapacityFactor{r in REGION, t in TECHNOLOGY, l in TIMESLICE, y in YEAR}; param CapacityOfOneTechnologyUnit{r in REGION, t in TECHNOLOGY, y in YEAR}; param CapacityToActivityUnit{r in REGION, t in TECHNOLOGY}; param CapitalCost{r in REGION, t in TECHNOLOGY, y in YEAR}; param CapitalCostStorage{r in REGION, s in STORAGE, y in YEAR}; param Conversionld{l in TIMESLICE, ld in DAYTYPE}; param Conversionlh{l in TIMESLICE, lh in DAILYTIMEBRACKET}; param Conversionls{l in TIMESLICE, ls in SEASON}; param DaySplit{lh in DAILYTIMEBRACKET, y in YEAR}; param DaysInDayType{ls in SEASON, ld in DAYTYPE, y in YEAR}; param DecTechFlag{t in TECHNOLOGY}; param DemShrBound{y in YEAR, f in FUEL}; param DepreciationMethod{r in REGION}; param DiscountRate{r in REGION}; param EmissionActivityRatio{r in REGION, t in TECHNOLOGY, e in EMISSION, m in MODE_OF_OPERATION, y in YEAR}; param EmissionsPenalty{r in REGION, e in EMISSION, y in YEAR}; param FixedCost{r in REGION, t in TECHNOLOGY, y in YEAR}; param GenDelivEff{r in REGION, t in TECHNOLOGY, f in FUEL}; param GenTechEff{t in TECHNOLOGY, f in FUEL, y in YEAR}; param InputActivityRatio{r in REGION, t in TECHNOLOGY, f in FUEL, m in MODE_OF_OPERATION, y in YEAR}; param L{ps in PLnPSEG}; param LnGenTechs; param Lx{ps in PLnPSEG}; param MaxStgP{y in YEAR, se in STGE}; param MinNetRes; param MinStorageCharge{r in REGION, s in STORAGE, y in YEAR}; param ModelPeriodEmissionLimit{r in REGION, e in EMISSION}; param ModelPeriodExogenousEmission{r in REGION, e in EMISSION}; param OperationalLife{r in REGION, t in TECHNOLOGY}; param OperationalLifeStorage{r in REGION, s in STORAGE}; param OutputActivityRatio{r in REGION, t in TECHNOLOGY, f in FUEL, m in MODE_OF_OPERATION, y in YEAR}; param REMinProductionTarget{r in REGION, y in YEAR}; param RETagFuel{r in REGION, f in FUEL, y in YEAR}; param RETagTechnology{r in REGION, t in TECHNOLOGY, y in YEAR}; param RedundancyFlag; param RedundantCapBase{y in YEAR}; param ReserveMarginByDemand{r in REGION, f in FUEL, y in YEAR}; param ReserveMarginTagTechnology{r in REGION, t in TECHNOLOGY, y in YEAR}; param ReserveMarginTagTechnologyByDemand{r in REGION, f in FUEL, t in TECHNOLOGY, y in YEAR}; param ReserveMarginTechnologyEffByDemand{r in REGION, f in FUEL, t in TECHNOLOGY, y in YEAR}; param ResidualCapacity{r in REGION, t in TECHNOLOGY, y in YEAR}; param ResidualStorageCapacity{r in REGION, s in STORAGE, y in YEAR}; param SecTech{t in TECHNOLOGY, y in YEAR}; param SpecifiedAnnualDemand{r in REGION, f in FUEL, y in YEAR}; param SpecifiedDemandProfile{r in REGION, f in FUEL, l in TIMESLICE, y in YEAR}; param StgEnergyFlag{s in STORAGE, se in STGE}; param StorageLevelStart{r in REGION, s in STORAGE}; param StorageMaxChargeRate{r in REGION, s in STORAGE}; param StorageMaxDischargeRate{r in REGION, s in STORAGE}; param TechnologyFromStorage{r in REGION, t in TECHNOLOGY, s in STORAGE, m in MODE_OF_OPERATION}; param TechnologyToStorage{r in REGION, t in TECHNOLOGY, s in STORAGE, m in MODE_OF_OPERATION}; param TotalAnnualMaxCapacity{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalAnnualMaxCapacityInvestment{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalAnnualMinCapacity{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalAnnualMinCapacityInvestment{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalExcessProdToler{f in FUEL}; param TotalTechnologyAnnualActivityLowerLimit{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalTechnologyAnnualActivityUpperLimit{r in REGION, t in TECHNOLOGY, y in YEAR}; param TotalTechnologyModelPeriodActivityLowerLimit{r in REGION, t in TECHNOLOGY}; param TotalTechnologyModelPeriodActivityUpperLimit{r in REGION, t in TECHNOLOGY}; param TradeRoute{r in REGION, rr in REGION, f in FUEL, y in YEAR}; param U{ps in PLnPSEG}; param Ux{ps in PLnPSEG}; param VariableCost{r in REGION, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR}; param YearSplit{l in TIMESLICE, y in YEAR}; param wResBal; param wResCO2; param wResDec; param wResEff; param wResRdncy; param wResSec; param wResStg; param wStgShr{se in STGE}; # ########################## # Model Variables # ########################## # var AccumulatedNewCapacity{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var AccumulatedNewStorageCapacity{r in REGION, s in STORAGE, y in YEAR} >= 0; var AnnualEmissions{r in REGION, e in EMISSION, y in YEAR} >= 0; var AnnualFixedOperatingCost{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var AnnualTechnologyEmission{r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR} >= 0; var AnnualTechnologyEmissionByMode{r in REGION, t in TECHNOLOGY, e in EMISSION, m in MODE_OF_OPERATION, y in YEAR} >= 0; var AnnualTechnologyEmissionPenaltyByEmission{r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR} >= 0; var AnnualTechnologyEmissionsPenalty{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var AnnualVariableOperatingCost{r in REGION, t in TECHNOLOGY, y in YEAR}; var Balance{y in YEAR} >= 0; var CO2Reduction; var CapitalInvestment{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var CapitalInvestmentStorage{r in REGION, s in STORAGE, y in YEAR} >= 0; var DecProdShr{y in YEAR} >= 0; var DemShr{y in YEAR, f in FUEL} >= 0; var Demand{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var DemandModel{r in REGION, f in FUEL} >= 0; var DiscountedCapitalInvestment{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var DiscountedCapitalInvestmentStorage{r in REGION, s in STORAGE, y in YEAR} >= 0; var DiscountedOperatingCost{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var DiscountedSalvageValue{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var DiscountedSalvageValueStorage{r in REGION, s in STORAGE, y in YEAR} >= 0; var DiscountedTechnologyEmissionsPenalty{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var ModelPeriodCostByRegion{r in REGION} >= 0; var ModelPeriodEmissions{r in REGION, e in EMISSION} >= 0; var NetChargeWithinDay{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}; var NetChargeWithinYear{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}; var NetEff{y in YEAR} >= 0; var NetRes; var NetStgShr{y in YEAR} >= 0; var NewCapacity{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var NewStorageCapacity{r in REGION, s in STORAGE, y in YEAR} >= 0; var NumberOfNewTechnologyUnits{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0, integer; var OperatingCost{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var PLnP{y in YEAR, t in TECHNOLOGY} >= 0; var PLnPBin{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY} >= 0, integer; var PnLP_ProdShr{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY} >= 0; var ProdShr{y in YEAR, t in TECHNOLOGY} >= 0; var Production{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var ProductionAnnual{r in REGION, f in FUEL, y in YEAR} >= 0; var ProductionByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var ProductionByTechnologyAnnual{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var ProductionModel{r in REGION, f in FUEL} >= 0; var RETotalProductionOfTargetFuelAnnual{r in REGION, y in YEAR}; var RateOfActivity{r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR} >= 0; var RateOfDemand{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var RateOfProduction{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var RateOfProductionByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var RateOfProductionByTechnologyByMode{r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, f in FUEL, y in YEAR} >= 0; var RateOfStorageCharge{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}; var RateOfStorageDischarge{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}; var RateOfTotalActivity{r in REGION, t in TECHNOLOGY, l in TIMESLICE, y in YEAR} >= 0; var RateOfUse{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var RateOfUseByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var RateOfUseByTechnologyByMode{r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, f in FUEL, y in YEAR} >= 0; var RedundantCapRelative{y in YEAR}; var RedundantCapTotal{y in YEAR} >= 0; var SalvageValue{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var SalvageValueStorage{r in REGION, s in STORAGE, y in YEAR} >= 0; var SecNet{y in YEAR} >= 0; var StgShr{y in YEAR, se in STGE} >= 0; var StorageLevelDayTypeFinish{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR} >= 0; var StorageLevelDayTypeStart{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR} >= 0; var StorageLevelSeasonStart{r in REGION, s in STORAGE, ls in SEASON, y in YEAR} >= 0; var StorageLevelYearFinish{r in REGION, s in STORAGE, y in YEAR} >= 0; var StorageLevelYearStart{r in REGION, s in STORAGE, y in YEAR} >= 0; var StorageLowerLimit{r in REGION, s in STORAGE, y in YEAR} >= 0; var StorageUpperLimit{r in REGION, s in STORAGE, y in YEAR} >= 0; var TotalAnnualTechnologyActivityByMode{r in REGION, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR} >= 0; var TotalCapacityAnnual{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var TotalCapacityInReserveMarginByDemand{r in REGION, f in FUEL, y in YEAR} >= 0; var TotalDiscountedCost{r in REGION, y in YEAR} >= 0; var TotalDiscountedCostByTechnology{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var TotalDiscountedStorageCost{r in REGION, s in STORAGE, y in YEAR} >= 0; var TotalREProductionAnnual{r in REGION, y in YEAR}; var TotalTechnologyAnnualActivity{r in REGION, t in TECHNOLOGY, y in YEAR} >= 0; var TotalTechnologyModelPeriodActivity{r in REGION, t in TECHNOLOGY}; var Trade{r in REGION, rr in REGION, l in TIMESLICE, f in FUEL, y in YEAR}; var TradeAnnual{r in REGION, rr in REGION, f in FUEL, y in YEAR}; var Use{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} >= 0; var UseAnnual{r in REGION, f in FUEL, y in YEAR} >= 0; var UseByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var UseByTechnologyAnnual{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR} >= 0; var UseModel{r in REGION, f in FUEL} >= 0; # ###################### # Objective Function # ###################### # # maximize MaxRes: NetRes; minimize OFL_Cost: sum{r in REGION, y in YEAR} TotalDiscountedCost [r, y]; # ##################### # Constraints # ##################### # # Common_Equations s.t. Acc1_FuelProductionByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR}: RateOfProductionByTechnology [r, l, t, f, y] * YearSplit [l, y] = ProductionByTechnology [r, l, t, f, y]; s.t. Acc2_FuelUseByTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR}: RateOfUseByTechnology [r, l, t, f, y] * YearSplit [l, y] = UseByTechnology [r, l, t, f, y]; s.t. Acc3_AverageAnnualRateOfActivity{r in REGION, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR}: sum{l in TIMESLICE} RateOfActivity [r, l, t, m, y] * YearSplit [l, y] = TotalAnnualTechnologyActivityByMode [r, t, m, y]; s.t. CAa1_TotalNewCapacity{r in REGION, t in TECHNOLOGY, y in YEAR}: AccumulatedNewCapacity [r, t, y] = sum{yy in YEAR: y - yy < OperationalLife [r, t] && y - yy >= 0} NewCapacity [r, t, yy]; s.t. CAa2_TotalAnnualCapacity{r in REGION, t in TECHNOLOGY, y in YEAR}: AccumulatedNewCapacity [r, t, y] + ResidualCapacity [r, t, y] = TotalCapacityAnnual [r, t, y]; s.t. CAa5_TotalNewCapacity{r in REGION, t in TECHNOLOGY, y in YEAR: CapacityOfOneTechnologyUnit [r, t, y] <> 0}: CapacityOfOneTechnologyUnit [r, t, y] * NumberOfNewTechnologyUnits [r, t, y] = NewCapacity [r, t, y]; s.t. CC1_UndiscountedCapitalInvestment{r in REGION, t in TECHNOLOGY, y in YEAR}: CapitalCost [r, t, y] * NewCapacity [r, t, y] = CapitalInvestment [r, t, y]; s.t. E2_AnnualEmissionProduction{r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR}: sum{m in MODE_OF_OPERATION} AnnualTechnologyEmissionByMode [r, t, e, m, y] = AnnualTechnologyEmission [r, t, e, y]; s.t. EBa10_EnergyBalanceEachTS4{r in REGION, rr in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: Trade [r, rr, l, f, y] = -1 * Trade [r, rr, l, f, y]; s.t. EBa1_RateOfFuelProduction1{r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR, f in FUEL: OutputActivityRatio [r, t, f, m, y] <> 0}: RateOfActivity [r, l, t, m, y] * OutputActivityRatio [r, t, f, m, y] = RateOfProductionByTechnologyByMode [r, l, t, m, f, y]; s.t. EBa2_RateOfFuelProduction2{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR, l in TIMESLICE}: sum{m in MODE_OF_OPERATION: OutputActivityRatio [r, t, f, m, y] <> 0} RateOfProductionByTechnologyByMode [r, l, t, m, f, y] = RateOfProductionByTechnology [r, l, t, f, y]; s.t. EBa4_RateOfFuelUse1{r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR, f in FUEL: InputActivityRatio [r, t, f, m, y] <> 0}: RateOfActivity [r, l, t, m, y] * InputActivityRatio [r, t, f, m, y] = RateOfUseByTechnologyByMode [r, l, t, m, f, y]; s.t. EBa5_RateOfFuelUse2{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR, l in TIMESLICE}: sum{m in MODE_OF_OPERATION: InputActivityRatio [r, t, f, m, y] <> 0} RateOfUseByTechnologyByMode [r, l, t, m, f, y] = RateOfUseByTechnology [r, l, t, f, y]; s.t. NCC1_TotalAnnualMaxNewCapacityConstraint{r in REGION, t in TECHNOLOGY, y in YEAR}: NewCapacity [r, t, y] <= TotalAnnualMaxCapacityInvestment [r, t, y]; s.t. NCC2_TotalAnnualMinNewCapacityConstraint{r in REGION, t in TECHNOLOGY, y in YEAR: TotalAnnualMinCapacityInvestment [r, t, y] > 0}: NewCapacity [r, t, y] >= TotalAnnualMinCapacityInvestment [r, t, y]; s.t. OC1_OperatingCostsVariable{r in REGION, t in TECHNOLOGY, y in YEAR}: sum{m in MODE_OF_OPERATION} TotalAnnualTechnologyActivityByMode [r, t, m, y] * VariableCost [r, t, m, y] = AnnualVariableOperatingCost [r, t, y]; s.t. OC2_OperatingCostsFixedAnnual{r in REGION, t in TECHNOLOGY, y in YEAR}: TotalCapacityAnnual [r, t, y] * FixedCost [r, t, y] = AnnualFixedOperatingCost [r, t, y]; s.t. SI6_SalvageValueStorageAtEndOfPeriod1{r in REGION, s in STORAGE, y in YEAR: (y + OperationalLifeStorage [r, s] - 1) <= (max{yy in YEAR} max(yy))}: 0 = SalvageValueStorage [r, s, y]; s.t. SV3_SalvageValueAtEndOfPeriod3{r in REGION, t in TECHNOLOGY, y in YEAR: (y + OperationalLife [r, t] - 1) <= (max{yy in YEAR} max(yy))}: SalvageValue [r, t, y] = 0; s.t. SV4_SalvageValueDiscountedToStartYear{r in REGION, t in TECHNOLOGY, y in YEAR}: DiscountedSalvageValue [r, t, y] = SalvageValue [r, t, y] / ((1 + DiscountRate [r]) ^ (1 + max{yy in YEAR} max(yy) - min{yy in YEAR} min(yy))); s.t. TAC1_TotalModelHorizonTechnologyActivity{r in REGION, t in TECHNOLOGY}: sum{y in YEAR} TotalTechnologyAnnualActivity [r, t, y] = TotalTechnologyModelPeriodActivity [r, t]; # # Custom_constraints s.t. CUS00_DemShrBound{y in YEAR, f in FUEL}: DemShr [y, f] <= DemShrBound [y, f]; s.t. EBb1_EnergyBalanceModel1{r in REGION, f in FUEL}: sum{y in YEAR} ProductionAnnual [r, f, y] = ProductionModel [r, f]; s.t. EBb2_EnergyBalanceModel2{r in REGION, f in FUEL}: sum{y in YEAR} UseAnnual [r, f, y] = UseModel [r, f]; s.t. EBb3_EnergyBalanceModel3{r in REGION, f in FUEL}: sum{y in YEAR} SpecifiedAnnualDemand [r, f, y] = DemandModel [r, f]; s.t. EBb4_EnergyBalanceModel4{r in REGION, f in FUEL}: ProductionModel [r, f] <= UseModel [r, f] + DemandModel [r, f] + sum{rr in REGION, y in YEAR} (TradeAnnual [r, rr, f, y] * TradeRoute [r, rr, f, y]) + sum{y in YEAR} (AccumulatedAnnualDemand [r, f, y]) + TotalExcessProdToler [f]; s.t. RM1ByDemand_ReserveMargin_TechnologiesIncluded_In_Activity_Units{r in REGION, y in YEAR, f in FUEL}: sum{t in TECHNOLOGY} TotalCapacityAnnual [r, t, y] * ReserveMarginTagTechnologyByDemand [r, f, t, y] * CapacityToActivityUnit [r, t] * ReserveMarginTechnologyEffByDemand [r, f, t, y] = TotalCapacityInReserveMarginByDemand [r, f, y]; s.t. RM3ByFuel_ReserveMargin_Constraint{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: RateOfDemand [r, l, f, y] * ReserveMarginByDemand [r, f, y] <= TotalCapacityInReserveMarginByDemand [r, f, y]; # # Custom constraint - DemShr s.t. CUS01_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_EL_I", y] / SpecifiedAnnualDemand [r, "DEM_EL_I", y] = DemShr [y, "DEM_EL_I"]; s.t. CUS02_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_EL_S", y] / SpecifiedAnnualDemand [r, "DEM_EL_S", y] = DemShr [y, "DEM_EL_S"]; s.t. CUS03_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_EL_R", y] / SpecifiedAnnualDemand [r, "DEM_EL_R", y] = DemShr [y, "DEM_EL_R"]; s.t. CUS04_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_CL_S", y] / SpecifiedAnnualDemand [r, "DEM_CL_S", y] = DemShr [y, "DEM_CL_S"]; s.t. CUS05_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_CL_R", y] / SpecifiedAnnualDemand [r, "DEM_CL_R", y] = DemShr [y, "DEM_CL_R"]; s.t. CUS06_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_CK_R", y] / SpecifiedAnnualDemand [r, "DEM_CK_R", y] = DemShr [y, "DEM_CK_R"]; s.t. CUS07_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_CK_S", y] / SpecifiedAnnualDemand [r, "DEM_CK_S", y] = DemShr [y, "DEM_CK_S"]; s.t. CUS08_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_LT_R", y] / SpecifiedAnnualDemand [r, "DEM_LT_R", y] = DemShr [y, "DEM_LT_R"]; s.t. CUS09_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_LT_S", y] / SpecifiedAnnualDemand [r, "DEM_LT_S", y] = DemShr [y, "DEM_LT_S"]; s.t. CUS10_DemShr{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} ProductionByTechnologyAnnual [r, t, "DEM_T", y] / SpecifiedAnnualDemand [r, "DEM_T", y] = DemShr [y, "DEM_T"]; # # Custom constraints - PV s.t. SolarCapConstraint1{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "PV_MINIBAT", y] + TotalCapacityAnnual [r, "PV_MINIBAT2", y] + TotalCapacityAnnual [r, "PV_MINIBAT3", y] <= 500; s.t. PVNewCapacityConstraint1{r in REGION, y in YEAR}: NewCapacity[r,"PV_MINIBAT",y] + NewCapacity[r,"PV_MINIBAT2",y] + NewCapacity[r,"PV_MINIBAT3",y] <= 200; s.t. SolarCapConstraint2{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "PV_OCBAT_R", y] + TotalCapacityAnnual [r, "PV_OCBAT2_R", y] + TotalCapacityAnnual [r, "PV_OCBAT3_R", y] <= 500; s.t. PVNewCapacityConstraint2{r in REGION, y in YEAR}: NewCapacity[r,"PV_OCBAT_R",y] + NewCapacity[r,"PV_OCBAT2_R",y] + NewCapacity[r,"PV_OCBAT3_R",y] <= 200; s.t. SolarCapConstraint3{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "PV_OCBAT_S", y] + TotalCapacityAnnual [r, "PV_OCBAT2_S", y] + TotalCapacityAnnual [r, "PV_OCBAT3_S", y] <= 500; s.t. PVNewCapacityConstraint3{r in REGION, y in YEAR}: NewCapacity[r,"PV_OCBAT_S",y] + NewCapacity[r,"PV_OCBAT2_S",y] + NewCapacity[r,"PV_OCBAT3_S",y] <= 200; s.t. SolarCapConstraint4{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "PV_ROOFGR", y] + TotalCapacityAnnual [r, "PV_ROOFGR2", y] + TotalCapacityAnnual [r, "PV_ROOFGR3", y] <= 2000; s.t. PVNewCapacityConstraint4{r in REGION, y in YEAR}: NewCapacity[r,"PV_ROOFGR",y] + NewCapacity[r,"PV_ROOFGR2",y] + NewCapacity[r,"PV_ROOFGR3",y] <= 500; s.t. SolarCapConstraint5{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "PV_UTILGR", y] + TotalCapacityAnnual [r, "PV_UTILGR2", y] + TotalCapacityAnnual [r, "PV_UTILGR3", y] <= 500; s.t. PVNewCapacityConstraint5{r in REGION, y in YEAR}: NewCapacity[r,"PV_UTILGR",y] + NewCapacity[r,"PV_UTILGR2",y] + NewCapacity[r,"PV_UTILGR3",y] <= 200; # Custom constraints – Wind s.t. WindCapConstraint{r in REGION, y in YEAR}: TotalCapacityAnnual [r, "WIND1", y] + TotalCapacityAnnual [r, "WIND2", y] + TotalCapacityAnnual [r, "WIND3", y] <= 300; s.t. WindNewCapacityConstraint{r in REGION, y in YEAR}: NewCapacity[r,"WIND1",y] + NewCapacity[r,"WIND2",y] + NewCapacity[r,"WIND3",y] <= 50; # Long_Code_Equations s.t. AAC1_TotalAnnualTechnologyActivity{r in REGION, t in TECHNOLOGY, y in YEAR}: sum{l in TIMESLICE} RateOfTotalActivity [r, t, l, y] * YearSplit [l, y] = TotalTechnologyAnnualActivity [r, t, y]; s.t. AAC2_TotalAnnualTechnologyActivityUpperLimit{r in REGION, t in TECHNOLOGY, y in YEAR}: TotalTechnologyAnnualActivity [r, t, y] <= TotalTechnologyAnnualActivityUpperLimit [r, t, y]; s.t. AAC3_TotalAnnualTechnologyActivityLowerLimit{r in REGION, t in TECHNOLOGY, y in YEAR: TotalTechnologyAnnualActivityLowerLimit [r, t, y] > 0}: TotalTechnologyAnnualActivity [r, t, y] >= TotalTechnologyAnnualActivityLowerLimit [r, t, y]; s.t. Acc4_ModelPeriodCostByRegion{r in REGION}: sum{y in YEAR} TotalDiscountedCost [r, y] = ModelPeriodCostByRegion [r]; s.t. CAa3_TotalActivityOfEachTechnology{r in REGION, l in TIMESLICE, t in TECHNOLOGY, y in YEAR}: sum{m in MODE_OF_OPERATION} RateOfActivity [r, l, t, m, y] = RateOfTotalActivity [r, t, l, y]; s.t. CAa4_Constraint_Capacity{r in REGION, t in TECHNOLOGY, l in TIMESLICE, y in YEAR}: RateOfTotalActivity [r, t, l, y] <= TotalCapacityAnnual [r, t, y] * CapacityFactor [r, t, l, y] * CapacityToActivityUnit [r, t]; s.t. CAb1_PlannedMaintenance{r in REGION, t in TECHNOLOGY, y in YEAR}: sum{l in TIMESLICE} RateOfTotalActivity [r, t, l, y] * YearSplit [l, y] <= sum{l in TIMESLICE} (TotalCapacityAnnual [r, t, y] * CapacityFactor [r, t, l, y] * YearSplit [l, y]) * AvailabilityFactor [r, t, y] * CapacityToActivityUnit [r, t]; s.t. CC2_DiscountingCapitalInvestment{r in REGION, t in TECHNOLOGY, y in YEAR}: CapitalInvestment [r, t, y] / ((1 + DiscountRate [r]) ^ (y - min{yy in YEAR} min(yy))) = DiscountedCapitalInvestment [r, t, y]; s.t. E1_AnnualEmissionProductionByMode{r in REGION, t in TECHNOLOGY, e in EMISSION, m in MODE_OF_OPERATION, y in YEAR}: EmissionActivityRatio [r, t, e, m, y] * TotalAnnualTechnologyActivityByMode [r, t, m, y] = AnnualTechnologyEmissionByMode [r, t, e, m, y]; s.t. E3_EmissionsPenaltyByTechAndEmission{r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR}: AnnualTechnologyEmission [r, t, e, y] * EmissionsPenalty [r, e, y] = AnnualTechnologyEmissionPenaltyByEmission [r, t, e, y]; s.t. E4_EmissionsPenaltyByTechnology{r in REGION, t in TECHNOLOGY, y in YEAR}: sum{e in EMISSION} AnnualTechnologyEmissionPenaltyByEmission [r, t, e, y] = AnnualTechnologyEmissionsPenalty [r, t, y]; s.t. E5_DiscountedEmissionsPenaltyByTechnology{r in REGION, t in TECHNOLOGY, y in YEAR}: AnnualTechnologyEmissionsPenalty [r, t, y] / ((1 + DiscountRate [r]) ^ (y - min{yy in YEAR} min(yy) + 0.5)) = DiscountedTechnologyEmissionsPenalty [r, t, y]; s.t. E6_EmissionsAccounting1{r in REGION, e in EMISSION, y in YEAR}: sum{t in TECHNOLOGY} AnnualTechnologyEmission [r, t, e, y] = AnnualEmissions [r, e, y]; s.t. E7_EmissionsAccounting2{r in REGION, e in EMISSION}: sum{y in YEAR} AnnualEmissions [r, e, y] = ModelPeriodEmissions [r, e] - ModelPeriodExogenousEmission [r, e]; s.t. E8_AnnualEmissionsLimit{r in REGION, e in EMISSION, y in YEAR}: AnnualEmissions [r, e, y] + AnnualExogenousEmission [r, e, y] <= AnnualEmissionLimit [r, e, y]; s.t. E9_ModelPeriodEmissionsLimit{r in REGION, e in EMISSION}: ModelPeriodEmissions [r, e] <= ModelPeriodEmissionLimit [r, e]; s.t. EBa11_EnergyBalanceEachTS5{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: Production [r, l, f, y] >= Demand [r, l, f, y] + Use [r, l, f, y] + sum{rr in REGION} Trade [r, rr, l, f, y] * TradeRoute [r, rr, f, y]; s.t. EBa3_RateOfFuelProduction3{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: sum{t in TECHNOLOGY} RateOfProductionByTechnology [r, l, t, f, y] = RateOfProduction [r, l, f, y]; s.t. EBa6_RateOfFuelUse3{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: sum{t in TECHNOLOGY} RateOfUseByTechnology [r, l, t, f, y] = RateOfUse [r, l, f, y]; s.t. EBa7_EnergyBalanceEachTS1{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: RateOfProduction [r, l, f, y] * YearSplit [l, y] = Production [r, l, f, y]; s.t. EBa8_EnergyBalanceEachTS2{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: RateOfUse [r, l, f, y] * YearSplit [l, y] = Use [r, l, f, y]; s.t. EBa9_EnergyBalanceEachTS3{r in REGION, l in TIMESLICE, f in FUEL, y in YEAR}: RateOfDemand [r, l, f, y] * YearSplit [l, y] = Demand [r, l, f, y]; s.t. EBb1_EnergyBalanceEachYear1{r in REGION, f in FUEL, y in YEAR}: sum{l in TIMESLICE} Production [r, l, f, y] = ProductionAnnual [r, f, y]; s.t. EBb2_EnergyBalanceEachYear2{r in REGION, f in FUEL, y in YEAR}: sum{l in TIMESLICE} Use [r, l, f, y] = UseAnnual [r, f, y]; s.t. EBb3_EnergyBalanceEachYear3{r in REGION, rr in REGION, f in FUEL, y in YEAR}: sum{l in TIMESLICE} Trade [r, rr, l, f, y] = TradeAnnual [r, rr, f, y]; s.t. EBb4_EnergyBalanceEachYear4{r in REGION, f in FUEL, y in YEAR}: ProductionAnnual [r, f, y] >= UseAnnual [r, f, y] + sum{rr in REGION} TradeAnnual [r, rr, f, y] * TradeRoute [r, rr, f, y] + AccumulatedAnnualDemand [r, f, y]; s.t. EQ_SpecifiedDemand{r in REGION, f in FUEL, y in YEAR, l in TIMESLICE}: SpecifiedAnnualDemand [r, f, y] * SpecifiedDemandProfile [r, f, l, y] / YearSplit [l, y] = RateOfDemand [r, l, f, y]; s.t. OC3_OperatingCostsTotalAnnual{r in REGION, t in TECHNOLOGY, y in YEAR}: AnnualFixedOperatingCost [r, t, y] + AnnualVariableOperatingCost [r, t, y] = OperatingCost [r, t, y]; s.t. OC4_DiscountedOperatingCostsTotalAnnual{r in REGION, t in TECHNOLOGY, y in YEAR}: 5.02291816779136 * OperatingCost [r, t, y] / ((1 + DiscountRate [r]) ^ (y - min{yy in YEAR} min(yy) + 2.5)) = DiscountedOperatingCost [r, t, y]; s.t. RE1_FuelProductionByTechnologyAnnual{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR}: sum{l in TIMESLICE} ProductionByTechnology [r, l, t, f, y] = ProductionByTechnologyAnnual [r, t, f, y]; s.t. RE2_TechIncluded{r in REGION, y in YEAR}: sum{t in TECHNOLOGY, f in FUEL} ProductionByTechnologyAnnual [r, t, f, y] * RETagTechnology [r, t, y] = TotalREProductionAnnual [r, y]; s.t. RE3_FuelIncluded{r in REGION, y in YEAR}: sum{l in TIMESLICE, f in FUEL} RateOfProduction [r, l, f, y] * RETagFuel [r, f, y] * YearSplit [l, y] = RETotalProductionOfTargetFuelAnnual [r, y]; s.t. RE4_EnergyConstraint{r in REGION, y in YEAR}: REMinProductionTarget [r, y] * RETotalProductionOfTargetFuelAnnual [r, y] <= TotalREProductionAnnual [r, y]; s.t. RE5_FuelUseByTechnologyAnnual{r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR}: sum{l in TIMESLICE} RateOfUseByTechnology [r, l, t, f, y] * YearSplit [l, y] = UseByTechnologyAnnual [r, t, f, y]; s.t. S11_and_S12_StorageLevelDayTypeStart{ld in DAYTYPE, r in REGION, s in STORAGE, ls in SEASON, y in YEAR}: if ld = min{ldld in DAYTYPE} min(ldld) then StorageLevelSeasonStart [r, s, ls, y] else StorageLevelDayTypeStart [r, s, ls, ld-1, y] + sum{lh in DAILYTIMEBRACKET} NetChargeWithinDay [r, s, ls, ld-1, lh, y] * DaysInDayType [ls, ld-1, y] = StorageLevelDayTypeStart [r, s, ls, ld, y]; s.t. S13_and_S14_and_S15_StorageLevelDayTypeFinish{ls in SEASON, ld in DAYTYPE, r in REGION, s in STORAGE, y in YEAR}: if ls = max{lsls in SEASON} max(lsls) && ld = max{ldld in DAYTYPE} max(ldld) then StorageLevelYearFinish [r, s, y] else if ld = max{ldld in DAYTYPE} max(ldld) then StorageLevelSeasonStart [r, s, ls+1, y] else StorageLevelDayTypeFinish [r, s, ls, ld+1, y] - sum{lh in DAILYTIMEBRACKET} NetChargeWithinDay [r, s, ls, ld+1, lh, y] * DaysInDayType [ls, ld+1, y] = StorageLevelDayTypeFinish [r, s, ls, ld, y]; s.t. S1_RateOfStorageCharge{r in REGION, s in STORAGE, y in YEAR, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET}: sum{l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION: TechnologyToStorage [r, t, s, m] > 0} RateOfActivity [r, l, t, m, y] * TechnologyToStorage [r, t, s, m] * Conversionls [l, ls] * Conversionld [l, ld] * Conversionlh [l, lh] = RateOfStorageCharge [r, s, ls, ld, lh, y]; s.t. S2_RateOfStorageDischarge{r in REGION, s in STORAGE, y in YEAR, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET}: sum{l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION: TechnologyFromStorage [r, t, s, m] > 0} RateOfActivity [r, l, t, m, y] * TechnologyFromStorage [r, t, s, m] * Conversionls [l, ls] * Conversionld [l, ld] * Conversionlh [l, lh] = RateOfStorageDischarge [r, s, ls, ld, lh, y]; s.t. S3_NetChargeWithinYear{ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, r in REGION, s in STORAGE, y in YEAR}: sum{l in TIMESLICE: Conversionls [l, ls] > 0 && Conversionld [l, ld] > 0 && Conversionlh [l, lh] > 0} (RateOfStorageCharge [r, s, ls, ld, lh, y] - RateOfStorageDischarge [r, s, ls, ld, lh, y]) * YearSplit [l, y] * Conversionls [l, ls] * Conversionld [l, ld] * Conversionlh [l, lh] = NetChargeWithinYear [r, s, ls, ld, lh, y]; s.t. S4_NetChargeWithinDay{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}: (RateOfStorageCharge [r, s, ls, ld, lh, y] - RateOfStorageDischarge [r, s, ls, ld, lh, y]) * DaySplit [lh, y] = NetChargeWithinDay [r, s, ls, ld, lh, y]; s.t. S5_and_S6_StorageLevelYearStart{y in YEAR, r in REGION, s in STORAGE}: if y = min{yy in YEAR} min(yy) then StorageLevelStart [r, s] else StorageLevelYearStart [r, s, y-5] + sum{ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET} NetChargeWithinYear [r, s, ls, ld, lh, y-5] = StorageLevelYearStart [r, s, y]; s.t. S7_and_S8_StorageLevelYearFinish{y in YEAR, r in REGION, s in STORAGE}: if y < max{yy in YEAR} max(yy) then StorageLevelYearStart [r, s, y+5] else StorageLevelYearStart [r, s, y] + sum{ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET} NetChargeWithinYear [r, s, ls, ld, lh, y] = StorageLevelYearFinish [r, s, y]; s.t. S9_and_S10_StorageLevelSeasonStart{ls in SEASON, r in REGION, s in STORAGE, y in YEAR}: if ls = min{lsls in SEASON} min(lsls) then StorageLevelYearStart [r, s, y] else StorageLevelSeasonStart [r, s, ls-1, y] + sum{ld in DAYTYPE, lh in DAILYTIMEBRACKET} NetChargeWithinYear [r, s, ls-1, ld, lh, y] = StorageLevelSeasonStart [r, s, ls, y]; s.t. SC1_LowerLimit_BeginningOfDailyTimeBracketOfFirstInstanceOfDayTypeInFirstWeekConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR, lh in DAILYTIMEBRACKET}: 0 <= (StorageLevelDayTypeStart [r, s, ls, ld, y] + sum{lhlh in DAILYTIMEBRACKET: lh - lhlh > 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageLowerLimit [r, s, y]; s.t. SC1_UpperLimit_BeginningOfDailyTimeBracketOfFirstInstanceOfDayTypeInFirstWeekConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR, lh in DAILYTIMEBRACKET}: (StorageLevelDayTypeStart [r, s, ls, ld, y] + sum{lhlh in DAILYTIMEBRACKET: lh - lhlh > 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageUpperLimit [r, s, y] <= 0; s.t. SC2_LowerLimit_EndOfDailyTimeBracketOfLastInstanceOfDayTypeInFirstWeekConstraint{ld in DAYTYPE, r in REGION, s in STORAGE, ls in SEASON, y in YEAR, lh in DAILYTIMEBRACKET}: 0 <= if ld > min{ldld in DAYTYPE} min(ldld) then (StorageLevelDayTypeStart [r, s, ls, ld, y] - sum{lhlh in DAILYTIMEBRACKET: lh - lhlh < 0} NetChargeWithinDay [r, s, ls, ld-1, lhlh, y]) - StorageLowerLimit [r, s, y]; s.t. SC2_UpperLimit_EndOfDailyTimeBracketOfLastInstanceOfDayTypeInFirstWeekConstraint{ld in DAYTYPE, r in REGION, s in STORAGE, ls in SEASON, y in YEAR, lh in DAILYTIMEBRACKET}: if ld > min{ldld in DAYTYPE} min(ldld) then (StorageLevelDayTypeStart [r, s, ls, ld, y] - sum{lhlh in DAILYTIMEBRACKET: lh - lhlh < 0} NetChargeWithinDay [r, s, ls, ld-1, lhlh, y]) - StorageUpperLimit [r, s, y] <= 0; s.t. SC3_LowerLimit_EndOfDailyTimeBracketOfLastInstanceOfDayTypeInLastWeekConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR, lh in DAILYTIMEBRACKET}: 0 <= (StorageLevelDayTypeFinish [r, s, ls, ld, y] - sum{lhlh in DAILYTIMEBRACKET: lh - lhlh < 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageLowerLimit [r, s, y]; s.t. SC3_UpperLimit_EndOfDailyTimeBracketOfLastInstanceOfDayTypeInLastWeekConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR, lh in DAILYTIMEBRACKET}: (StorageLevelDayTypeFinish [r, s, ls, ld, y] - sum{lhlh in DAILYTIMEBRACKET: lh - lhlh < 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageUpperLimit [r, s, y] <= 0; s.t. SC4_LowerLimit_BeginningOfDailyTimeBracketOfFirstInstanceOfDayTypeInLastWeekConstraint{ld in DAYTYPE, r in REGION, s in STORAGE, ls in SEASON, y in YEAR, lh in DAILYTIMEBRACKET}: 0 <= if ld > min{ldld in DAYTYPE} min(ldld) then (StorageLevelDayTypeFinish [r, s, ls, ld-1, y] + sum{lhlh in DAILYTIMEBRACKET: lh - lhlh > 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageLowerLimit [r, s, y]; s.t. SC4_UpperLimit_BeginningOfDailyTimeBracketOfFirstInstanceOfDayTypeInLastWeekConstraint{ld in DAYTYPE, r in REGION, s in STORAGE, ls in SEASON, y in YEAR, lh in DAILYTIMEBRACKET}: if ld > min{ldld in DAYTYPE} min(ldld) then (StorageLevelDayTypeFinish [r, s, ls, ld-1, y] + sum{lhlh in DAILYTIMEBRACKET: lh - lhlh > 0} NetChargeWithinDay [r, s, ls, ld, lhlh, y]) - StorageUpperLimit [r, s, y] <= 0; s.t. SC5_MaxChargeConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}: RateOfStorageCharge [r, s, ls, ld, lh, y] <= StorageMaxChargeRate [r, s]; s.t. SC6_MaxDischargeConstraint{r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR}: RateOfStorageDischarge [r, s, ls, ld, lh, y] <= StorageMaxDischargeRate [r, s]; s.t. SI10_TotalDiscountedCostByStorage{r in REGION, s in STORAGE, y in YEAR}: DiscountedCapitalInvestmentStorage [r, s, y] - DiscountedSalvageValueStorage [r, s, y] = TotalDiscountedStorageCost [r, s, y]; s.t. SI1_StorageUpperLimit{r in REGION, s in STORAGE, y in YEAR}: AccumulatedNewStorageCapacity [r, s, y] + ResidualStorageCapacity [r, s, y] = StorageUpperLimit [r, s, y]; s.t. SI2_StorageLowerLimit{r in REGION, s in STORAGE, y in YEAR}: MinStorageCharge [r, s, y] * StorageUpperLimit [r, s, y] = StorageLowerLimit [r, s, y]; s.t. SI3_TotalNewStorage{y in YEAR, r in REGION, s in STORAGE}: sum{yy in YEAR: y - yy < OperationalLifeStorage [r, s] && y - yy > 0} NewStorageCapacity [r, s, yy] = AccumulatedNewStorageCapacity [r, s, y]; s.t. SI4_UndiscountedCapitalInvestmentStorage{r in REGION, s in STORAGE, y in YEAR}: CapitalCostStorage [r, s, y] * NewStorageCapacity [r, s, y] = CapitalInvestmentStorage [r, s, y]; s.t. SI5_DiscountingCapitalInvestmentStorage{r in REGION, s in STORAGE, y in YEAR}: CapitalInvestmentStorage [r, s, y] / ((1 + DiscountRate [r]) ^ (y - min{yy in YEAR} min(yy))) = DiscountedCapitalInvestmentStorage [r, s, y]; s.t. SI7_SalvageValueStorageAtEndOfPeriod2{r in REGION, s in STORAGE, y in YEAR: (DepreciationMethod [r] = 1 && y + OperationalLifeStorage [r, s] - 1 > max{yy in YEAR} max(yy) && DiscountRate [r] = 0) || (DepreciationMethod [r] = 2 && (y + OperationalLifeStorage [r, s] - 1) > (max{yy in YEAR} max(yy)))}: CapitalInvestmentStorage [r, s, y] * (1 - (max{yy in YEAR} max(yy) - y+1) / OperationalLifeStorage [r, s]) = SalvageValueStorage [r, s, y]; s.t. SI8_SalvageValueStorageAtEndOfPeriod3{r in REGION, s in STORAGE, y in YEAR: DepreciationMethod [r] = 1 && (y + OperationalLifeStorage [r, s] - 1) > (max{yy in YEAR} max(yy)) && DiscountRate [r] > 0}: CapitalInvestmentStorage [r, s, y] * (1 - ((((1 + DiscountRate [r]) ^ (max{yy in YEAR} max(yy) - y+1)) - 1) / ((1 + DiscountRate [r]) ^ OperationalLifeStorage [r, s] - 1))) = SalvageValueStorage [r, s, y]; s.t. SI9_SalvageValueStorageDiscountedToStartYear{r in REGION, s in STORAGE, y in YEAR}: SalvageValueStorage [r, s, y] / ((1 + DiscountRate [r]) ^ (max{yy in YEAR} max(yy) - min{yy in YEAR} min(yy) + 1)) = DiscountedSalvageValueStorage [r, s, y]; s.t. SV1_SalvageValueAtEndOfPeriod1{r in REGION, t in TECHNOLOGY, y in YEAR: DepreciationMethod [r] = 1 && (y + OperationalLife [r, t] - 1) > (max{yy in YEAR} max(yy)) && DiscountRate [r] > 0}: SalvageValue [r, t, y] = CapitalCost [r, t, y] * NewCapacity [r, t, y] * (1 - (((1 + DiscountRate [r]) ^ (max{yy in YEAR} max(yy) - y+1) - 1) / ((1 + DiscountRate [r]) ^ OperationalLife [r, t] - 1))); s.t. SV2_SalvageValueAtEndOfPeriod2{r in REGION, t in TECHNOLOGY, y in YEAR: (DepreciationMethod [r] = 1 && (y + OperationalLife [r, t] - 1) > (max{yy in YEAR} max(yy)) && DiscountRate [r] = 0) || (DepreciationMethod [r] = 2 && (y + OperationalLife [r, t] - 1) > (max{yy in YEAR} max(yy)))}: SalvageValue [r, t, y] = CapitalCost [r, t, y] * NewCapacity [r, t, y] * (1 - (max{yy in YEAR} max(yy) - y+1) / OperationalLife [r, t]); s.t. TAC2_TotalModelHorizonTechnologyActivityUpperLimit{r in REGION, t in TECHNOLOGY: TotalTechnologyModelPeriodActivityUpperLimit [r, t] > 0}: TotalTechnologyModelPeriodActivity [r, t] <= TotalTechnologyModelPeriodActivityUpperLimit [r, t]; s.t. TAC3_TotalModelHorizenTechnologyActivityLowerLimit{r in REGION, t in TECHNOLOGY: TotalTechnologyModelPeriodActivityLowerLimit [r, t] > 0}: TotalTechnologyModelPeriodActivity [r, t] >= TotalTechnologyModelPeriodActivityLowerLimit [r, t]; s.t. TCC1_TotalAnnualMaxCapacityConstraint{r in REGION, t in TECHNOLOGY, y in YEAR}: TotalCapacityAnnual [r, t, y] <= TotalAnnualMaxCapacity [r, t, y]; s.t. TCC2_TotalAnnualMinCapacityConstraint{r in REGION, t in TECHNOLOGY, y in YEAR: TotalAnnualMinCapacity [r, t, y] > 0}: TotalCapacityAnnual [r, t, y] >= TotalAnnualMinCapacity [r, t, y]; s.t. TDC1_TotalDiscountedCostByTechnology{r in REGION, t in TECHNOLOGY, y in YEAR}: DiscountedOperatingCost [r, t, y] + DiscountedCapitalInvestment [r, t, y] + DiscountedTechnologyEmissionsPenalty [r, t, y] - DiscountedSalvageValue [r, t, y] = TotalDiscountedCostByTechnology [r, t, y]; s.t. TDC2_TotalDiscountedCost{r in REGION, y in YEAR}: sum{t in TECHNOLOGY} TotalDiscountedCostByTechnology [r, t, y] + sum{s in STORAGE} TotalDiscountedStorageCost [r, s, y] = TotalDiscountedCost [r, y]; # # Resilience_Metrics s.t. RESMET001_NetRes: (sum{y in YEAR} (wResBal * Balance [y] + wResDec * DecProdShr [y] + wResSec * SecNet [y] + wResRdncy * RedundantCapRelative [y] + wResStg * NetStgShr [y] + wResEff * NetEff [y]) / card(YEAR) + wResCO2 * CO2Reduction) / 1 = NetRes; s.t. RESMET002_MinNetRes: MinNetRes <= NetRes; s.t. RESMET011_ProdShr{t in TECHNOLOGY, y in YEAR}: (sum{r in REGION, f in FUEL} ProductionByTechnologyAnnual [r, t, f, y] * GenDelivEff [r, t, f]) / (sum{r in REGION, f in FUEL} SpecifiedAnnualDemand [r, f, y]) = ProdShr [y, t]; s.t. RESMET021_DecProdShr{y in YEAR}: sum{t in TECHNOLOGY} ProdShr [y, t] * DecTechFlag [t] = DecProdShr [y]; s.t. RESMET031_CO2Reduction: (1 - (sum{r in REGION, e in EMISSION} ModelPeriodEmissions [r, e]) / CO2Base) * CO2ReductionFlag = CO2Reduction; s.t. RESMET041_Security{y in YEAR}: sum{t in TECHNOLOGY} ProdShr [y, t] * SecTech [t, y] = SecNet [y]; s.t. RESMET051_RedundantCapTotal{y in YEAR}: sum{r in REGION, t in TECHNOLOGY} TotalCapacityAnnual [r, t, y] * ReserveMarginTagTechnology [r, t, y] = RedundantCapTotal [y]; s.t. RESMET052_RedundantCapRelative{y in YEAR}: (RedundantCapTotal [y] / RedundantCapBase [y] - 1) * RedundancyFlag = RedundantCapRelative [y]; s.t. RESMET0601_Balance{y in YEAR}: sum{t in TECHNOLOGY} PLnP [y, t] / LnGenTechs = Balance [y]; s.t. RESMET0611_PLnPLowerLimit{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY}: L [ps] + (U [ps] - L [ps]) * (ProdShr [y, t] - Lx [ps]) / (Ux [ps] - Lx [ps]) - 10 * (1 - PLnPBin [ps, y, t]) <= PLnP [y, t]; s.t. RESMET0612_PLnPUpperLimit{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY}: L [ps] + (U [ps] - L [ps]) * (ProdShr [y, t] - Lx [ps]) / (Ux [ps] - Lx [ps]) + 10 * (1 - PLnPBin [ps, y, t]) >= PLnP [y, t]; s.t. RESMET0614_PnLPBinUpper{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY}: PnLP_ProdShr [ps, y, t] <= PLnPBin [ps, y, t] * Ux [ps]; s.t. RESMET0615_PnLPBinLower{ps in PLnPSEG, y in YEAR, t in TECHNOLOGY}: PnLP_ProdShr [ps, y, t] >= PLnPBin [ps, y, t] * Lx [ps]; s.t. RESMET0616_PnLPProdShrSum{y in YEAR, t in TECHNOLOGY}: sum{ps in PLnPSEG} PnLP_ProdShr [ps, y, t] = ProdShr [y, t]; s.t. RESMET0617_PnLPBinSum{y in YEAR, t in TECHNOLOGY}: sum{ps in PLnPSEG} PLnPBin [ps, y, t] = 1; s.t. RESMET071_StgShr{y in YEAR, se in STGE}: sum{r in REGION, s in STORAGE} StorageUpperLimit [r, s, y] * StgEnergyFlag [s, se] / MaxStgP [y, se] = StgShr [y, se]; s.t. RESMET072_NetStgShr{y in YEAR}: sum{se in STGE} wStgShr [se] * StgShr [y, se] = NetStgShr [y]; s.t. RESMET081_NetEff{y in YEAR}: (sum{r in REGION, t in TECHNOLOGY, f in FUEL} ProductionByTechnologyAnnual [r, t, f, y] * GenDelivEff [r, t, f] * GenTechEff [t, f, y]) / (sum{r in REGION, f in FUEL} SpecifiedAnnualDemand [r, f, y]) = NetEff [y]; # ##################### # solve; # ##################### # ################ # Output # ################ # table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/AccumulatedNewCapacity.csv" : r, t, y, AccumulatedNewCapacity[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/AccumulatedNewStorageCapacity.csv" : r, s, y, AccumulatedNewStorageCapacity[r, s, y]; table tout {r in REGION, e in EMISSION, y in YEAR} OUT "CSV" "res/csv/AnnualEmissions.csv" : r, e, y, AnnualEmissions[r, e, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/AnnualFixedOperatingCost.csv" : r, t, y, AnnualFixedOperatingCost[r, t, y]; table tout {r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR} OUT "CSV" "res/csv/AnnualTechnologyEmission.csv" : r, t, e, y, AnnualTechnologyEmission[r, t, e, y]; table tout {r in REGION, t in TECHNOLOGY, e in EMISSION, m in MODE_OF_OPERATION, y in YEAR} OUT "CSV" "res/csv/AnnualTechnologyEmissionByMode.csv" : r, t, e, m, y, AnnualTechnologyEmissionByMode[r, t, e, m, y]; table tout {r in REGION, t in TECHNOLOGY, e in EMISSION, y in YEAR} OUT "CSV" "res/csv/AnnualTechnologyEmissionPenaltyByEmission.csv" : r, t, e, y, AnnualTechnologyEmissionPenaltyByEmission[r, t, e, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/AnnualTechnologyEmissionsPenalty.csv" : r, t, y, AnnualTechnologyEmissionsPenalty[r, t, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/AnnualVariableOperatingCost.csv" : r, t, y, AnnualVariableOperatingCost[r, t, y]; table tout {y in YEAR} OUT "CSV" "res/csv/Balance.csv" : y, Balance[y]; table tout {mock in {1}} OUT "CSV" "res/csv/CO2Reduction.csv" : CO2Reduction; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/CapitalInvestment.csv" : r, t, y, CapitalInvestment[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/CapitalInvestmentStorage.csv" : r, s, y, CapitalInvestmentStorage[r, s, y]; table tout {y in YEAR} OUT "CSV" "res/csv/DecProdShr.csv" : y, DecProdShr[y]; table tout {y in YEAR, f in FUEL} OUT "CSV" "res/csv/DemShr.csv" : y, f, DemShr[y, f]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/Demand.csv" : r, l, f, y, Demand[r, l, f, y]; table tout {r in REGION, f in FUEL} OUT "CSV" "res/csv/DemandModel.csv" : r, f, DemandModel[r, f]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/DiscountedCapitalInvestment.csv" : r, t, y, DiscountedCapitalInvestment[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/DiscountedCapitalInvestmentStorage.csv" : r, s, y, DiscountedCapitalInvestmentStorage[r, s, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/DiscountedOperatingCost.csv" : r, t, y, DiscountedOperatingCost[r, t, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/DiscountedSalvageValue.csv" : r, t, y, DiscountedSalvageValue[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/DiscountedSalvageValueStorage.csv" : r, s, y, DiscountedSalvageValueStorage[r, s, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/DiscountedTechnologyEmissionsPenalty.csv" : r, t, y, DiscountedTechnologyEmissionsPenalty[r, t, y]; table tout {r in REGION} OUT "CSV" "res/csv/ModelPeriodCostByRegion.csv" : r, ModelPeriodCostByRegion[r]; table tout {r in REGION, e in EMISSION} OUT "CSV" "res/csv/ModelPeriodEmissions.csv" : r, e, ModelPeriodEmissions[r, e]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR} OUT "CSV" "res/csv/NetChargeWithinDay.csv" : r, s, ls, ld, lh, y, NetChargeWithinDay[r, s, ls, ld, lh, y]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR} OUT "CSV" "res/csv/NetChargeWithinYear.csv" : r, s, ls, ld, lh, y, NetChargeWithinYear[r, s, ls, ld, lh, y]; table tout {y in YEAR} OUT "CSV" "res/csv/NetEff.csv" : y, NetEff[y]; table tout {mock in {1}} OUT "CSV" "res/csv/NetRes.csv" : NetRes; table tout {y in YEAR} OUT "CSV" "res/csv/NetStgShr.csv" : y, NetStgShr[y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/NewCapacity.csv" : r, t, y, NewCapacity[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/NewStorageCapacity.csv" : r, s, y, NewStorageCapacity[r, s, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/NumberOfNewTechnologyUnits.csv" : r, t, y, NumberOfNewTechnologyUnits[r, t, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/OperatingCost.csv" : r, t, y, OperatingCost[r, t, y]; table tout {y in YEAR, t in TECHNOLOGY} OUT "CSV" "res/csv/PLnP.csv" : y, t, PLnP[y, t]; table tout {ps in PLnPSEG, y in YEAR, t in TECHNOLOGY} OUT "CSV" "res/csv/PLnPBin.csv" : ps, y, t, PLnPBin[ps, y, t]; table tout {ps in PLnPSEG, y in YEAR, t in TECHNOLOGY} OUT "CSV" "res/csv/PnLP_ProdShr.csv" : ps, y, t, PnLP_ProdShr[ps, y, t]; table tout {y in YEAR, t in TECHNOLOGY} OUT "CSV" "res/csv/ProdShr.csv" : y, t, ProdShr[y, t]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/Production.csv" : r, l, f, y, Production[r, l, f, y]; table tout {r in REGION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/ProductionAnnual.csv" : r, f, y, ProductionAnnual[r, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/ProductionByTechnology.csv" : r, l, t, f, y, ProductionByTechnology[r, l, t, f, y]; table tout {r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/ProductionByTechnologyAnnual.csv" : r, t, f, y, ProductionByTechnologyAnnual[r, t, f, y]; table tout {r in REGION, f in FUEL} OUT "CSV" "res/csv/ProductionModel.csv" : r, f, ProductionModel[r, f]; table tout {r in REGION, y in YEAR} OUT "CSV" "res/csv/RETotalProductionOfTargetFuelAnnual.csv" : r, y, RETotalProductionOfTargetFuelAnnual[r, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR} OUT "CSV" "res/csv/RateOfActivity.csv" : r, l, t, m, y, RateOfActivity[r, l, t, m, y]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfDemand.csv" : r, l, f, y, RateOfDemand[r, l, f, y]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfProduction.csv" : r, l, f, y, RateOfProduction[r, l, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfProductionByTechnology.csv" : r, l, t, f, y, RateOfProductionByTechnology[r, l, t, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfProductionByTechnologyByMode.csv" : r, l, t, m, f, y, RateOfProductionByTechnologyByMode[r, l, t, m, f, y]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR} OUT "CSV" "res/csv/RateOfStorageCharge.csv" : r, s, ls, ld, lh, y, RateOfStorageCharge[r, s, ls, ld, lh, y]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, lh in DAILYTIMEBRACKET, y in YEAR} OUT "CSV" "res/csv/RateOfStorageDischarge.csv" : r, s, ls, ld, lh, y, RateOfStorageDischarge[r, s, ls, ld, lh, y]; table tout {r in REGION, t in TECHNOLOGY, l in TIMESLICE, y in YEAR} OUT "CSV" "res/csv/RateOfTotalActivity.csv" : r, t, l, y, RateOfTotalActivity[r, t, l, y]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfUse.csv" : r, l, f, y, RateOfUse[r, l, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfUseByTechnology.csv" : r, l, t, f, y, RateOfUseByTechnology[r, l, t, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, m in MODE_OF_OPERATION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/RateOfUseByTechnologyByMode.csv" : r, l, t, m, f, y, RateOfUseByTechnologyByMode[r, l, t, m, f, y]; table tout {y in YEAR} OUT "CSV" "res/csv/RedundantCapRelative.csv" : y, RedundantCapRelative[y]; table tout {y in YEAR} OUT "CSV" "res/csv/RedundantCapTotal.csv" : y, RedundantCapTotal[y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/SalvageValue.csv" : r, t, y, SalvageValue[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/SalvageValueStorage.csv" : r, s, y, SalvageValueStorage[r, s, y]; table tout {y in YEAR} OUT "CSV" "res/csv/SecNet.csv" : y, SecNet[y]; table tout {y in YEAR, se in STGE} OUT "CSV" "res/csv/StgShr.csv" : y, se, StgShr[y, se]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR} OUT "CSV" "res/csv/StorageLevelDayTypeFinish.csv" : r, s, ls, ld, y, StorageLevelDayTypeFinish[r, s, ls, ld, y]; table tout {r in REGION, s in STORAGE, ls in SEASON, ld in DAYTYPE, y in YEAR} OUT "CSV" "res/csv/StorageLevelDayTypeStart.csv" : r, s, ls, ld, y, StorageLevelDayTypeStart[r, s, ls, ld, y]; table tout {r in REGION, s in STORAGE, ls in SEASON, y in YEAR} OUT "CSV" "res/csv/StorageLevelSeasonStart.csv" : r, s, ls, y, StorageLevelSeasonStart[r, s, ls, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/StorageLevelYearFinish.csv" : r, s, y, StorageLevelYearFinish[r, s, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/StorageLevelYearStart.csv" : r, s, y, StorageLevelYearStart[r, s, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/StorageLowerLimit.csv" : r, s, y, StorageLowerLimit[r, s, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/StorageUpperLimit.csv" : r, s, y, StorageUpperLimit[r, s, y]; table tout {r in REGION, t in TECHNOLOGY, m in MODE_OF_OPERATION, y in YEAR} OUT "CSV" "res/csv/TotalAnnualTechnologyActivityByMode.csv" : r, t, m, y, TotalAnnualTechnologyActivityByMode[r, t, m, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/TotalCapacityAnnual.csv" : r, t, y, TotalCapacityAnnual[r, t, y]; table tout {r in REGION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/TotalCapacityInReserveMarginByDemand.csv" : r, f, y, TotalCapacityInReserveMarginByDemand[r, f, y]; table tout {r in REGION, y in YEAR} OUT "CSV" "res/csv/TotalDiscountedCost.csv" : r, y, TotalDiscountedCost[r, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/TotalDiscountedCostByTechnology.csv" : r, t, y, TotalDiscountedCostByTechnology[r, t, y]; table tout {r in REGION, s in STORAGE, y in YEAR} OUT "CSV" "res/csv/TotalDiscountedStorageCost.csv" : r, s, y, TotalDiscountedStorageCost[r, s, y]; table tout {r in REGION, y in YEAR} OUT "CSV" "res/csv/TotalREProductionAnnual.csv" : r, y, TotalREProductionAnnual[r, y]; table tout {r in REGION, t in TECHNOLOGY, y in YEAR} OUT "CSV" "res/csv/TotalTechnologyAnnualActivity.csv" : r, t, y, TotalTechnologyAnnualActivity[r, t, y]; table tout {r in REGION, t in TECHNOLOGY} OUT "CSV" "res/csv/TotalTechnologyModelPeriodActivity.csv" : r, t, TotalTechnologyModelPeriodActivity[r, t]; table tout {r in REGION, rr in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/Trade.csv" : r, rr, l, f, y, Trade[r, rr, l, f, y]; table tout {r in REGION, rr in REGION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/TradeAnnual.csv" : r, rr, f, y, TradeAnnual[r, rr, f, y]; table tout {r in REGION, l in TIMESLICE, f in FUEL, y in YEAR} OUT "CSV" "res/csv/Use.csv" : r, l, f, y, Use[r, l, f, y]; table tout {r in REGION, f in FUEL, y in YEAR} OUT "CSV" "res/csv/UseAnnual.csv" : r, f, y, UseAnnual[r, f, y]; table tout {r in REGION, l in TIMESLICE, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/UseByTechnology.csv" : r, l, t, f, y, UseByTechnology[r, l, t, f, y]; table tout {r in REGION, t in TECHNOLOGY, f in FUEL, y in YEAR} OUT "CSV" "res/csv/UseByTechnologyAnnual.csv" : r, t, f, y, UseByTechnologyAnnual[r, t, f, y]; table tout {r in REGION, f in FUEL} OUT "CSV" "res/csv/UseModel.csv" : r, f, UseModel[r, f]; # end;