diff --git a/docs/tutorial-code/add-region/1-new-region/Results/MCACapacity.csv b/docs/tutorial-code/add-region/1-new-region/Results/MCACapacity.csv index df7ee22df..960a24355 100644 --- a/docs/tutorial-code/add-region/1-new-region/Results/MCACapacity.csv +++ b/docs/tutorial-code/add-region/1-new-region/Results/MCACapacity.csv @@ -6,78 +6,120 @@ A1,1.00000000000,R2,2020,R2,power,gasCCGT,newcapa,2020 A1,15.00000000000,R1,2020,R1,gas,gassupply1,newcapa,2020 A1,15.00000000000,R2,2020,R2,gas,gassupply1,newcapa,2020 A1,5.00000000000,R1,2020,R1,residential,gasboiler,newcapa,2025 -A1,19.00000000000,R1,2025,R1,residential,gasboiler,newcapa,2025 +A1,19.00000000000,R1,2025,R1,residential,heatpump,newcapa,2025 A1,5.00000000000,R2,2020,R2,residential,gasboiler,newcapa,2025 -A1,19.00000000000,R2,2025,R2,residential,gasboiler,newcapa,2025 +A1,19.00000000000,R2,2025,R2,residential,heatpump,newcapa,2025 A1,1.00000000000,R1,2020,R1,power,gasCCGT,newcapa,2025 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2025 +A1,1.91410000000,R1,2025,R1,power,windturbine,newcapa,2025 A1,1.00000000000,R2,2020,R2,power,gasCCGT,newcapa,2025 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2025 +A1,1.91410000000,R2,2025,R2,power,windturbine,newcapa,2025 A1,15.00000000000,R1,2020,R1,gas,gassupply1,newcapa,2025 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2025 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2025 A1,15.00000000000,R2,2020,R2,gas,gassupply1,newcapa,2025 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2025 -A1,19.00000000000,R1,2025,R1,residential,gasboiler,newcapa,2030 -A1,11.00000000000,R1,2030,R1,residential,gasboiler,newcapa,2030 -A1,19.00000000000,R2,2025,R2,residential,gasboiler,newcapa,2030 -A1,11.00000000000,R2,2030,R2,residential,gasboiler,newcapa,2030 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2025 +A1,19.00000000000,R1,2025,R1,residential,heatpump,newcapa,2030 +A1,11.00000000000,R1,2030,R1,residential,heatpump,newcapa,2030 +A1,10.00000000000,R2,2030,R2,residential,gasboiler,newcapa,2030 +A1,19.00000000000,R2,2025,R2,residential,heatpump,newcapa,2030 +A1,1.00000000000,R2,2030,R2,residential,heatpump,newcapa,2030 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2030 +A1,0.27960000000,R1,2030,R1,power,gasCCGT,newcapa,2030 +A1,1.91410000000,R1,2025,R1,power,windturbine,newcapa,2030 +A1,12.62080000000,R1,2030,R1,power,windturbine,newcapa,2030 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2030 +A1,1.91410000000,R2,2025,R2,power,windturbine,newcapa,2030 +A1,3.25000000000,R2,2030,R2,power,windturbine,newcapa,2030 A1,7.50000000000,R1,2020,R1,gas,gassupply1,newcapa,2030 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2030 -A1,15.23330000000,R1,2030,R1,gas,gassupply1,newcapa,2030 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2030 A1,7.50000000000,R2,2020,R2,gas,gassupply1,newcapa,2030 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2030 -A1,15.23330000000,R2,2030,R2,gas,gassupply1,newcapa,2030 -A1,11.00000000000,R1,2030,R1,residential,gasboiler,newcapa,2035 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2030 +A1,12.27440000000,R2,2030,R2,gas,gassupply1,newcapa,2030 +A1,11.00000000000,R1,2030,R1,residential,heatpump,newcapa,2035 A1,25.00000000000,R1,2035,R1,residential,heatpump,newcapa,2035 -A1,11.00000000000,R2,2030,R2,residential,gasboiler,newcapa,2035 -A1,5.00000000000,R2,2035,R2,residential,gasboiler,newcapa,2035 -A1,20.00000000000,R2,2035,R2,residential,heatpump,newcapa,2035 -A1,22.50000000000,R1,2035,R1,power,windturbine,newcapa,2035 -A1,22.50000000000,R2,2035,R2,power,windturbine,newcapa,2035 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2035 -A1,15.23330000000,R1,2030,R1,gas,gassupply1,newcapa,2035 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2035 -A1,15.23330000000,R2,2030,R2,gas,gassupply1,newcapa,2035 +A1,10.00000000000,R2,2030,R2,residential,gasboiler,newcapa,2035 +A1,6.00000000000,R2,2035,R2,residential,gasboiler,newcapa,2035 +A1,1.00000000000,R2,2030,R2,residential,heatpump,newcapa,2035 +A1,19.00000000000,R2,2035,R2,residential,heatpump,newcapa,2035 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2035 +A1,0.27960000000,R1,2030,R1,power,gasCCGT,newcapa,2035 +A1,1.91410000000,R1,2025,R1,power,windturbine,newcapa,2035 +A1,12.62080000000,R1,2030,R1,power,windturbine,newcapa,2035 +A1,6.00000000000,R1,2035,R1,power,windturbine,newcapa,2035 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2035 +A1,1.91410000000,R2,2025,R2,power,windturbine,newcapa,2035 +A1,3.25000000000,R2,2030,R2,power,windturbine,newcapa,2035 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2035 +A1,7.35250000000,R1,2035,R1,gas,gassupply1,newcapa,2035 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2035 +A1,12.27440000000,R2,2030,R2,gas,gassupply1,newcapa,2035 +A1,15.23330000000,R2,2035,R2,gas,gassupply1,newcapa,2035 A1,25.00000000000,R1,2035,R1,residential,heatpump,newcapa,2040 A1,17.00000000000,R1,2040,R1,residential,heatpump,newcapa,2040 -A1,5.00000000000,R2,2035,R2,residential,gasboiler,newcapa,2040 -A1,17.00000000000,R2,2040,R2,residential,gasboiler,newcapa,2040 -A1,20.00000000000,R2,2035,R2,residential,heatpump,newcapa,2040 -A1,22.50000000000,R1,2035,R1,power,windturbine,newcapa,2040 -A1,8.50000000000,R1,2040,R1,power,windturbine,newcapa,2040 -A1,22.50000000000,R2,2035,R2,power,windturbine,newcapa,2040 -A1,8.50000000000,R2,2040,R2,power,windturbine,newcapa,2040 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2040 -A1,15.23330000000,R1,2030,R1,gas,gassupply1,newcapa,2040 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2040 -A1,15.23330000000,R2,2030,R2,gas,gassupply1,newcapa,2040 +A1,6.00000000000,R2,2035,R2,residential,gasboiler,newcapa,2040 +A1,16.00000000000,R2,2040,R2,residential,gasboiler,newcapa,2040 +A1,19.00000000000,R2,2035,R2,residential,heatpump,newcapa,2040 +A1,1.00000000000,R2,2040,R2,residential,heatpump,newcapa,2040 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2040 +A1,0.27960000000,R1,2030,R1,power,gasCCGT,newcapa,2040 +A1,1.91410000000,R1,2025,R1,power,windturbine,newcapa,2040 +A1,12.62080000000,R1,2030,R1,power,windturbine,newcapa,2040 +A1,6.00000000000,R1,2035,R1,power,windturbine,newcapa,2040 +A1,6.00000000000,R1,2040,R1,power,windturbine,newcapa,2040 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2040 +A1,1.91410000000,R2,2025,R2,power,windturbine,newcapa,2040 +A1,3.25000000000,R2,2030,R2,power,windturbine,newcapa,2040 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2040 +A1,7.35250000000,R1,2035,R1,gas,gassupply1,newcapa,2040 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2040 +A1,12.27440000000,R2,2030,R2,gas,gassupply1,newcapa,2040 +A1,15.23330000000,R2,2035,R2,gas,gassupply1,newcapa,2040 +A1,7.73330000000,R2,2040,R2,gas,gassupply1,newcapa,2040 A1,17.00000000000,R1,2040,R1,residential,heatpump,newcapa,2045 A1,31.00000000000,R1,2045,R1,residential,heatpump,newcapa,2045 -A1,17.00000000000,R2,2040,R2,residential,gasboiler,newcapa,2045 -A1,11.00000000000,R2,2045,R2,residential,gasboiler,newcapa,2045 -A1,20.00000000000,R2,2045,R2,residential,heatpump,newcapa,2045 -A1,22.50000000000,R1,2035,R1,power,windturbine,newcapa,2045 -A1,8.50000000000,R1,2040,R1,power,windturbine,newcapa,2045 -A1,3.00000000000,R1,2045,R1,power,windturbine,newcapa,2045 -A1,22.50000000000,R2,2035,R2,power,windturbine,newcapa,2045 -A1,8.50000000000,R2,2040,R2,power,windturbine,newcapa,2045 -A1,3.00000000000,R2,2045,R2,power,windturbine,newcapa,2045 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2045 -A1,15.23330000000,R1,2030,R1,gas,gassupply1,newcapa,2045 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2045 -A1,15.23330000000,R2,2030,R2,gas,gassupply1,newcapa,2045 +A1,16.00000000000,R2,2040,R2,residential,gasboiler,newcapa,2045 +A1,12.00000000000,R2,2045,R2,residential,gasboiler,newcapa,2045 +A1,1.00000000000,R2,2040,R2,residential,heatpump,newcapa,2045 +A1,19.00000000000,R2,2045,R2,residential,heatpump,newcapa,2045 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2045 +A1,0.27960000000,R1,2030,R1,power,gasCCGT,newcapa,2045 +A1,1.91410000000,R1,2025,R1,power,windturbine,newcapa,2045 +A1,12.62080000000,R1,2030,R1,power,windturbine,newcapa,2045 +A1,6.00000000000,R1,2035,R1,power,windturbine,newcapa,2045 +A1,6.00000000000,R1,2040,R1,power,windturbine,newcapa,2045 +A1,6.00000000000,R1,2045,R1,power,windturbine,newcapa,2045 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2045 +A1,1.91410000000,R2,2025,R2,power,windturbine,newcapa,2045 +A1,3.25000000000,R2,2030,R2,power,windturbine,newcapa,2045 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2045 +A1,7.35250000000,R1,2035,R1,gas,gassupply1,newcapa,2045 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2045 +A1,12.27440000000,R2,2030,R2,gas,gassupply1,newcapa,2045 +A1,15.23330000000,R2,2035,R2,gas,gassupply1,newcapa,2045 +A1,7.73330000000,R2,2040,R2,gas,gassupply1,newcapa,2045 +A1,7.73330000000,R2,2045,R2,gas,gassupply1,newcapa,2045 A1,31.00000000000,R1,2045,R1,residential,heatpump,newcapa,2050 A1,23.00000000000,R1,2050,R1,residential,heatpump,newcapa,2050 -A1,11.00000000000,R2,2045,R2,residential,gasboiler,newcapa,2050 -A1,23.00000000000,R2,2050,R2,residential,gasboiler,newcapa,2050 -A1,20.00000000000,R2,2045,R2,residential,heatpump,newcapa,2050 -A1,22.50000000000,R1,2035,R1,power,windturbine,newcapa,2050 -A1,8.50000000000,R1,2040,R1,power,windturbine,newcapa,2050 -A1,3.00000000000,R1,2045,R1,power,windturbine,newcapa,2050 -A1,3.00000000000,R1,2050,R1,power,windturbine,newcapa,2050 -A1,22.50000000000,R2,2035,R2,power,windturbine,newcapa,2050 -A1,8.50000000000,R2,2040,R2,power,windturbine,newcapa,2050 -A1,3.00000000000,R2,2045,R2,power,windturbine,newcapa,2050 -A1,3.00000000000,R2,2050,R2,power,windturbine,newcapa,2050 -A1,15.93330000000,R1,2025,R1,gas,gassupply1,newcapa,2050 -A1,15.23330000000,R1,2030,R1,gas,gassupply1,newcapa,2050 -A1,15.93330000000,R2,2025,R2,gas,gassupply1,newcapa,2050 -A1,15.23330000000,R2,2030,R2,gas,gassupply1,newcapa,2050 +A1,12.00000000000,R2,2045,R2,residential,gasboiler,newcapa,2050 +A1,22.00000000000,R2,2050,R2,residential,gasboiler,newcapa,2050 +A1,19.00000000000,R2,2045,R2,residential,heatpump,newcapa,2050 +A1,1.00000000000,R2,2050,R2,residential,heatpump,newcapa,2050 +A1,6.59380000000,R1,2025,R1,power,gasCCGT,newcapa,2050 +A1,0.27960000000,R1,2030,R1,power,gasCCGT,newcapa,2050 +A1,12.62080000000,R1,2030,R1,power,windturbine,newcapa,2050 +A1,6.00000000000,R1,2035,R1,power,windturbine,newcapa,2050 +A1,6.00000000000,R1,2040,R1,power,windturbine,newcapa,2050 +A1,6.00000000000,R1,2045,R1,power,windturbine,newcapa,2050 +A1,7.91410000000,R1,2050,R1,power,windturbine,newcapa,2050 +A1,6.59380000000,R2,2025,R2,power,gasCCGT,newcapa,2050 +A1,3.25000000000,R2,2030,R2,power,windturbine,newcapa,2050 +A1,1.91410000000,R2,2050,R2,power,windturbine,newcapa,2050 +A1,4.12600000000,R1,2025,R1,gas,gassupply1,newcapa,2050 +A1,7.35250000000,R1,2035,R1,gas,gassupply1,newcapa,2050 +A1,4.12600000000,R2,2025,R2,gas,gassupply1,newcapa,2050 +A1,12.27440000000,R2,2030,R2,gas,gassupply1,newcapa,2050 +A1,15.23330000000,R2,2035,R2,gas,gassupply1,newcapa,2050 +A1,7.73330000000,R2,2040,R2,gas,gassupply1,newcapa,2050 +A1,7.73330000000,R2,2045,R2,gas,gassupply1,newcapa,2050 +A1,7.73330000000,R2,2050,R2,gas,gassupply1,newcapa,2050 diff --git a/docs/tutorial-code/add-region/1-new-region/Results/MCAPrices.csv b/docs/tutorial-code/add-region/1-new-region/Results/MCAPrices.csv index ddef0d46b..b9ced2d02 100644 --- a/docs/tutorial-code/add-region/1-new-region/Results/MCAPrices.csv +++ b/docs/tutorial-code/add-region/1-new-region/Results/MCAPrices.csv @@ -47,291 +47,291 @@ heat,all-week,evening,all-year,100.00000000000,R1,5,MUS$2010/PJ,2020 heat,all-week,evening,all-year,100.00000000000,R2,5,MUS$2010/PJ,2020 CO2f,all-week,evening,all-year,0.08310000000,R1,5,MUS$2010/kt,2020 CO2f,all-week,evening,all-year,0.08310000000,R2,5,MUS$2010/kt,2020 -electricity,all-week,night,all-year,35.81110000000,R1,0,MUS$2010/PJ,2025 -electricity,all-week,night,all-year,35.81110000000,R2,0,MUS$2010/PJ,2025 +electricity,all-week,night,all-year,19.97590000000,R1,0,MUS$2010/PJ,2025 +electricity,all-week,night,all-year,19.97590000000,R2,0,MUS$2010/PJ,2025 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2025 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2025 -heat,all-week,night,all-year,12.95410000000,R1,0,MUS$2010/PJ,2025 -heat,all-week,night,all-year,12.95410000000,R2,0,MUS$2010/PJ,2025 +heat,all-week,night,all-year,10.84880000000,R1,0,MUS$2010/PJ,2025 +heat,all-week,night,all-year,10.84880000000,R2,0,MUS$2010/PJ,2025 CO2f,all-week,night,all-year,0.12010000000,R1,0,MUS$2010/kt,2025 CO2f,all-week,night,all-year,0.12010000000,R2,0,MUS$2010/kt,2025 -electricity,all-week,morning,all-year,35.81110000000,R1,1,MUS$2010/PJ,2025 -electricity,all-week,morning,all-year,35.81110000000,R2,1,MUS$2010/PJ,2025 +electricity,all-week,morning,all-year,19.97590000000,R1,1,MUS$2010/PJ,2025 +electricity,all-week,morning,all-year,19.97590000000,R2,1,MUS$2010/PJ,2025 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2025 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2025 -heat,all-week,morning,all-year,12.95410000000,R1,1,MUS$2010/PJ,2025 -heat,all-week,morning,all-year,12.95410000000,R2,1,MUS$2010/PJ,2025 +heat,all-week,morning,all-year,10.84880000000,R1,1,MUS$2010/PJ,2025 +heat,all-week,morning,all-year,10.84880000000,R2,1,MUS$2010/PJ,2025 CO2f,all-week,morning,all-year,0.12010000000,R1,1,MUS$2010/kt,2025 CO2f,all-week,morning,all-year,0.12010000000,R2,1,MUS$2010/kt,2025 -electricity,all-week,afternoon,all-year,35.81110000000,R1,2,MUS$2010/PJ,2025 -electricity,all-week,afternoon,all-year,35.81110000000,R2,2,MUS$2010/PJ,2025 +electricity,all-week,afternoon,all-year,19.97590000000,R1,2,MUS$2010/PJ,2025 +electricity,all-week,afternoon,all-year,19.97590000000,R2,2,MUS$2010/PJ,2025 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2025 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2025 -heat,all-week,afternoon,all-year,12.95410000000,R1,2,MUS$2010/PJ,2025 -heat,all-week,afternoon,all-year,12.95410000000,R2,2,MUS$2010/PJ,2025 +heat,all-week,afternoon,all-year,10.84880000000,R1,2,MUS$2010/PJ,2025 +heat,all-week,afternoon,all-year,10.84880000000,R2,2,MUS$2010/PJ,2025 CO2f,all-week,afternoon,all-year,0.12010000000,R1,2,MUS$2010/kt,2025 CO2f,all-week,afternoon,all-year,0.12010000000,R2,2,MUS$2010/kt,2025 -electricity,all-week,early-peak,all-year,35.81110000000,R1,3,MUS$2010/PJ,2025 -electricity,all-week,early-peak,all-year,35.81110000000,R2,3,MUS$2010/PJ,2025 +electricity,all-week,early-peak,all-year,19.97590000000,R1,3,MUS$2010/PJ,2025 +electricity,all-week,early-peak,all-year,19.97590000000,R2,3,MUS$2010/PJ,2025 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2025 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2025 -heat,all-week,early-peak,all-year,12.95410000000,R1,3,MUS$2010/PJ,2025 -heat,all-week,early-peak,all-year,12.95410000000,R2,3,MUS$2010/PJ,2025 +heat,all-week,early-peak,all-year,10.84880000000,R1,3,MUS$2010/PJ,2025 +heat,all-week,early-peak,all-year,10.84880000000,R2,3,MUS$2010/PJ,2025 CO2f,all-week,early-peak,all-year,0.12010000000,R1,3,MUS$2010/kt,2025 CO2f,all-week,early-peak,all-year,0.12010000000,R2,3,MUS$2010/kt,2025 -electricity,all-week,late-peak,all-year,35.81110000000,R1,4,MUS$2010/PJ,2025 -electricity,all-week,late-peak,all-year,35.81110000000,R2,4,MUS$2010/PJ,2025 +electricity,all-week,late-peak,all-year,19.97590000000,R1,4,MUS$2010/PJ,2025 +electricity,all-week,late-peak,all-year,19.97590000000,R2,4,MUS$2010/PJ,2025 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2025 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2025 -heat,all-week,late-peak,all-year,12.95410000000,R1,4,MUS$2010/PJ,2025 -heat,all-week,late-peak,all-year,12.95410000000,R2,4,MUS$2010/PJ,2025 +heat,all-week,late-peak,all-year,10.84880000000,R1,4,MUS$2010/PJ,2025 +heat,all-week,late-peak,all-year,10.84880000000,R2,4,MUS$2010/PJ,2025 CO2f,all-week,late-peak,all-year,0.12010000000,R1,4,MUS$2010/kt,2025 CO2f,all-week,late-peak,all-year,0.12010000000,R2,4,MUS$2010/kt,2025 -electricity,all-week,evening,all-year,35.81110000000,R1,5,MUS$2010/PJ,2025 -electricity,all-week,evening,all-year,35.81110000000,R2,5,MUS$2010/PJ,2025 +electricity,all-week,evening,all-year,19.97590000000,R1,5,MUS$2010/PJ,2025 +electricity,all-week,evening,all-year,19.97590000000,R2,5,MUS$2010/PJ,2025 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2025 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2025 -heat,all-week,evening,all-year,12.95410000000,R1,5,MUS$2010/PJ,2025 -heat,all-week,evening,all-year,12.95410000000,R2,5,MUS$2010/PJ,2025 +heat,all-week,evening,all-year,10.84880000000,R1,5,MUS$2010/PJ,2025 +heat,all-week,evening,all-year,10.84880000000,R2,5,MUS$2010/PJ,2025 CO2f,all-week,evening,all-year,0.12010000000,R1,5,MUS$2010/kt,2025 CO2f,all-week,evening,all-year,0.12010000000,R2,5,MUS$2010/kt,2025 -electricity,all-week,night,all-year,35.81110000000,R1,0,MUS$2010/PJ,2030 -electricity,all-week,night,all-year,35.81110000000,R2,0,MUS$2010/PJ,2030 +electricity,all-week,night,all-year,20.87770000000,R1,0,MUS$2010/PJ,2030 +electricity,all-week,night,all-year,22.14100000000,R2,0,MUS$2010/PJ,2030 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2030 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2030 -heat,all-week,night,all-year,15.34370000000,R1,0,MUS$2010/PJ,2030 -heat,all-week,night,all-year,15.34370000000,R2,0,MUS$2010/PJ,2030 +heat,all-week,night,all-year,10.94850000000,R1,0,MUS$2010/PJ,2030 +heat,all-week,night,all-year,12.37940000000,R2,0,MUS$2010/PJ,2030 CO2f,all-week,night,all-year,0.15700000000,R1,0,MUS$2010/kt,2030 CO2f,all-week,night,all-year,0.15700000000,R2,0,MUS$2010/kt,2030 -electricity,all-week,morning,all-year,35.81110000000,R1,1,MUS$2010/PJ,2030 -electricity,all-week,morning,all-year,35.81110000000,R2,1,MUS$2010/PJ,2030 +electricity,all-week,morning,all-year,20.87770000000,R1,1,MUS$2010/PJ,2030 +electricity,all-week,morning,all-year,22.14100000000,R2,1,MUS$2010/PJ,2030 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2030 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2030 -heat,all-week,morning,all-year,15.34370000000,R1,1,MUS$2010/PJ,2030 -heat,all-week,morning,all-year,15.34370000000,R2,1,MUS$2010/PJ,2030 +heat,all-week,morning,all-year,10.94850000000,R1,1,MUS$2010/PJ,2030 +heat,all-week,morning,all-year,12.37940000000,R2,1,MUS$2010/PJ,2030 CO2f,all-week,morning,all-year,0.15700000000,R1,1,MUS$2010/kt,2030 CO2f,all-week,morning,all-year,0.15700000000,R2,1,MUS$2010/kt,2030 -electricity,all-week,afternoon,all-year,35.81110000000,R1,2,MUS$2010/PJ,2030 -electricity,all-week,afternoon,all-year,35.81110000000,R2,2,MUS$2010/PJ,2030 +electricity,all-week,afternoon,all-year,20.87770000000,R1,2,MUS$2010/PJ,2030 +electricity,all-week,afternoon,all-year,22.14100000000,R2,2,MUS$2010/PJ,2030 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2030 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2030 -heat,all-week,afternoon,all-year,15.34370000000,R1,2,MUS$2010/PJ,2030 -heat,all-week,afternoon,all-year,15.34370000000,R2,2,MUS$2010/PJ,2030 +heat,all-week,afternoon,all-year,10.94850000000,R1,2,MUS$2010/PJ,2030 +heat,all-week,afternoon,all-year,12.37940000000,R2,2,MUS$2010/PJ,2030 CO2f,all-week,afternoon,all-year,0.15700000000,R1,2,MUS$2010/kt,2030 CO2f,all-week,afternoon,all-year,0.15700000000,R2,2,MUS$2010/kt,2030 -electricity,all-week,early-peak,all-year,35.81110000000,R1,3,MUS$2010/PJ,2030 -electricity,all-week,early-peak,all-year,35.81110000000,R2,3,MUS$2010/PJ,2030 +electricity,all-week,early-peak,all-year,20.87770000000,R1,3,MUS$2010/PJ,2030 +electricity,all-week,early-peak,all-year,22.14100000000,R2,3,MUS$2010/PJ,2030 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2030 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2030 -heat,all-week,early-peak,all-year,15.34370000000,R1,3,MUS$2010/PJ,2030 -heat,all-week,early-peak,all-year,15.34370000000,R2,3,MUS$2010/PJ,2030 +heat,all-week,early-peak,all-year,10.94850000000,R1,3,MUS$2010/PJ,2030 +heat,all-week,early-peak,all-year,12.37940000000,R2,3,MUS$2010/PJ,2030 CO2f,all-week,early-peak,all-year,0.15700000000,R1,3,MUS$2010/kt,2030 CO2f,all-week,early-peak,all-year,0.15700000000,R2,3,MUS$2010/kt,2030 -electricity,all-week,late-peak,all-year,35.81110000000,R1,4,MUS$2010/PJ,2030 -electricity,all-week,late-peak,all-year,35.81110000000,R2,4,MUS$2010/PJ,2030 +electricity,all-week,late-peak,all-year,20.87770000000,R1,4,MUS$2010/PJ,2030 +electricity,all-week,late-peak,all-year,22.14100000000,R2,4,MUS$2010/PJ,2030 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2030 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2030 -heat,all-week,late-peak,all-year,15.34370000000,R1,4,MUS$2010/PJ,2030 -heat,all-week,late-peak,all-year,15.34370000000,R2,4,MUS$2010/PJ,2030 +heat,all-week,late-peak,all-year,10.94850000000,R1,4,MUS$2010/PJ,2030 +heat,all-week,late-peak,all-year,12.37940000000,R2,4,MUS$2010/PJ,2030 CO2f,all-week,late-peak,all-year,0.15700000000,R1,4,MUS$2010/kt,2030 CO2f,all-week,late-peak,all-year,0.15700000000,R2,4,MUS$2010/kt,2030 -electricity,all-week,evening,all-year,35.81110000000,R1,5,MUS$2010/PJ,2030 -electricity,all-week,evening,all-year,35.81110000000,R2,5,MUS$2010/PJ,2030 +electricity,all-week,evening,all-year,20.87770000000,R1,5,MUS$2010/PJ,2030 +electricity,all-week,evening,all-year,22.14100000000,R2,5,MUS$2010/PJ,2030 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2030 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2030 -heat,all-week,evening,all-year,15.34370000000,R1,5,MUS$2010/PJ,2030 -heat,all-week,evening,all-year,15.34370000000,R2,5,MUS$2010/PJ,2030 +heat,all-week,evening,all-year,10.94850000000,R1,5,MUS$2010/PJ,2030 +heat,all-week,evening,all-year,12.37940000000,R2,5,MUS$2010/PJ,2030 CO2f,all-week,evening,all-year,0.15700000000,R1,5,MUS$2010/kt,2030 CO2f,all-week,evening,all-year,0.15700000000,R2,5,MUS$2010/kt,2030 -electricity,all-week,night,all-year,35.99960000000,R1,0,MUS$2010/PJ,2035 -electricity,all-week,night,all-year,35.99960000000,R2,0,MUS$2010/PJ,2035 +electricity,all-week,night,all-year,22.67730000000,R1,0,MUS$2010/PJ,2035 +electricity,all-week,night,all-year,26.07680000000,R2,0,MUS$2010/PJ,2035 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2035 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2035 -heat,all-week,night,all-year,19.40510000000,R1,0,MUS$2010/PJ,2035 -heat,all-week,night,all-year,19.40510000000,R2,0,MUS$2010/PJ,2035 +heat,all-week,night,all-year,11.66830000000,R1,0,MUS$2010/PJ,2035 +heat,all-week,night,all-year,15.22720000000,R2,0,MUS$2010/PJ,2035 CO2f,all-week,night,all-year,0.21490000000,R1,0,MUS$2010/kt,2035 CO2f,all-week,night,all-year,0.21490000000,R2,0,MUS$2010/kt,2035 -electricity,all-week,morning,all-year,35.99960000000,R1,1,MUS$2010/PJ,2035 -electricity,all-week,morning,all-year,35.99960000000,R2,1,MUS$2010/PJ,2035 +electricity,all-week,morning,all-year,22.67730000000,R1,1,MUS$2010/PJ,2035 +electricity,all-week,morning,all-year,26.07680000000,R2,1,MUS$2010/PJ,2035 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2035 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2035 -heat,all-week,morning,all-year,19.40510000000,R1,1,MUS$2010/PJ,2035 -heat,all-week,morning,all-year,19.40510000000,R2,1,MUS$2010/PJ,2035 +heat,all-week,morning,all-year,11.66830000000,R1,1,MUS$2010/PJ,2035 +heat,all-week,morning,all-year,15.22720000000,R2,1,MUS$2010/PJ,2035 CO2f,all-week,morning,all-year,0.21490000000,R1,1,MUS$2010/kt,2035 CO2f,all-week,morning,all-year,0.21490000000,R2,1,MUS$2010/kt,2035 -electricity,all-week,afternoon,all-year,35.99960000000,R1,2,MUS$2010/PJ,2035 -electricity,all-week,afternoon,all-year,35.99960000000,R2,2,MUS$2010/PJ,2035 +electricity,all-week,afternoon,all-year,22.67730000000,R1,2,MUS$2010/PJ,2035 +electricity,all-week,afternoon,all-year,26.07680000000,R2,2,MUS$2010/PJ,2035 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2035 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2035 -heat,all-week,afternoon,all-year,19.40510000000,R1,2,MUS$2010/PJ,2035 -heat,all-week,afternoon,all-year,19.40510000000,R2,2,MUS$2010/PJ,2035 +heat,all-week,afternoon,all-year,11.66830000000,R1,2,MUS$2010/PJ,2035 +heat,all-week,afternoon,all-year,15.22720000000,R2,2,MUS$2010/PJ,2035 CO2f,all-week,afternoon,all-year,0.21490000000,R1,2,MUS$2010/kt,2035 CO2f,all-week,afternoon,all-year,0.21490000000,R2,2,MUS$2010/kt,2035 -electricity,all-week,early-peak,all-year,35.99960000000,R1,3,MUS$2010/PJ,2035 -electricity,all-week,early-peak,all-year,35.99960000000,R2,3,MUS$2010/PJ,2035 +electricity,all-week,early-peak,all-year,22.67730000000,R1,3,MUS$2010/PJ,2035 +electricity,all-week,early-peak,all-year,26.07680000000,R2,3,MUS$2010/PJ,2035 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2035 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2035 -heat,all-week,early-peak,all-year,19.40510000000,R1,3,MUS$2010/PJ,2035 -heat,all-week,early-peak,all-year,19.40510000000,R2,3,MUS$2010/PJ,2035 +heat,all-week,early-peak,all-year,11.66830000000,R1,3,MUS$2010/PJ,2035 +heat,all-week,early-peak,all-year,15.22720000000,R2,3,MUS$2010/PJ,2035 CO2f,all-week,early-peak,all-year,0.21490000000,R1,3,MUS$2010/kt,2035 CO2f,all-week,early-peak,all-year,0.21490000000,R2,3,MUS$2010/kt,2035 -electricity,all-week,late-peak,all-year,35.99960000000,R1,4,MUS$2010/PJ,2035 -electricity,all-week,late-peak,all-year,35.99960000000,R2,4,MUS$2010/PJ,2035 +electricity,all-week,late-peak,all-year,22.67730000000,R1,4,MUS$2010/PJ,2035 +electricity,all-week,late-peak,all-year,26.07680000000,R2,4,MUS$2010/PJ,2035 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2035 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2035 -heat,all-week,late-peak,all-year,19.40510000000,R1,4,MUS$2010/PJ,2035 -heat,all-week,late-peak,all-year,19.40510000000,R2,4,MUS$2010/PJ,2035 +heat,all-week,late-peak,all-year,11.66830000000,R1,4,MUS$2010/PJ,2035 +heat,all-week,late-peak,all-year,15.22720000000,R2,4,MUS$2010/PJ,2035 CO2f,all-week,late-peak,all-year,0.21490000000,R1,4,MUS$2010/kt,2035 CO2f,all-week,late-peak,all-year,0.21490000000,R2,4,MUS$2010/kt,2035 -electricity,all-week,evening,all-year,35.99960000000,R1,5,MUS$2010/PJ,2035 -electricity,all-week,evening,all-year,35.99960000000,R2,5,MUS$2010/PJ,2035 +electricity,all-week,evening,all-year,22.67730000000,R1,5,MUS$2010/PJ,2035 +electricity,all-week,evening,all-year,26.07680000000,R2,5,MUS$2010/PJ,2035 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2035 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2035 -heat,all-week,evening,all-year,19.40510000000,R1,5,MUS$2010/PJ,2035 -heat,all-week,evening,all-year,19.40510000000,R2,5,MUS$2010/PJ,2035 +heat,all-week,evening,all-year,11.66830000000,R1,5,MUS$2010/PJ,2035 +heat,all-week,evening,all-year,15.22720000000,R2,5,MUS$2010/PJ,2035 CO2f,all-week,evening,all-year,0.21490000000,R1,5,MUS$2010/kt,2035 CO2f,all-week,evening,all-year,0.21490000000,R2,5,MUS$2010/kt,2035 -electricity,all-week,night,all-year,35.99960000000,R1,0,MUS$2010/PJ,2040 -electricity,all-week,night,all-year,35.99960000000,R2,0,MUS$2010/PJ,2040 +electricity,all-week,night,all-year,23.96280000000,R1,0,MUS$2010/PJ,2040 +electricity,all-week,night,all-year,30.01270000000,R2,0,MUS$2010/PJ,2040 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2040 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2040 -heat,all-week,night,all-year,20.44320000000,R1,0,MUS$2010/PJ,2040 -heat,all-week,night,all-year,20.44320000000,R2,0,MUS$2010/PJ,2040 +heat,all-week,night,all-year,12.18250000000,R1,0,MUS$2010/PJ,2040 +heat,all-week,night,all-year,18.33140000000,R2,0,MUS$2010/PJ,2040 CO2f,all-week,night,all-year,0.27280000000,R1,0,MUS$2010/kt,2040 CO2f,all-week,night,all-year,0.27280000000,R2,0,MUS$2010/kt,2040 -electricity,all-week,morning,all-year,35.99960000000,R1,1,MUS$2010/PJ,2040 -electricity,all-week,morning,all-year,35.99960000000,R2,1,MUS$2010/PJ,2040 +electricity,all-week,morning,all-year,23.96280000000,R1,1,MUS$2010/PJ,2040 +electricity,all-week,morning,all-year,30.01270000000,R2,1,MUS$2010/PJ,2040 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2040 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2040 -heat,all-week,morning,all-year,20.44320000000,R1,1,MUS$2010/PJ,2040 -heat,all-week,morning,all-year,20.44320000000,R2,1,MUS$2010/PJ,2040 +heat,all-week,morning,all-year,12.18250000000,R1,1,MUS$2010/PJ,2040 +heat,all-week,morning,all-year,18.33140000000,R2,1,MUS$2010/PJ,2040 CO2f,all-week,morning,all-year,0.27280000000,R1,1,MUS$2010/kt,2040 CO2f,all-week,morning,all-year,0.27280000000,R2,1,MUS$2010/kt,2040 -electricity,all-week,afternoon,all-year,35.99960000000,R1,2,MUS$2010/PJ,2040 -electricity,all-week,afternoon,all-year,35.99960000000,R2,2,MUS$2010/PJ,2040 +electricity,all-week,afternoon,all-year,23.96280000000,R1,2,MUS$2010/PJ,2040 +electricity,all-week,afternoon,all-year,30.01270000000,R2,2,MUS$2010/PJ,2040 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2040 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2040 -heat,all-week,afternoon,all-year,20.44320000000,R1,2,MUS$2010/PJ,2040 -heat,all-week,afternoon,all-year,20.44320000000,R2,2,MUS$2010/PJ,2040 +heat,all-week,afternoon,all-year,12.18250000000,R1,2,MUS$2010/PJ,2040 +heat,all-week,afternoon,all-year,18.33140000000,R2,2,MUS$2010/PJ,2040 CO2f,all-week,afternoon,all-year,0.27280000000,R1,2,MUS$2010/kt,2040 CO2f,all-week,afternoon,all-year,0.27280000000,R2,2,MUS$2010/kt,2040 -electricity,all-week,early-peak,all-year,35.99960000000,R1,3,MUS$2010/PJ,2040 -electricity,all-week,early-peak,all-year,35.99960000000,R2,3,MUS$2010/PJ,2040 +electricity,all-week,early-peak,all-year,23.96280000000,R1,3,MUS$2010/PJ,2040 +electricity,all-week,early-peak,all-year,30.01270000000,R2,3,MUS$2010/PJ,2040 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2040 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2040 -heat,all-week,early-peak,all-year,20.44320000000,R1,3,MUS$2010/PJ,2040 -heat,all-week,early-peak,all-year,20.44320000000,R2,3,MUS$2010/PJ,2040 +heat,all-week,early-peak,all-year,12.18250000000,R1,3,MUS$2010/PJ,2040 +heat,all-week,early-peak,all-year,18.33140000000,R2,3,MUS$2010/PJ,2040 CO2f,all-week,early-peak,all-year,0.27280000000,R1,3,MUS$2010/kt,2040 CO2f,all-week,early-peak,all-year,0.27280000000,R2,3,MUS$2010/kt,2040 -electricity,all-week,late-peak,all-year,35.99960000000,R1,4,MUS$2010/PJ,2040 -electricity,all-week,late-peak,all-year,35.99960000000,R2,4,MUS$2010/PJ,2040 +electricity,all-week,late-peak,all-year,23.96280000000,R1,4,MUS$2010/PJ,2040 +electricity,all-week,late-peak,all-year,30.01270000000,R2,4,MUS$2010/PJ,2040 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2040 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2040 -heat,all-week,late-peak,all-year,20.44320000000,R1,4,MUS$2010/PJ,2040 -heat,all-week,late-peak,all-year,20.44320000000,R2,4,MUS$2010/PJ,2040 +heat,all-week,late-peak,all-year,12.18250000000,R1,4,MUS$2010/PJ,2040 +heat,all-week,late-peak,all-year,18.33140000000,R2,4,MUS$2010/PJ,2040 CO2f,all-week,late-peak,all-year,0.27280000000,R1,4,MUS$2010/kt,2040 CO2f,all-week,late-peak,all-year,0.27280000000,R2,4,MUS$2010/kt,2040 -electricity,all-week,evening,all-year,35.99960000000,R1,5,MUS$2010/PJ,2040 -electricity,all-week,evening,all-year,35.99960000000,R2,5,MUS$2010/PJ,2040 +electricity,all-week,evening,all-year,23.96280000000,R1,5,MUS$2010/PJ,2040 +electricity,all-week,evening,all-year,30.01270000000,R2,5,MUS$2010/PJ,2040 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2040 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2040 -heat,all-week,evening,all-year,20.44320000000,R1,5,MUS$2010/PJ,2040 -heat,all-week,evening,all-year,20.44320000000,R2,5,MUS$2010/PJ,2040 +heat,all-week,evening,all-year,12.18250000000,R1,5,MUS$2010/PJ,2040 +heat,all-week,evening,all-year,18.33140000000,R2,5,MUS$2010/PJ,2040 CO2f,all-week,evening,all-year,0.27280000000,R1,5,MUS$2010/kt,2040 CO2f,all-week,evening,all-year,0.27280000000,R2,5,MUS$2010/kt,2040 -electricity,all-week,night,all-year,35.99960000000,R1,0,MUS$2010/PJ,2045 -electricity,all-week,night,all-year,35.99960000000,R2,0,MUS$2010/PJ,2045 +electricity,all-week,night,all-year,25.61540000000,R1,0,MUS$2010/PJ,2045 +electricity,all-week,night,all-year,35.53370000000,R2,0,MUS$2010/PJ,2045 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2045 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2045 -heat,all-week,night,all-year,22.07200000000,R1,0,MUS$2010/PJ,2045 -heat,all-week,night,all-year,22.07200000000,R2,0,MUS$2010/PJ,2045 +heat,all-week,night,all-year,12.84360000000,R1,0,MUS$2010/PJ,2045 +heat,all-week,night,all-year,22.74000000000,R2,0,MUS$2010/PJ,2045 CO2f,all-week,night,all-year,0.35390000000,R1,0,MUS$2010/kt,2045 CO2f,all-week,night,all-year,0.35390000000,R2,0,MUS$2010/kt,2045 -electricity,all-week,morning,all-year,35.99960000000,R1,1,MUS$2010/PJ,2045 -electricity,all-week,morning,all-year,35.99960000000,R2,1,MUS$2010/PJ,2045 +electricity,all-week,morning,all-year,25.61540000000,R1,1,MUS$2010/PJ,2045 +electricity,all-week,morning,all-year,35.53370000000,R2,1,MUS$2010/PJ,2045 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2045 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2045 -heat,all-week,morning,all-year,22.07200000000,R1,1,MUS$2010/PJ,2045 -heat,all-week,morning,all-year,22.07200000000,R2,1,MUS$2010/PJ,2045 +heat,all-week,morning,all-year,12.84360000000,R1,1,MUS$2010/PJ,2045 +heat,all-week,morning,all-year,22.74000000000,R2,1,MUS$2010/PJ,2045 CO2f,all-week,morning,all-year,0.35390000000,R1,1,MUS$2010/kt,2045 CO2f,all-week,morning,all-year,0.35390000000,R2,1,MUS$2010/kt,2045 -electricity,all-week,afternoon,all-year,35.99960000000,R1,2,MUS$2010/PJ,2045 -electricity,all-week,afternoon,all-year,35.99960000000,R2,2,MUS$2010/PJ,2045 +electricity,all-week,afternoon,all-year,25.61540000000,R1,2,MUS$2010/PJ,2045 +electricity,all-week,afternoon,all-year,35.53370000000,R2,2,MUS$2010/PJ,2045 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2045 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2045 -heat,all-week,afternoon,all-year,22.07200000000,R1,2,MUS$2010/PJ,2045 -heat,all-week,afternoon,all-year,22.07200000000,R2,2,MUS$2010/PJ,2045 +heat,all-week,afternoon,all-year,12.84360000000,R1,2,MUS$2010/PJ,2045 +heat,all-week,afternoon,all-year,22.74000000000,R2,2,MUS$2010/PJ,2045 CO2f,all-week,afternoon,all-year,0.35390000000,R1,2,MUS$2010/kt,2045 CO2f,all-week,afternoon,all-year,0.35390000000,R2,2,MUS$2010/kt,2045 -electricity,all-week,early-peak,all-year,35.99960000000,R1,3,MUS$2010/PJ,2045 -electricity,all-week,early-peak,all-year,35.99960000000,R2,3,MUS$2010/PJ,2045 +electricity,all-week,early-peak,all-year,25.61540000000,R1,3,MUS$2010/PJ,2045 +electricity,all-week,early-peak,all-year,35.53370000000,R2,3,MUS$2010/PJ,2045 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2045 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2045 -heat,all-week,early-peak,all-year,22.07200000000,R1,3,MUS$2010/PJ,2045 -heat,all-week,early-peak,all-year,22.07200000000,R2,3,MUS$2010/PJ,2045 +heat,all-week,early-peak,all-year,12.84360000000,R1,3,MUS$2010/PJ,2045 +heat,all-week,early-peak,all-year,22.74000000000,R2,3,MUS$2010/PJ,2045 CO2f,all-week,early-peak,all-year,0.35390000000,R1,3,MUS$2010/kt,2045 CO2f,all-week,early-peak,all-year,0.35390000000,R2,3,MUS$2010/kt,2045 -electricity,all-week,late-peak,all-year,35.99960000000,R1,4,MUS$2010/PJ,2045 -electricity,all-week,late-peak,all-year,35.99960000000,R2,4,MUS$2010/PJ,2045 +electricity,all-week,late-peak,all-year,25.61540000000,R1,4,MUS$2010/PJ,2045 +electricity,all-week,late-peak,all-year,35.53370000000,R2,4,MUS$2010/PJ,2045 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2045 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2045 -heat,all-week,late-peak,all-year,22.07200000000,R1,4,MUS$2010/PJ,2045 -heat,all-week,late-peak,all-year,22.07200000000,R2,4,MUS$2010/PJ,2045 +heat,all-week,late-peak,all-year,12.84360000000,R1,4,MUS$2010/PJ,2045 +heat,all-week,late-peak,all-year,22.74000000000,R2,4,MUS$2010/PJ,2045 CO2f,all-week,late-peak,all-year,0.35390000000,R1,4,MUS$2010/kt,2045 CO2f,all-week,late-peak,all-year,0.35390000000,R2,4,MUS$2010/kt,2045 -electricity,all-week,evening,all-year,35.99960000000,R1,5,MUS$2010/PJ,2045 -electricity,all-week,evening,all-year,35.99960000000,R2,5,MUS$2010/PJ,2045 +electricity,all-week,evening,all-year,25.61540000000,R1,5,MUS$2010/PJ,2045 +electricity,all-week,evening,all-year,35.53370000000,R2,5,MUS$2010/PJ,2045 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2045 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2045 -heat,all-week,evening,all-year,22.07200000000,R1,5,MUS$2010/PJ,2045 -heat,all-week,evening,all-year,22.07200000000,R2,5,MUS$2010/PJ,2045 +heat,all-week,evening,all-year,12.84360000000,R1,5,MUS$2010/PJ,2045 +heat,all-week,evening,all-year,22.74000000000,R2,5,MUS$2010/PJ,2045 CO2f,all-week,evening,all-year,0.35390000000,R1,5,MUS$2010/kt,2045 CO2f,all-week,evening,all-year,0.35390000000,R2,5,MUS$2010/kt,2045 -electricity,all-week,night,all-year,35.99960000000,R1,0,MUS$2010/PJ,2050 -electricity,all-week,night,all-year,35.99960000000,R2,0,MUS$2010/PJ,2050 +electricity,all-week,night,all-year,26.90080000000,R1,0,MUS$2010/PJ,2050 +electricity,all-week,night,all-year,41.05480000000,R2,0,MUS$2010/PJ,2050 gas,all-week,night,all-year,2.55000000000,R1,0,MUS$2010/PJ,2050 gas,all-week,night,all-year,2.55000000000,R2,0,MUS$2010/PJ,2050 -heat,all-week,night,all-year,23.92260000000,R1,0,MUS$2010/PJ,2050 -heat,all-week,night,all-year,23.92260000000,R2,0,MUS$2010/PJ,2050 +heat,all-week,night,all-year,13.35770000000,R1,0,MUS$2010/PJ,2050 +heat,all-week,night,all-year,27.33660000000,R2,0,MUS$2010/PJ,2050 CO2f,all-week,night,all-year,0.43510000000,R1,0,MUS$2010/kt,2050 CO2f,all-week,night,all-year,0.43510000000,R2,0,MUS$2010/kt,2050 -electricity,all-week,morning,all-year,35.99960000000,R1,1,MUS$2010/PJ,2050 -electricity,all-week,morning,all-year,35.99960000000,R2,1,MUS$2010/PJ,2050 +electricity,all-week,morning,all-year,26.90080000000,R1,1,MUS$2010/PJ,2050 +electricity,all-week,morning,all-year,41.05480000000,R2,1,MUS$2010/PJ,2050 gas,all-week,morning,all-year,2.55000000000,R1,1,MUS$2010/PJ,2050 gas,all-week,morning,all-year,2.55000000000,R2,1,MUS$2010/PJ,2050 -heat,all-week,morning,all-year,23.92260000000,R1,1,MUS$2010/PJ,2050 -heat,all-week,morning,all-year,23.92260000000,R2,1,MUS$2010/PJ,2050 +heat,all-week,morning,all-year,13.35770000000,R1,1,MUS$2010/PJ,2050 +heat,all-week,morning,all-year,27.33660000000,R2,1,MUS$2010/PJ,2050 CO2f,all-week,morning,all-year,0.43510000000,R1,1,MUS$2010/kt,2050 CO2f,all-week,morning,all-year,0.43510000000,R2,1,MUS$2010/kt,2050 -electricity,all-week,afternoon,all-year,35.99960000000,R1,2,MUS$2010/PJ,2050 -electricity,all-week,afternoon,all-year,35.99960000000,R2,2,MUS$2010/PJ,2050 +electricity,all-week,afternoon,all-year,26.90080000000,R1,2,MUS$2010/PJ,2050 +electricity,all-week,afternoon,all-year,41.05480000000,R2,2,MUS$2010/PJ,2050 gas,all-week,afternoon,all-year,2.55000000000,R1,2,MUS$2010/PJ,2050 gas,all-week,afternoon,all-year,2.55000000000,R2,2,MUS$2010/PJ,2050 -heat,all-week,afternoon,all-year,23.92260000000,R1,2,MUS$2010/PJ,2050 -heat,all-week,afternoon,all-year,23.92260000000,R2,2,MUS$2010/PJ,2050 +heat,all-week,afternoon,all-year,13.35770000000,R1,2,MUS$2010/PJ,2050 +heat,all-week,afternoon,all-year,27.33660000000,R2,2,MUS$2010/PJ,2050 CO2f,all-week,afternoon,all-year,0.43510000000,R1,2,MUS$2010/kt,2050 CO2f,all-week,afternoon,all-year,0.43510000000,R2,2,MUS$2010/kt,2050 -electricity,all-week,early-peak,all-year,35.99960000000,R1,3,MUS$2010/PJ,2050 -electricity,all-week,early-peak,all-year,35.99960000000,R2,3,MUS$2010/PJ,2050 +electricity,all-week,early-peak,all-year,26.90080000000,R1,3,MUS$2010/PJ,2050 +electricity,all-week,early-peak,all-year,41.05480000000,R2,3,MUS$2010/PJ,2050 gas,all-week,early-peak,all-year,2.55000000000,R1,3,MUS$2010/PJ,2050 gas,all-week,early-peak,all-year,2.55000000000,R2,3,MUS$2010/PJ,2050 -heat,all-week,early-peak,all-year,23.92260000000,R1,3,MUS$2010/PJ,2050 -heat,all-week,early-peak,all-year,23.92260000000,R2,3,MUS$2010/PJ,2050 +heat,all-week,early-peak,all-year,13.35770000000,R1,3,MUS$2010/PJ,2050 +heat,all-week,early-peak,all-year,27.33660000000,R2,3,MUS$2010/PJ,2050 CO2f,all-week,early-peak,all-year,0.43510000000,R1,3,MUS$2010/kt,2050 CO2f,all-week,early-peak,all-year,0.43510000000,R2,3,MUS$2010/kt,2050 -electricity,all-week,late-peak,all-year,35.99960000000,R1,4,MUS$2010/PJ,2050 -electricity,all-week,late-peak,all-year,35.99960000000,R2,4,MUS$2010/PJ,2050 +electricity,all-week,late-peak,all-year,26.90080000000,R1,4,MUS$2010/PJ,2050 +electricity,all-week,late-peak,all-year,41.05480000000,R2,4,MUS$2010/PJ,2050 gas,all-week,late-peak,all-year,2.55000000000,R1,4,MUS$2010/PJ,2050 gas,all-week,late-peak,all-year,2.55000000000,R2,4,MUS$2010/PJ,2050 -heat,all-week,late-peak,all-year,23.92260000000,R1,4,MUS$2010/PJ,2050 -heat,all-week,late-peak,all-year,23.92260000000,R2,4,MUS$2010/PJ,2050 +heat,all-week,late-peak,all-year,13.35770000000,R1,4,MUS$2010/PJ,2050 +heat,all-week,late-peak,all-year,27.33660000000,R2,4,MUS$2010/PJ,2050 CO2f,all-week,late-peak,all-year,0.43510000000,R1,4,MUS$2010/kt,2050 CO2f,all-week,late-peak,all-year,0.43510000000,R2,4,MUS$2010/kt,2050 -electricity,all-week,evening,all-year,35.99960000000,R1,5,MUS$2010/PJ,2050 -electricity,all-week,evening,all-year,35.99960000000,R2,5,MUS$2010/PJ,2050 +electricity,all-week,evening,all-year,26.90080000000,R1,5,MUS$2010/PJ,2050 +electricity,all-week,evening,all-year,41.05480000000,R2,5,MUS$2010/PJ,2050 gas,all-week,evening,all-year,2.55000000000,R1,5,MUS$2010/PJ,2050 gas,all-week,evening,all-year,2.55000000000,R2,5,MUS$2010/PJ,2050 -heat,all-week,evening,all-year,23.92260000000,R1,5,MUS$2010/PJ,2050 -heat,all-week,evening,all-year,23.92260000000,R2,5,MUS$2010/PJ,2050 +heat,all-week,evening,all-year,13.35770000000,R1,5,MUS$2010/PJ,2050 +heat,all-week,evening,all-year,27.33660000000,R2,5,MUS$2010/PJ,2050 CO2f,all-week,evening,all-year,0.43510000000,R1,5,MUS$2010/kt,2050 CO2f,all-week,evening,all-year,0.43510000000,R2,5,MUS$2010/kt,2050 diff --git a/docs/tutorial-code/min-max-timeslice-constraints/1-min-constraint/Results/Power_Supply.csv b/docs/tutorial-code/min-max-timeslice-constraints/1-min-constraint/Results/Power_Supply.csv index b3263484d..b19777c40 100644 --- a/docs/tutorial-code/min-max-timeslice-constraints/1-min-constraint/Results/Power_Supply.csv +++ b/docs/tutorial-code/min-max-timeslice-constraints/1-min-constraint/Results/Power_Supply.csv @@ -1,4 +1,16 @@ asset,comm_usage,commodity,day,hour,installed,month,region,supply,technology,timeslice,units_prices,year +0,10,electricity,all-week,night,2020,all-year,R1,0.03330000000,gasCCGT,0,MUS$2010/PJ,2020 +0,6,CO2f,all-week,night,2020,all-year,R1,3.05570000000,gasCCGT,0,MUS$2010/kt,2020 +0,10,electricity,all-week,morning,2020,all-year,R1,0.06670000000,gasCCGT,1,MUS$2010/PJ,2020 +0,6,CO2f,all-week,morning,2020,all-year,R1,6.11130000000,gasCCGT,1,MUS$2010/kt,2020 +0,10,electricity,all-week,afternoon,2020,all-year,R1,0.10000000000,gasCCGT,2,MUS$2010/PJ,2020 +0,6,CO2f,all-week,afternoon,2020,all-year,R1,9.16700000000,gasCCGT,2,MUS$2010/kt,2020 +0,10,electricity,all-week,early-peak,2020,all-year,R1,0.06670000000,gasCCGT,3,MUS$2010/PJ,2020 +0,6,CO2f,all-week,early-peak,2020,all-year,R1,6.11130000000,gasCCGT,3,MUS$2010/kt,2020 +0,10,electricity,all-week,late-peak,2020,all-year,R1,0.13330000000,gasCCGT,4,MUS$2010/PJ,2020 +0,6,CO2f,all-week,late-peak,2020,all-year,R1,12.22270000000,gasCCGT,4,MUS$2010/kt,2020 +0,10,electricity,all-week,evening,2020,all-year,R1,0.16670000000,gasCCGT,5,MUS$2010/PJ,2020 +0,6,CO2f,all-week,evening,2020,all-year,R1,15.27830000000,gasCCGT,5,MUS$2010/kt,2020 0,10,electricity,all-week,night,2020,all-year,R1,0.05560000000,gasCCGT,0,MUS$2010/PJ,2025 1,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2025 0,6,CO2f,all-week,night,2020,all-year,R1,5.09280000000,gasCCGT,0,MUS$2010/kt,2025 diff --git a/docs/tutorial-code/min-max-timeslice-constraints/2-max-constraint/Results/Power_Supply.csv b/docs/tutorial-code/min-max-timeslice-constraints/2-max-constraint/Results/Power_Supply.csv index 18b2e5327..7adbe90b2 100644 --- a/docs/tutorial-code/min-max-timeslice-constraints/2-max-constraint/Results/Power_Supply.csv +++ b/docs/tutorial-code/min-max-timeslice-constraints/2-max-constraint/Results/Power_Supply.csv @@ -1,4 +1,12 @@ asset,comm_usage,commodity,day,hour,installed,month,region,supply,technology,timeslice,units_prices,year +0,10,electricity,all-week,night,2020,all-year,R1,0.03330000000,gasCCGT,0,MUS$2010/PJ,2020 +0,6,CO2f,all-week,night,2020,all-year,R1,3.05570000000,gasCCGT,0,MUS$2010/kt,2020 +0,10,electricity,all-week,morning,2020,all-year,R1,0.06670000000,gasCCGT,1,MUS$2010/PJ,2020 +0,6,CO2f,all-week,morning,2020,all-year,R1,6.11130000000,gasCCGT,1,MUS$2010/kt,2020 +0,10,electricity,all-week,afternoon,2020,all-year,R1,0.10000000000,gasCCGT,2,MUS$2010/PJ,2020 +0,6,CO2f,all-week,afternoon,2020,all-year,R1,9.16700000000,gasCCGT,2,MUS$2010/kt,2020 +0,10,electricity,all-week,early-peak,2020,all-year,R1,0.06670000000,gasCCGT,3,MUS$2010/PJ,2020 +0,6,CO2f,all-week,early-peak,2020,all-year,R1,6.11130000000,gasCCGT,3,MUS$2010/kt,2020 0,10,electricity,all-week,night,2020,all-year,R1,0.05210000000,gasCCGT,0,MUS$2010/PJ,2025 1,10,electricity,all-week,night,2025,all-year,R1,0.37010000000,windturbine,0,MUS$2010/PJ,2025 0,6,CO2f,all-week,night,2020,all-year,R1,4.77840000000,gasCCGT,0,MUS$2010/kt,2025 diff --git a/src/muse/constraints.py b/src/muse/constraints.py index e62663374..84d8ef6f1 100644 --- a/src/muse/constraints.py +++ b/src/muse/constraints.py @@ -1021,8 +1021,8 @@ class ScipyAdapter: >>> capacity = reduce_assets(assets.capacity, coords=("region", "technology")) >>> market_demand = 0.8 * maximum_production( ... technologies, - ... assets.capacity.sel(year=2025).groupby("technology").sum("asset"), - ... ).rename(technology="asset") + ... assets.capacity, + ... ).sel(year=2025) >>> costs = search * np.arange(np.prod(search.shape)).reshape(search.shape) >>> constraint = cs.max_capacity_expansion( ... market_demand, capacity.sel(year=[2020, 2025]), search, technologies) diff --git a/src/muse/quantities.py b/src/muse/quantities.py index 11f197af9..8878d0e85 100644 --- a/src/muse/quantities.py +++ b/src/muse/quantities.py @@ -43,73 +43,53 @@ def supply( input commodities). """ from muse.commodities import CommodityUsage, check_usage, is_pollutant + from muse.utilities import broadcast_techs + + assert "asset" not in demand.dims + assert "asset" in capacity.dims + # Maximum and minimum production for each asset maxprod = maximum_production( technologies, capacity, timeslice_level=timeslice_level ) minprod = minimum_production( technologies, capacity, timeslice_level=timeslice_level ) - size = np.array(maxprod.region).size - # in presence of trade demand needs to map maxprod dst_region - if ( - "region" in demand.dims - and "region" in maxprod.coords - and "dst_region" not in maxprod.dims - and size == 1 - ): - demand = demand.sel(region=maxprod.region) - prodsum = set(demand.dims).difference(maxprod.dims) - demsum = set(maxprod.dims).difference(demand.dims) - expanded_demand = (demand * maxprod / maxprod.sum(demsum)).fillna(0) - - elif ( - "region" in demand.dims - and "region" in maxprod.coords - and "dst_region" not in maxprod.dims - and size > 1 - ): - prodsum = set(demand.dims).difference(maxprod.dims) - demsum = set(maxprod.dims).difference(demand.dims) - expanded_demand = (demand * maxprod / maxprod.sum(demsum)).fillna(0) - - elif ( - "region" in demand.dims - and "region" in maxprod.coords - and "dst_region" in maxprod.dims - ): + + # Split commodity-level demands over assets in proportion to maxprod + if len(set(maxprod.region.values.flatten())) == 1: + # Single region models + if "region" in demand.dims: + demand = demand.sel(region=maxprod.region) + share_by_asset = maxprod / maxprod.sum("asset") + demand_by_asset = (demand * share_by_asset).fillna(0) + + elif "dst_region" in maxprod.dims: + # Trade models demand = demand.rename(region="dst_region") - prodsum = {"timeslice"} - demsum = {"asset"} - expanded_demand = (demand * maxprod / maxprod.sum(demsum)).fillna(0) + total_maxprod_by_dst_region = maxprod.groupby("dst_region").sum(dim="asset") + share_by_asset = maxprod / total_maxprod_by_dst_region + demand_by_asset = (demand * share_by_asset).fillna(0) + # TODO: Haven't verified that this is correct - to examine in the future else: - prodsum = set(demand.dims).difference(maxprod.dims) - demsum = set(maxprod.dims).difference(demand.dims) - expanded_demand = (demand * maxprod / maxprod.sum(demsum)).fillna(0) - - expanded_maxprod = ( - maxprod - * demand - / broadcast_timeslice(demand.sum(prodsum), level=timeslice_level) - ).fillna(0) - expanded_minprod = ( - minprod - * demand - / broadcast_timeslice(demand.sum(prodsum), level=timeslice_level) - ).fillna(0) - expanded_demand = expanded_demand.reindex_like(maxprod) - expanded_minprod = expanded_minprod.reindex_like(maxprod) - - result = expanded_demand.where( - expanded_demand <= expanded_maxprod, expanded_maxprod - ) - result = result.where(result >= expanded_minprod, expanded_minprod) - - # add production of environmental pollutants + # Multi-region models + demand = broadcast_techs(demand, maxprod, installed_as_year=False) + total_maxprod_by_region = maxprod.groupby("region").sum(dim="asset") + share_by_asset = maxprod / broadcast_techs( + total_maxprod_by_region, maxprod, installed_as_year=False + ) + demand_by_asset = (demand * share_by_asset).fillna(0) + + # Supply is equal to demand, bounded between minprod and maxprod + assert "asset" in demand_by_asset.dims + result = np.minimum(demand_by_asset, maxprod) + result = np.maximum(result, minprod) + + # Add production of environmental pollutants env = is_pollutant(technologies.comm_usage) result[{"commodity": env}] = emission( - result, technologies.fixed_outputs, timeslice_level=timeslice_level + result, technologies, timeslice_level=timeslice_level ).transpose(*result.dims) result[ {"commodity": ~check_usage(technologies.comm_usage, CommodityUsage.PRODUCT)} @@ -120,34 +100,35 @@ def supply( def emission( production: xr.DataArray, - fixed_outputs: xr.DataArray, + technologies: xr.Dataset, timeslice_level: str | None = None, ): """Computes emission from current products. - Emissions are computed as `sum(product) * fixed_outputs`. - Arguments: - production: Produced goods. Only those with non-environmental products are used - when computing emissions. - fixed_outputs: factor relating total production to emissions. For convenience, - this can also be a `technologies` dataset containing `fixed_output`. + production: Commodity-level production for a series of assets. + technologies: `technologies` dataset containing `fixed_output`. timeslice_level: the desired timeslice level of the result (e.g. "hour", "day") Return: A data array containing emissions (and only emissions). """ - from muse.commodities import is_enduse, is_pollutant + from muse.commodities import is_pollutant from muse.utilities import broadcast_techs - # just in case we are passed a technologies dataset, like in other functions - fixed_outputs = getattr(fixed_outputs, "fixed_outputs", fixed_outputs) - fouts = broadcast_techs(fixed_outputs, production) - envs = is_pollutant(fouts.comm_usage) - enduses = is_enduse(fouts.comm_usage) - return production.sel(commodity=enduses).sum("commodity") * broadcast_timeslice( - fouts.sel(commodity=envs), level=timeslice_level + assert "asset" in production.dims + + # Calculate the production amplitude of each asset + techs = broadcast_techs(technologies, production, installed_as_year=True) + prod_amplitude = production_amplitude(production, techs) + + # Calculate the production of environmental pollutants + # = prod_amplitude * fixed_outputs + envs = is_pollutant(techs.comm_usage) + envs_production = prod_amplitude * broadcast_timeslice( + techs.sel(commodity=envs).fixed_outputs, level=timeslice_level ) + return envs_production def consumption( @@ -268,7 +249,9 @@ def maximum_production( capacity, **{k: v for k, v in filters.items() if k in capacity.dims} ) btechs = broadcast_techs( - technologies[["fixed_outputs", "utilization_factor"]], capa + technologies[["fixed_outputs", "utilization_factor"]], + capa, + installed_as_year=True, ) ftechs = filter_input( btechs, **{k: v for k, v in filters.items() if k in btechs.dims} @@ -317,7 +300,7 @@ def capacity_in_use( techs = technologies[["fixed_outputs", "utilization_factor"]] assert isinstance(techs, xr.Dataset) - btechs = broadcast_techs(techs, prod) + btechs = broadcast_techs(techs, prod, installed_as_year=True) ftechs = filter_input( btechs, **{k: v for k, v in filters.items() if k in technologies.dims} ) @@ -386,7 +369,9 @@ def minimum_production( return broadcast_timeslice(xr.zeros_like(capa), level=timeslice_level) btechs = broadcast_techs( - technologies[["fixed_outputs", "minimum_service_factor"]], capa + technologies[["fixed_outputs", "minimum_service_factor"]], + capa, + installed_as_year=True, ) ftechs = filter_input( btechs, **{k: v for k, v in filters.items() if k in btechs.dims} diff --git a/src/muse/sectors/sector.py b/src/muse/sectors/sector.py index 0bce7c2fb..71a8e0de0 100644 --- a/src/muse/sectors/sector.py +++ b/src/muse/sectors/sector.py @@ -312,9 +312,12 @@ def market_variables(self, market: xr.Dataset, technologies: xr.Dataset) -> Any: timeslice_level=self.timeslice_level, ) + # Select technology data for each asset + # Each asset uses the technology data from the year it was installed + technodata = broadcast_techs(technologies, supply, installed_as_year=True) + # Calculate LCOE # We select data for the second year, which corresponds to the investment year - technodata = broadcast_techs(technologies, supply) lcoe = levelized_cost_of_energy( prices=market.prices.sel(region=supply.region).isel(year=1), technologies=technodata, diff --git a/src/muse/utilities.py b/src/muse/utilities.py index ffbf96a5e..40b93b0ea 100644 --- a/src/muse/utilities.py +++ b/src/muse/utilities.py @@ -182,9 +182,7 @@ def operation(x): def broadcast_techs( technologies: xr.Dataset | xr.DataArray, template: xr.DataArray | xr.Dataset, - interpolation: str = "linear", installed_as_year: bool = True, - **kwargs, ) -> xr.Dataset | xr.DataArray: """Broadcasts technologies to the shape of template in given dimension. @@ -200,14 +198,20 @@ def broadcast_techs( This function broadcast the first representation to the shape and coordinates of the second. + Note: this is not necessarily limited to `technology` datasets. For + example, it could also be used on a dataset of commodity prices to select prices + relevant to each asset (e.g. if assets exist in multiple regions). In this example, + installed_as_year should be set to False (see below). + Arguments: technologies: The dataset to broadcast template: the dataset or data-array to use as a template - interpolation: interpolation method used across `year` - installed_as_year: if the coordinate `installed` exists, then it is - applied to the `year` dimension of the technologies dataset - kwargs: further arguments are used initial filters over the - `technologies` dataset. + installed_as_year: True means that the "year" dimension in the technologies + dataset corresponds to the year that the asset was installed. Will commonly + be True for most technology parameters (e.g. var_par/fix_par are specified + the year that an asset is installed, and fixed for the lifetime of the + asset). If True, the technologies dataset must have data for every possible + "installed" year in the template. Example: Define the technology array: @@ -220,7 +224,8 @@ def broadcast_techs( ... ) This array contains a value for every combination of technology and region (e.g. - this could refer to the efficiency of each technology in each region). + this could refer to the efficiency of each technology in each region). For + simplicity, we are not including a "year" dimension in this example. Define the assets template: >>> assets = xr.DataArray( @@ -238,7 +243,7 @@ def broadcast_techs( We want to select the values from the technology array that correspond to each asset in the template. To do this, we perform `broadcast_techs` on `technologies` using `assets` as a template: - >>> broadcast_techs(technologies, assets) + >>> broadcast_techs(technologies, assets, installed_as_year=False) Size: 16B array([1, 5]) Coordinates: @@ -246,39 +251,35 @@ def broadcast_techs( region (asset) 0: - techs = techs.interp( - year=sorted(set(cast(Iterable, year.values))), method=interpolation - ) - if installed_as_year and "installed" in names: - techs = techs.rename(year="installed") - + # Reshape the technology array to match the template second_sel = {n: template[n] for n in template.coords if n in techs.dims} - return techs.sel(second_sel) diff --git a/tests/conftest.py b/tests/conftest.py index 6289525a7..60f6d7aed 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -386,13 +386,12 @@ def _stock( from muse.utilities import broadcast_techs n_assets = 10 - ymin, ymax = min(coords["year"]), max(coords["year"]) + 1 # Create assets asset_coords = { "technology": ("asset", choice(coords["technology"], n_assets, replace=True)), "region": ("asset", choice(coords["region"], n_assets, replace=True)), - "installed": ("asset", choice(range(ymin, ymax), n_assets)), + "installed": ("asset", choice(coords["year"], n_assets)), } assets = Dataset(coords=asset_coords) @@ -408,7 +407,7 @@ def _stock( # Create capacity dataset result = assets.copy() - result["year"] = "year", [ymin, ymax] + result["year"] = "year", coords["year"] result["capacity"] = ("asset", "year"), capacity return result @@ -443,23 +442,23 @@ def create_fake_capacity(n: int, technologies: Dataset) -> DataArray: from numpy.random import choice, rand from xarray import Dataset - n = 20 - baseyear = int(technologies.year.min()) + years = technologies.year techs = choice(technologies.technology.values, 5) regions = choice(technologies.region.values, 5) + data = Dataset() data["year"] = "year", technologies.year.values - data["installed"] = "asset", choice(range(baseyear, baseyear + 5), n) - data["technology"] = "asset", choice(techs, len(data.installed)) - data["region"] = "asset", choice(regions, len(data.installed)) + data["installed"] = "asset", choice(years, n) + data["technology"] = "asset", choice(techs, n) + data["region"] = "asset", choice(regions, n) data = data.set_coords(("installed", "technology", "region")) - data["capacity"] = ("year", "asset"), rand(len(data.year), len(data.asset)) + data["capacity"] = ("year", "asset"), rand(len(years), n) return data.capacity @fixture def capacity(technologies: Dataset) -> DataArray: - return create_fake_capacity(50, technologies) + return create_fake_capacity(20, technologies) @fixture diff --git a/tests/example_outputs/default_timeslice/Results/Power_Supply.csv b/tests/example_outputs/default_timeslice/Results/Power_Supply.csv index a23fbe686..01dc5b535 100644 --- a/tests/example_outputs/default_timeslice/Results/Power_Supply.csv +++ b/tests/example_outputs/default_timeslice/Results/Power_Supply.csv @@ -1,133 +1,133 @@ asset,comm_usage,commodity,day,hour,installed,month,region,supply,technology,timeslice,units_prices,year -0,10,electricity,all-week,night,2020,all-year,R1,0.05560000000,gasCCGT,0,MUS$2010/PJ,2025 -1,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2025 -0,6,CO2f,all-week,night,2020,all-year,R1,5.09280000000,gasCCGT,0,MUS$2010/kt,2025 -0,10,electricity,all-week,morning,2020,all-year,R1,0.08330000000,gasCCGT,1,MUS$2010/PJ,2025 -1,10,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2025 -0,6,CO2f,all-week,morning,2020,all-year,R1,7.63920000000,gasCCGT,1,MUS$2010/kt,2025 -0,10,electricity,all-week,afternoon,2020,all-year,R1,0.05560000000,gasCCGT,2,MUS$2010/PJ,2025 -1,10,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2025 -0,6,CO2f,all-week,afternoon,2020,all-year,R1,5.09280000000,gasCCGT,2,MUS$2010/kt,2025 -0,10,electricity,all-week,early-peak,2020,all-year,R1,0.08330000000,gasCCGT,3,MUS$2010/PJ,2025 -1,10,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2025 -0,6,CO2f,all-week,early-peak,2020,all-year,R1,7.63920000000,gasCCGT,3,MUS$2010/kt,2025 -0,10,electricity,all-week,late-peak,2020,all-year,R1,0.16670000000,gasCCGT,4,MUS$2010/PJ,2025 -1,10,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2025 -0,6,CO2f,all-week,late-peak,2020,all-year,R1,15.27830000000,gasCCGT,4,MUS$2010/kt,2025 -0,10,electricity,all-week,evening,2020,all-year,R1,0.11110000000,gasCCGT,5,MUS$2010/PJ,2025 -1,10,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2025 -0,6,CO2f,all-week,evening,2020,all-year,R1,10.18560000000,gasCCGT,5,MUS$2010/kt,2025 -0,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2030 -1,10,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2030 -0,10,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2030 -1,10,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2030 -0,10,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2030 -1,10,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2030 -0,10,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2030 -1,10,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2030 -0,10,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2030 -1,10,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2030 -0,10,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2030 -1,10,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2030 -0,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2035 -1,10,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2035 -2,10,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2035 -0,10,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2035 -1,10,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2035 -2,10,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2035 -0,10,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2035 -1,10,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2035 -2,10,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2035 -0,10,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2035 -1,10,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2035 -2,10,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2035 -0,10,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2035 -1,10,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2035 -2,10,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2035 -0,10,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2035 -1,10,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2035 -2,10,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2035 -0,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2040 -1,10,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2040 -2,10,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2040 -3,10,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2040 -0,10,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2040 -1,10,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2040 -2,10,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2040 -3,10,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2040 -0,10,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2040 -1,10,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2040 -2,10,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2040 -3,10,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2040 -0,10,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2040 -1,10,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2040 -2,10,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2040 -3,10,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2040 -0,10,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2040 -1,10,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2040 -2,10,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2040 -3,10,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2040 -0,10,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2040 -1,10,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2040 -2,10,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2040 -3,10,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2040 -0,10,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2045 -1,10,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2045 -2,10,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 -3,10,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 -4,10,electricity,all-week,night,2045,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 -0,10,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2045 -1,10,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2045 -2,10,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 -3,10,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 -4,10,electricity,all-week,morning,2045,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 -0,10,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2045 -1,10,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2045 -2,10,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 -3,10,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 -4,10,electricity,all-week,afternoon,2045,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 -0,10,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2045 -1,10,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2045 -2,10,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 -3,10,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 -4,10,electricity,all-week,early-peak,2045,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 -0,10,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2045 -1,10,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2045 -2,10,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 -3,10,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 -4,10,electricity,all-week,late-peak,2045,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 -0,10,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2045 -1,10,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2045 -2,10,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 -3,10,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 -4,10,electricity,all-week,evening,2045,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 -0,10,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2050 -1,10,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 -2,10,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 -3,10,electricity,all-week,night,2045,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 -4,10,electricity,all-week,night,2050,all-year,R1,0.50000000000,windturbine,0,MUS$2010/PJ,2050 -0,10,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2050 -1,10,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 -2,10,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 -3,10,electricity,all-week,morning,2045,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 -4,10,electricity,all-week,morning,2050,all-year,R1,0.75000000000,windturbine,1,MUS$2010/PJ,2050 -0,10,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2050 -1,10,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 -2,10,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 -3,10,electricity,all-week,afternoon,2045,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 -4,10,electricity,all-week,afternoon,2050,all-year,R1,0.50000000000,windturbine,2,MUS$2010/PJ,2050 -0,10,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2050 -1,10,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 -2,10,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 -3,10,electricity,all-week,early-peak,2045,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 -4,10,electricity,all-week,early-peak,2050,all-year,R1,0.75000000000,windturbine,3,MUS$2010/PJ,2050 -0,10,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2050 -1,10,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 -2,10,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 -3,10,electricity,all-week,late-peak,2045,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 -4,10,electricity,all-week,late-peak,2050,all-year,R1,1.50000000000,windturbine,4,MUS$2010/PJ,2050 -0,10,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2050 -1,10,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 -2,10,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 -3,10,electricity,all-week,evening,2045,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 -4,10,electricity,all-week,evening,2050,all-year,R1,1.00000000000,windturbine,5,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2020,all-year,R1,0.05560000000,gasCCGT,0,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,night,2020,all-year,R1,5.09280000000,gasCCGT,0,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2020,all-year,R1,0.08330000000,gasCCGT,1,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,morning,2020,all-year,R1,7.63920000000,gasCCGT,1,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2020,all-year,R1,0.05560000000,gasCCGT,2,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,afternoon,2020,all-year,R1,5.09280000000,gasCCGT,2,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2020,all-year,R1,0.08330000000,gasCCGT,3,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,early-peak,2020,all-year,R1,7.63920000000,gasCCGT,3,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2020,all-year,R1,0.16670000000,gasCCGT,4,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,late-peak,2020,all-year,R1,15.27830000000,gasCCGT,4,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2020,all-year,R1,0.11110000000,gasCCGT,5,MUS$2010/PJ,2025 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2025 +0,CommodityUsage.ENVIRONMENTAL|PRODUCT,CO2f,all-week,evening,2020,all-year,R1,10.18560000000,gasCCGT,5,MUS$2010/kt,2025 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2030 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2030 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2035 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2035 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2035 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2040 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2040 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2040 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2040 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2025,all-year,R1,0.36670000000,windturbine,0,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2045,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2025,all-year,R1,0.55000000000,windturbine,1,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2045,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2025,all-year,R1,0.36670000000,windturbine,2,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2045,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2025,all-year,R1,0.55000000000,windturbine,3,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2045,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2025,all-year,R1,1.10000000000,windturbine,4,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2045,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2025,all-year,R1,0.73330000000,windturbine,5,MUS$2010/PJ,2045 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2045 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2045,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2045 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2030,all-year,R1,0.30000000000,windturbine,0,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2035,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2040,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2045,all-year,R1,0.13330000000,windturbine,0,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,night,2050,all-year,R1,0.50000000000,windturbine,0,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2030,all-year,R1,0.45000000000,windturbine,1,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2035,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2040,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2045,all-year,R1,0.20000000000,windturbine,1,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,morning,2050,all-year,R1,0.75000000000,windturbine,1,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2030,all-year,R1,0.30000000000,windturbine,2,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2035,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2040,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2045,all-year,R1,0.13330000000,windturbine,2,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,afternoon,2050,all-year,R1,0.50000000000,windturbine,2,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2030,all-year,R1,0.45000000000,windturbine,3,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2035,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2040,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2045,all-year,R1,0.20000000000,windturbine,3,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,early-peak,2050,all-year,R1,0.75000000000,windturbine,3,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2030,all-year,R1,0.90000000000,windturbine,4,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2035,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2040,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2045,all-year,R1,0.40000000000,windturbine,4,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,late-peak,2050,all-year,R1,1.50000000000,windturbine,4,MUS$2010/PJ,2050 +0,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2030,all-year,R1,0.60000000000,windturbine,5,MUS$2010/PJ,2050 +1,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2035,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 +2,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2040,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 +3,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2045,all-year,R1,0.26670000000,windturbine,5,MUS$2010/PJ,2050 +4,CommodityUsage.ENERGY|PRODUCT,electricity,all-week,evening,2050,all-year,R1,1.00000000000,windturbine,5,MUS$2010/PJ,2050 diff --git a/tests/example_outputs/trade/Results/MCACapacity.csv b/tests/example_outputs/trade/Results/MCACapacity.csv index b2d5f949d..dc0f12b09 100644 --- a/tests/example_outputs/trade/Results/MCACapacity.csv +++ b/tests/example_outputs/trade/Results/MCACapacity.csv @@ -6,21 +6,21 @@ A1,200.00000000000,R2,2010,R2,power,gasCCGT,agent,2020 A1,3000.00000000000,R1,2010,R1,gas,gassupply1,agent,2020 A1,1200.00000000000,R2,2010,R2,gas,gassupply1,agent,2020 A1,563.34600000000,R1,2010,R1,residential,gasboiler,retrofit,2025 -A1,256.52070000000,R1,2025,R1,residential,gasboiler,retrofit,2025 +A1,256.52070000000,R1,2025,R1,residential,heatpump,retrofit,2025 A1,192.00000000000,R1,2010,R1,power,gasCCGT,agent,2025 A1,140.00000000000,R2,2010,R2,power,gasCCGT,agent,2025 A1,463.93200000000,R1,2010,R1,residential,gasboiler,retrofit,2030 -A1,256.52070000000,R1,2025,R1,residential,gasboiler,retrofit,2030 -A1,173.94730000000,R1,2030,R1,residential,gasboiler,retrofit,2030 +A1,256.52070000000,R1,2025,R1,residential,heatpump,retrofit,2030 +A1,173.94730000000,R1,2030,R1,residential,heatpump,retrofit,2030 A1,24.50000000000,R2,2010,R2,residential,gasboiler,retrofit,2030 A1,153.60000000000,R1,2010,R1,power,gasCCGT,agent,2030 A1,98.00000000000,R2,2010,R2,power,gasCCGT,agent,2030 A1,2100.00000000000,R1,2010,R1,gas,gassupply1,agent,2030 A1,700.00000000000,R2,2010,R2,gas,gassupply1,agent,2030 A1,394.34220000000,R1,2010,R1,residential,gasboiler,retrofit,2035 -A1,173.94730000000,R1,2030,R1,residential,gasboiler,retrofit,2035 -A1,344.74380000000,R1,2035,R1,residential,gasboiler,retrofit,2035 +A1,173.94730000000,R1,2030,R1,residential,heatpump,retrofit,2035 +A1,344.74380000000,R1,2035,R1,residential,heatpump,retrofit,2035 A1,20.82500000000,R2,2010,R2,residential,gasboiler,retrofit,2035 -A1,18.78330000000,R2,2035,R2,residential,gasboiler,retrofit,2035 +A1,18.78330000000,R2,2035,R2,residential,heatpump,retrofit,2035 A1,122.88000000000,R1,2010,R1,power,gasCCGT,agent,2035 A1,68.60000000000,R2,2010,R2,power,gasCCGT,agent,2035 diff --git a/tests/example_outputs/trade/Results/MCAPrices.csv b/tests/example_outputs/trade/Results/MCAPrices.csv index 20cfa264b..0e114684c 100644 --- a/tests/example_outputs/trade/Results/MCAPrices.csv +++ b/tests/example_outputs/trade/Results/MCAPrices.csv @@ -23,111 +23,111 @@ electricity,all-week,evening,all-year,13.98150000000,R1,5,MUS$2010/PJ,2020 electricity,all-week,evening,all-year,19.13890000000,R2,5,MUS$2010/PJ,2020 gas,all-week,evening,all-year,4.71680000000,R1,5,MUS$2010/PJ,2020 gas,all-week,evening,all-year,4.71680000000,R2,5,MUS$2010/PJ,2020 -electricity,all-week,night,all-year,150.90120000000,R1,0,MUS$2010/PJ,2025 -electricity,all-week,night,all-year,150.90120000000,R2,0,MUS$2010/PJ,2025 -gas,all-week,night,all-year,21.63640000000,R1,0,MUS$2010/PJ,2025 -gas,all-week,night,all-year,151.33800000000,R2,0,MUS$2010/PJ,2025 -heat,all-week,night,all-year,21.45190000000,R1,0,MUS$2010/PJ,2025 -heat,all-week,night,all-year,213.58660000000,R2,0,MUS$2010/PJ,2025 -electricity,all-week,morning,all-year,150.90120000000,R1,1,MUS$2010/PJ,2025 -electricity,all-week,morning,all-year,150.90120000000,R2,1,MUS$2010/PJ,2025 -gas,all-week,morning,all-year,21.63640000000,R1,1,MUS$2010/PJ,2025 -gas,all-week,morning,all-year,151.33800000000,R2,1,MUS$2010/PJ,2025 -heat,all-week,morning,all-year,21.45190000000,R1,1,MUS$2010/PJ,2025 -heat,all-week,morning,all-year,213.58660000000,R2,1,MUS$2010/PJ,2025 -electricity,all-week,afternoon,all-year,150.90120000000,R1,2,MUS$2010/PJ,2025 -electricity,all-week,afternoon,all-year,150.90120000000,R2,2,MUS$2010/PJ,2025 -gas,all-week,afternoon,all-year,21.63640000000,R1,2,MUS$2010/PJ,2025 -gas,all-week,afternoon,all-year,151.33800000000,R2,2,MUS$2010/PJ,2025 -heat,all-week,afternoon,all-year,21.45190000000,R1,2,MUS$2010/PJ,2025 -heat,all-week,afternoon,all-year,213.58660000000,R2,2,MUS$2010/PJ,2025 -electricity,all-week,early-peak,all-year,150.90120000000,R1,3,MUS$2010/PJ,2025 -electricity,all-week,early-peak,all-year,150.90120000000,R2,3,MUS$2010/PJ,2025 -gas,all-week,early-peak,all-year,21.63640000000,R1,3,MUS$2010/PJ,2025 -gas,all-week,early-peak,all-year,151.33800000000,R2,3,MUS$2010/PJ,2025 -heat,all-week,early-peak,all-year,21.45190000000,R1,3,MUS$2010/PJ,2025 -heat,all-week,early-peak,all-year,213.58660000000,R2,3,MUS$2010/PJ,2025 -electricity,all-week,late-peak,all-year,150.90120000000,R1,4,MUS$2010/PJ,2025 -electricity,all-week,late-peak,all-year,150.90120000000,R2,4,MUS$2010/PJ,2025 -gas,all-week,late-peak,all-year,21.63640000000,R1,4,MUS$2010/PJ,2025 -gas,all-week,late-peak,all-year,151.33800000000,R2,4,MUS$2010/PJ,2025 -heat,all-week,late-peak,all-year,21.45190000000,R1,4,MUS$2010/PJ,2025 -heat,all-week,late-peak,all-year,213.58660000000,R2,4,MUS$2010/PJ,2025 -electricity,all-week,evening,all-year,150.90120000000,R1,5,MUS$2010/PJ,2025 -electricity,all-week,evening,all-year,150.90120000000,R2,5,MUS$2010/PJ,2025 -gas,all-week,evening,all-year,21.63640000000,R1,5,MUS$2010/PJ,2025 -gas,all-week,evening,all-year,151.33800000000,R2,5,MUS$2010/PJ,2025 -heat,all-week,evening,all-year,21.45190000000,R1,5,MUS$2010/PJ,2025 -heat,all-week,evening,all-year,213.58660000000,R2,5,MUS$2010/PJ,2025 -electricity,all-week,night,all-year,150.90120000000,R1,0,MUS$2010/PJ,2030 -electricity,all-week,night,all-year,150.90120000000,R2,0,MUS$2010/PJ,2030 -gas,all-week,night,all-year,29.89130000000,R1,0,MUS$2010/PJ,2030 -gas,all-week,night,all-year,200.49020000000,R2,0,MUS$2010/PJ,2030 -heat,all-week,night,all-year,31.04120000000,R1,0,MUS$2010/PJ,2030 -heat,all-week,night,all-year,297.19550000000,R2,0,MUS$2010/PJ,2030 -electricity,all-week,morning,all-year,150.90120000000,R1,1,MUS$2010/PJ,2030 -electricity,all-week,morning,all-year,150.90120000000,R2,1,MUS$2010/PJ,2030 -gas,all-week,morning,all-year,29.89130000000,R1,1,MUS$2010/PJ,2030 -gas,all-week,morning,all-year,200.49020000000,R2,1,MUS$2010/PJ,2030 -heat,all-week,morning,all-year,31.04120000000,R1,1,MUS$2010/PJ,2030 -heat,all-week,morning,all-year,297.19550000000,R2,1,MUS$2010/PJ,2030 -electricity,all-week,afternoon,all-year,150.90120000000,R1,2,MUS$2010/PJ,2030 -electricity,all-week,afternoon,all-year,150.90120000000,R2,2,MUS$2010/PJ,2030 -gas,all-week,afternoon,all-year,29.89130000000,R1,2,MUS$2010/PJ,2030 -gas,all-week,afternoon,all-year,200.49020000000,R2,2,MUS$2010/PJ,2030 -heat,all-week,afternoon,all-year,31.04120000000,R1,2,MUS$2010/PJ,2030 -heat,all-week,afternoon,all-year,297.19550000000,R2,2,MUS$2010/PJ,2030 -electricity,all-week,early-peak,all-year,150.90120000000,R1,3,MUS$2010/PJ,2030 -electricity,all-week,early-peak,all-year,150.90120000000,R2,3,MUS$2010/PJ,2030 -gas,all-week,early-peak,all-year,29.89130000000,R1,3,MUS$2010/PJ,2030 -gas,all-week,early-peak,all-year,200.49020000000,R2,3,MUS$2010/PJ,2030 -heat,all-week,early-peak,all-year,31.04120000000,R1,3,MUS$2010/PJ,2030 -heat,all-week,early-peak,all-year,297.19550000000,R2,3,MUS$2010/PJ,2030 -electricity,all-week,late-peak,all-year,150.90120000000,R1,4,MUS$2010/PJ,2030 -electricity,all-week,late-peak,all-year,150.90120000000,R2,4,MUS$2010/PJ,2030 -gas,all-week,late-peak,all-year,29.89130000000,R1,4,MUS$2010/PJ,2030 -gas,all-week,late-peak,all-year,200.49020000000,R2,4,MUS$2010/PJ,2030 -heat,all-week,late-peak,all-year,31.04120000000,R1,4,MUS$2010/PJ,2030 -heat,all-week,late-peak,all-year,297.19550000000,R2,4,MUS$2010/PJ,2030 -electricity,all-week,evening,all-year,150.90120000000,R1,5,MUS$2010/PJ,2030 -electricity,all-week,evening,all-year,150.90120000000,R2,5,MUS$2010/PJ,2030 -gas,all-week,evening,all-year,29.89130000000,R1,5,MUS$2010/PJ,2030 -gas,all-week,evening,all-year,200.49020000000,R2,5,MUS$2010/PJ,2030 -heat,all-week,evening,all-year,31.04120000000,R1,5,MUS$2010/PJ,2030 -heat,all-week,evening,all-year,297.19550000000,R2,5,MUS$2010/PJ,2030 -electricity,all-week,night,all-year,946.04720000000,R1,0,MUS$2010/PJ,2035 -electricity,all-week,night,all-year,946.04720000000,R2,0,MUS$2010/PJ,2035 -gas,all-week,night,all-year,42.27370000000,R1,0,MUS$2010/PJ,2035 -gas,all-week,night,all-year,262.75220000000,R2,0,MUS$2010/PJ,2035 -heat,all-week,night,all-year,45.45620000000,R1,0,MUS$2010/PJ,2035 -heat,all-week,night,all-year,390.26630000000,R2,0,MUS$2010/PJ,2035 -electricity,all-week,morning,all-year,946.04720000000,R1,1,MUS$2010/PJ,2035 -electricity,all-week,morning,all-year,946.04720000000,R2,1,MUS$2010/PJ,2035 -gas,all-week,morning,all-year,42.27370000000,R1,1,MUS$2010/PJ,2035 -gas,all-week,morning,all-year,262.75220000000,R2,1,MUS$2010/PJ,2035 -heat,all-week,morning,all-year,45.45620000000,R1,1,MUS$2010/PJ,2035 -heat,all-week,morning,all-year,390.26630000000,R2,1,MUS$2010/PJ,2035 -electricity,all-week,afternoon,all-year,946.04720000000,R1,2,MUS$2010/PJ,2035 -electricity,all-week,afternoon,all-year,946.04720000000,R2,2,MUS$2010/PJ,2035 -gas,all-week,afternoon,all-year,42.27370000000,R1,2,MUS$2010/PJ,2035 -gas,all-week,afternoon,all-year,262.75220000000,R2,2,MUS$2010/PJ,2035 -heat,all-week,afternoon,all-year,45.45620000000,R1,2,MUS$2010/PJ,2035 -heat,all-week,afternoon,all-year,390.26630000000,R2,2,MUS$2010/PJ,2035 -electricity,all-week,early-peak,all-year,946.04720000000,R1,3,MUS$2010/PJ,2035 -electricity,all-week,early-peak,all-year,946.04720000000,R2,3,MUS$2010/PJ,2035 -gas,all-week,early-peak,all-year,42.27370000000,R1,3,MUS$2010/PJ,2035 -gas,all-week,early-peak,all-year,262.75220000000,R2,3,MUS$2010/PJ,2035 -heat,all-week,early-peak,all-year,45.45620000000,R1,3,MUS$2010/PJ,2035 -heat,all-week,early-peak,all-year,390.26630000000,R2,3,MUS$2010/PJ,2035 -electricity,all-week,late-peak,all-year,946.04720000000,R1,4,MUS$2010/PJ,2035 -electricity,all-week,late-peak,all-year,946.04720000000,R2,4,MUS$2010/PJ,2035 -gas,all-week,late-peak,all-year,42.27370000000,R1,4,MUS$2010/PJ,2035 -gas,all-week,late-peak,all-year,262.75220000000,R2,4,MUS$2010/PJ,2035 -heat,all-week,late-peak,all-year,45.45620000000,R1,4,MUS$2010/PJ,2035 -heat,all-week,late-peak,all-year,390.26630000000,R2,4,MUS$2010/PJ,2035 -electricity,all-week,evening,all-year,946.04720000000,R1,5,MUS$2010/PJ,2035 -electricity,all-week,evening,all-year,946.04720000000,R2,5,MUS$2010/PJ,2035 -gas,all-week,evening,all-year,42.27370000000,R1,5,MUS$2010/PJ,2035 -gas,all-week,evening,all-year,262.75220000000,R2,5,MUS$2010/PJ,2035 -heat,all-week,evening,all-year,45.45620000000,R1,5,MUS$2010/PJ,2035 -heat,all-week,evening,all-year,390.26630000000,R2,5,MUS$2010/PJ,2035 +electricity,all-week,night,all-year,29.38390000000,R1,0,MUS$2010/PJ,2025 +electricity,all-week,night,all-year,25.66110000000,R2,0,MUS$2010/PJ,2025 +gas,all-week,night,all-year,14.62380000000,R1,0,MUS$2010/PJ,2025 +gas,all-week,night,all-year,112.12040000000,R2,0,MUS$2010/PJ,2025 +heat,all-week,night,all-year,13.62950000000,R1,0,MUS$2010/PJ,2025 +heat,all-week,night,all-year,108.50970000000,R2,0,MUS$2010/PJ,2025 +electricity,all-week,morning,all-year,29.38390000000,R1,1,MUS$2010/PJ,2025 +electricity,all-week,morning,all-year,25.66110000000,R2,1,MUS$2010/PJ,2025 +gas,all-week,morning,all-year,14.62380000000,R1,1,MUS$2010/PJ,2025 +gas,all-week,morning,all-year,112.12040000000,R2,1,MUS$2010/PJ,2025 +heat,all-week,morning,all-year,13.62950000000,R1,1,MUS$2010/PJ,2025 +heat,all-week,morning,all-year,108.50970000000,R2,1,MUS$2010/PJ,2025 +electricity,all-week,afternoon,all-year,29.38390000000,R1,2,MUS$2010/PJ,2025 +electricity,all-week,afternoon,all-year,25.66110000000,R2,2,MUS$2010/PJ,2025 +gas,all-week,afternoon,all-year,14.62380000000,R1,2,MUS$2010/PJ,2025 +gas,all-week,afternoon,all-year,112.12040000000,R2,2,MUS$2010/PJ,2025 +heat,all-week,afternoon,all-year,13.62950000000,R1,2,MUS$2010/PJ,2025 +heat,all-week,afternoon,all-year,108.50970000000,R2,2,MUS$2010/PJ,2025 +electricity,all-week,early-peak,all-year,29.38390000000,R1,3,MUS$2010/PJ,2025 +electricity,all-week,early-peak,all-year,25.66110000000,R2,3,MUS$2010/PJ,2025 +gas,all-week,early-peak,all-year,14.62380000000,R1,3,MUS$2010/PJ,2025 +gas,all-week,early-peak,all-year,112.12040000000,R2,3,MUS$2010/PJ,2025 +heat,all-week,early-peak,all-year,13.62950000000,R1,3,MUS$2010/PJ,2025 +heat,all-week,early-peak,all-year,108.50970000000,R2,3,MUS$2010/PJ,2025 +electricity,all-week,late-peak,all-year,29.38390000000,R1,4,MUS$2010/PJ,2025 +electricity,all-week,late-peak,all-year,25.66110000000,R2,4,MUS$2010/PJ,2025 +gas,all-week,late-peak,all-year,14.62380000000,R1,4,MUS$2010/PJ,2025 +gas,all-week,late-peak,all-year,112.12040000000,R2,4,MUS$2010/PJ,2025 +heat,all-week,late-peak,all-year,13.62950000000,R1,4,MUS$2010/PJ,2025 +heat,all-week,late-peak,all-year,108.50970000000,R2,4,MUS$2010/PJ,2025 +electricity,all-week,evening,all-year,29.38390000000,R1,5,MUS$2010/PJ,2025 +electricity,all-week,evening,all-year,25.66110000000,R2,5,MUS$2010/PJ,2025 +gas,all-week,evening,all-year,14.62380000000,R1,5,MUS$2010/PJ,2025 +gas,all-week,evening,all-year,112.12040000000,R2,5,MUS$2010/PJ,2025 +heat,all-week,evening,all-year,13.62950000000,R1,5,MUS$2010/PJ,2025 +heat,all-week,evening,all-year,108.50970000000,R2,5,MUS$2010/PJ,2025 +electricity,all-week,night,all-year,33.82120000000,R1,0,MUS$2010/PJ,2030 +electricity,all-week,night,all-year,31.00090000000,R2,0,MUS$2010/PJ,2030 +gas,all-week,night,all-year,20.52280000000,R1,0,MUS$2010/PJ,2030 +gas,all-week,night,all-year,161.27260000000,R2,0,MUS$2010/PJ,2030 +heat,all-week,night,all-year,18.24100000000,R1,0,MUS$2010/PJ,2030 +heat,all-week,night,all-year,192.11860000000,R2,0,MUS$2010/PJ,2030 +electricity,all-week,morning,all-year,33.82120000000,R1,1,MUS$2010/PJ,2030 +electricity,all-week,morning,all-year,31.00090000000,R2,1,MUS$2010/PJ,2030 +gas,all-week,morning,all-year,20.52280000000,R1,1,MUS$2010/PJ,2030 +gas,all-week,morning,all-year,161.27260000000,R2,1,MUS$2010/PJ,2030 +heat,all-week,morning,all-year,18.24100000000,R1,1,MUS$2010/PJ,2030 +heat,all-week,morning,all-year,192.11860000000,R2,1,MUS$2010/PJ,2030 +electricity,all-week,afternoon,all-year,33.82120000000,R1,2,MUS$2010/PJ,2030 +electricity,all-week,afternoon,all-year,31.00090000000,R2,2,MUS$2010/PJ,2030 +gas,all-week,afternoon,all-year,20.52280000000,R1,2,MUS$2010/PJ,2030 +gas,all-week,afternoon,all-year,161.27260000000,R2,2,MUS$2010/PJ,2030 +heat,all-week,afternoon,all-year,18.24100000000,R1,2,MUS$2010/PJ,2030 +heat,all-week,afternoon,all-year,192.11860000000,R2,2,MUS$2010/PJ,2030 +electricity,all-week,early-peak,all-year,33.82120000000,R1,3,MUS$2010/PJ,2030 +electricity,all-week,early-peak,all-year,31.00090000000,R2,3,MUS$2010/PJ,2030 +gas,all-week,early-peak,all-year,20.52280000000,R1,3,MUS$2010/PJ,2030 +gas,all-week,early-peak,all-year,161.27260000000,R2,3,MUS$2010/PJ,2030 +heat,all-week,early-peak,all-year,18.24100000000,R1,3,MUS$2010/PJ,2030 +heat,all-week,early-peak,all-year,192.11860000000,R2,3,MUS$2010/PJ,2030 +electricity,all-week,late-peak,all-year,33.82120000000,R1,4,MUS$2010/PJ,2030 +electricity,all-week,late-peak,all-year,31.00090000000,R2,4,MUS$2010/PJ,2030 +gas,all-week,late-peak,all-year,20.52280000000,R1,4,MUS$2010/PJ,2030 +gas,all-week,late-peak,all-year,161.27260000000,R2,4,MUS$2010/PJ,2030 +heat,all-week,late-peak,all-year,18.24100000000,R1,4,MUS$2010/PJ,2030 +heat,all-week,late-peak,all-year,192.11860000000,R2,4,MUS$2010/PJ,2030 +electricity,all-week,evening,all-year,33.82120000000,R1,5,MUS$2010/PJ,2030 +electricity,all-week,evening,all-year,31.00090000000,R2,5,MUS$2010/PJ,2030 +gas,all-week,evening,all-year,20.52280000000,R1,5,MUS$2010/PJ,2030 +gas,all-week,evening,all-year,161.27260000000,R2,5,MUS$2010/PJ,2030 +heat,all-week,evening,all-year,18.24100000000,R1,5,MUS$2010/PJ,2030 +heat,all-week,evening,all-year,192.11860000000,R2,5,MUS$2010/PJ,2030 +electricity,all-week,night,all-year,41.37870000000,R1,0,MUS$2010/PJ,2035 +electricity,all-week,night,all-year,363.84600000000,R2,0,MUS$2010/PJ,2035 +gas,all-week,night,all-year,26.31110000000,R1,0,MUS$2010/PJ,2035 +gas,all-week,night,all-year,209.37450000000,R2,0,MUS$2010/PJ,2035 +heat,all-week,night,all-year,22.07810000000,R1,0,MUS$2010/PJ,2035 +heat,all-week,night,all-year,193.44360000000,R2,0,MUS$2010/PJ,2035 +electricity,all-week,morning,all-year,41.37870000000,R1,1,MUS$2010/PJ,2035 +electricity,all-week,morning,all-year,363.84600000000,R2,1,MUS$2010/PJ,2035 +gas,all-week,morning,all-year,26.31110000000,R1,1,MUS$2010/PJ,2035 +gas,all-week,morning,all-year,209.37450000000,R2,1,MUS$2010/PJ,2035 +heat,all-week,morning,all-year,22.07810000000,R1,1,MUS$2010/PJ,2035 +heat,all-week,morning,all-year,193.44360000000,R2,1,MUS$2010/PJ,2035 +electricity,all-week,afternoon,all-year,41.37870000000,R1,2,MUS$2010/PJ,2035 +electricity,all-week,afternoon,all-year,363.84600000000,R2,2,MUS$2010/PJ,2035 +gas,all-week,afternoon,all-year,26.31110000000,R1,2,MUS$2010/PJ,2035 +gas,all-week,afternoon,all-year,209.37450000000,R2,2,MUS$2010/PJ,2035 +heat,all-week,afternoon,all-year,22.07810000000,R1,2,MUS$2010/PJ,2035 +heat,all-week,afternoon,all-year,193.44360000000,R2,2,MUS$2010/PJ,2035 +electricity,all-week,early-peak,all-year,41.37870000000,R1,3,MUS$2010/PJ,2035 +electricity,all-week,early-peak,all-year,363.84600000000,R2,3,MUS$2010/PJ,2035 +gas,all-week,early-peak,all-year,26.31110000000,R1,3,MUS$2010/PJ,2035 +gas,all-week,early-peak,all-year,209.37450000000,R2,3,MUS$2010/PJ,2035 +heat,all-week,early-peak,all-year,22.07810000000,R1,3,MUS$2010/PJ,2035 +heat,all-week,early-peak,all-year,193.44360000000,R2,3,MUS$2010/PJ,2035 +electricity,all-week,late-peak,all-year,41.37870000000,R1,4,MUS$2010/PJ,2035 +electricity,all-week,late-peak,all-year,363.84600000000,R2,4,MUS$2010/PJ,2035 +gas,all-week,late-peak,all-year,26.31110000000,R1,4,MUS$2010/PJ,2035 +gas,all-week,late-peak,all-year,209.37450000000,R2,4,MUS$2010/PJ,2035 +heat,all-week,late-peak,all-year,22.07810000000,R1,4,MUS$2010/PJ,2035 +heat,all-week,late-peak,all-year,193.44360000000,R2,4,MUS$2010/PJ,2035 +electricity,all-week,evening,all-year,41.37870000000,R1,5,MUS$2010/PJ,2035 +electricity,all-week,evening,all-year,363.84600000000,R2,5,MUS$2010/PJ,2035 +gas,all-week,evening,all-year,26.31110000000,R1,5,MUS$2010/PJ,2035 +gas,all-week,evening,all-year,209.37450000000,R2,5,MUS$2010/PJ,2035 +heat,all-week,evening,all-year,22.07810000000,R1,5,MUS$2010/PJ,2035 +heat,all-week,evening,all-year,193.44360000000,R2,5,MUS$2010/PJ,2035 diff --git a/tests/test_constraints.py b/tests/test_constraints.py index 2103edea2..4293262c4 100644 --- a/tests/test_constraints.py +++ b/tests/test_constraints.py @@ -43,13 +43,6 @@ def costs(search_space): return search_space * np.arange(np.prod(shape)).reshape(shape) -@fixture -def lpcosts(technologies, costs): - from muse.constraints import lp_costs - - return lp_costs(technologies, costs=costs) - - @fixture def assets(residential): return next(a.assets for a in residential.agents) @@ -68,8 +61,26 @@ def market_demand(assets, technologies): return 0.8 * maximum_production( technologies, - assets.capacity.sel(year=CURRENT_YEAR).groupby("technology").sum("asset"), - ).rename(technology="asset") + assets.capacity, + ).sel(year=INVESTMENT_YEAR).groupby("technology").sum("asset").rename( + technology="asset" + ) + + +def test_fixtures(technologies, search_space, costs, assets, capacity, market_demand): + assert set(technologies.dims) == {"technology", "commodity"} + assert set(search_space.dims) == {"asset", "replacement"} + assert set(costs.dims) == {"asset", "replacement"} + assert set(assets.dims) == {"asset", "year"} + assert set(capacity.dims) == {"asset", "year"} + assert set(market_demand.dims) == {"asset", "commodity", "timeslice"} + + +@fixture +def lpcosts(technologies, costs): + from muse.constraints import lp_costs + + return lp_costs(technologies, costs=costs) @fixture diff --git a/tests/test_costs.py b/tests/test_costs.py index 1769cd286..49b5cee00 100644 --- a/tests/test_costs.py +++ b/tests/test_costs.py @@ -29,7 +29,7 @@ def _prices(market, demand_share): from muse.utilities import broadcast_techs prices = market.prices.sel(year=YEAR) - return broadcast_techs(prices, demand_share) + return broadcast_techs(prices, demand_share, installed_as_year=False) @fixture diff --git a/tests/test_demand_share.py b/tests/test_demand_share.py index 92ca11981..e210dbb0d 100644 --- a/tests/test_demand_share.py +++ b/tests/test_demand_share.py @@ -234,7 +234,7 @@ def test_new_retro_demand_share(_technologies, market, timeslice, stock): asia_market = _matching_market(_technologies, asia_stock.capacity) usa_market = _matching_market(_technologies, usa_stock.capacity) market = xr.concat((asia_market, usa_market), dim="region") - market.consumption.loc[{"year": 2031}] *= 2 + market.consumption.loc[{"year": 2030}] *= 2 # spoof some agents @dataclass @@ -288,7 +288,7 @@ def test_standard_demand_share(_technologies, timeslice, stock): asia_market = _matching_market(_technologies, asia_stock.capacity) usa_market = _matching_market(_technologies, usa_stock.capacity) market = xr.concat((asia_market, usa_market), dim="region") - market.consumption.loc[{"year": 2031}] *= 2 + market.consumption.loc[{"year": 2030}] *= 2 # spoof some agents @dataclass @@ -380,7 +380,7 @@ class Agent: assert (result.commodity == comm_usage.commodity).all() assert result.sel(commodity=~enduse).values == approx(0) assert result.sel(commodity=enduse).values == approx( - 0.5 * market.consumption.sel(commodity=enduse, year=2031).values + 0.5 * market.consumption.sel(commodity=enduse, year=2030).values ) diff --git a/tests/test_objectives.py b/tests/test_objectives.py index 8e0a71849..17e0b527d 100644 --- a/tests/test_objectives.py +++ b/tests/test_objectives.py @@ -21,7 +21,7 @@ def _prices(market, demand_share): from muse.utilities import broadcast_techs prices = market.prices.sel(year=YEAR) - return broadcast_techs(prices, demand_share) + return broadcast_techs(prices, demand_share, installed_as_year=False) def test_fixtures(_technologies, _demand, _prices): diff --git a/tests/test_quantities.py b/tests/test_quantities.py index 2659f17ea..2a5d0e8d6 100644 --- a/tests/test_quantities.py +++ b/tests/test_quantities.py @@ -1,8 +1,6 @@ -from typing import cast - import numpy as np import xarray as xr -from pytest import approx, fixture +from pytest import approx, fixture, mark @fixture @@ -20,43 +18,6 @@ def production( ) -def test_supply_enduse(technologies, capacity, timeslice): - """End-use part of supply.""" - from muse.commodities import is_enduse - from muse.quantities import maximum_production, supply - - production = maximum_production(technologies, capacity) - demand = production.sum("asset") + 1 - spl = supply(capacity, demand, technologies).where( - is_enduse(technologies.comm_usage), 0 - ) - assert (abs(spl - production) < 1e-12).all() - assert (spl.sum("asset") < demand).all() - - demand = production.sum("asset") * 0.7 - spl = supply(capacity, demand, technologies).where( - is_enduse(technologies.comm_usage), 0 - ) - assert (spl <= production + 1e-12).all() - assert ( - abs(spl.sum("asset") - demand.where(production.sum("asset") > 0, 0)) < 1e-12 - ).all() - - -def test_supply_emissions(technologies, capacity, timeslice): - """Emission part of supply.""" - from muse.commodities import is_enduse, is_pollutant - from muse.quantities import emission, maximum_production, supply - - production = maximum_production(technologies, capacity) - spl = supply(capacity, production.sum("asset") + 1, technologies) - msn = emission(spl.where(is_enduse(spl.comm_usage), 0), technologies.fixed_outputs) - actual, expected = xr.broadcast( - spl.sel(commodity=is_pollutant(spl.comm_usage)), msn - ) - assert actual.values == approx(expected.values) - - def test_consumption(technologies, production, market): from muse.quantities import consumption @@ -122,10 +83,15 @@ def test_production_aggregate_asset_view( assert prod.values == approx(fouts * ufact * expected.values) +@mark.xfail def test_production_agent_asset_view( capacity: xr.DataArray, technologies: xr.Dataset, timeslice ): - """Production when capacity has format of agent.assets.capacity.""" + """Production when capacity has format of agent.assets.capacity. + + TODO: not currently supported. Need to make maximum_production more generic so it + can handle capacity data without an "asset" dimension. + """ from muse.utilities import coords_to_multiindex, reduce_assets capacity = coords_to_multiindex(reduce_assets(capacity)).unstack("asset").fillna(0) @@ -161,21 +127,26 @@ def test_capacity_in_use(production: xr.DataArray, technologies: xr.Dataset): def test_emission(production: xr.DataArray, technologies: xr.Dataset): - from muse.commodities import is_enduse, is_pollutant + from muse.commodities import is_pollutant from muse.quantities import emission + em = emission(production, technologies) + + # Check that all environmental commodities are in the result envs = is_pollutant(technologies.comm_usage) - technologies = cast(xr.Dataset, technologies[["fixed_outputs"]]) - technologies.fixed_outputs[{"commodity": envs}] = fout = 1.5 - technologies.fixed_outputs[{"commodity": ~envs}] = 2 + assert em.commodity.isin(envs.commodity).all() - enduses = is_enduse(technologies.comm_usage.sel(commodity=production.commodity)) - production[{"commodity": enduses}] = prod = 0.5 - production[{"commodity": ~enduses}] = 5 + # Check that no non-environmental commodities are in the result + assert set(em.commodity.values) == set(envs.commodity[envs].values) - em = emission(production, technologies) - assert em.commodity.isin(envs.commodity).all() - assert em.values == approx(fout * enduses.sum().values * prod) + # If fixed_outputs for env commodities are zero, then emissions should be zero + techs = technologies.copy() + techs.fixed_outputs.loc[{"commodity": envs}] = 0 + em = emission(production, techs) + + # If production is zero, then emissions should be zero + em = emission(production * 0, technologies) + assert (em == 0).all() def test_min_production(technologies, capacity, timeslice): @@ -195,41 +166,65 @@ def test_min_production(technologies, capacity, timeslice): assert (production <= maximum_production(technologies, capacity)).all() -def test_supply_capped_by_min_service(technologies, capacity, timeslice): - """Test supply is capped by the minimum service.""" - from muse.commodities import CommodityUsage +def test_supply_single_region(technologies, capacity, production, timeslice): + from muse.commodities import is_enduse + from muse.quantities import supply + + # Select data for a single region + region = "USA" + technologies = technologies.sel(region=region) + capacity = capacity.where(capacity.region == region, drop=True) + production = production.where(production.region == region, drop=True) + + # Random demand within the bounds of the maximum production + demand = production.sum("asset") + demand = demand * np.random.rand(*demand.shape) + assert "region" not in demand.dims + + # Calculate supply + spl = supply(capacity, demand, technologies) + + # Total supply across assets should equal demand (for end-use commodities) + spl = spl.sum("asset") + enduses = is_enduse(technologies.comm_usage) + assert abs(spl.sel(commodity=enduses) - demand.sel(commodity=enduses)).sum() < 1e-5 + + +def test_supply_multi_region(technologies, capacity, production, timeslice): + from muse.commodities import is_enduse + from muse.quantities import supply + + # Random demand within the bounds of the maximum production + demand = production.groupby("region").sum("asset") + demand = demand * np.random.rand(*demand.shape) + + # Calculate supply + assert "region" in demand.dims + spl = supply(capacity, demand, technologies) + + # Total supply across assets within each region should equal demand + # (for end-use commodities) + spl = spl.groupby("region").sum("asset") + enduses = is_enduse(technologies.comm_usage) + assert abs(spl.sel(commodity=enduses) - demand.sel(commodity=enduses)).sum() < 1e-5 + + +def test_supply_with_min_service(technologies, capacity, production, timeslice): from muse.quantities import minimum_production, supply + # Calculate minimum production technologies["minimum_service_factor"] = 0.3 minprod = minimum_production(technologies, capacity) - # If minimum service factor is defined, then the minimum production is not zero - assert not (minprod == 0).all() + # Random demand within the bounds of the maximum production + demand = production.groupby("region").sum("asset") + demand = demand * np.random.rand(*demand.shape) - # And even if the demand is smaller than the minimum production, the supply - # should be equal to the minimum production - demand = minprod / 2 + # Calculate supply spl = supply(capacity, demand, technologies) - spl = spl.sel(commodity=spl.comm_usage == CommodityUsage.PRODUCT).sum( - ["year", "asset"] - ) - minprod = minprod.sel(commodity=minprod.comm_usage == CommodityUsage.PRODUCT).sum( - ["year", "asset"] - ) - assert (spl == approx(minprod)).all() - # But if there is not minimum service factor, the supply should be equal to the - # demand and should not be capped by the minimum production - del technologies["minimum_service_factor"] - spl = supply(capacity, demand, technologies) - spl = spl.sel(commodity=spl.comm_usage == CommodityUsage.PRODUCT).sum( - ["year", "asset"] - ) - demand = demand.sel(commodity=demand.comm_usage == CommodityUsage.PRODUCT).sum( - ["year", "asset"] - ) - assert (spl == approx(demand)).all() - assert (spl <= minprod).all() + # Supply should be greater than or equal to the minimum production + assert (spl >= minprod).all() def test_production_amplitude(production, technologies): diff --git a/tests/test_utilities.py b/tests/test_utilities.py index 4dd15af4d..cb557ae46 100644 --- a/tests/test_utilities.py +++ b/tests/test_utilities.py @@ -40,35 +40,22 @@ def test_reduce_assets_with_zero_size(capacity: xr.DataArray): assert (actual == x).all() -def test_broadcast_tech(technologies, capacity): +def test_broadcast_techs(technologies, capacity): from muse.utilities import broadcast_techs - regions = make_array(technologies.region) - commodities = make_array(technologies.commodity) - years = make_array(technologies.year) - techs = make_array(technologies.technology) - technologies["fixed_outputs"] = regions * commodities * years * techs + # Test with installed_as_year = True + result1 = broadcast_techs(technologies, capacity, installed_as_year=True) + assert set(result1.dims) == {"asset", "commodity"} + assert (result1.asset == capacity.asset).all() - actual = broadcast_techs(technologies.fixed_outputs, capacity) + # Test with installed_as_year = False + result2 = broadcast_techs(technologies, capacity, installed_as_year=False) + assert set(result2.dims) == {"asset", "commodity", "year"} + assert (result2.asset == capacity.asset).all() - assert set(actual.dims) == {"commodity", "asset"} - assert (actual.commodity == technologies.commodity).all() - assert (actual.asset == capacity.asset).all() - - for asset in capacity.asset: - region = regions.sel(region=asset.region) - year = years.interp(year=asset.installed, method="linear") - tech = techs.sel(technology=asset.technology) - expected = region * year * tech * commodities - assert actual.isel(asset=int(asset)).values == approx(expected.values) - - -def test_broadcast_tech_idempotent(technologies, capacity): - from muse.utilities import broadcast_techs - - first = broadcast_techs(technologies, capacity) - second = broadcast_techs(first, capacity) - assert (first == second).all() + # Template without "asset" dimensions (TODO: need to make the function stricter) + # with raises(AssertionError): + # broadcast_techs(technologies, technologies) def test_tupled_dimension_no_tupling():