From e46c710c462e53c824d6818b2aa63704a67434e1 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 15 Apr 2026 18:15:35 -0400 Subject: [PATCH 01/85] Add inputs for temperature-based natural gas price functionality --- inputs/fuelprices/ngreg_cdd.csv | 42 ++++++++ inputs/fuelprices/ngreg_hdd.csv | 42 ++++++++ ...emperature_price_regression_parameters.csv | 16 +++ inputs/zones/state_groups.csv | 98 +++++++++---------- 4 files changed, 149 insertions(+), 49 deletions(-) create mode 100644 inputs/fuelprices/ngreg_cdd.csv create mode 100644 inputs/fuelprices/ngreg_hdd.csv create mode 100644 inputs/fuelprices/temperature_price_regression_parameters.csv diff --git a/inputs/fuelprices/ngreg_cdd.csv b/inputs/fuelprices/ngreg_cdd.csv new file mode 100644 index 00000000..ffefb8b7 --- /dev/null +++ b/inputs/fuelprices/ngreg_cdd.csv @@ -0,0 +1,42 @@ +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,Mountain,California,Northwest,Southwest +2010,634,913,963,1095,2271,1974,2754,353,555,118,1016 +2011,553,840,858,1074,2260,1725,3112,377,605,128,1084 +2012,563,819,974,1221,2163,1760,2913,408,756,160,1172 +2013,540,685,689,892,2001,1438,2535,379,733,155,1090 +2014,420,600,609,812,2000,1491,2474,371,880,187,1066 +2015,556,809,729,941,2397,1717,2742,383,880,187,1100 +2016,625,891,958,1072,2404,1956,2882,387,766,162,1113 +2017,451,665,708,910,2247,1585,2718,399,870,185,1149 +2018,668,890,972,1134,2411,1928,2855,405,827,176,1167 +2019,536,787,832,951,2503,1886,2759,360,696,148,1036 +2020,645,848,831,964,2335,1636,2735,434,883,187,1247 +2021,604,837,911,1093,2226,1611,2644,408,857,182,1174 +2022,647,838,816,1050,2302,1728,2992,409,897,190,1176 +2023,518,683,713,1042,2258,1669,3117,381,686,145,1096 +2024,620,867,899,1046,2399,1859,3073,441,870,185,1268 +2025,609,845,851,1046,2400,1773,2901,404,843,179,1163 +2026,615,853,856,1051,2415,1781,2915,406,851,180,1168 +2027,621,860,861,1056,2430,1788,2928,408,857,182,1174 +2028,627,868,866,1061,2445,1796,2942,410,865,183,1180 +2029,633,876,871,1066,2460,1803,2955,412,871,185,1185 +2030,640,884,876,1071,2476,1811,2969,414,879,186,1191 +2031,646,892,881,1076,2491,1818,2982,416,886,188,1196 +2032,652,900,886,1081,2507,1826,2996,418,893,189,1202 +2033,659,908,890,1086,2522,1834,3010,420,900,191,1208 +2034,665,915,895,1092,2538,1841,3023,422,907,193,1213 +2035,671,923,900,1097,2553,1849,3037,424,914,194,1219 +2036,678,931,905,1102,2569,1857,3050,426,921,196,1224 +2037,684,939,910,1107,2585,1864,3064,428,929,197,1230 +2038,690,947,915,1112,2600,1872,3077,429,935,199,1236 +2039,697,955,920,1117,2616,1879,3091,432,943,200,1241 +2040,703,963,925,1122,2632,1887,3104,433,950,202,1247 +2041,710,971,930,1128,2648,1895,3118,435,957,203,1253 +2042,716,978,935,1133,2663,1902,3131,437,964,205,1258 +2043,722,986,940,1138,2679,1910,3145,439,972,206,1263 +2044,729,994,945,1143,2695,1918,3158,441,979,208,1269 +2045,735,1002,950,1148,2711,1925,3172,443,986,209,1274 +2046,741,1010,955,1153,2727,1933,3185,445,993,211,1279 +2047,748,1018,960,1159,2742,1940,3199,447,1001,212,1285 +2048,754,1026,965,1164,2758,1948,3212,449,1007,214,1290 +2049,760,1033,970,1169,2774,1956,3226,450,1015,215,1296 +2050,767,1041,975,1174,2790,1963,3239,452,1022,217,1302 diff --git a/inputs/fuelprices/ngreg_hdd.csv b/inputs/fuelprices/ngreg_hdd.csv new file mode 100644 index 00000000..c34ab1c2 --- /dev/null +++ b/inputs/fuelprices/ngreg_hdd.csv @@ -0,0 +1,42 @@ +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,Mountain,California,Northwest,Southwest +2010,5935,5539,6188,6570,3163,3954,2450,3572,1085,2542,1488 +2011,6113,5471,6173,6570,2564,3347,2113,3745,1143,2679,1559 +2012,5563,4960,5356,5520,2305,2880,1648,3219,1022,2395,1341 +2013,6425,5827,6623,7140,2736,3651,2325,3716,1007,2359,1547 +2014,6676,6190,7196,7309,2961,3935,2421,3345,830,1946,1393 +2015,6520,5762,6165,6093,2496,3224,2085,3245,868,2033,1351 +2016,5928,5338,5701,5792,2464,3095,1750,3261,908,2126,1358 +2017,6037,5318,5684,6004,2239,2837,1580,3229,954,2235,1344 +2018,6323,5769,6434,6975,2638,3479,2252,3395,949,2222,1414 +2019,6538,5736,6427,7082,2392,3181,2143,3748,1061,2485,1561 +2020,5822,5198,5855,6326,2263,3064,1812,3377,963,2255,1406 +2021,5799,5261,5747,6061,2366,3166,1911,3313,998,2339,1379 +2022,6019,5635,6344,6905,2523,3438,2200,3617,1007,2358,1506 +2023,5564,4954,5417,5929,2150,2826,1725,3612,1079,2528,1504 +2024,5643,4981,5306,5716,2271,3024,1844,3355,1002,2349,1397 +2025,5924,5319,5952,6383,2344,3161,1949,3442,984,2305,1434 +2026,5901,5298,5937,6376,2329,3148,1942,3438,982,2300,1432 +2027,5879,5277,5923,6369,2313,3136,1935,3434,980,2296,1430 +2028,5856,5256,5908,6362,2298,3123,1928,3429,978,2291,1428 +2029,5833,5235,5894,6355,2283,3111,1921,3424,976,2286,1426 +2030,5810,5214,5879,6348,2267,3098,1914,3419,974,2281,1424 +2031,5787,5193,5864,6341,2251,3086,1907,3414,972,2276,1422 +2032,5764,5172,5850,6334,2235,3073,1900,3409,969,2272,1420 +2033,5741,5151,5835,6327,2220,3060,1893,3404,967,2266,1418 +2034,5718,5130,5820,6319,2204,3048,1886,3399,965,2261,1416 +2035,5695,5109,5806,6312,2188,3035,1879,3394,963,2255,1414 +2036,5672,5088,5791,6304,2173,3022,1872,3390,961,2250,1411 +2037,5649,5068,5776,6297,2157,3009,1865,3385,958,2245,1410 +2038,5626,5047,5762,6289,2141,2996,1858,3380,956,2240,1408 +2039,5603,5026,5747,6282,2125,2984,1852,3375,954,2234,1406 +2040,5579,5005,5732,6274,2110,2971,1845,3371,951,2229,1404 +2041,5556,4984,5717,6267,2094,2958,1838,3366,949,2224,1402 +2042,5533,4963,5703,6259,2079,2945,1831,3362,947,2218,1400 +2043,5510,4943,5688,6252,2063,2933,1825,3357,944,2213,1398 +2044,5487,4922,5673,6244,2047,2920,1818,3353,942,2207,1396 +2045,5464,4901,5658,6236,2032,2907,1811,3349,940,2202,1394 +2046,5440,4880,5644,6229,2016,2894,1805,3344,937,2197,1392 +2047,5417,4859,5629,6221,2001,2881,1798,3339,935,2191,1391 +2048,5394,4838,5614,6213,1985,2869,1791,3335,933,2185,1389 +2049,5371,4818,5599,6206,1970,2856,1785,3330,931,2180,1387 +2050,5348,4797,5585,6198,1955,2843,1778,3326,928,2175,1385 diff --git a/inputs/fuelprices/temperature_price_regression_parameters.csv b/inputs/fuelprices/temperature_price_regression_parameters.csv new file mode 100644 index 00000000..07ff8216 --- /dev/null +++ b/inputs/fuelprices/temperature_price_regression_parameters.csv @@ -0,0 +1,16 @@ +param,California,East_North_Central,Mid_Atlantic,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central +beta_CDD,0.029955419816184874,0.009273029676323478,0.034168989940669595,0.02808685101852765,0.05016087006220876,0.03113169110507277,0.01833714773079821,0.019993641246852725,0.009769128154432507,0.011354004640771962 +beta_HDD,0.016189998751331494,0.009668446585110206,0.02339670417060943,0.011785458776188078,0.036444013521409746,0.020295239964422476,0.023361493418357915,0.015022466717320455,0.01500952612901044,0.013691461708366763 +alpha,-0.32759175628333126,-0.18073334231389543,-0.3833570790134586,-0.3837299102394554,-0.8440729782100966,-0.5616549759463285,-0.23397720735924327,-0.4389726994851281,-0.2728742940249005,-0.183069814435552 +alpha_JAN,0.1188653966963984,-0.18323358789954214,-0.157441514010407,0.044882153208837094,-0.009892965409497176,0.05386625737047042,-0.037962945275583165,0.22806871507527884,-0.35142990597325746,-0.06351564849014545 +alpha_FEB,0.09429256915589793,-0.12386574701114131,-0.19298319464851188,0.047975593037986486,-0.12187170743521963,0.028452262554705378,-0.042506909763055434,0.22075430159169868,-0.2788883964252641,-0.02595574612722446 +alpha_MAR,-0.02639687275132955,-0.15947661163315544,-0.29133192090853954,-0.08600413149004746,-0.3077830263008757,-0.08961483148876323,-0.09654393228909637,0.03887968803217114,-0.2682645398050715,-0.06972845618212845 +alpha_APR,-0.009347269480450263,-0.09878830787395856,-0.11360070589090893,-0.05978258303784015,-0.15917569349971386,-0.08097717188511774,-0.017925095362391424,0.0463157955649065,-0.15972253920209656,-0.02030838197505814 +alpha_MAY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +alpha_JUN,-0.06007924348183989,0.032843780841829096,-0.0007871091201897447,0.015456597855328071,0.1432866515568541,0.09755478389448288,-0.06762860298729731,-0.07917640092467358,0.04605928774608717,-0.056392184170450346 +alpha_JUL,-0.06300606042086834,0.04231557075836542,-0.09041423312849164,-0.00035469446949380713,0.039858565002846263,0.22380317927066215,-0.08161749058275741,0.000562262472602759,0.0700033963135873,-0.05718237221053294 +alpha_AUG,0.03626667524216953,0.09973116277893196,-0.06655127576521494,0.10419433197128676,0.08037877123022635,0.3188427272110293,-0.07797133920601348,0.1126348195605661,0.13362546181362614,-0.0073269294580643966 +alpha_SEP,0.07457050410656973,0.10788304240815527,-0.043180541739351055,0.15330969343045187,0.14446392377081146,0.29853585416152917,-0.06552367814495189,0.1211873827867778,0.12089337784678773,0.05067135093076723 +alpha_OCT,0.187941518779411,0.006446377989716331,-0.19212183198547847,0.0928807019225629,-0.03182419562835668,0.2104399593137229,-0.08235646938909581,0.20238221742988355,-0.018366513987214034,0.07189431859101025 +alpha_NOV,0.19164429927054244,-0.06056201778088331,-0.21066435269446251,0.09402219277128344,-0.1467382590048496,0.21268500189563244,-0.030180927081533224,0.26375254509563006,-0.15639407748114945,0.04699691120701671 +alpha_DEC,0.24301275028843886,-0.16877410828649025,-0.26567459921321634,0.10329937198038501,-0.10201875729720956,0.15983760810501105,-0.052682394994005954,0.3152203972492874,-0.3103674314816163,-0.05356123043512443 diff --git a/inputs/zones/state_groups.csv b/inputs/zones/state_groups.csv index e79e8eb2..68988778 100644 --- a/inputs/zones/state_groups.csv +++ b/inputs/zones/state_groups.csv @@ -1,49 +1,49 @@ -st,country,cendiv,usda_region,h2ptcreg -AL,USA,East_South_Central,southeast,Southeast -AR,USA,West_South_Central,delta-states,Delta -AZ,USA,Mountain,mountain,Southwest -CA,USA,Pacific,pacific,California -CO,USA,Mountain,mountain,Mountain -CT,USA,New_England,northeast,NewEngland -DE,USA,South_Atlantic,northeast,MidAtlantic -FL,USA,South_Atlantic,southeast,Florida -GA,USA,South_Atlantic,southeast,Southeast -IA,USA,West_North_Central,corn-belt,Midwest -ID,USA,Mountain,mountain,Northwest -IL,USA,East_North_Central,corn-belt,Midwest -IN,USA,East_North_Central,corn-belt,Midwest -KS,USA,West_North_Central,northern-plains,Plains -KY,USA,East_South_Central,appalachia,MidAtlantic -LA,USA,West_South_Central,delta-states,Delta -MA,USA,New_England,northeast,NewEngland -MD,USA,South_Atlantic,northeast,MidAtlantic -ME,USA,New_England,northeast,NewEngland -MI,USA,East_North_Central,lake-states,Midwest -MN,USA,West_North_Central,lake-states,Midwest -MO,USA,West_North_Central,corn-belt,Midwest -MS,USA,East_South_Central,delta-states,Delta -MT,USA,Mountain,mountain,Mountain -NC,USA,South_Atlantic,appalachia,Southeast -ND,USA,West_North_Central,northern-plains,Plains -NE,USA,West_North_Central,northern-plains,Plains -NH,USA,New_England,northeast,NewEngland -NJ,USA,Mid_Atlantic,northeast,MidAtlantic -NM,USA,Mountain,mountain,Southwest -NV,USA,Mountain,mountain,Mountain -NY,USA,Mid_Atlantic,northeast,NewYork -OH,USA,East_North_Central,corn-belt,MidAtlantic -OK,USA,West_South_Central,southern-plains,Plains -OR,USA,Pacific,pacific,Northwest -PA,USA,Mid_Atlantic,northeast,MidAtlantic -RI,USA,New_England,northeast,NewEngland -SC,USA,South_Atlantic,southeast,Southeast -SD,USA,West_North_Central,northern-plains,Plains -TN,USA,East_South_Central,appalachia,Southeast -TX,USA,West_South_Central,southern-plains,Texas -UT,USA,Mountain,mountain,Mountain -VA,USA,South_Atlantic,appalachia,MidAtlantic -VT,USA,New_England,northeast,NewEngland -WA,USA,Pacific,pacific,Northwest -WI,USA,East_North_Central,lake-states,Midwest -WV,USA,South_Atlantic,appalachia,MidAtlantic -WY,USA,Mountain,mountain,Mountain +st,country,cendiv,usda_region,h2ptcreg,ngreg +AL,USA,East_South_Central,southeast,Southeast,East_South_Central +AR,USA,West_South_Central,delta-states,Delta,West_South_Central +AZ,USA,Mountain,mountain,Southwest,Southwest +CA,USA,Pacific,pacific,California,California +CO,USA,Mountain,mountain,Mountain,Mountain +CT,USA,New_England,northeast,NewEngland,New_England +DE,USA,South_Atlantic,northeast,MidAtlantic,South_Atlantic +FL,USA,South_Atlantic,southeast,Florida,South_Atlantic +GA,USA,South_Atlantic,southeast,Southeast,South_Atlantic +IA,USA,West_North_Central,corn-belt,Midwest,West_North_Central +ID,USA,Mountain,mountain,Northwest,Mountain +IL,USA,East_North_Central,corn-belt,Midwest,East_North_Central +IN,USA,East_North_Central,corn-belt,Midwest,East_North_Central +KS,USA,West_North_Central,northern-plains,Plains,West_North_Central +KY,USA,East_South_Central,appalachia,MidAtlantic,East_South_Central +LA,USA,West_South_Central,delta-states,Delta,West_South_Central +MA,USA,New_England,northeast,NewEngland,New_England +MD,USA,South_Atlantic,northeast,MidAtlantic,South_Atlantic +ME,USA,New_England,northeast,NewEngland,New_England +MI,USA,East_North_Central,lake-states,Midwest,East_North_Central +MN,USA,West_North_Central,lake-states,Midwest,West_North_Central +MO,USA,West_North_Central,corn-belt,Midwest,West_North_Central +MS,USA,East_South_Central,delta-states,Delta,East_South_Central +MT,USA,Mountain,mountain,Mountain,Mountain +NC,USA,South_Atlantic,appalachia,Southeast,South_Atlantic +ND,USA,West_North_Central,northern-plains,Plains,West_North_Central +NE,USA,West_North_Central,northern-plains,Plains,West_North_Central +NH,USA,New_England,northeast,NewEngland,New_England +NJ,USA,Mid_Atlantic,northeast,MidAtlantic,Mid_Atlantic +NM,USA,Mountain,mountain,Southwest,Southwest +NV,USA,Mountain,mountain,Mountain,Mountain +NY,USA,Mid_Atlantic,northeast,NewYork,Mid_Atlantic +OH,USA,East_North_Central,corn-belt,MidAtlantic,East_North_Central +OK,USA,West_South_Central,southern-plains,Plains,West_South_Central +OR,USA,Pacific,pacific,Northwest,Northwest +PA,USA,Mid_Atlantic,northeast,MidAtlantic,Mid_Atlantic +RI,USA,New_England,northeast,NewEngland,New_England +SC,USA,South_Atlantic,southeast,Southeast,South_Atlantic +SD,USA,West_North_Central,northern-plains,Plains,West_North_Central +TN,USA,East_South_Central,appalachia,Southeast,East_South_Central +TX,USA,West_South_Central,southern-plains,Texas,West_South_Central +UT,USA,Mountain,mountain,Mountain,Mountain +VA,USA,South_Atlantic,appalachia,MidAtlantic,South_Atlantic +VT,USA,New_England,northeast,NewEngland,New_England +WA,USA,Pacific,pacific,Northwest,Northwest +WI,USA,East_North_Central,lake-states,Midwest,East_North_Central +WV,USA,South_Atlantic,appalachia,MidAtlantic,South_Atlantic +WY,USA,Mountain,mountain,Mountain,Mountain From c116165a14a182b262ba75712ef94cca93465a3e Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Thu, 16 Apr 2026 13:13:23 -0600 Subject: [PATCH 02/85] Added annual degree days files --- inputs/fuelprices/ngreg_cdd.csv | 84 ++++++++++++++++----------------- inputs/fuelprices/ngreg_hdd.csv | 84 ++++++++++++++++----------------- 2 files changed, 84 insertions(+), 84 deletions(-) diff --git a/inputs/fuelprices/ngreg_cdd.csv b/inputs/fuelprices/ngreg_cdd.csv index ffefb8b7..637780d2 100644 --- a/inputs/fuelprices/ngreg_cdd.csv +++ b/inputs/fuelprices/ngreg_cdd.csv @@ -1,42 +1,42 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,Mountain,California,Northwest,Southwest -2010,634,913,963,1095,2271,1974,2754,353,555,118,1016 -2011,553,840,858,1074,2260,1725,3112,377,605,128,1084 -2012,563,819,974,1221,2163,1760,2913,408,756,160,1172 -2013,540,685,689,892,2001,1438,2535,379,733,155,1090 -2014,420,600,609,812,2000,1491,2474,371,880,187,1066 -2015,556,809,729,941,2397,1717,2742,383,880,187,1100 -2016,625,891,958,1072,2404,1956,2882,387,766,162,1113 -2017,451,665,708,910,2247,1585,2718,399,870,185,1149 -2018,668,890,972,1134,2411,1928,2855,405,827,176,1167 -2019,536,787,832,951,2503,1886,2759,360,696,148,1036 -2020,645,848,831,964,2335,1636,2735,434,883,187,1247 -2021,604,837,911,1093,2226,1611,2644,408,857,182,1174 -2022,647,838,816,1050,2302,1728,2992,409,897,190,1176 -2023,518,683,713,1042,2258,1669,3117,381,686,145,1096 -2024,620,867,899,1046,2399,1859,3073,441,870,185,1268 -2025,609,845,851,1046,2400,1773,2901,404,843,179,1163 -2026,615,853,856,1051,2415,1781,2915,406,851,180,1168 -2027,621,860,861,1056,2430,1788,2928,408,857,182,1174 -2028,627,868,866,1061,2445,1796,2942,410,865,183,1180 -2029,633,876,871,1066,2460,1803,2955,412,871,185,1185 -2030,640,884,876,1071,2476,1811,2969,414,879,186,1191 -2031,646,892,881,1076,2491,1818,2982,416,886,188,1196 -2032,652,900,886,1081,2507,1826,2996,418,893,189,1202 -2033,659,908,890,1086,2522,1834,3010,420,900,191,1208 -2034,665,915,895,1092,2538,1841,3023,422,907,193,1213 -2035,671,923,900,1097,2553,1849,3037,424,914,194,1219 -2036,678,931,905,1102,2569,1857,3050,426,921,196,1224 -2037,684,939,910,1107,2585,1864,3064,428,929,197,1230 -2038,690,947,915,1112,2600,1872,3077,429,935,199,1236 -2039,697,955,920,1117,2616,1879,3091,432,943,200,1241 -2040,703,963,925,1122,2632,1887,3104,433,950,202,1247 -2041,710,971,930,1128,2648,1895,3118,435,957,203,1253 -2042,716,978,935,1133,2663,1902,3131,437,964,205,1258 -2043,722,986,940,1138,2679,1910,3145,439,972,206,1263 -2044,729,994,945,1143,2695,1918,3158,441,979,208,1269 -2045,735,1002,950,1148,2711,1925,3172,443,986,209,1274 -2046,741,1010,955,1153,2727,1933,3185,445,993,211,1279 -2047,748,1018,960,1159,2742,1940,3199,447,1001,212,1285 -2048,754,1026,965,1164,2758,1948,3212,449,1007,214,1290 -2049,760,1033,970,1169,2774,1956,3226,450,1015,215,1296 -2050,767,1041,975,1174,2790,1963,3239,452,1022,217,1302 +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest +2010,634,913,963,1095,2271,1974,2754,568,294,105,1075 +2011,553,840,858,1074,2260,1725,3112,622,310,111,1151 +2012,563,819,974,1221,2163,1760,2913,780,387,136,1193 +2013,540,685,689,892,2001,1438,2535,714,346,174,1123 +2014,420,600,609,812,2000,1491,2474,850,314,217,1123 +2015,556,809,729,941,2397,1717,2742,831,341,236,1142 +2016,625,891,958,1072,2404,1956,2882,782,334,146,1166 +2017,451,665,708,910,2247,1585,2718,846,346,209,1202 +2018,668,890,972,1134,2411,1928,2855,815,372,188,1200 +2019,536,787,832,951,2503,1886,2759,694,305,150,1091 +2020,645,848,831,964,2335,1636,2735,913,378,157,1303 +2021,604,837,911,1093,2226,1611,2644,817,408,222,1174 +2022,647,838,816,1050,2302,1728,2992,853,394,234,1191 +2023,518,683,713,1042,2258,1669,3117,616,308,214,1173 +2024,620,867,899,1046,2399,1859,3073,861,405,200,1300 +2025,609,845,851,1046,2400,1773,2901,665,346,221,1168 +2026,615,853,856,1051,2415,1781,2915,780,367,259,1240 +2027,621,860,861,1056,2430,1788,2928,787,369,261,1247 +2028,627,868,866,1061,2445,1796,2942,794,371,263,1255 +2029,633,876,871,1066,2460,1803,2955,800,373,266,1262 +2030,640,884,876,1071,2476,1811,2969,807,375,268,1269 +2031,646,892,881,1076,2491,1818,2982,814,378,270,1276 +2032,652,900,886,1081,2507,1826,2996,821,380,272,1283 +2033,659,908,890,1086,2522,1834,3010,827,382,275,1290 +2034,665,915,895,1092,2538,1841,3023,834,384,277,1297 +2035,671,923,900,1097,2553,1849,3037,841,386,279,1304 +2036,678,931,905,1102,2569,1857,3050,848,388,282,1312 +2037,684,939,910,1107,2585,1864,3064,855,390,284,1319 +2038,690,947,915,1112,2600,1872,3077,862,392,286,1326 +2039,697,955,920,1117,2616,1879,3091,869,394,288,1333 +2040,703,963,925,1122,2632,1887,3104,876,396,290,1340 +2041,710,971,930,1128,2648,1895,3118,883,399,293,1346 +2042,716,978,935,1133,2663,1902,3131,890,401,295,1353 +2043,722,986,940,1138,2679,1910,3145,897,403,297,1360 +2044,729,994,945,1143,2695,1918,3158,903,405,300,1367 +2045,735,1002,950,1148,2711,1925,3172,910,407,302,1374 +2046,741,1010,955,1153,2727,1933,3185,918,409,304,1381 +2047,748,1018,960,1159,2742,1940,3199,924,411,307,1388 +2048,754,1026,965,1164,2758,1948,3212,931,413,309,1395 +2049,760,1033,970,1169,2774,1956,3226,938,415,311,1402 +2050,767,1041,975,1174,2790,1963,3239,945,417,313,1409 diff --git a/inputs/fuelprices/ngreg_hdd.csv b/inputs/fuelprices/ngreg_hdd.csv index c34ab1c2..f6e825cb 100644 --- a/inputs/fuelprices/ngreg_hdd.csv +++ b/inputs/fuelprices/ngreg_hdd.csv @@ -1,42 +1,42 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,Mountain,California,Northwest,Southwest -2010,5935,5539,6188,6570,3163,3954,2450,3572,1085,2542,1488 -2011,6113,5471,6173,6570,2564,3347,2113,3745,1143,2679,1559 -2012,5563,4960,5356,5520,2305,2880,1648,3219,1022,2395,1341 -2013,6425,5827,6623,7140,2736,3651,2325,3716,1007,2359,1547 -2014,6676,6190,7196,7309,2961,3935,2421,3345,830,1946,1393 -2015,6520,5762,6165,6093,2496,3224,2085,3245,868,2033,1351 -2016,5928,5338,5701,5792,2464,3095,1750,3261,908,2126,1358 -2017,6037,5318,5684,6004,2239,2837,1580,3229,954,2235,1344 -2018,6323,5769,6434,6975,2638,3479,2252,3395,949,2222,1414 -2019,6538,5736,6427,7082,2392,3181,2143,3748,1061,2485,1561 -2020,5822,5198,5855,6326,2263,3064,1812,3377,963,2255,1406 -2021,5799,5261,5747,6061,2366,3166,1911,3313,998,2339,1379 -2022,6019,5635,6344,6905,2523,3438,2200,3617,1007,2358,1506 -2023,5564,4954,5417,5929,2150,2826,1725,3612,1079,2528,1504 -2024,5643,4981,5306,5716,2271,3024,1844,3355,1002,2349,1397 -2025,5924,5319,5952,6383,2344,3161,1949,3442,984,2305,1434 -2026,5901,5298,5937,6376,2329,3148,1942,3438,982,2300,1432 -2027,5879,5277,5923,6369,2313,3136,1935,3434,980,2296,1430 -2028,5856,5256,5908,6362,2298,3123,1928,3429,978,2291,1428 -2029,5833,5235,5894,6355,2283,3111,1921,3424,976,2286,1426 -2030,5810,5214,5879,6348,2267,3098,1914,3419,974,2281,1424 -2031,5787,5193,5864,6341,2251,3086,1907,3414,972,2276,1422 -2032,5764,5172,5850,6334,2235,3073,1900,3409,969,2272,1420 -2033,5741,5151,5835,6327,2220,3060,1893,3404,967,2266,1418 -2034,5718,5130,5820,6319,2204,3048,1886,3399,965,2261,1416 -2035,5695,5109,5806,6312,2188,3035,1879,3394,963,2255,1414 -2036,5672,5088,5791,6304,2173,3022,1872,3390,961,2250,1411 -2037,5649,5068,5776,6297,2157,3009,1865,3385,958,2245,1410 -2038,5626,5047,5762,6289,2141,2996,1858,3380,956,2240,1408 -2039,5603,5026,5747,6282,2125,2984,1852,3375,954,2234,1406 -2040,5579,5005,5732,6274,2110,2971,1845,3371,951,2229,1404 -2041,5556,4984,5717,6267,2094,2958,1838,3366,949,2224,1402 -2042,5533,4963,5703,6259,2079,2945,1831,3362,947,2218,1400 -2043,5510,4943,5688,6252,2063,2933,1825,3357,944,2213,1398 -2044,5487,4922,5673,6244,2047,2920,1818,3353,942,2207,1396 -2045,5464,4901,5658,6236,2032,2907,1811,3349,940,2202,1394 -2046,5440,4880,5644,6229,2016,2894,1805,3344,937,2197,1392 -2047,5417,4859,5629,6221,2001,2881,1798,3339,935,2191,1391 -2048,5394,4838,5614,6213,1985,2869,1791,3335,933,2185,1389 -2049,5371,4818,5599,6206,1970,2856,1785,3330,931,2180,1387 -2050,5348,4797,5585,6198,1955,2843,1778,3326,928,2175,1385 +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest +2010,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 +2011,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 +2012,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 +2013,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 +2014,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 +2015,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 +2016,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 +2017,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 +2018,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 +2019,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 +2020,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 +2021,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 +2022,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 +2023,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 +2024,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 +2025,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 +2026,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 +2027,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 +2028,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 +2029,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 +2030,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 +2031,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 +2032,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 +2033,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 +2034,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 +2035,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 +2036,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 +2037,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 +2038,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 +2039,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 +2040,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 +2041,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 +2042,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 +2043,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 +2044,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 +2045,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 +2046,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 +2047,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 +2048,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 +2049,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 +2050,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 From ee3aa8caa39c3eaff960dacc57083cb8427ec3c0 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Fri, 17 Apr 2026 12:30:16 -0600 Subject: [PATCH 03/85] Added first working instance of get_degree_days --- reeds/io.py | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/reeds/io.py b/reeds/io.py index a3d9cd27..dfbaa22d 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1909,3 +1909,192 @@ def get_folder_size(casedir): # convert to GB total_size /= 1e9 return total_size + +def get_degree_days(case, base_temp_c=18.3333333333): + """ + Return daily HDD/CDD by ngreg for the modeled years in this case, + using temperature shapes from GSw_HourlyWeatherYears and annual totals + from ngreg_hdd.csv / ngreg_cdd.csv. + """ + case = standardize_case(case) + inputs_case = os.path.join(case, 'inputs_case') + sw = reeds.io.get_switches(case) + + # modeled years for outputs + model_years = reeds.io.get_years(case) + model_years = np.array([y for y in model_years if y <= int(sw.endyear)], dtype=int) + + # weather years for temperature shapes + weather_years = np.array( + [int(y) for y in str(sw.GSw_HourlyWeatherYears).split('_') if str(y).strip()], + dtype=int, + ) + + # annual ngreg totals + ddh = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'fuelprices', 'ngreg_hdd.csv'), + index_col=0, + ) + ddc = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'fuelprices', 'ngreg_cdd.csv'), + index_col=0, + ) + ddh.index = ddh.index.astype(int) + ddc.index = ddc.index.astype(int) + ddh = ddh.loc[ddh.index.intersection(model_years)].copy() + ddc = ddc.loc[ddc.index.intersection(model_years)].copy() + + # state -> ngreg mapping + state_groups = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') + ) + st2ngreg = state_groups.set_index('st')['ngreg'] + + # valid states in this case + val_st = ( + pd.read_csv(os.path.join(inputs_case, 'val_st.csv'), header=None) + .squeeze(1) + .astype(str) + .values + ) + valid_states = [s for s in val_st if s in st2ngreg.index] + + # state population + pop = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'disaggregation', 'county_population.csv'), + dtype={'FIPS': str}, + ) + pop = pop.rename(columns={'value': 'population'}) + county_state = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'zones', 'county_state.csv'), + dtype={'FIPS': str, 'state': str}, + ) + county_state['FIPS'] = 'p' + county_state['FIPS'].str.zfill(5) + pop_state = ( + pop.merge(county_state[['FIPS', 'state']], on='FIPS', how='left') + .rename(columns={'state': 'st'}) + .dropna(subset=['st']) + .groupby('st', as_index=True)['population'] + .sum() + .rename_axis('st') + .rename('population') + .to_frame() + ) + pop_state = pop_state.loc[pop_state.index.intersection(valid_states)].copy() + pop_state['ngreg'] = pop_state.index.map(st2ngreg) + + # keep only ngregs represented in this case + active_ngregs = sorted(pop_state['ngreg'].dropna().unique()) + + # population share within ngreg + pop_state['weight'] = ( + pop_state['population'] / + pop_state.groupby('ngreg')['population'].transform('sum') + ) + + # read temperature file directly using chosen weather years + h5path = os.path.join( + reeds.io.reeds_path, 'inputs', 'profiles_temperature', 'temperature_state.h5' + ) + temp_dict = {} + with h5py.File(h5path, 'r') as f: + cols = pd.Series(f['columns']).map(lambda x: x.decode()).tolist() + for year in weather_years: + timeindex = pd.to_datetime(pd.Series(f[f'index_{year}'][:]).str.decode('utf-8')) + temp_dict[year] = pd.DataFrame(index=timeindex, columns=cols, data=f[str(year)]) + + temp = ( + pd.concat(temp_dict, names=['weather_year', 'timestamp']) + .rename_axis(columns='st') + .round(0) + .astype(float) + .reset_index('weather_year', drop=True) + .tz_localize('UTC') + .tz_convert('Etc/GMT+6') + ) + + # keep valid states only + temp = temp[[c for c in temp.columns if c in valid_states]].copy() + + # drop Dec 31 on leap years after tz conversion if needed + counts = temp.iloc[:, :1].groupby(temp.index.year).count().squeeze(1) + leap_years_present = counts[counts == 8784].index.tolist() + for y in leap_years_present: + temp.drop(temp.loc[f'{y}-12-31'].index, inplace=True) + + # hourly HDD/CDD by state + hdd = (base_temp_c - temp).clip(lower=0) + cdd = (temp - base_temp_c).clip(lower=0) + + # daily sums by state + hdd_daily_st = hdd.resample('D').sum() + cdd_daily_st = cdd.resample('D').sum() + + # weighted aggregation to ngreg + state_weights = pop_state['weight'].to_dict() + state_ngreg = pop_state['ngreg'].to_dict() + + hdd_daily_reg = pd.concat( + { + st: hdd_daily_st[st] * state_weights[st] + for st in hdd_daily_st.columns + if st in state_weights + }, + axis=1, + ) + hdd_daily_reg.columns = [state_ngreg[st] for st in hdd_daily_reg.columns] + hdd_daily_reg = hdd_daily_reg.groupby(level=0, axis=1).sum() + hdd_daily_reg = hdd_daily_reg[[c for c in hdd_daily_reg.columns if c in active_ngregs]] + + cdd_daily_reg = pd.concat( + { + st: cdd_daily_st[st] * state_weights[st] + for st in cdd_daily_st.columns + if st in state_weights + }, + axis=1, + ) + cdd_daily_reg.columns = [state_ngreg[st] for st in cdd_daily_reg.columns] + cdd_daily_reg = cdd_daily_reg.groupby(level=0, axis=1).sum() + cdd_daily_reg = cdd_daily_reg[[c for c in cdd_daily_reg.columns if c in active_ngregs]] + + # normalize daily shapes within each weather year + hdd_shape = hdd_daily_reg.div(hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum')) + cdd_shape = cdd_daily_reg.div(cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum')) + + # average shape across selected weather years by month-day + hdd_shape['month'] = hdd_shape.index.month + hdd_shape['day'] = hdd_shape.index.day + cdd_shape['month'] = cdd_shape.index.month + cdd_shape['day'] = cdd_shape.index.day + + hdd_md = hdd_shape.groupby(['month', 'day'])[active_ngregs].mean() + cdd_md = cdd_shape.groupby(['month', 'day'])[active_ngregs].mean() + + # expand to model years and scale to annual ngreg totals + out = [] + for t in model_years: + idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') + # keep 365-day convention + idx = idx[~((idx.month == 2) & (idx.day == 29))] + + hdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) + cdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) + + for dt in idx: + hdd_t.loc[dt] = hdd_md.loc[(dt.month, dt.day)].values + cdd_t.loc[dt] = cdd_md.loc[(dt.month, dt.day)].values + + hdd_t = hdd_t.mul(ddh.loc[t, active_ngregs], axis=1) + cdd_t = cdd_t.mul(ddc.loc[t, active_ngregs], axis=1) + + hdd_t['t'] = t + cdd_t['t'] = t + hdd_t['ddtype'] = 'hdd' + cdd_t['ddtype'] = 'cdd' + + out.append(hdd_t.reset_index().rename(columns={'index': 'date'})) + out.append(cdd_t.reset_index().rename(columns={'index': 'date'})) + + daily_dds = pd.concat(out, ignore_index=True) + return daily_dds \ No newline at end of file From a3f0d2be722b0243a9a648e8e169dc4a9d706fd3 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Tue, 21 Apr 2026 08:11:37 -0600 Subject: [PATCH 04/85] Added both hourly_formula option to get_degree_days --- reeds/io.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/reeds/io.py b/reeds/io.py index dfbaa22d..ff506130 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1910,7 +1910,7 @@ def get_folder_size(casedir): total_size /= 1e9 return total_size -def get_degree_days(case, base_temp_c=18.3333333333): +def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): """ Return daily HDD/CDD by ngreg for the modeled years in this case, using temperature shapes from GSw_HourlyWeatherYears and annual totals @@ -2022,13 +2022,24 @@ def get_degree_days(case, base_temp_c=18.3333333333): for y in leap_years_present: temp.drop(temp.loc[f'{y}-12-31'].index, inplace=True) - # hourly HDD/CDD by state - hdd = (base_temp_c - temp).clip(lower=0) - cdd = (temp - base_temp_c).clip(lower=0) + if hourly_formula: - # daily sums by state - hdd_daily_st = hdd.resample('D').sum() - cdd_daily_st = cdd.resample('D').sum() + # hourly HDD/CDD by state + hdd = (base_temp_c - temp).clip(lower=0) + cdd = (temp - base_temp_c).clip(lower=0) + + # daily sums by state + hdd_daily_st = hdd.resample('D').sum() + cdd_daily_st = cdd.resample('D').sum() + else: + + temp_daily_st = temp.resample('D').agg(['min', 'max']) + + tavg_daily_st = (temp_daily_st.xs('min', axis=1, level=1) + + temp_daily_st.xs('max', axis=1, level=1)) / 2 + + hdd_daily_st = (base_temp_c - tavg_daily_st).clip(lower=0) + cdd_daily_st = (tavg_daily_st - base_temp_c).clip(lower=0) # weighted aggregation to ngreg state_weights = pop_state['weight'].to_dict() From 23889f3a86e26df21a0d1433102e2ade51159745 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Tue, 21 Apr 2026 14:47:20 -0400 Subject: [PATCH 05/85] Correct natgas temperature-price regression parameters --- ...emperature_price_regression_parameters.csv | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/inputs/fuelprices/temperature_price_regression_parameters.csv b/inputs/fuelprices/temperature_price_regression_parameters.csv index 07ff8216..c2d2953b 100644 --- a/inputs/fuelprices/temperature_price_regression_parameters.csv +++ b/inputs/fuelprices/temperature_price_regression_parameters.csv @@ -1,16 +1,16 @@ -param,California,East_North_Central,Mid_Atlantic,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central -beta_CDD,0.029955419816184874,0.009273029676323478,0.034168989940669595,0.02808685101852765,0.05016087006220876,0.03113169110507277,0.01833714773079821,0.019993641246852725,0.009769128154432507,0.011354004640771962 -beta_HDD,0.016189998751331494,0.009668446585110206,0.02339670417060943,0.011785458776188078,0.036444013521409746,0.020295239964422476,0.023361493418357915,0.015022466717320455,0.01500952612901044,0.013691461708366763 -alpha,-0.32759175628333126,-0.18073334231389543,-0.3833570790134586,-0.3837299102394554,-0.8440729782100966,-0.5616549759463285,-0.23397720735924327,-0.4389726994851281,-0.2728742940249005,-0.183069814435552 -alpha_JAN,0.1188653966963984,-0.18323358789954214,-0.157441514010407,0.044882153208837094,-0.009892965409497176,0.05386625737047042,-0.037962945275583165,0.22806871507527884,-0.35142990597325746,-0.06351564849014545 -alpha_FEB,0.09429256915589793,-0.12386574701114131,-0.19298319464851188,0.047975593037986486,-0.12187170743521963,0.028452262554705378,-0.042506909763055434,0.22075430159169868,-0.2788883964252641,-0.02595574612722446 -alpha_MAR,-0.02639687275132955,-0.15947661163315544,-0.29133192090853954,-0.08600413149004746,-0.3077830263008757,-0.08961483148876323,-0.09654393228909637,0.03887968803217114,-0.2682645398050715,-0.06972845618212845 -alpha_APR,-0.009347269480450263,-0.09878830787395856,-0.11360070589090893,-0.05978258303784015,-0.15917569349971386,-0.08097717188511774,-0.017925095362391424,0.0463157955649065,-0.15972253920209656,-0.02030838197505814 -alpha_MAY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 -alpha_JUN,-0.06007924348183989,0.032843780841829096,-0.0007871091201897447,0.015456597855328071,0.1432866515568541,0.09755478389448288,-0.06762860298729731,-0.07917640092467358,0.04605928774608717,-0.056392184170450346 -alpha_JUL,-0.06300606042086834,0.04231557075836542,-0.09041423312849164,-0.00035469446949380713,0.039858565002846263,0.22380317927066215,-0.08161749058275741,0.000562262472602759,0.0700033963135873,-0.05718237221053294 -alpha_AUG,0.03626667524216953,0.09973116277893196,-0.06655127576521494,0.10419433197128676,0.08037877123022635,0.3188427272110293,-0.07797133920601348,0.1126348195605661,0.13362546181362614,-0.0073269294580643966 -alpha_SEP,0.07457050410656973,0.10788304240815527,-0.043180541739351055,0.15330969343045187,0.14446392377081146,0.29853585416152917,-0.06552367814495189,0.1211873827867778,0.12089337784678773,0.05067135093076723 -alpha_OCT,0.187941518779411,0.006446377989716331,-0.19212183198547847,0.0928807019225629,-0.03182419562835668,0.2104399593137229,-0.08235646938909581,0.20238221742988355,-0.018366513987214034,0.07189431859101025 -alpha_NOV,0.19164429927054244,-0.06056201778088331,-0.21066435269446251,0.09402219277128344,-0.1467382590048496,0.21268500189563244,-0.030180927081533224,0.26375254509563006,-0.15639407748114945,0.04699691120701671 -alpha_DEC,0.24301275028843886,-0.16877410828649025,-0.26567459921321634,0.10329937198038501,-0.10201875729720956,0.15983760810501105,-0.052682394994005954,0.3152203972492874,-0.3103674314816163,-0.05356123043512443 +param,California,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central,Mid_Atlantic,East_North_Central,East_South_Central +beta_CDD,0.03,0.028,0.05,0.031,0.018,0.02,0.01,0.011,0.036,0.009,0.01 +beta_HDD,0.016,0.012,0.036,0.02,0.023,0.015,0.015,0.014,0.029,0.011,0.011 +alpha,-0.328,-0.384,-0.844,-0.562,-0.234,-0.439,-0.273,-0.183,-0.448,-0.208,-0.094 +alpha_JAN,0.119,0.045,-0.01,0.054,-0.038,0.228,-0.351,-0.064,-0.2,-0.214,-0.072 +alpha_FEB,0.094,0.048,-0.122,0.028,-0.043,0.221,-0.279,-0.026,-0.354,-0.155,-0.046 +alpha_MAR,-0.026,-0.086,-0.308,-0.09,-0.097,0.039,-0.268,-0.07,-0.481,-0.192,-0.074 +alpha_APR,-0.009,-0.06,-0.159,-0.081,-0.018,0.046,-0.16,-0.02,-0.223,-0.114,-0.002 +alpha_MAY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +alpha_JUN,-0.06,0.015,0.143,0.098,-0.068,-0.079,0.046,-0.056,0.027,0.046,-0.078 +alpha_JUL,-0.063,-0.0,0.04,0.224,-0.082,0.001,0.07,-0.057,-0.09,0.059,-0.114 +alpha_AUG,0.036,0.104,0.08,0.319,-0.078,0.113,0.134,-0.007,-0.068,0.117,-0.121 +alpha_SEP,0.075,0.153,0.144,0.299,-0.066,0.121,0.121,0.051,-0.077,0.117,-0.135 +alpha_OCT,0.188,0.093,-0.032,0.21,-0.082,0.202,-0.018,0.072,-0.271,0.01,-0.204 +alpha_NOV,0.192,0.094,-0.147,0.213,-0.03,0.264,-0.156,0.047,-0.319,-0.083,-0.077 +alpha_DEC,0.243,0.103,-0.102,0.16,-0.053,0.315,-0.31,-0.054,-0.368,-0.197,-0.097 From d3fd142cf50d72489ff64dd717fa4c581c3ce0e5 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Fri, 24 Apr 2026 08:28:26 -0600 Subject: [PATCH 06/85] Fixed timestamp issue in get_degree_days(), added preliminary step to fuelcostprep --- input_processing/fuelcostprep.py | 51 +++++++++++++++++ reeds/io.py | 98 +++++++++++++++++++++----------- 2 files changed, 117 insertions(+), 32 deletions(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index d697464c..61183596 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -138,6 +138,57 @@ fuel = fuel.merge(h2fuel,on=['t','r'],how='left') fuel = fuel.sort_values(['t','r']) +#%%#################################### +### Natural Gas Price Diffs ### + +# Regression parameters for calculating natural gas price differences across regions based on degree days +params = pd.read_csv(os.path.join(reeds_path,'inputs', 'fuelprices', 'temperature_price_regression_parameters.csv'), index_col='param') + +# Daily degree days by price region +daily_dd = reeds.io.get_degree_days(inputs_case, hourly_formula=False) + +#apply the regional regression params to get daily multiplicative price differences from the annual price +daily_dd['date'] = pd.to_datetime(daily_dd['date']) +daily_dd['month'] = daily_dd['date'].dt.month + +regions = [c for c in daily_dd.columns if c not in ['date','t','ddtype','month']] + +# split HDD / CDD +hdd = daily_dd[daily_dd['ddtype'] == 'hdd'].set_index('date') +cdd = daily_dd[daily_dd['ddtype'] == 'cdd'].set_index('date') + +# align +hdd, cdd = hdd.align(cdd, join='outer', axis=0, fill_value=0) + +out = pd.DataFrame(index=hdd.index) + +for r in regions: + beta_cdd = params.loc['beta_CDD', r] + beta_hdd = params.loc['beta_HDD', r] + alpha = params.loc['alpha', r] + + # monthly effects + month_map = { + i: params.loc[f'alpha_{m}', r] + for i, m in enumerate( + ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'], + start=1 + ) + } + + #Align index of month effects with index of hdd/cdd + month_effect = hdd.index.month.map(month_map) + + log_ret = ( + alpha + + beta_cdd * cdd[r] + + beta_hdd * hdd[r] + + month_effect.values + ) + + out[r] = np.exp(log_ret) + + #%%#################################### ### Natural Gas Demand Calculations ### diff --git a/reeds/io.py b/reeds/io.py index ff506130..7b4724ff 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1920,17 +1920,17 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): inputs_case = os.path.join(case, 'inputs_case') sw = reeds.io.get_switches(case) - # modeled years for outputs + # modeled years for outputs model_years = reeds.io.get_years(case) model_years = np.array([y for y in model_years if y <= int(sw.endyear)], dtype=int) - # weather years for temperature shapes + # weather years for temperature shapes weather_years = np.array( [int(y) for y in str(sw.GSw_HourlyWeatherYears).split('_') if str(y).strip()], dtype=int, ) - # annual ngreg totals + # annual ngreg totals ddh = pd.read_csv( os.path.join(reeds_path, 'inputs', 'fuelprices', 'ngreg_hdd.csv'), index_col=0, @@ -1941,6 +1941,7 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): ) ddh.index = ddh.index.astype(int) ddc.index = ddc.index.astype(int) + ddh = ddh.loc[ddh.index.intersection(model_years)].copy() ddc = ddc.loc[ddc.index.intersection(model_years)].copy() @@ -1963,13 +1964,14 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): pop = pd.read_csv( os.path.join(reeds_path, 'inputs', 'disaggregation', 'county_population.csv'), dtype={'FIPS': str}, - ) - pop = pop.rename(columns={'value': 'population'}) + ).rename(columns={'value': 'population'}) + county_state = pd.read_csv( os.path.join(reeds_path, 'inputs', 'zones', 'county_state.csv'), dtype={'FIPS': str, 'state': str}, ) county_state['FIPS'] = 'p' + county_state['FIPS'].str.zfill(5) + pop_state = ( pop.merge(county_state[['FIPS', 'state']], on='FIPS', how='left') .rename(columns={'state': 'st'}) @@ -1980,28 +1982,41 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): .rename('population') .to_frame() ) + pop_state = pop_state.loc[pop_state.index.intersection(valid_states)].copy() pop_state['ngreg'] = pop_state.index.map(st2ngreg) - # keep only ngregs represented in this case active_ngregs = sorted(pop_state['ngreg'].dropna().unique()) - # population share within ngreg pop_state['weight'] = ( - pop_state['population'] / - pop_state.groupby('ngreg')['population'].transform('sum') + pop_state['population'] + / pop_state.groupby('ngreg')['population'].transform('sum') ) - # read temperature file directly using chosen weather years + # read temperature file using one extra year on each side h5path = os.path.join( reeds.io.reeds_path, 'inputs', 'profiles_temperature', 'temperature_state.h5' ) + + read_years = range(weather_years.min() - 1, weather_years.max() + 2) + temp_dict = {} with h5py.File(h5path, 'r') as f: cols = pd.Series(f['columns']).map(lambda x: x.decode()).tolist() - for year in weather_years: - timeindex = pd.to_datetime(pd.Series(f[f'index_{year}'][:]).str.decode('utf-8')) - temp_dict[year] = pd.DataFrame(index=timeindex, columns=cols, data=f[str(year)]) + + for year in read_years: + if str(year) not in f: + continue + + timeindex = pd.to_datetime( + pd.Series(f[f'index_{year}'][:]).str.decode('utf-8') + ) + + temp_dict[year] = pd.DataFrame( + index=timeindex, + columns=cols, + data=f[str(year)][:] + ) temp = ( pd.concat(temp_dict, names=['weather_year', 'timestamp']) @@ -2013,35 +2028,44 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): .tz_convert('Etc/GMT+6') ) - # keep valid states only - temp = temp[[c for c in temp.columns if c in valid_states]].copy() + # subset to selected weather years after timezone conversion + temp = temp.loc[temp.index.year.isin(weather_years)].copy() - # drop Dec 31 on leap years after tz conversion if needed + # match ReEDS convention; leap years have 8784 hours, drop Dec 31 counts = temp.iloc[:, :1].groupby(temp.index.year).count().squeeze(1) leap_years_present = counts[counts == 8784].index.tolist() + for y in leap_years_present: temp.drop(temp.loc[f'{y}-12-31'].index, inplace=True) - if hourly_formula: + expected_hours = len(weather_years) * 8760 + if len(temp) != expected_hours: + raise ValueError( + f'len(temp) = {len(temp)} but should be {expected_hours}. ' + 'Check weather_years, timezone conversion, and temperature_state.h5 coverage.' + ) + + # keep valid states only + temp = temp[[c for c in temp.columns if c in valid_states]].copy() - # hourly HDD/CDD by state + if hourly_formula: hdd = (base_temp_c - temp).clip(lower=0) cdd = (temp - base_temp_c).clip(lower=0) - # daily sums by state hdd_daily_st = hdd.resample('D').sum() cdd_daily_st = cdd.resample('D').sum() else: - temp_daily_st = temp.resample('D').agg(['min', 'max']) - tavg_daily_st = (temp_daily_st.xs('min', axis=1, level=1) + - temp_daily_st.xs('max', axis=1, level=1)) / 2 + tavg_daily_st = ( + temp_daily_st.xs('min', axis=1, level=1) + + temp_daily_st.xs('max', axis=1, level=1) + ) / 2 hdd_daily_st = (base_temp_c - tavg_daily_st).clip(lower=0) cdd_daily_st = (tavg_daily_st - base_temp_c).clip(lower=0) - # weighted aggregation to ngreg + # weighted aggregation to ngreg state_weights = pop_state['weight'].to_dict() state_ngreg = pop_state['ngreg'].to_dict() @@ -2069,11 +2093,14 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): cdd_daily_reg = cdd_daily_reg.groupby(level=0, axis=1).sum() cdd_daily_reg = cdd_daily_reg[[c for c in cdd_daily_reg.columns if c in active_ngregs]] - # normalize daily shapes within each weather year - hdd_shape = hdd_daily_reg.div(hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum')) - cdd_shape = cdd_daily_reg.div(cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum')) + # normalize daily shapes within each weather year + hdd_shape = hdd_daily_reg.div( + hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum') + ) + cdd_shape = cdd_daily_reg.div( + cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum') + ) - # average shape across selected weather years by month-day hdd_shape['month'] = hdd_shape.index.month hdd_shape['day'] = hdd_shape.index.day cdd_shape['month'] = cdd_shape.index.month @@ -2082,19 +2109,26 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): hdd_md = hdd_shape.groupby(['month', 'day'])[active_ngregs].mean() cdd_md = cdd_shape.groupby(['month', 'day'])[active_ngregs].mean() - # expand to model years and scale to annual ngreg totals + # expand to model years and scale to annual ngreg totals out = [] + for t in model_years: idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') - # keep 365-day convention - idx = idx[~((idx.month == 2) & (idx.day == 29))] + + # 365-day calendar excludes Dec 31, not Feb 29 + idx = idx[~((idx.month == 12) & (idx.day == 31))] + + # only needed if model year is leap year + if len(idx) > 365: + idx = idx[~((idx.month == 2) & (idx.day == 29))] hdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) cdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) for dt in idx: - hdd_t.loc[dt] = hdd_md.loc[(dt.month, dt.day)].values - cdd_t.loc[dt] = cdd_md.loc[(dt.month, dt.day)].values + key = (dt.month, dt.day) + hdd_t.loc[dt] = hdd_md.loc[key].values + cdd_t.loc[dt] = cdd_md.loc[key].values hdd_t = hdd_t.mul(ddh.loc[t, active_ngregs], axis=1) cdd_t = cdd_t.mul(ddc.loc[t, active_ngregs], axis=1) From 72f2cf1749c55c7b94b088a9691029b5fad09007 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Fri, 24 Apr 2026 09:06:48 -0600 Subject: [PATCH 07/85] Added step in fuelcostprep now outputs an h5 for price modifiers --- input_processing/fuelcostprep.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 61183596..4a66d2d4 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -13,6 +13,7 @@ ### =========================================================================== import pandas as pd +import numpy as np import os import sys import argparse @@ -188,6 +189,22 @@ out[r] = np.exp(log_ret) +out_year = hdd['t'].where(hdd['t'].notna(), cdd['t']) +if out_year.isna().any(): + raise ValueError('Missing weather year for one or more natural gas price diff dates') + +out_datetime = out.index +if out_datetime.tz is None: + out_datetime = out_datetime.tz_localize('Etc/GMT+6') + +out = out.astype(np.float32) +out.index = pd.MultiIndex.from_arrays( + [out_year.astype(np.int32), out_datetime], + names=['year', 'datetime'], +) +out = out.sort_index() +reeds.io.write_profile_to_h5(out, 'gasprice_price_region_day.h5', inputs_case) + #%%#################################### ### Natural Gas Demand Calculations ### @@ -216,6 +233,8 @@ fuel.to_csv(os.path.join(inputs_case,'fprice.csv'),index=False) ngprice_cendiv.to_csv(os.path.join(inputs_case,'gasprice_ref.csv')) + + ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) From 1929fb4d7cf7eb77be2396e5813e1f82b829642b Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Tue, 28 Apr 2026 14:27:34 -0600 Subject: [PATCH 08/85] Added get_natgas_price_diffs function to hourly_writetimeseries --- input_processing/fuelcostprep.py | 2 +- input_processing/hourly_writetimeseries.py | 64 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 4a66d2d4..0497d39f 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -203,7 +203,7 @@ names=['year', 'datetime'], ) out = out.sort_index() -reeds.io.write_profile_to_h5(out, 'gasprice_price_region_day.h5', inputs_case) +reeds.io.write_profile_to_h5(out, 'natgas_price_diffs.h5', inputs_case) #%%#################################### diff --git a/input_processing/hourly_writetimeseries.py b/input_processing/hourly_writetimeseries.py index 5fa32608..14485edd 100644 --- a/input_processing/hourly_writetimeseries.py +++ b/input_processing/hourly_writetimeseries.py @@ -225,6 +225,70 @@ def get_yearly_demand(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): return load_in, load_out + +def get_natgas_price_diffs(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): + """ + This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a + GAMS-compatible file. The h5 contains daily multiplicative natural gas price + factors indexed by (year [model year t], datetime) with model region columns. Repeat daily value across + hours + """ + ### Load daily natgas price diffs from fuelcostprep.py + ngdiffs = reeds.io.read_file( + os.path.join(inputs_case, 'natgas_price_diffs.h5'), parse_timestamps=True) + + ### Extract model year (t) and (month, day) from the MultiIndex + ngdiffs = ngdiffs.reset_index() + ngdiffs_dt = pd.to_datetime(ngdiffs['datetime']) + ngdiffs['month'] = ngdiffs_dt.dt.month + ngdiffs['day'] = ngdiffs_dt.dt.day + ngdiffs = ngdiffs.rename(columns={'year': 't'}).drop(columns=['datetime']) + regions = [c for c in ngdiffs.columns if c not in ['t', 'month', 'day']] + + ### Get (month, day) for each hour in hmap_allyrs using local time + hmap_ts = pd.to_datetime(hmap_allyrs['timestamp']) + if hmap_ts.dt.tz is not None: + hmap_local = hmap_ts.dt.tz_convert('Etc/GMT+6') + else: + hmap_local = hmap_ts + + h_md = pd.DataFrame({ + 'actual_h': hmap_allyrs['actual_h'].values, + 'month': hmap_local.dt.month.values, + 'day': hmap_local.dt.day.values, + }).drop_duplicates(subset=['actual_h']) + + ### Broadcast daily values to hourly by merging on (month, day), + ### which creates one row per (actual_h, t) combination + ngdiffs_hourly = h_md.merge(ngdiffs, on=['month', 'day'], how='left') + ngdiffs_hourly = ngdiffs_hourly.drop(columns=['month', 'day']).rename( + columns={'actual_h': 'h'}) + + ### Filter to modeled periods + if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): + keep_h = hmap_allyrs.loc[ + hmap_allyrs.year.isin(sw['GSw_HourlyWeatherYears']), 'actual_h' + ].unique() + ngdiffs_hourly = ngdiffs_hourly.loc[ + ngdiffs_hourly.h.isin(keep_h)].copy() + else: + ngdiffs_hourly = ngdiffs_hourly.loc[ + ngdiffs_hourly.h.isin(hmap_myr.h.unique())].copy() + + ### Reshape for ReEDS: stack regions to get (r, h, t) index + ngdiffs_out = ngdiffs_hourly.set_index(['h', 't'])[regions] + ngdiffs_out.columns.name = 'r' + ngdiffs_out = ( + ngdiffs_out.stack('r') + .rename('multiplier') + .reorder_levels(['r', 'h', 't']) + .sort_index() + ) + + + return ngdiffs_out + + def format_climate_inputs(filename, inputs_case, szn_month_weights): """ This function converts climate data from monthly to repperiod resolution using the From edaf2c22d7947d1cabbee5df16071144d098592b Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Wed, 29 Apr 2026 14:04:11 -0600 Subject: [PATCH 09/85] Added degree day files to copied files, changed names and placement of get_degree_days --- input_processing/fuelcostprep.py | 226 +++++++++++++++++++++++++++++- inputs/fuelprices/gasreg_cdd.csv | 42 ++++++ inputs/fuelprices/gasreg_hdd.csv | 42 ++++++ inputs/userinput/futurefiles.csv | 2 + inputs/zones/state_groups.csv | 2 +- reeds/io.py | 233 ------------------------------- runfiles.csv | 2 + 7 files changed, 314 insertions(+), 235 deletions(-) create mode 100644 inputs/fuelprices/gasreg_cdd.csv create mode 100644 inputs/fuelprices/gasreg_hdd.csv diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 0497d39f..dcedac7f 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -18,6 +18,7 @@ import sys import argparse import datetime +import h5py sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import reeds # Time the operation of this script @@ -142,11 +143,234 @@ #%%#################################### ### Natural Gas Price Diffs ### +def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): + """ + Return daily HDD/CDD by gasreg for the modeled years in this case, + using temperature shapes from GSw_HourlyWeatherYears and annual totals + from gasreg_hdd.csv / gasreg_cdd.csv. + """ + case = reeds.io.standardize_case(case) + inputs_case = os.path.join(case, 'inputs_case') + sw = reeds.io.get_switches(case) + + # modeled years for outputs + model_years = reeds.io.get_years(case) + model_years = np.array([y for y in model_years if y <= int(sw.endyear)], dtype=int) + + # weather years for temperature shapes + weather_years = np.array( + [int(y) for y in str(sw.GSw_HourlyWeatherYears).split('_') if str(y).strip()], + dtype=int, + ) + + # annual gasreg totals + ddh = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_hdd.csv'), + index_col=0, + ) + ddc = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_cdd.csv'), + index_col=0, + ) + ddh.index = ddh.index.astype(int) + ddc.index = ddc.index.astype(int) + + ddh = ddh.loc[ddh.index.intersection(model_years)].copy() + ddc = ddc.loc[ddc.index.intersection(model_years)].copy() + + # state -> gasreg mapping + state_groups = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') + ) + st2gasreg = state_groups.set_index('st')['gasreg'] + + # valid states in this case + val_st = ( + pd.read_csv(os.path.join(inputs_case, 'val_st.csv'), header=None) + .squeeze(1) + .astype(str) + .values + ) + valid_states = [s for s in val_st if s in st2gasreg.index] + + # state population + pop = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'disaggregation', 'county_population.csv'), + dtype={'FIPS': str}, + ).rename(columns={'value': 'population'}) + + county_state = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'zones', 'county_state.csv'), + dtype={'FIPS': str, 'state': str}, + ) + county_state['FIPS'] = 'p' + county_state['FIPS'].str.zfill(5) + + pop_state = ( + pop.merge(county_state[['FIPS', 'state']], on='FIPS', how='left') + .rename(columns={'state': 'st'}) + .dropna(subset=['st']) + .groupby('st', as_index=True)['population'] + .sum() + .rename_axis('st') + .rename('population') + .to_frame() + ) + + pop_state = pop_state.loc[pop_state.index.intersection(valid_states)].copy() + pop_state['gasreg'] = pop_state.index.map(st2gasreg) + + active_gasregs = sorted(pop_state['gasreg'].dropna().unique()) + + pop_state['weight'] = ( + pop_state['population'] + / pop_state.groupby('gasreg')['population'].transform('sum') + ) + + # read temperature file using one extra year on each side + h5path = os.path.join( + reeds.io.reeds_path, 'inputs', 'profiles_temperature', 'temperature_state.h5' + ) + + read_years = range(weather_years.min() - 1, weather_years.max() + 2) + + temp_dict = {} + with h5py.File(h5path, 'r') as f: + cols = pd.Series(f['columns']).map(lambda x: x.decode()).tolist() + + for year in read_years: + if str(year) not in f: + continue + + timeindex = pd.to_datetime( + pd.Series(f[f'index_{year}'][:]).str.decode('utf-8') + ) + + temp_dict[year] = pd.DataFrame( + index=timeindex, + columns=cols, + data=f[str(year)][:] + ) + + temp = ( + pd.concat(temp_dict, names=['weather_year', 'timestamp']) + .rename_axis(columns='st') + .round(0) + .astype(float) + .reset_index('weather_year', drop=True) + .tz_localize('UTC') + .tz_convert('Etc/GMT+6') + ) + + # subset to selected weather years after timezone conversion + temp = temp.loc[temp.index.year.isin(weather_years)].copy() + + + # keep valid states only + temp = temp[[c for c in temp.columns if c in valid_states]].copy() + + if hourly_formula: + hdd = (base_temp_c - temp).clip(lower=0) + cdd = (temp - base_temp_c).clip(lower=0) + + hdd_daily_st = hdd.resample('D').sum() + cdd_daily_st = cdd.resample('D').sum() + else: + temp_daily_st = temp.resample('D').agg(['min', 'max']) + + tavg_daily_st = ( + temp_daily_st.xs('min', axis=1, level=1) + + temp_daily_st.xs('max', axis=1, level=1) + ) / 2 + + hdd_daily_st = (base_temp_c - tavg_daily_st).clip(lower=0) + cdd_daily_st = (tavg_daily_st - base_temp_c).clip(lower=0) + + # weighted aggregation to gasreg + state_weights = pop_state['weight'].to_dict() + state_gasreg = pop_state['gasreg'].to_dict() + + hdd_daily_reg = pd.concat( + { + st: hdd_daily_st[st] * state_weights[st] + for st in hdd_daily_st.columns + if st in state_weights + }, + axis=1, + ) + hdd_daily_reg.columns = [state_gasreg[st] for st in hdd_daily_reg.columns] + hdd_daily_reg = hdd_daily_reg.groupby(level=0, axis=1).sum() + hdd_daily_reg = hdd_daily_reg[[c for c in hdd_daily_reg.columns if c in active_gasregs]] + + cdd_daily_reg = pd.concat( + { + st: cdd_daily_st[st] * state_weights[st] + for st in cdd_daily_st.columns + if st in state_weights + }, + axis=1, + ) + cdd_daily_reg.columns = [state_gasreg[st] for st in cdd_daily_reg.columns] + cdd_daily_reg = cdd_daily_reg.groupby(level=0, axis=1).sum() + cdd_daily_reg = cdd_daily_reg[[c for c in cdd_daily_reg.columns if c in active_gasregs]] + + # normalize daily shapes within each weather year + hdd_shape = hdd_daily_reg.div( + hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum') + ) + cdd_shape = cdd_daily_reg.div( + cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum') + ) + + hdd_shape['month'] = hdd_shape.index.month + hdd_shape['day'] = hdd_shape.index.day + cdd_shape['month'] = cdd_shape.index.month + cdd_shape['day'] = cdd_shape.index.day + + hdd_md = hdd_shape.groupby(['month', 'day'])[active_gasregs].mean() + cdd_md = cdd_shape.groupby(['month', 'day'])[active_gasregs].mean() + + # expand to model years and scale to annual gasreg totals + out = [] + + for t in model_years: + idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') + + # only needed if model year is leap year, exclude dec 31st and keep Feb 29th + if len(idx) > 365: + idx = idx[~((idx.month == 12) & (idx.day == 31))] + # 365-day calendar excludes Feb 29 + else: + #Make sure to exclude Feb 29 even if we don't expect it to be present + idx = idx[~((idx.month == 2) & (idx.day == 29))] + + + hdd_t = pd.DataFrame(index=idx, columns=active_gasregs, dtype=float) + cdd_t = pd.DataFrame(index=idx, columns=active_gasregs, dtype=float) + + for dt in idx: + key = (dt.month, dt.day) + hdd_t.loc[dt] = hdd_md.loc[key].values + cdd_t.loc[dt] = cdd_md.loc[key].values + + hdd_t = hdd_t.mul(ddh.loc[t, active_gasregs], axis=1) + cdd_t = cdd_t.mul(ddc.loc[t, active_gasregs], axis=1) + + hdd_t['t'] = t + cdd_t['t'] = t + hdd_t['ddtype'] = 'hdd' + cdd_t['ddtype'] = 'cdd' + + out.append(hdd_t.reset_index().rename(columns={'index': 'date'})) + out.append(cdd_t.reset_index().rename(columns={'index': 'date'})) + + daily_dds = pd.concat(out, ignore_index=True) + return daily_dds + # Regression parameters for calculating natural gas price differences across regions based on degree days params = pd.read_csv(os.path.join(reeds_path,'inputs', 'fuelprices', 'temperature_price_regression_parameters.csv'), index_col='param') # Daily degree days by price region -daily_dd = reeds.io.get_degree_days(inputs_case, hourly_formula=False) +daily_dd = get_degree_days(inputs_case, hourly_formula=False) #apply the regional regression params to get daily multiplicative price differences from the annual price daily_dd['date'] = pd.to_datetime(daily_dd['date']) diff --git a/inputs/fuelprices/gasreg_cdd.csv b/inputs/fuelprices/gasreg_cdd.csv new file mode 100644 index 00000000..637780d2 --- /dev/null +++ b/inputs/fuelprices/gasreg_cdd.csv @@ -0,0 +1,42 @@ +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest +2010,634,913,963,1095,2271,1974,2754,568,294,105,1075 +2011,553,840,858,1074,2260,1725,3112,622,310,111,1151 +2012,563,819,974,1221,2163,1760,2913,780,387,136,1193 +2013,540,685,689,892,2001,1438,2535,714,346,174,1123 +2014,420,600,609,812,2000,1491,2474,850,314,217,1123 +2015,556,809,729,941,2397,1717,2742,831,341,236,1142 +2016,625,891,958,1072,2404,1956,2882,782,334,146,1166 +2017,451,665,708,910,2247,1585,2718,846,346,209,1202 +2018,668,890,972,1134,2411,1928,2855,815,372,188,1200 +2019,536,787,832,951,2503,1886,2759,694,305,150,1091 +2020,645,848,831,964,2335,1636,2735,913,378,157,1303 +2021,604,837,911,1093,2226,1611,2644,817,408,222,1174 +2022,647,838,816,1050,2302,1728,2992,853,394,234,1191 +2023,518,683,713,1042,2258,1669,3117,616,308,214,1173 +2024,620,867,899,1046,2399,1859,3073,861,405,200,1300 +2025,609,845,851,1046,2400,1773,2901,665,346,221,1168 +2026,615,853,856,1051,2415,1781,2915,780,367,259,1240 +2027,621,860,861,1056,2430,1788,2928,787,369,261,1247 +2028,627,868,866,1061,2445,1796,2942,794,371,263,1255 +2029,633,876,871,1066,2460,1803,2955,800,373,266,1262 +2030,640,884,876,1071,2476,1811,2969,807,375,268,1269 +2031,646,892,881,1076,2491,1818,2982,814,378,270,1276 +2032,652,900,886,1081,2507,1826,2996,821,380,272,1283 +2033,659,908,890,1086,2522,1834,3010,827,382,275,1290 +2034,665,915,895,1092,2538,1841,3023,834,384,277,1297 +2035,671,923,900,1097,2553,1849,3037,841,386,279,1304 +2036,678,931,905,1102,2569,1857,3050,848,388,282,1312 +2037,684,939,910,1107,2585,1864,3064,855,390,284,1319 +2038,690,947,915,1112,2600,1872,3077,862,392,286,1326 +2039,697,955,920,1117,2616,1879,3091,869,394,288,1333 +2040,703,963,925,1122,2632,1887,3104,876,396,290,1340 +2041,710,971,930,1128,2648,1895,3118,883,399,293,1346 +2042,716,978,935,1133,2663,1902,3131,890,401,295,1353 +2043,722,986,940,1138,2679,1910,3145,897,403,297,1360 +2044,729,994,945,1143,2695,1918,3158,903,405,300,1367 +2045,735,1002,950,1148,2711,1925,3172,910,407,302,1374 +2046,741,1010,955,1153,2727,1933,3185,918,409,304,1381 +2047,748,1018,960,1159,2742,1940,3199,924,411,307,1388 +2048,754,1026,965,1164,2758,1948,3212,931,413,309,1395 +2049,760,1033,970,1169,2774,1956,3226,938,415,311,1402 +2050,767,1041,975,1174,2790,1963,3239,945,417,313,1409 diff --git a/inputs/fuelprices/gasreg_hdd.csv b/inputs/fuelprices/gasreg_hdd.csv new file mode 100644 index 00000000..f6e825cb --- /dev/null +++ b/inputs/fuelprices/gasreg_hdd.csv @@ -0,0 +1,42 @@ +t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest +2010,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 +2011,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 +2012,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 +2013,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 +2014,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 +2015,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 +2016,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 +2017,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 +2018,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 +2019,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 +2020,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 +2021,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 +2022,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 +2023,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 +2024,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 +2025,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 +2026,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 +2027,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 +2028,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 +2029,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 +2030,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 +2031,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 +2032,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 +2033,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 +2034,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 +2035,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 +2036,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 +2037,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 +2038,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 +2039,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 +2040,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 +2041,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 +2042,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 +2043,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 +2044,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 +2045,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 +2046,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 +2047,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 +2048,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 +2049,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 +2050,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index defb65b5..f5bdbca7 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -268,6 +268,8 @@ national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,proje national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, net_gen_existing_hydro.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant +gasreg_cdd.csv,.csv,1,None,t,None,1,0,linear_5,None,None,new, +gasreg_cdd.csv,.csv,1,None,t,None,1,0,linear_5,None,None,new, ng_crf_penalty_st.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ng_crf_penalty.csv,.csv,0,None,*t,None,0,0,constant,None,None,done,constant ng_demand_elec.csv,.csv,0,None,wide,Unnamed: 0,1,0,constant,0,None,done,linear_5 diff --git a/inputs/zones/state_groups.csv b/inputs/zones/state_groups.csv index 68988778..8ba028b9 100644 --- a/inputs/zones/state_groups.csv +++ b/inputs/zones/state_groups.csv @@ -1,4 +1,4 @@ -st,country,cendiv,usda_region,h2ptcreg,ngreg +st,country,cendiv,usda_region,h2ptcreg,gasreg AL,USA,East_South_Central,southeast,Southeast,East_South_Central AR,USA,West_South_Central,delta-states,Delta,West_South_Central AZ,USA,Mountain,mountain,Southwest,Southwest diff --git a/reeds/io.py b/reeds/io.py index 7b4724ff..58852c46 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1910,236 +1910,3 @@ def get_folder_size(casedir): total_size /= 1e9 return total_size -def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): - """ - Return daily HDD/CDD by ngreg for the modeled years in this case, - using temperature shapes from GSw_HourlyWeatherYears and annual totals - from ngreg_hdd.csv / ngreg_cdd.csv. - """ - case = standardize_case(case) - inputs_case = os.path.join(case, 'inputs_case') - sw = reeds.io.get_switches(case) - - # modeled years for outputs - model_years = reeds.io.get_years(case) - model_years = np.array([y for y in model_years if y <= int(sw.endyear)], dtype=int) - - # weather years for temperature shapes - weather_years = np.array( - [int(y) for y in str(sw.GSw_HourlyWeatherYears).split('_') if str(y).strip()], - dtype=int, - ) - - # annual ngreg totals - ddh = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'ngreg_hdd.csv'), - index_col=0, - ) - ddc = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'ngreg_cdd.csv'), - index_col=0, - ) - ddh.index = ddh.index.astype(int) - ddc.index = ddc.index.astype(int) - - ddh = ddh.loc[ddh.index.intersection(model_years)].copy() - ddc = ddc.loc[ddc.index.intersection(model_years)].copy() - - # state -> ngreg mapping - state_groups = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') - ) - st2ngreg = state_groups.set_index('st')['ngreg'] - - # valid states in this case - val_st = ( - pd.read_csv(os.path.join(inputs_case, 'val_st.csv'), header=None) - .squeeze(1) - .astype(str) - .values - ) - valid_states = [s for s in val_st if s in st2ngreg.index] - - # state population - pop = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'disaggregation', 'county_population.csv'), - dtype={'FIPS': str}, - ).rename(columns={'value': 'population'}) - - county_state = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'zones', 'county_state.csv'), - dtype={'FIPS': str, 'state': str}, - ) - county_state['FIPS'] = 'p' + county_state['FIPS'].str.zfill(5) - - pop_state = ( - pop.merge(county_state[['FIPS', 'state']], on='FIPS', how='left') - .rename(columns={'state': 'st'}) - .dropna(subset=['st']) - .groupby('st', as_index=True)['population'] - .sum() - .rename_axis('st') - .rename('population') - .to_frame() - ) - - pop_state = pop_state.loc[pop_state.index.intersection(valid_states)].copy() - pop_state['ngreg'] = pop_state.index.map(st2ngreg) - - active_ngregs = sorted(pop_state['ngreg'].dropna().unique()) - - pop_state['weight'] = ( - pop_state['population'] - / pop_state.groupby('ngreg')['population'].transform('sum') - ) - - # read temperature file using one extra year on each side - h5path = os.path.join( - reeds.io.reeds_path, 'inputs', 'profiles_temperature', 'temperature_state.h5' - ) - - read_years = range(weather_years.min() - 1, weather_years.max() + 2) - - temp_dict = {} - with h5py.File(h5path, 'r') as f: - cols = pd.Series(f['columns']).map(lambda x: x.decode()).tolist() - - for year in read_years: - if str(year) not in f: - continue - - timeindex = pd.to_datetime( - pd.Series(f[f'index_{year}'][:]).str.decode('utf-8') - ) - - temp_dict[year] = pd.DataFrame( - index=timeindex, - columns=cols, - data=f[str(year)][:] - ) - - temp = ( - pd.concat(temp_dict, names=['weather_year', 'timestamp']) - .rename_axis(columns='st') - .round(0) - .astype(float) - .reset_index('weather_year', drop=True) - .tz_localize('UTC') - .tz_convert('Etc/GMT+6') - ) - - # subset to selected weather years after timezone conversion - temp = temp.loc[temp.index.year.isin(weather_years)].copy() - - # match ReEDS convention; leap years have 8784 hours, drop Dec 31 - counts = temp.iloc[:, :1].groupby(temp.index.year).count().squeeze(1) - leap_years_present = counts[counts == 8784].index.tolist() - - for y in leap_years_present: - temp.drop(temp.loc[f'{y}-12-31'].index, inplace=True) - - expected_hours = len(weather_years) * 8760 - if len(temp) != expected_hours: - raise ValueError( - f'len(temp) = {len(temp)} but should be {expected_hours}. ' - 'Check weather_years, timezone conversion, and temperature_state.h5 coverage.' - ) - - # keep valid states only - temp = temp[[c for c in temp.columns if c in valid_states]].copy() - - if hourly_formula: - hdd = (base_temp_c - temp).clip(lower=0) - cdd = (temp - base_temp_c).clip(lower=0) - - hdd_daily_st = hdd.resample('D').sum() - cdd_daily_st = cdd.resample('D').sum() - else: - temp_daily_st = temp.resample('D').agg(['min', 'max']) - - tavg_daily_st = ( - temp_daily_st.xs('min', axis=1, level=1) - + temp_daily_st.xs('max', axis=1, level=1) - ) / 2 - - hdd_daily_st = (base_temp_c - tavg_daily_st).clip(lower=0) - cdd_daily_st = (tavg_daily_st - base_temp_c).clip(lower=0) - - # weighted aggregation to ngreg - state_weights = pop_state['weight'].to_dict() - state_ngreg = pop_state['ngreg'].to_dict() - - hdd_daily_reg = pd.concat( - { - st: hdd_daily_st[st] * state_weights[st] - for st in hdd_daily_st.columns - if st in state_weights - }, - axis=1, - ) - hdd_daily_reg.columns = [state_ngreg[st] for st in hdd_daily_reg.columns] - hdd_daily_reg = hdd_daily_reg.groupby(level=0, axis=1).sum() - hdd_daily_reg = hdd_daily_reg[[c for c in hdd_daily_reg.columns if c in active_ngregs]] - - cdd_daily_reg = pd.concat( - { - st: cdd_daily_st[st] * state_weights[st] - for st in cdd_daily_st.columns - if st in state_weights - }, - axis=1, - ) - cdd_daily_reg.columns = [state_ngreg[st] for st in cdd_daily_reg.columns] - cdd_daily_reg = cdd_daily_reg.groupby(level=0, axis=1).sum() - cdd_daily_reg = cdd_daily_reg[[c for c in cdd_daily_reg.columns if c in active_ngregs]] - - # normalize daily shapes within each weather year - hdd_shape = hdd_daily_reg.div( - hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum') - ) - cdd_shape = cdd_daily_reg.div( - cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum') - ) - - hdd_shape['month'] = hdd_shape.index.month - hdd_shape['day'] = hdd_shape.index.day - cdd_shape['month'] = cdd_shape.index.month - cdd_shape['day'] = cdd_shape.index.day - - hdd_md = hdd_shape.groupby(['month', 'day'])[active_ngregs].mean() - cdd_md = cdd_shape.groupby(['month', 'day'])[active_ngregs].mean() - - # expand to model years and scale to annual ngreg totals - out = [] - - for t in model_years: - idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') - - # 365-day calendar excludes Dec 31, not Feb 29 - idx = idx[~((idx.month == 12) & (idx.day == 31))] - - # only needed if model year is leap year - if len(idx) > 365: - idx = idx[~((idx.month == 2) & (idx.day == 29))] - - hdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) - cdd_t = pd.DataFrame(index=idx, columns=active_ngregs, dtype=float) - - for dt in idx: - key = (dt.month, dt.day) - hdd_t.loc[dt] = hdd_md.loc[key].values - cdd_t.loc[dt] = cdd_md.loc[key].values - - hdd_t = hdd_t.mul(ddh.loc[t, active_ngregs], axis=1) - cdd_t = cdd_t.mul(ddc.loc[t, active_ngregs], axis=1) - - hdd_t['t'] = t - cdd_t['t'] = t - hdd_t['ddtype'] = 'hdd' - cdd_t['ddtype'] = 'cdd' - - out.append(hdd_t.reset_index().rename(columns={'index': 'date'})) - out.append(cdd_t.reset_index().rename(columns={'index': 'date'})) - - daily_dds = pd.concat(out, ignore_index=True) - return daily_dds \ No newline at end of file diff --git a/runfiles.csv b/runfiles.csv index 1a60f823..82186a7d 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -25,6 +25,8 @@ aggreg2anchorreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, anchorreg2aggreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, allt.csv,inputs/sets/allt.csv,1,ignore,ignore,,,,,,,,,allt,, alpha.csv,inputs/fuelprices/alpha_{ngscen}.csv,1,ignore,ignore,wide_cendiv,t,,1,0,,,,,, +gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, +gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, bio_supplycurve.csv,inputs/supply_curve/bio_supplycurve.csv,1,ignore,ignore,usda_region,,,,0,,,,,, bioclass.csv,inputs/sets/bioclass.csv,1,ignore,ignore,,,,,,,,,bioclass,, can_exports.csv,inputs/canada_imports/can_exports.csv,int(sw.GSw_Canada) != 0,sum,ignore,r,wide,,1,0,,,,,, From f51d2e774afead955e8ae928759bd96089bc13a8 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Wed, 29 Apr 2026 14:20:14 -0600 Subject: [PATCH 10/85] Fixed runfiles.csv call for dd files --- runfiles.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runfiles.csv b/runfiles.csv index 82186a7d..73a59d6f 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -25,8 +25,8 @@ aggreg2anchorreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, anchorreg2aggreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, allt.csv,inputs/sets/allt.csv,1,ignore,ignore,,,,,,,,,allt,, alpha.csv,inputs/fuelprices/alpha_{ngscen}.csv,1,ignore,ignore,wide_cendiv,t,,1,0,,,,,, -gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, -gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, +gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, +gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, bio_supplycurve.csv,inputs/supply_curve/bio_supplycurve.csv,1,ignore,ignore,usda_region,,,,0,,,,,, bioclass.csv,inputs/sets/bioclass.csv,1,ignore,ignore,,,,,,,,,bioclass,, can_exports.csv,inputs/canada_imports/can_exports.csv,int(sw.GSw_Canada) != 0,sum,ignore,r,wide,,1,0,,,,,, From 6800c28927922ff6980f68e71e900060e168a967 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Wed, 29 Apr 2026 14:36:18 -0600 Subject: [PATCH 11/85] Fixed futurefiles.csv call for DD --- inputs/userinput/futurefiles.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index f5bdbca7..87b5be04 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -268,8 +268,8 @@ national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,proje national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, net_gen_existing_hydro.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant -gasreg_cdd.csv,.csv,1,None,t,None,1,0,linear_5,None,None,new, -gasreg_cdd.csv,.csv,1,None,t,None,1,0,linear_5,None,None,new, +gasreg_cdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 +gasreg_hdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 ng_crf_penalty_st.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ng_crf_penalty.csv,.csv,0,None,*t,None,0,0,constant,None,None,done,constant ng_demand_elec.csv,.csv,0,None,wide,Unnamed: 0,1,0,constant,0,None,done,linear_5 From eb85d75682434823097747af1cc73a09d82b23c7 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Wed, 29 Apr 2026 14:52:04 -0600 Subject: [PATCH 12/85] Fixed futurefiles.csv call for DD again --- inputs/userinput/futurefiles.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 87b5be04..9083c5f1 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -268,8 +268,8 @@ national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,proje national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, net_gen_existing_hydro.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant -gasreg_cdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 -gasreg_hdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 +gasreg_cdd.csv,.csv,0,None,t,wide,1,0,linear_5,None,None,new,linear_5 +gasreg_hdd.csv,.csv,0,None,t,wide,1,0,linear_5,None,None,new,linear_5 ng_crf_penalty_st.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ng_crf_penalty.csv,.csv,0,None,*t,None,0,0,constant,None,None,done,constant ng_demand_elec.csv,.csv,0,None,wide,Unnamed: 0,1,0,constant,0,None,done,linear_5 From 34420879644e115c99f443e1e019914ec71953da Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Wed, 29 Apr 2026 15:18:57 -0600 Subject: [PATCH 13/85] Changed fuelcostprep to read DD files from inputs_case --- input_processing/fuelcostprep.py | 6 +++--- inputs/userinput/futurefiles.csv | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index dcedac7f..a5acf0b6 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -163,13 +163,13 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): dtype=int, ) - # annual gasreg totals + # annual gasreg totals (read from inputs_case to pick up forecasted values) ddh = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_hdd.csv'), + os.path.join(inputs_case, 'gasreg_hdd.csv'), index_col=0, ) ddc = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_cdd.csv'), + os.path.join(inputs_case, 'gasreg_cdd.csv'), index_col=0, ) ddh.index = ddh.index.astype(int) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 9083c5f1..87b5be04 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -268,8 +268,8 @@ national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,proje national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, net_gen_existing_hydro.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant -gasreg_cdd.csv,.csv,0,None,t,wide,1,0,linear_5,None,None,new,linear_5 -gasreg_hdd.csv,.csv,0,None,t,wide,1,0,linear_5,None,None,new,linear_5 +gasreg_cdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 +gasreg_hdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 ng_crf_penalty_st.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ng_crf_penalty.csv,.csv,0,None,*t,None,0,0,constant,None,None,done,constant ng_demand_elec.csv,.csv,0,None,wide,Unnamed: 0,1,0,constant,0,None,done,linear_5 From 6ba7f788fb02cdbc59ccb3a40e7281c04087ddea Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 29 Apr 2026 17:51:37 -0400 Subject: [PATCH 14/85] Remove duplicate ngreg_cdd/hdd inputs --- inputs/fuelprices/ngreg_cdd.csv | 42 --------------------------------- inputs/fuelprices/ngreg_hdd.csv | 42 --------------------------------- 2 files changed, 84 deletions(-) delete mode 100644 inputs/fuelprices/ngreg_cdd.csv delete mode 100644 inputs/fuelprices/ngreg_hdd.csv diff --git a/inputs/fuelprices/ngreg_cdd.csv b/inputs/fuelprices/ngreg_cdd.csv deleted file mode 100644 index 637780d2..00000000 --- a/inputs/fuelprices/ngreg_cdd.csv +++ /dev/null @@ -1,42 +0,0 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest -2010,634,913,963,1095,2271,1974,2754,568,294,105,1075 -2011,553,840,858,1074,2260,1725,3112,622,310,111,1151 -2012,563,819,974,1221,2163,1760,2913,780,387,136,1193 -2013,540,685,689,892,2001,1438,2535,714,346,174,1123 -2014,420,600,609,812,2000,1491,2474,850,314,217,1123 -2015,556,809,729,941,2397,1717,2742,831,341,236,1142 -2016,625,891,958,1072,2404,1956,2882,782,334,146,1166 -2017,451,665,708,910,2247,1585,2718,846,346,209,1202 -2018,668,890,972,1134,2411,1928,2855,815,372,188,1200 -2019,536,787,832,951,2503,1886,2759,694,305,150,1091 -2020,645,848,831,964,2335,1636,2735,913,378,157,1303 -2021,604,837,911,1093,2226,1611,2644,817,408,222,1174 -2022,647,838,816,1050,2302,1728,2992,853,394,234,1191 -2023,518,683,713,1042,2258,1669,3117,616,308,214,1173 -2024,620,867,899,1046,2399,1859,3073,861,405,200,1300 -2025,609,845,851,1046,2400,1773,2901,665,346,221,1168 -2026,615,853,856,1051,2415,1781,2915,780,367,259,1240 -2027,621,860,861,1056,2430,1788,2928,787,369,261,1247 -2028,627,868,866,1061,2445,1796,2942,794,371,263,1255 -2029,633,876,871,1066,2460,1803,2955,800,373,266,1262 -2030,640,884,876,1071,2476,1811,2969,807,375,268,1269 -2031,646,892,881,1076,2491,1818,2982,814,378,270,1276 -2032,652,900,886,1081,2507,1826,2996,821,380,272,1283 -2033,659,908,890,1086,2522,1834,3010,827,382,275,1290 -2034,665,915,895,1092,2538,1841,3023,834,384,277,1297 -2035,671,923,900,1097,2553,1849,3037,841,386,279,1304 -2036,678,931,905,1102,2569,1857,3050,848,388,282,1312 -2037,684,939,910,1107,2585,1864,3064,855,390,284,1319 -2038,690,947,915,1112,2600,1872,3077,862,392,286,1326 -2039,697,955,920,1117,2616,1879,3091,869,394,288,1333 -2040,703,963,925,1122,2632,1887,3104,876,396,290,1340 -2041,710,971,930,1128,2648,1895,3118,883,399,293,1346 -2042,716,978,935,1133,2663,1902,3131,890,401,295,1353 -2043,722,986,940,1138,2679,1910,3145,897,403,297,1360 -2044,729,994,945,1143,2695,1918,3158,903,405,300,1367 -2045,735,1002,950,1148,2711,1925,3172,910,407,302,1374 -2046,741,1010,955,1153,2727,1933,3185,918,409,304,1381 -2047,748,1018,960,1159,2742,1940,3199,924,411,307,1388 -2048,754,1026,965,1164,2758,1948,3212,931,413,309,1395 -2049,760,1033,970,1169,2774,1956,3226,938,415,311,1402 -2050,767,1041,975,1174,2790,1963,3239,945,417,313,1409 diff --git a/inputs/fuelprices/ngreg_hdd.csv b/inputs/fuelprices/ngreg_hdd.csv deleted file mode 100644 index f6e825cb..00000000 --- a/inputs/fuelprices/ngreg_hdd.csv +++ /dev/null @@ -1,42 +0,0 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest -2010,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 -2011,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 -2012,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 -2013,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 -2014,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 -2015,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 -2016,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 -2017,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 -2018,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 -2019,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 -2020,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 -2021,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 -2022,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 -2023,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 -2024,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 -2025,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 -2026,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 -2027,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 -2028,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 -2029,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 -2030,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 -2031,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 -2032,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 -2033,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 -2034,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 -2035,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 -2036,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 -2037,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 -2038,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 -2039,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 -2040,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 -2041,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 -2042,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 -2043,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 -2044,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 -2045,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 -2046,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 -2047,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 -2048,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 -2049,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 -2050,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 From 64b1067b0652c0b5c751ec3ee5593c66356edf8b Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 29 Apr 2026 17:52:08 -0400 Subject: [PATCH 15/85] Revert extra blank line --- reeds/io.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reeds/io.py b/reeds/io.py index e37dfe1d..57d7dec6 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1909,4 +1909,3 @@ def get_folder_size(casedir): # convert to GB total_size /= 1e9 return total_size - From f05a822360169172dd414698d74c0904adf6c316 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Thu, 30 Apr 2026 07:29:54 -0600 Subject: [PATCH 16/85] Fixing 2060 extension in fuelcostprep --- input_processing/fuelcostprep.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index a5acf0b6..69bd19a1 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -163,18 +163,34 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): dtype=int, ) - # annual gasreg totals (read from inputs_case to pick up forecasted values) + # annual gasreg totals ddh = pd.read_csv( - os.path.join(inputs_case, 'gasreg_hdd.csv'), + os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_hdd.csv'), index_col=0, ) ddc = pd.read_csv( - os.path.join(inputs_case, 'gasreg_cdd.csv'), + os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_cdd.csv'), index_col=0, ) ddh.index = ddh.index.astype(int) ddc.index = ddc.index.astype(int) + # Extrapolate to cover model years beyond the source data using linear_5 fit + # (mirrors forecast.py behavior since fuelcostprep runs before forecast.py, no way to have forecasted values available yet) + for dd in [ddh, ddc]: + lastdatayear = dd.index.max() + addyears = [y for y in model_years if y > lastdatayear] + if addyears: + fitlength = 5 + fityears = [y for y in range(lastdatayear - fitlength, lastdatayear + 1) + if y in dd.index] + x = np.vstack([fityears, np.ones(len(fityears))]).T + y = dd.loc[fityears].values + coefs, _, _, _ = np.linalg.lstsq(x, y, rcond=None) + for addyear in addyears: + dd.loc[addyear] = coefs[0] * addyear + coefs[1] + dd.sort_index(inplace=True) + ddh = ddh.loc[ddh.index.intersection(model_years)].copy() ddc = ddc.loc[ddc.index.intersection(model_years)].copy() From 40ce4399ede7b2a2b4092b461e2e5bfde4265e27 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Thu, 30 Apr 2026 07:50:11 -0600 Subject: [PATCH 17/85] Added nat_gas_price_diffs.h5 to be copied, removed 2060 from fuelcostprep --- input_processing/fuelcostprep.py | 16 ---------------- inputs/userinput/futurefiles.csv | 1 + runfiles.csv | 1 + 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 69bd19a1..dcedac7f 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -175,22 +175,6 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): ddh.index = ddh.index.astype(int) ddc.index = ddc.index.astype(int) - # Extrapolate to cover model years beyond the source data using linear_5 fit - # (mirrors forecast.py behavior since fuelcostprep runs before forecast.py, no way to have forecasted values available yet) - for dd in [ddh, ddc]: - lastdatayear = dd.index.max() - addyears = [y for y in model_years if y > lastdatayear] - if addyears: - fitlength = 5 - fityears = [y for y in range(lastdatayear - fitlength, lastdatayear + 1) - if y in dd.index] - x = np.vstack([fityears, np.ones(len(fityears))]).T - y = dd.loc[fityears].values - coefs, _, _, _ = np.linalg.lstsq(x, y, rcond=None) - for addyear in addyears: - dd.loc[addyear] = coefs[0] * addyear + coefs[1] - dd.sort_index(inplace=True) - ddh = ddh.loc[ddh.index.intersection(model_years)].copy() ddc = ddc.loc[ddc.index.intersection(model_years)].copy() diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 87b5be04..e45c8a5c 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -264,6 +264,7 @@ month2quarter.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, mttr.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, nat_gen_tech_frac.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant natgas_price_cendiv.csv,.csv,0,None,year,None,1,0,constant,None,None,new, +natgas_price_diffs.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,projection?,constant national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, diff --git a/runfiles.csv b/runfiles.csv index 73a59d6f..0dbc592f 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -27,6 +27,7 @@ allt.csv,inputs/sets/allt.csv,1,ignore,ignore,,,,,,,,,allt,, alpha.csv,inputs/fuelprices/alpha_{ngscen}.csv,1,ignore,ignore,wide_cendiv,t,,1,0,,,,,, gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, +natgas_price_diffs.h5,inputs/fuelprices/natgas_price_diffs.h5,1,sum,ignore,wide,"year,hour",,1,keepindex,,1,,,, bio_supplycurve.csv,inputs/supply_curve/bio_supplycurve.csv,1,ignore,ignore,usda_region,,,,0,,,,,, bioclass.csv,inputs/sets/bioclass.csv,1,ignore,ignore,,,,,,,,,bioclass,, can_exports.csv,inputs/canada_imports/can_exports.csv,int(sw.GSw_Canada) != 0,sum,ignore,r,wide,,1,0,,,,,, From 77f11f61e9324b208a8d7f07abdf516d7f268019 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Thu, 30 Apr 2026 08:03:33 -0600 Subject: [PATCH 18/85] Fixed h5 call in runfiles --- runfiles.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runfiles.csv b/runfiles.csv index 0dbc592f..d44d3999 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -27,7 +27,7 @@ allt.csv,inputs/sets/allt.csv,1,ignore,ignore,,,,,,,,,allt,, alpha.csv,inputs/fuelprices/alpha_{ngscen}.csv,1,ignore,ignore,wide_cendiv,t,,1,0,,,,,, gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, -natgas_price_diffs.h5,inputs/fuelprices/natgas_price_diffs.h5,1,sum,ignore,wide,"year,hour",,1,keepindex,,1,,,, +natgas_price_diffs.h5,,1,sum,ignore,wide,"year,hour",,1,keepindex,,1,,,, bio_supplycurve.csv,inputs/supply_curve/bio_supplycurve.csv,1,ignore,ignore,usda_region,,,,0,,,,,, bioclass.csv,inputs/sets/bioclass.csv,1,ignore,ignore,,,,,,,,,bioclass,, can_exports.csv,inputs/canada_imports/can_exports.csv,int(sw.GSw_Canada) != 0,sum,ignore,r,wide,,1,0,,,,,, From 4f8ec6e20707739dd5eed914fe176dfa0fc653cf Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Thu, 30 Apr 2026 08:29:00 -0600 Subject: [PATCH 19/85] Changed years looped over --- input_processing/fuelcostprep.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index dcedac7f..83478df1 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -332,7 +332,7 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): # expand to model years and scale to annual gasreg totals out = [] - for t in model_years: + for t in ddh.index: idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') # only needed if model year is leap year, exclude dec 31st and keep Feb 29th From 28c6e0391addf9a5e6c1ad8a6a2764324931084a Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 4 May 2026 14:00:34 -0400 Subject: [PATCH 20/85] Rename weather-gas price regression parameters file --- ....csv => degree_day_gas_price_regression_parameters.csv} | 0 runfiles.csv | 7 ++++--- 2 files changed, 4 insertions(+), 3 deletions(-) rename inputs/fuelprices/{temperature_price_regression_parameters.csv => degree_day_gas_price_regression_parameters.csv} (100%) diff --git a/inputs/fuelprices/temperature_price_regression_parameters.csv b/inputs/fuelprices/degree_day_gas_price_regression_parameters.csv similarity index 100% rename from inputs/fuelprices/temperature_price_regression_parameters.csv rename to inputs/fuelprices/degree_day_gas_price_regression_parameters.csv diff --git a/runfiles.csv b/runfiles.csv index d44d3999..63e1bbdc 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -25,9 +25,6 @@ aggreg2anchorreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, anchorreg2aggreg.csv,,1,ignore,ignore,ignore,,,0,0,,,,,, allt.csv,inputs/sets/allt.csv,1,ignore,ignore,,,,,,,,,allt,, alpha.csv,inputs/fuelprices/alpha_{ngscen}.csv,1,ignore,ignore,wide_cendiv,t,,1,0,,,,,, -gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, -gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide,t,,1,0,,,,,, -natgas_price_diffs.h5,,1,sum,ignore,wide,"year,hour",,1,keepindex,,1,,,, bio_supplycurve.csv,inputs/supply_curve/bio_supplycurve.csv,1,ignore,ignore,usda_region,,,,0,,,,,, bioclass.csv,inputs/sets/bioclass.csv,1,ignore,ignore,,,,,,,,,bioclass,, can_exports.csv,inputs/canada_imports/can_exports.csv,int(sw.GSw_Canada) != 0,sum,ignore,r,wide,,1,0,,,,,, @@ -107,6 +104,7 @@ dac_elec.csv,inputs/consume/dac_elec_{dacscen}.csv,int(sw.GSw_DAC) != 0,ignore,i dac_gas.csv,inputs/consume/dac_gas_{GSw_DAC_Gas_Case}.csv,int(sw.GSw_DAC) != 0,ignore,ignore,,,,1,0,,1,,,, deflator.csv,inputs/financials/deflator.csv,1,ignore,ignore,,,,,0,,,,,, degradation_annual.csv,inputs/degradation/degradation_annual_{degrade_suffix}.csv,1,ignore,ignore,,,,,0,,,,,, +degree_day_gas_price_regression_parameters.csv,inputs/fuelprices/degree_day_gas_price_regression_parameters.csv,1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, demonstration_plants.csv,inputs/capacity_exogenous/demonstration_plants.csv,int(sw.GSw_NuclearDemo) != 0,sum,ignore,r,"t,i,coolingwatertech,ctt,wst,notes",i,0,0,,,,,, depreciation_schedules.csv,inputs/financials/depreciation_schedules_{depreciation_schedules_suffix}.csv,1,ignore,ignore,,,,1,0,,,,,, diagnose.gms,postprocessing/diagnose/diagnose.gms,1,ignore,ignore,,,,,,,,,,, @@ -156,6 +154,8 @@ fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,,fuel2tech,, fuel_price.csv,,1,ignore,ignore,,"i,r",,0,0,,,,,,ReEDS-to-PLEXOS output fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,,fuelbin,, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, +gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, +gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,,gb,, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,,gbin,, gbin_min.csv,inputs/growth_constraints/gbin_min.csv,1,ignore,ignore,,,,,0,,,,,, @@ -258,6 +258,7 @@ modeledyears.csv,,1,ignore,ignore,,,,,0,,,,,, month2quarter.csv,inputs/temporal/month2quarter.csv,1,ignore,ignore,,,,,0,,,,,, mttr.csv,inputs/plant_characteristics/mttr.csv,1,ignore,ignore,,,tech,,0,,,,,, natgas_price_cendiv.csv,inputs/fuelprices/ng_{ngscen}.csv,1,ignore,ignore,wide_cendiv,year,,1,0,,,,,, +natgas_price_diffs.h5,,1,sum,ignore,wide_gasreg,"year,hour",,1,keepindex,,1,,,, national_rps_frac_allScen.csv,inputs/national_generation/national_rps_frac_allScen.csv,int(sw.GSw_StateRPS) != 0,ignore,ignore,,,,1,0,,,,,, net_gen_existing_hydro.csv,inputs/hydro/net_gen_existing_hydro.csv,1,ignore,ignore,,"t,month",,0,0,,,,,, peak_net_imports.csv,inputs/reserves/peak_net_imports.csv,1,ignore,ignore,nercr,t,,0,0,,,,,, From 2543e8b3200fa7cd2ed5f56db3f50690ed2e166b Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 4 May 2026 14:01:02 -0400 Subject: [PATCH 21/85] Add base temperature for degree day calculations to scalars.csv --- inputs/scalars.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/inputs/scalars.csv b/inputs/scalars.csv index 3b3d0334..37eeb795 100644 --- a/inputs/scalars.csv +++ b/inputs/scalars.csv @@ -23,6 +23,7 @@ csp_sm_2,2.4,"--fraction-- solar multiple for csp2" csp_sm_3,1.3,"--fraction-- solar multiple for csp3" csp_sm_4,1.0,"--fraction-- solar multiple for csp4" csp_sm_baseline,2.4,"--fraction-- baseline solar multiple to normalize other CSP solar multiples by" +degree_days_base_temperature,18.33,"--temperature in degrees Celsius to use as the baseline temperature for calculating degree days" distloss,0.05,"--fraction-- distribution loss rate from bus to final consumption. A generic estimate of distribution losses taken many years ago from AEO 2006" euros_dollar,1.124,"--USD/Euro-- dollars per euro exchange rate from treasury department (https://fiscal.treasury.gov/files/reports-statements/treasury-reporting-rates-exchange/ratesofexchangeasofdecember312019.pdf)" forced_outage_rate_h2_smr,0.1,"--fraction-- forced outage rate of steam methane reforming" From fdb42433e90d650574f01348f2fdac3d422bbd4d Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 4 May 2026 14:02:53 -0400 Subject: [PATCH 22/85] Apply hourly chunk lengths to gas price multipliers and export multipliers for both r and cendiv region levels --- input_processing/hourly_writetimeseries.py | 177 +++++++++++---------- 1 file changed, 89 insertions(+), 88 deletions(-) diff --git a/input_processing/hourly_writetimeseries.py b/input_processing/hourly_writetimeseries.py index 14485edd..75eedb37 100644 --- a/input_processing/hourly_writetimeseries.py +++ b/input_processing/hourly_writetimeseries.py @@ -226,99 +226,69 @@ def get_yearly_demand(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): return load_in, load_out -def get_natgas_price_diffs(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): - """ - This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a - GAMS-compatible file. The h5 contains daily multiplicative natural gas price - factors indexed by (year [model year t], datetime) with model region columns. Repeat daily value across - hours - """ - ### Load daily natgas price diffs from fuelcostprep.py - ngdiffs = reeds.io.read_file( - os.path.join(inputs_case, 'natgas_price_diffs.h5'), parse_timestamps=True) - - ### Extract model year (t) and (month, day) from the MultiIndex - ngdiffs = ngdiffs.reset_index() - ngdiffs_dt = pd.to_datetime(ngdiffs['datetime']) - ngdiffs['month'] = ngdiffs_dt.dt.month - ngdiffs['day'] = ngdiffs_dt.dt.day - ngdiffs = ngdiffs.rename(columns={'year': 't'}).drop(columns=['datetime']) - regions = [c for c in ngdiffs.columns if c not in ['t', 'month', 'day']] - - ### Get (month, day) for each hour in hmap_allyrs using local time - hmap_ts = pd.to_datetime(hmap_allyrs['timestamp']) - if hmap_ts.dt.tz is not None: - hmap_local = hmap_ts.dt.tz_convert('Etc/GMT+6') - else: - hmap_local = hmap_ts - - h_md = pd.DataFrame({ - 'actual_h': hmap_allyrs['actual_h'].values, - 'month': hmap_local.dt.month.values, - 'day': hmap_local.dt.day.values, - }).drop_duplicates(subset=['actual_h']) - - ### Broadcast daily values to hourly by merging on (month, day), - ### which creates one row per (actual_h, t) combination - ngdiffs_hourly = h_md.merge(ngdiffs, on=['month', 'day'], how='left') - ngdiffs_hourly = ngdiffs_hourly.drop(columns=['month', 'day']).rename( - columns={'actual_h': 'h'}) - - ### Filter to modeled periods - if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): - keep_h = hmap_allyrs.loc[ - hmap_allyrs.year.isin(sw['GSw_HourlyWeatherYears']), 'actual_h' - ].unique() - ngdiffs_hourly = ngdiffs_hourly.loc[ - ngdiffs_hourly.h.isin(keep_h)].copy() - else: - ngdiffs_hourly = ngdiffs_hourly.loc[ - ngdiffs_hourly.h.isin(hmap_myr.h.unique())].copy() - - ### Reshape for ReEDS: stack regions to get (r, h, t) index - ngdiffs_out = ngdiffs_hourly.set_index(['h', 't'])[regions] - ngdiffs_out.columns.name = 'r' - ngdiffs_out = ( - ngdiffs_out.stack('r') - .rename('multiplier') - .reorder_levels(['r', 'h', 't']) - .sort_index() - ) - +def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): + """ + This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a + GAMS-compatible file. The h5 contains daily multiplicative natural gas price + factors indexed by (year [model year t], datetime) with model region columns. + Repeat daily value across hours. + """ + ### Load daily natgas price diffs from fuelcostprep.py + dfin = reeds.io.read_file( + os.path.join(inputs_case, f'daily_gas_price_multipliers_{regionlevel}.h5'), + parse_timestamps=True + ) + dfin = dfin.unstack(level=0) + dfin.columns = dfin.columns.rename(['r','t']) + dfin = dfin.reindex(hmap_myr.timestamp).ffill() + dfin.index = ( + dfin.index.map(hmap_myr.set_index('timestamp')['actual_h']) + .rename('h') + ) - return ngdiffs_out + ### For full year, keep all periods in the modeled years + if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): + dfout = dfin.copy() + ### Otherwise, pull out the specified periods + else: + dfout = dfin.loc[hmap_myr.h.unique()].copy() + + ### Reshape for ReEDS + dfout = dfout.stack("r").reorder_levels(["r", "h"], axis=0).sort_index() + + return dfout def format_climate_inputs(filename, inputs_case, szn_month_weights): - """ - This function converts climate data from monthly to repperiod resolution using the - szn_month_weights - """ - climate_index = { - 'temp_hydadjsea': ['r','season','t'], - 'temp_UnappWaterMult': ['wst','r','season','t'], - 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] - } - - df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) - df_out = szn_month_weights.merge(df, on='month', how='outer') - df_out['value'] = df_out['weight'] * df_out['Value'] - df_out = ( - df_out - .groupby(climate_index[filename]).agg({'value':'sum'}) - .value - ## For rep periods, sum of season weights is 1, so the next line has no effect. - ## For full chronological year (GSw_HourlyType=year), we use four seasons, - ## so the sum of season weights is the number of months in that season and - ## we need to divide sum{cf*weight} by sum{weight}. - / szn_month_weights.groupby('season').weight.sum() - ).rename('value').reset_index().rename(columns={'season':'szn'}) - # Convert to GAMS-readable wide format - climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] - climate_index = [x for x in climate_index if x != 't'] - df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') + """ + This function converts climate data from monthly to repperiod resolution using the + szn_month_weights + """ + climate_index = { + 'temp_hydadjsea': ['r','season','t'], + 'temp_UnappWaterMult': ['wst','r','season','t'], + 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] + } - return df_out + df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) + df_out = szn_month_weights.merge(df, on='month', how='outer') + df_out['value'] = df_out['weight'] * df_out['Value'] + df_out = ( + df_out + .groupby(climate_index[filename]).agg({'value':'sum'}) + .value + ## For rep periods, sum of season weights is 1, so the next line has no effect. + ## For full chronological year (GSw_HourlyType=year), we use four seasons, + ## so the sum of season weights is the number of months in that season and + ## we need to divide sum{cf*weight} by sum{weight}. + / szn_month_weights.groupby('season').weight.sum() + ).rename('value').reset_index().rename(columns={'season':'szn'}) + # Convert to GAMS-readable wide format + climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] + climate_index = [x for x in climate_index if x != 't'] + df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') + + return df_out def get_yearly_flexibility( sw, @@ -1376,6 +1346,26 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr .reset_index() ) + ################################################################# + # -- Weather-based natural gas price multipliers -- # + ################################################################# + gas_price_multipliers_dict = {} + for regionlevel in ['r', 'cendiv']: + df = get_gas_price_multipliers( + sw=sw, + hmap_myr=hmap_myr, + inputs_case=inputs_case, + periodtype=periodtype, + regionlevel=regionlevel + ) + # Apply hourly chunk length + df = ( + df.loc[df.index.get_level_values('h').isin(chunkmap.values())] + .stack('t') + .rename('multiplier') + .reset_index() + ) + gas_price_multipliers_dict[regionlevel] = df # %%################################################################################### # -- Write outputs, aggregating hours to GSw_HourlyChunkLength if necessary -- # @@ -1564,6 +1554,17 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr False, False, ], + ## Annual timeslice gas price multipliers + 'gas_price_multipliers_r': [ + gas_price_multipliers_dict['r'].round(decimals), + False, + False + ], + 'gas_price_multipliers_cendiv': [ + gas_price_multipliers_dict['cendiv'].round(decimals), + False, + False + ], ################################################################################## ###### The next parameters are just diagnostics and are not actually used in ReEDS ## Representative period weights for postprocessing (szn) From 30db774b48fb81be92effe514a3334652d9b7482 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 4 May 2026 14:08:54 -0400 Subject: [PATCH 23/85] Fix get_county2zone function and add get_county_populations function --- reeds/io.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/reeds/io.py b/reeds/io.py index 57d7dec6..09fb03d4 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -157,10 +157,12 @@ def get_county2zone( if as_map: dfout = dfin.set_index('FIPS')['r'] - else: + elif case is None: fpath_countystate = Path(reeds.io.reeds_path, 'inputs', 'zones', 'county_state.csv') county_state = pd.read_csv(fpath_countystate, dtype=str) dfout = dfin.merge(county_state, on='FIPS', how='left') + else: + dfout = dfin return dfout @@ -1218,6 +1220,19 @@ def get_distpv_cf_hourly(): ) return read_file(h5path, parse_timestamps=True) +def get_county_populations(): + """ + Get county populations. + """ + return pd.read_csv( + os.path.join( + reeds_path, + 'inputs', + 'disaggregation', + 'county_population.csv' + ) + ) + def get_years(case): return pd.read_csv( os.path.join(case, 'inputs_case', 'modeledyears.csv') From 54b701b564c1189c80ed8219f5b57d8f5f919b56 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 4 May 2026 14:09:40 -0400 Subject: [PATCH 24/85] Split degree day functionalities into different functions and export daily gas price multipliers for r and cendiv region levels --- input_processing/fuelcostprep.py | 592 ++++++++++++++++--------------- 1 file changed, 303 insertions(+), 289 deletions(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 83478df1..f3860d77 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -21,6 +21,295 @@ import h5py sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import reeds + +def calculate_state_weights( + inputs_case, + st2gasreg +): + ## Calculate state population to calculate + ## population-weighted degree days + # Get county populations + county_populations = reeds.io.get_county_populations() + county_populations = county_populations.rename( + columns={'value': 'population'} + ) + # Get county-state map + county2zone = reeds.io.get_county2zone( + os.path.dirname(inputs_case), + as_map=False + ) + county2zone['FIPS'] = ( + 'p' + county2zone['FIPS'].astype(str).str.zfill(5) + ) + county_state_map = county2zone.set_index('FIPS')['state'] + # Calculate state populations + county_populations['state'] = ( + county_populations['FIPS'].map(county_state_map) + ) + state_populations = ( + county_populations.groupby('state', as_index=False) + ['population'] + .sum() + ) + # Calculate state weights + state_populations['gasreg'] = ( + state_populations['state'].map(st2gasreg) + ) + state_populations['weight'] = ( + state_populations['population'] + / ( + state_populations.groupby('gasreg') + ['population'] + .transform('sum') + ) + ) + state_weights = ( + state_populations.set_index('state')['weight'] + ) + + return state_weights + +def calculate_historical_daily_state_degree_days(inputs_case): + # Get hourly state-level temperatures + sw = reeds.io.get_switches(inputs_case) + weather_years = [int(y) for y in sw.GSw_HourlyWeatherYears.split('_')] + temp_hourly = reeds.io.get_temperatures(inputs_case, subset_years=False) + temp_hourly = temp_hourly.loc[temp_hourly.index.year.isin(weather_years)] + + # Get baseline temperature + scalars = reeds.io.get_scalars(inputs_case) + base_temp = scalars['degree_days_base_temperature'] + + # Calculate state-level, daily heating and cooling degree days + temp_daily = temp_hourly.resample('D').agg(['min', 'max']) + avg_temp_daily = ( + temp_daily.xs('min', axis=1, level=1) + + temp_daily.xs('max', axis=1, level=1) + ) / 2 + hdd_daily = (base_temp - avg_temp_daily).clip(lower=0) + cdd_daily = (avg_temp_daily - base_temp).clip(lower=0) + + return hdd_daily, cdd_daily + +def calculate_historical_daily_gasreg_popweighted_degree_days( + historical_daily_state_degree_days, + state_weights, + st2gasreg +): + historical_daily_gasreg_popweighted_degree_days = ( + (historical_daily_state_degree_days * state_weights) + .transpose() + .rename(st2gasreg) + .groupby(level=0) + .sum() + .transpose() + ) + return historical_daily_gasreg_popweighted_degree_days + +def calculate_projected_daily_gasreg_popweighted_degree_days( + historical_daily_gasreg_popweighted_degree_days, + annual_gasreg_degree_day_projections +): + # Apply historical degree day shapes to annual projections + historical_gasreg_popweighted_degree_day_shapes = ( + historical_daily_gasreg_popweighted_degree_days.div( + historical_daily_gasreg_popweighted_degree_days.groupby( + historical_daily_gasreg_popweighted_degree_days.index.year + ) + .transform('sum') + ) + ) + daily_gasreg_popweighted_degree_days = ( + pd.merge( + historical_gasreg_popweighted_degree_day_shapes.reset_index(), + annual_gasreg_degree_day_projections.reset_index(), + how='cross', + suffixes=('_shape', '_magnitude') + ) + .set_index(['t', 'timestamp']) + .rename_axis(['year', 'datetime']) + .sort_index() + ) + for gasreg in annual_gasreg_degree_day_projections.columns: + daily_gasreg_popweighted_degree_days[gasreg] = ( + daily_gasreg_popweighted_degree_days[f"{gasreg}_shape"] + * daily_gasreg_popweighted_degree_days[f"{gasreg}_magnitude"] + ) + daily_gasreg_popweighted_degree_days = ( + daily_gasreg_popweighted_degree_days.drop( + columns=[f"{gasreg}_shape", f"{gasreg}_magnitude"] + ) + ) + + return daily_gasreg_popweighted_degree_days + +def calculate_daily_gasreg_population_weighted_degree_days( + reeds_path, + inputs_case, +): + # state -> gasreg mapping + state_groups = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') + ) + st2gasreg = state_groups.set_index('st')['gasreg'] + # Get population-based state weights + state_weights = calculate_state_weights( + inputs_case, + st2gasreg + ) + # Get historical state-level daily HDD/CDDs + historical_hdd_daily_st, historical_cdd_daily_st = ( + calculate_historical_daily_state_degree_days(inputs_case) + ) + # Calculate historical gasreg-level population-weighted degree days + historical_popweighted_hdd_daily_gasreg = ( + calculate_historical_daily_gasreg_popweighted_degree_days( + historical_hdd_daily_st, + state_weights, + st2gasreg + ) + ) + historical_popweighted_cdd_daily_gasreg = ( + calculate_historical_daily_gasreg_popweighted_degree_days( + historical_cdd_daily_st, + state_weights, + st2gasreg + ) + ) + # Get gasreg-level annual HDD/CDD projections + valid_gasregs = historical_popweighted_hdd_daily_gasreg.columns.tolist() + solveyears = reeds.io.get_years(os.path.dirname(inputs_case)) + gasreg_hdd = pd.read_csv( + os.path.join( + reeds_path, + 'inputs', + 'fuelprices', + "gasreg_hdd.csv" + ), + index_col=0 + ) + gasreg_hdd = ( + gasreg_hdd.loc[gasreg_hdd.index.isin(solveyears)] + .copy() + [valid_gasregs] + ) + gasreg_cdd = pd.read_csv( + os.path.join( + reeds_path, + 'inputs', + 'fuelprices', + "gasreg_cdd.csv" + ), + index_col=0 + ) + gasreg_cdd = ( + gasreg_cdd.loc[gasreg_cdd.index.isin(solveyears)] + .copy() + [valid_gasregs] + ) + # Apply annual HDD/CDD projections to historical degree day shapes + popweighted_hdd_daily_gasreg = ( + calculate_projected_daily_gasreg_popweighted_degree_days( + historical_popweighted_hdd_daily_gasreg, + gasreg_hdd + ) + ) + popweighted_cdd_daily_gasreg = ( + calculate_projected_daily_gasreg_popweighted_degree_days( + historical_popweighted_cdd_daily_gasreg, + gasreg_cdd + ) + ) + + return popweighted_hdd_daily_gasreg, popweighted_cdd_daily_gasreg + +def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): + # Get temperature-price regression parameters and daily + # population-weighted degree days for each gasreg + params = pd.read_csv( + os.path.join( + reeds_path, + 'inputs', + 'fuelprices', + 'degree_day_gas_price_regression_parameters.csv' + ), + index_col='param' + ) + popweighted_hdd_daily_gasreg, popweighted_cdd_daily_gasreg = ( + calculate_daily_gasreg_population_weighted_degree_days( + reeds_path, + inputs_case, + ) + ) + # Apply regression parameters to get daily price multipliers + df_out = pd.DataFrame(index=popweighted_hdd_daily_gasreg.index) + regions = popweighted_hdd_daily_gasreg.columns.tolist() + for r in regions: + beta_cdd = params.loc['beta_CDD', r] + beta_hdd = params.loc['beta_HDD', r] + alpha = params.loc['alpha', r] + # monthly effects + month_effects_map = params.loc[params.index.str.contains('alpha_')][r] + month_effects_map.index = month_effects_map.index.str.removeprefix('alpha_') + month_effects = ( + popweighted_hdd_daily_gasreg.index + .get_level_values('datetime') + .strftime('%b') + .str + .upper() + .map(month_effects_map) + ) + gasreg_price_log_returns = ( + alpha + + beta_cdd * popweighted_cdd_daily_gasreg[r] + + beta_hdd * popweighted_hdd_daily_gasreg[r] + + month_effects.values + ) + + df_out[r] = np.exp(gasreg_price_log_returns) + + valid_zones = reeds.io.get_rmap(os.path.dirname(inputs_case)).index.tolist() + hierarchy = reeds.io.assemble_hierarchy(os.path.dirname(inputs_case)) + hierarchy = hierarchy.loc[hierarchy.r.isin(valid_zones)] + + # Create one set of multipliers for model zones + # (needed if GSw_GasCurve == 2) + r_gasreg_map = dict(zip(hierarchy['r'], hierarchy['gasreg'])) + df_out_r = pd.DataFrame(data={ + r: df_out[gasreg] for r, gasreg in r_gasreg_map.items() + }) + + # Create another set of multipliers for census divisions + # (needed if GSw_GasCurve != 2) + popweighted_dd_daily_gasreg = ( + popweighted_hdd_daily_gasreg + popweighted_cdd_daily_gasreg + ) + annual_gasreg_dd = ( + popweighted_dd_daily_gasreg.groupby( + popweighted_dd_daily_gasreg.index.get_level_values('year') + ) + .sum() + ) + gasreg_cendiv_map = dict(zip(hierarchy['gasreg'], hierarchy['cendiv'])) + annual_cendiv_dd = ( + annual_gasreg_dd.transpose() + .assign(cendiv=gasreg_cendiv_map) + .groupby('cendiv', as_index=False) + .transform('sum') + .transpose() + ) + annual_gasreg_cendiv_weights = annual_gasreg_dd / annual_cendiv_dd + df_out_cendiv = ( + df_out.mul(annual_gasreg_cendiv_weights, level=0) + .transpose() + .rename(gasreg_cendiv_map) + .groupby(level=0) + .sum() + .transpose() + ) + + return df_out_r, df_out_cendiv + # Time the operation of this script tic = datetime.datetime.now() @@ -140,295 +429,6 @@ fuel = fuel.merge(h2fuel,on=['t','r'],how='left') fuel = fuel.sort_values(['t','r']) -#%%#################################### -### Natural Gas Price Diffs ### - -def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): - """ - Return daily HDD/CDD by gasreg for the modeled years in this case, - using temperature shapes from GSw_HourlyWeatherYears and annual totals - from gasreg_hdd.csv / gasreg_cdd.csv. - """ - case = reeds.io.standardize_case(case) - inputs_case = os.path.join(case, 'inputs_case') - sw = reeds.io.get_switches(case) - - # modeled years for outputs - model_years = reeds.io.get_years(case) - model_years = np.array([y for y in model_years if y <= int(sw.endyear)], dtype=int) - - # weather years for temperature shapes - weather_years = np.array( - [int(y) for y in str(sw.GSw_HourlyWeatherYears).split('_') if str(y).strip()], - dtype=int, - ) - - # annual gasreg totals - ddh = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_hdd.csv'), - index_col=0, - ) - ddc = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'fuelprices', 'gasreg_cdd.csv'), - index_col=0, - ) - ddh.index = ddh.index.astype(int) - ddc.index = ddc.index.astype(int) - - ddh = ddh.loc[ddh.index.intersection(model_years)].copy() - ddc = ddc.loc[ddc.index.intersection(model_years)].copy() - - # state -> gasreg mapping - state_groups = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') - ) - st2gasreg = state_groups.set_index('st')['gasreg'] - - # valid states in this case - val_st = ( - pd.read_csv(os.path.join(inputs_case, 'val_st.csv'), header=None) - .squeeze(1) - .astype(str) - .values - ) - valid_states = [s for s in val_st if s in st2gasreg.index] - - # state population - pop = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'disaggregation', 'county_population.csv'), - dtype={'FIPS': str}, - ).rename(columns={'value': 'population'}) - - county_state = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'zones', 'county_state.csv'), - dtype={'FIPS': str, 'state': str}, - ) - county_state['FIPS'] = 'p' + county_state['FIPS'].str.zfill(5) - - pop_state = ( - pop.merge(county_state[['FIPS', 'state']], on='FIPS', how='left') - .rename(columns={'state': 'st'}) - .dropna(subset=['st']) - .groupby('st', as_index=True)['population'] - .sum() - .rename_axis('st') - .rename('population') - .to_frame() - ) - - pop_state = pop_state.loc[pop_state.index.intersection(valid_states)].copy() - pop_state['gasreg'] = pop_state.index.map(st2gasreg) - - active_gasregs = sorted(pop_state['gasreg'].dropna().unique()) - - pop_state['weight'] = ( - pop_state['population'] - / pop_state.groupby('gasreg')['population'].transform('sum') - ) - - # read temperature file using one extra year on each side - h5path = os.path.join( - reeds.io.reeds_path, 'inputs', 'profiles_temperature', 'temperature_state.h5' - ) - - read_years = range(weather_years.min() - 1, weather_years.max() + 2) - - temp_dict = {} - with h5py.File(h5path, 'r') as f: - cols = pd.Series(f['columns']).map(lambda x: x.decode()).tolist() - - for year in read_years: - if str(year) not in f: - continue - - timeindex = pd.to_datetime( - pd.Series(f[f'index_{year}'][:]).str.decode('utf-8') - ) - - temp_dict[year] = pd.DataFrame( - index=timeindex, - columns=cols, - data=f[str(year)][:] - ) - - temp = ( - pd.concat(temp_dict, names=['weather_year', 'timestamp']) - .rename_axis(columns='st') - .round(0) - .astype(float) - .reset_index('weather_year', drop=True) - .tz_localize('UTC') - .tz_convert('Etc/GMT+6') - ) - - # subset to selected weather years after timezone conversion - temp = temp.loc[temp.index.year.isin(weather_years)].copy() - - - # keep valid states only - temp = temp[[c for c in temp.columns if c in valid_states]].copy() - - if hourly_formula: - hdd = (base_temp_c - temp).clip(lower=0) - cdd = (temp - base_temp_c).clip(lower=0) - - hdd_daily_st = hdd.resample('D').sum() - cdd_daily_st = cdd.resample('D').sum() - else: - temp_daily_st = temp.resample('D').agg(['min', 'max']) - - tavg_daily_st = ( - temp_daily_st.xs('min', axis=1, level=1) - + temp_daily_st.xs('max', axis=1, level=1) - ) / 2 - - hdd_daily_st = (base_temp_c - tavg_daily_st).clip(lower=0) - cdd_daily_st = (tavg_daily_st - base_temp_c).clip(lower=0) - - # weighted aggregation to gasreg - state_weights = pop_state['weight'].to_dict() - state_gasreg = pop_state['gasreg'].to_dict() - - hdd_daily_reg = pd.concat( - { - st: hdd_daily_st[st] * state_weights[st] - for st in hdd_daily_st.columns - if st in state_weights - }, - axis=1, - ) - hdd_daily_reg.columns = [state_gasreg[st] for st in hdd_daily_reg.columns] - hdd_daily_reg = hdd_daily_reg.groupby(level=0, axis=1).sum() - hdd_daily_reg = hdd_daily_reg[[c for c in hdd_daily_reg.columns if c in active_gasregs]] - - cdd_daily_reg = pd.concat( - { - st: cdd_daily_st[st] * state_weights[st] - for st in cdd_daily_st.columns - if st in state_weights - }, - axis=1, - ) - cdd_daily_reg.columns = [state_gasreg[st] for st in cdd_daily_reg.columns] - cdd_daily_reg = cdd_daily_reg.groupby(level=0, axis=1).sum() - cdd_daily_reg = cdd_daily_reg[[c for c in cdd_daily_reg.columns if c in active_gasregs]] - - # normalize daily shapes within each weather year - hdd_shape = hdd_daily_reg.div( - hdd_daily_reg.groupby(hdd_daily_reg.index.year).transform('sum') - ) - cdd_shape = cdd_daily_reg.div( - cdd_daily_reg.groupby(cdd_daily_reg.index.year).transform('sum') - ) - - hdd_shape['month'] = hdd_shape.index.month - hdd_shape['day'] = hdd_shape.index.day - cdd_shape['month'] = cdd_shape.index.month - cdd_shape['day'] = cdd_shape.index.day - - hdd_md = hdd_shape.groupby(['month', 'day'])[active_gasregs].mean() - cdd_md = cdd_shape.groupby(['month', 'day'])[active_gasregs].mean() - - # expand to model years and scale to annual gasreg totals - out = [] - - for t in ddh.index: - idx = pd.date_range(f'{t}-01-01', f'{t}-12-31', freq='D') - - # only needed if model year is leap year, exclude dec 31st and keep Feb 29th - if len(idx) > 365: - idx = idx[~((idx.month == 12) & (idx.day == 31))] - # 365-day calendar excludes Feb 29 - else: - #Make sure to exclude Feb 29 even if we don't expect it to be present - idx = idx[~((idx.month == 2) & (idx.day == 29))] - - - hdd_t = pd.DataFrame(index=idx, columns=active_gasregs, dtype=float) - cdd_t = pd.DataFrame(index=idx, columns=active_gasregs, dtype=float) - - for dt in idx: - key = (dt.month, dt.day) - hdd_t.loc[dt] = hdd_md.loc[key].values - cdd_t.loc[dt] = cdd_md.loc[key].values - - hdd_t = hdd_t.mul(ddh.loc[t, active_gasregs], axis=1) - cdd_t = cdd_t.mul(ddc.loc[t, active_gasregs], axis=1) - - hdd_t['t'] = t - cdd_t['t'] = t - hdd_t['ddtype'] = 'hdd' - cdd_t['ddtype'] = 'cdd' - - out.append(hdd_t.reset_index().rename(columns={'index': 'date'})) - out.append(cdd_t.reset_index().rename(columns={'index': 'date'})) - - daily_dds = pd.concat(out, ignore_index=True) - return daily_dds - -# Regression parameters for calculating natural gas price differences across regions based on degree days -params = pd.read_csv(os.path.join(reeds_path,'inputs', 'fuelprices', 'temperature_price_regression_parameters.csv'), index_col='param') - -# Daily degree days by price region -daily_dd = get_degree_days(inputs_case, hourly_formula=False) - -#apply the regional regression params to get daily multiplicative price differences from the annual price -daily_dd['date'] = pd.to_datetime(daily_dd['date']) -daily_dd['month'] = daily_dd['date'].dt.month - -regions = [c for c in daily_dd.columns if c not in ['date','t','ddtype','month']] - -# split HDD / CDD -hdd = daily_dd[daily_dd['ddtype'] == 'hdd'].set_index('date') -cdd = daily_dd[daily_dd['ddtype'] == 'cdd'].set_index('date') - -# align -hdd, cdd = hdd.align(cdd, join='outer', axis=0, fill_value=0) - -out = pd.DataFrame(index=hdd.index) - -for r in regions: - beta_cdd = params.loc['beta_CDD', r] - beta_hdd = params.loc['beta_HDD', r] - alpha = params.loc['alpha', r] - - # monthly effects - month_map = { - i: params.loc[f'alpha_{m}', r] - for i, m in enumerate( - ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'], - start=1 - ) - } - - #Align index of month effects with index of hdd/cdd - month_effect = hdd.index.month.map(month_map) - - log_ret = ( - alpha - + beta_cdd * cdd[r] - + beta_hdd * hdd[r] - + month_effect.values - ) - - out[r] = np.exp(log_ret) - -out_year = hdd['t'].where(hdd['t'].notna(), cdd['t']) -if out_year.isna().any(): - raise ValueError('Missing weather year for one or more natural gas price diff dates') - -out_datetime = out.index -if out_datetime.tz is None: - out_datetime = out_datetime.tz_localize('Etc/GMT+6') - -out = out.astype(np.float32) -out.index = pd.MultiIndex.from_arrays( - [out_year.astype(np.int32), out_datetime], - names=['year', 'datetime'], -) -out = out.sort_index() -reeds.io.write_profile_to_h5(out, 'natgas_price_diffs.h5', inputs_case) - #%%#################################### ### Natural Gas Demand Calculations ### @@ -450,6 +450,10 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): alpha = alpha[alpha.columns[alpha.columns.isin(val_cendiv)]] alpha = alpha.round(6) +daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( + calculate_daily_gas_price_multipliers(reeds_path, inputs_case) +) + #%%################### ### Data Write-Out ### ###################### @@ -462,6 +466,16 @@ def get_degree_days(case, base_temp_c=18.3333333333, hourly_formula=False): ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) +reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_r, + 'daily_gas_price_multipliers_r.h5', + inputs_case +) +reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_cendiv, + 'daily_gas_price_multipliers_cendiv.h5', + inputs_case +) reeds.log.toc(tic=tic, year=0, process='input_processing/fuelcostprep.py', path=os.path.join(inputs_case,'..')) From 67679be86f4b3a64e3a3ffcf04fe02c2356b98b5 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:42:50 -0400 Subject: [PATCH 25/85] Add gasreg column to all hierarchy_from134.csv files --- inputs/zones/PJMcounty/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/UTcounty/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z132/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z134/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z3109/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z48/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z54/hierarchy_from134.csv | 270 +++++++++---------- inputs/zones/z69/hierarchy_from134.csv | 270 +++++++++---------- 8 files changed, 1080 insertions(+), 1080 deletions(-) diff --git a/inputs/zones/PJMcounty/hierarchy_from134.csv b/inputs/zones/PJMcounty/hierarchy_from134.csv index c1b5a1a7..de692ba7 100644 --- a/inputs/zones/PJMcounty/hierarchy_from134.csv +++ b/inputs/zones/PJMcounty/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1 -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2 -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3 -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4 -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5 -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6 -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7 -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8 -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9 -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10 -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11 -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12 -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13 -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14 -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15 -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16 -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17 -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18 -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19 -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20 -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21 -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22 -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23 -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24 -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25 -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26 -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27 -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29 -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31 -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32 -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33 -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34 -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35 -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36 -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37 -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38 -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39 -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40 -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41 -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42 -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43 -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44 -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45 -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46 -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47 -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48 -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49 -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50 -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51 -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52 -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53 -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54 -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55 -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56 -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57 -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58 -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59 -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60 -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61 -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62 -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63 -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64 -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65 -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66 -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67 -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68 -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69 -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70 -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71 -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72 -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73 -p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74 -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75 -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76 -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77 -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78 -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79 -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80 -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81 -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82 -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83 -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84 -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85 -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86 -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87 -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88 -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89 -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90 -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91 -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92 -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93 -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94 -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95 -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96 -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97 -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98 -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99 -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100 -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101 -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102 -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103 -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104 -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105 -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106 -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107 -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108 -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109 -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110 -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111 -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112 -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113 -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114 -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115 -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116 -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117 -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118 -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120 -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121 -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123 -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124 -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125 -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126 -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127 -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128 -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129 -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130 -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131 -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132 -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133 -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134 +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73,West_North_Central +p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134,New_England diff --git a/inputs/zones/UTcounty/hierarchy_from134.csv b/inputs/zones/UTcounty/hierarchy_from134.csv index c1b5a1a7..de692ba7 100644 --- a/inputs/zones/UTcounty/hierarchy_from134.csv +++ b/inputs/zones/UTcounty/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1 -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2 -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3 -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4 -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5 -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6 -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7 -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8 -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9 -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10 -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11 -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12 -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13 -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14 -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15 -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16 -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17 -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18 -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19 -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20 -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21 -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22 -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23 -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24 -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25 -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26 -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27 -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29 -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31 -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32 -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33 -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34 -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35 -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36 -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37 -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38 -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39 -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40 -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41 -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42 -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43 -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44 -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45 -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46 -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47 -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48 -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49 -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50 -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51 -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52 -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53 -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54 -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55 -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56 -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57 -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58 -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59 -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60 -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61 -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62 -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63 -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64 -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65 -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66 -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67 -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68 -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69 -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70 -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71 -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72 -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73 -p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74 -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75 -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76 -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77 -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78 -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79 -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80 -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81 -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82 -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83 -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84 -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85 -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86 -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87 -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88 -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89 -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90 -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91 -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92 -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93 -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94 -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95 -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96 -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97 -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98 -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99 -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100 -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101 -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102 -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103 -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104 -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105 -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106 -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107 -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108 -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109 -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110 -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111 -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112 -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113 -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114 -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115 -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116 -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117 -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118 -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120 -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121 -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123 -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124 -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125 -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126 -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127 -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128 -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129 -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130 -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131 -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132 -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133 -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134 +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73,West_North_Central +p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134,New_England diff --git a/inputs/zones/z132/hierarchy_from134.csv b/inputs/zones/z132/hierarchy_from134.csv index c1b5a1a7..de692ba7 100644 --- a/inputs/zones/z132/hierarchy_from134.csv +++ b/inputs/zones/z132/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1 -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2 -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3 -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4 -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5 -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6 -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7 -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8 -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9 -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10 -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11 -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12 -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13 -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14 -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15 -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16 -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17 -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18 -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19 -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20 -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21 -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22 -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23 -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24 -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25 -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26 -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27 -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29 -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31 -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32 -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33 -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34 -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35 -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36 -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37 -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38 -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39 -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40 -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41 -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42 -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43 -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44 -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45 -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46 -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47 -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48 -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49 -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50 -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51 -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52 -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53 -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54 -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55 -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56 -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57 -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58 -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59 -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60 -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61 -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62 -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63 -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64 -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65 -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66 -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67 -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68 -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69 -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70 -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71 -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72 -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73 -p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74 -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75 -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76 -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77 -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78 -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79 -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80 -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81 -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82 -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83 -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84 -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85 -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86 -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87 -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88 -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89 -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90 -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91 -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92 -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93 -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94 -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95 -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96 -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97 -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98 -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99 -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100 -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101 -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102 -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103 -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104 -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105 -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106 -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107 -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108 -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109 -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110 -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111 -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112 -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113 -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114 -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115 -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116 -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117 -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118 -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120 -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121 -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123 -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124 -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125 -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126 -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127 -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128 -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129 -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130 -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131 -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132 -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133 -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134 +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73,West_North_Central +p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134,New_England diff --git a/inputs/zones/z134/hierarchy_from134.csv b/inputs/zones/z134/hierarchy_from134.csv index c1b5a1a7..de692ba7 100644 --- a/inputs/zones/z134/hierarchy_from134.csv +++ b/inputs/zones/z134/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1 -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2 -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3 -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4 -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5 -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6 -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7 -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8 -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9 -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10 -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11 -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12 -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13 -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14 -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15 -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16 -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17 -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18 -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19 -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20 -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21 -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22 -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23 -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24 -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25 -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26 -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27 -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29 -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31 -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32 -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33 -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34 -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35 -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36 -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37 -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38 -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39 -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40 -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41 -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42 -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43 -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44 -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45 -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46 -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47 -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48 -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49 -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50 -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51 -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52 -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53 -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54 -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55 -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56 -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57 -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58 -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59 -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60 -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61 -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62 -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63 -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64 -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65 -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66 -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67 -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68 -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69 -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70 -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71 -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72 -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73 -p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74 -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75 -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76 -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77 -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78 -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79 -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80 -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81 -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82 -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83 -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84 -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85 -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86 -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87 -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88 -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89 -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90 -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91 -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92 -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93 -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94 -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95 -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96 -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97 -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98 -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99 -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100 -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101 -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102 -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103 -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104 -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105 -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106 -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107 -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108 -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109 -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110 -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111 -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112 -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113 -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114 -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115 -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116 -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117 -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118 -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120 -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121 -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123 -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124 -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125 -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126 -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127 -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128 -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129 -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130 -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131 -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132 -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133 -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134 +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73,West_North_Central +p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134,New_England diff --git a/inputs/zones/z3109/hierarchy_from134.csv b/inputs/zones/z3109/hierarchy_from134.csv index c1b5a1a7..de692ba7 100644 --- a/inputs/zones/z3109/hierarchy_from134.csv +++ b/inputs/zones/z3109/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1 -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2 -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3 -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4 -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5 -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6 -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7 -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8 -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9 -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10 -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11 -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12 -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13 -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14 -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15 -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16 -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17 -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18 -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19 -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20 -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21 -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22 -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23 -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24 -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25 -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26 -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27 -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29 -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28 -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31 -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32 -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33 -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34 -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35 -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36 -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37 -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38 -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39 -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40 -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41 -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42 -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43 -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44 -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45 -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46 -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47 -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48 -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49 -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50 -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51 -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52 -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53 -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54 -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55 -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56 -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57 -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58 -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59 -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60 -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61 -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62 -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63 -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64 -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65 -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66 -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67 -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68 -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69 -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70 -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71 -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72 -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73 -p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74 -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75 -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76 -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77 -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78 -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79 -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80 -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81 -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82 -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83 -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84 -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85 -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86 -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87 -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88 -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89 -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90 -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91 -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92 -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93 -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94 -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95 -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96 -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97 -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98 -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99 -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100 -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101 -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102 -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103 -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104 -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105 -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106 -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107 -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108 -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109 -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110 -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111 -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112 -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113 -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114 -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115 -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116 -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117 -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118 -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120 -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121 -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122 -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123 -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124 -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125 -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126 -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127 -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128 -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129 -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130 -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131 -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132 -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133 -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134 +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Puget_Sound_Energy_Inc,p1,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,p2,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Avista_Corp,p3,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,PUD_No2_of_Grant_County,p4,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p5,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,PacifiCorp_West,p6,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,p7,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,p8,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p9,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p10,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,p11,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p12,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,p13,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Avista_Corp,p14,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p15,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,p16,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p17,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p18,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,WAPA_Upper_Great_Plains_West,p19,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,p20,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p21,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,p22,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p23,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,p24,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p25,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,p26,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,WAPA_Desert_Southwest_Region,p27,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p39,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p40,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,p41,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p42,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p43,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p51,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p52,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,p53,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p54,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p55,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p63,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p64,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p65,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,p66,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p67,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p68,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p69,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p70,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p71,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p72,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p73,West_North_Central +p74,MISO,MISO,MISO_North,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p74,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p75,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p76,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p77,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p78,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p79,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,p80,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p81,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p82,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,p83,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,p84,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,p85,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p86,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,p87,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,p88,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p89,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,p90,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,p91,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,p92,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,p93,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,p94,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,p95,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,p96,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,p97,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Progress_East,p98,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p99,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p100,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,p101,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Florida_Power_and_Light,p102,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,p103,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,p104,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p105,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p106,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,p107,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,p108,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p109,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,p110,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p111,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p112,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p113,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,p114,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p115,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p116,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,p117,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p118,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,p120,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p121,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,z122,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,p123,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,p124,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,p125,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,p126,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p127,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,p128,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,p129,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,p130,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,p131,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,p132,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,p133,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,p134,New_England diff --git a/inputs/zones/z48/hierarchy_from134.csv b/inputs/zones/z48/hierarchy_from134.csv index c0275442..0be59e10 100644 --- a/inputs/zones/z48/hierarchy_from134.csv +++ b/inputs/zones/z48/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p8,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p23,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p24,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM -p32,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p35,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND -p37,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p47,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM -p48,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p54,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p55,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p56,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR -p57,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p59,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p66,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p80,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS -p88,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p91,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN -p93,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p104,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p108,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p8,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p23,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p24,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM,Southwest +p32,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p35,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND,West_North_Central +p37,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p47,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM,Southwest +p48,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p54,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p55,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p56,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR,West_South_Central +p57,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p59,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p66,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p80,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS,East_South_Central +p88,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p91,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN,East_South_Central +p93,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p104,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p108,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME,New_England diff --git a/inputs/zones/z54/hierarchy_from134.csv b/inputs/zones/z54/hierarchy_from134.csv index 59b418b3..21d862d8 100644 --- a/inputs/zones/z54/hierarchy_from134.csv +++ b/inputs/zones/z54/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p8,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p23,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p24,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM -p32,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p35,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND -p37,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p47,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p54,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p55,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p56,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR -p57,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p59,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,IL_PJM -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS -p88,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p91,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN -p93,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p104,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p108,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_UP -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_NYCLI -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p8,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p23,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p24,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM,Southwest +p32,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p35,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND,West_North_Central +p37,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p47,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p54,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p55,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p56,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR,West_South_Central +p57,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p59,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_W,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_ERCOT_E,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,IL_PJM,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS,East_South_Central +p88,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p91,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN,East_South_Central +p93,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,Duke_Energy_Carolinas_LLC,SC,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p104,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p108,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_UP,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_NYCLI,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME,New_England diff --git a/inputs/zones/z69/hierarchy_from134.csv b/inputs/zones/z69/hierarchy_from134.csv index 8a2d12aa..49507169 100644 --- a/inputs/zones/z69/hierarchy_from134.csv +++ b/inputs/zones/z69/hierarchy_from134.csv @@ -1,135 +1,135 @@ -ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg -p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA -p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR -p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,CA_NorthernGrid -p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N_CAISO -p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S_CAISO -p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S_CAISO -p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV -p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID -p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid -p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid -p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid -p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid -p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY_NorthernGrid -p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY_NorthernGrid -p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,WY_WestConnect -p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,WY_WestConnect -p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT -p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ -p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM_WestConnect -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,SD_WestConnect -p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,MT_SPP -p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND_SPP -p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,ND_MISO -p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD_SPP -p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE -p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,NM_SPP -p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_N -p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK -p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS -p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,MO_SPP -p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,MO_SPP -p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,AR_SPP -p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_E -p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,TX_WestConnect -p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT -p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT -p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT -p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT -p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT -p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT -p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO -p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT -p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN -p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA -p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO -p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO -p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO -p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI_MISO -p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI -p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,IL_PJM -p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO -p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO -p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR_MISO -p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA -p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS_MISO -p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,MS_SERTP -p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL -p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,FL_SERTP -p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN -p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,KY_SERTP -p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA -p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,SC -p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,SC -p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC -p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL_FRCC -p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL_FRCC -p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI_MISO -p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,MI_PJM -p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN -p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,KY_MISO -p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY_PJM -p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY_PJM -p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH -p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV -p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA -p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD -p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA -p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE -p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ -p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_UP -p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_NYCLI -p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT -p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH -p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA -p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT -p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI -p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME +ba,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,aggreg,gasreg +p1,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p2,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p3,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p4,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,WA,western,USA,pacific,Northwest,Bonneville_Power_Administration,WA,Northwest +p5,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p6,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p7,WECC_NW,NorthernGrid,NorthernGrid_West,Pacific,OR,western,USA,pacific,Northwest,Bonneville_Power_Administration,OR,Northwest +p8,WECC_NW,NorthernGrid,NorthernGrid_South,Pacific,CA,western,USA,pacific,California,PacifiCorp_West,CA_NorthernGrid,California +p9,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_N_CAISO,California +p10,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S_CAISO,California +p11,WECC_CA,CAISO,CAISO,Pacific,CA,western,USA,pacific,California,CAISO,CA_S_CAISO,California +p12,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p13,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,NV,western,USA,mountain,Mountain,Nevada_Power_Co,NV,Mountain +p14,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p15,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p16,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,ID,western,USA,mountain,Northwest,Idaho_Power_Co,ID,Mountain +p17,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid,Mountain +p18,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid,Mountain +p19,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid,Mountain +p20,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,MT,western,USA,mountain,Mountain,Northwestern_Energy,MT_NorthernGrid,Mountain +p21,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY_NorthernGrid,Mountain +p22,WECC_NW,NorthernGrid,NorthernGrid_East,Mountain,WY,western,USA,mountain,Mountain,PacifiCorp_East,WY_NorthernGrid,Mountain +p23,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,WY_WestConnect,Mountain +p24,WECC_NW,WestConnect,WestConnect_North,Mountain,WY,western,USA,mountain,Mountain,WAPA_Rocky_Mountain_Region,WY_WestConnect,Mountain +p25,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p26,WECC_NW,NorthernGrid,NorthernGrid_South,Mountain,UT,western,USA,mountain,Mountain,PacifiCorp_East,UT,Mountain +p27,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest +p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM_WestConnect,Southwest +p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,SD_WestConnect,West_North_Central +p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain +p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,MT_SPP,Mountain +p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND_SPP,West_North_Central +p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,ND_MISO,West_North_Central +p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD_SPP,West_North_Central +p39,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p40,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p41,SPP,SPP,SPP_North,West_North_Central,NE,eastern,USA,northern-plains,Plains,SPP,NE,West_North_Central +p42,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,NM_SPP,Southwest +p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_N,West_South_Central +p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p51,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central +p52,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p53,SPP,SPP,SPP_South,West_North_Central,KS,eastern,USA,northern-plains,Plains,SPP,KS,West_North_Central +p54,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,MO_SPP,West_North_Central +p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,MO_SPP,West_North_Central +p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,AR_SPP,West_South_Central +p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_E,West_South_Central +p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,TX_WestConnect,West_South_Central +p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central +p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central +p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central +p63,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT,West_South_Central +p64,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT,West_South_Central +p65,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT,West_South_Central +p66,MISO,MISO,MISO_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,MISO,TX_MISO,West_South_Central +p67,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_E_ERCOT,West_South_Central +p68,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central +p69,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p70,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central +p71,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO,West_North_Central +p72,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO,West_North_Central +p73,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO,West_North_Central +p74,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI_MISO,East_North_Central +p75,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p76,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p77,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p78,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p79,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central +p80,PJM,PJM,PJM_West,East_North_Central,IL,eastern,USA,corn-belt,Midwest,PJM,IL_PJM,East_North_Central +p81,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p82,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p83,MISO,MISO,MISO_Central,East_North_Central,IL,eastern,USA,corn-belt,Midwest,MISO,IL_MISO,East_North_Central +p84,MISO,MISO,MISO_Central,West_North_Central,MO,eastern,USA,corn-belt,Midwest,MISO,MO_MISO,West_North_Central +p85,MISO,MISO,MISO_South,West_South_Central,AR,eastern,USA,delta-states,Delta,MISO,AR_MISO,West_South_Central +p86,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central +p87,MISO,MISO,MISO_South,East_South_Central,MS,eastern,USA,delta-states,Delta,MISO,MS_MISO,East_South_Central +p88,SERC_C,SERTP,SERTP,East_South_Central,MS,eastern,USA,delta-states,Delta,Tennessee_Valley_Authority,MS_SERTP,East_South_Central +p89,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p90,SERC_SE,SERTP,SERTP,East_South_Central,AL,eastern,USA,southeast,Southeast,PowerSouth_Energy_Coop,AL,East_South_Central +p91,SERC_SE,SERTP,SERTP,South_Atlantic,FL,eastern,USA,southeast,Florida,Southern_Co_Services_Inc,FL_SERTP,South_Atlantic +p92,SERC_C,SERTP,SERTP,East_South_Central,TN,eastern,USA,appalachia,Southeast,Tennessee_Valley_Authority,TN,East_South_Central +p93,SERC_C,SERTP,SERTP,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,Tennessee_Valley_Authority,KY_SERTP,East_South_Central +p94,SERC_SE,SERTP,SERTP,South_Atlantic,GA,eastern,USA,southeast,Southeast,Southern_Co_Services_Inc,GA,South_Atlantic +p95,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,SC,South_Atlantic +p96,SERC_E,SERTP,SERTP,South_Atlantic,SC,eastern,USA,southeast,Southeast,South_Carolina_Electric_Gas_Co,SC,South_Atlantic +p97,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p98,SERC_E,SERTP,SERTP,South_Atlantic,NC,eastern,USA,appalachia,Southeast,Duke_Energy_Carolinas_LLC,NC,South_Atlantic +p99,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p100,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p101,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL_FRCC,South_Atlantic +p102,SERC_F,FRCC,FRCC,South_Atlantic,FL,eastern,USA,southeast,Florida,Seminole_Electric_Coop_Inc,FL_FRCC,South_Atlantic +p103,MISO,MISO,MISO_Central,East_North_Central,MI,eastern,USA,lake-states,Midwest,MISO,MI_MISO,East_North_Central +p104,PJM,PJM,PJM_West,East_North_Central,MI,eastern,USA,lake-states,Midwest,PJM,MI_PJM,East_North_Central +p105,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p106,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p107,MISO,MISO,MISO_Central,East_North_Central,IN,eastern,USA,corn-belt,Midwest,MISO,IN,East_North_Central +p108,MISO,MISO,MISO_Central,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,MISO,KY_MISO,East_South_Central +p109,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY_PJM,East_South_Central +p110,PJM,PJM,PJM_East,East_South_Central,KY,eastern,USA,appalachia,MidAtlantic,PJM,KY_PJM,East_South_Central +p111,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p112,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p113,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p114,PJM,PJM,PJM_East,East_North_Central,OH,eastern,USA,corn-belt,MidAtlantic,PJM,OH,East_North_Central +p115,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p116,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p117,PJM,PJM,PJM_East,South_Atlantic,WV,eastern,USA,appalachia,MidAtlantic,PJM,WV,South_Atlantic +p118,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p119,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p120,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p121,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p122,PJM,PJM,PJM_East,Mid_Atlantic,PA,eastern,USA,northeast,MidAtlantic,PJM,PA,Mid_Atlantic +p123,PJM,PJM,PJM_East,South_Atlantic,MD,eastern,USA,northeast,MidAtlantic,PJM,MD,South_Atlantic +p124,PJM,PJM,PJM_East,South_Atlantic,VA,eastern,USA,appalachia,MidAtlantic,PJM,VA,South_Atlantic +p125,PJM,PJM,PJM_East,South_Atlantic,DE,eastern,USA,northeast,MidAtlantic,PJM,DE,South_Atlantic +p126,PJM,PJM,PJM_East,Mid_Atlantic,NJ,eastern,USA,northeast,MidAtlantic,PJM,NJ,Mid_Atlantic +p127,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_UP,Mid_Atlantic +p128,NPCC_NY,NYISO,NYISO,Mid_Atlantic,NY,eastern,USA,northeast,NewYork,NYISO,NY_NYCLI,Mid_Atlantic +p129,NPCC_NE,ISONE,ISONE,New_England,VT,eastern,USA,northeast,NewEngland,ISONE,VT,New_England +p130,NPCC_NE,ISONE,ISONE,New_England,NH,eastern,USA,northeast,NewEngland,ISONE,NH,New_England +p131,NPCC_NE,ISONE,ISONE,New_England,MA,eastern,USA,northeast,NewEngland,ISONE,MA,New_England +p132,NPCC_NE,ISONE,ISONE,New_England,CT,eastern,USA,northeast,NewEngland,ISONE,CT,New_England +p133,NPCC_NE,ISONE,ISONE,New_England,RI,eastern,USA,northeast,NewEngland,ISONE,RI,New_England +p134,NPCC_NE,ISONE,ISONE,New_England,ME,eastern,USA,northeast,NewEngland,ISONE,ME,New_England From bd51109c5e41e2215db984a94956612e40af94af Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:43:47 -0400 Subject: [PATCH 26/85] Add gasreg handling and gas_price_multipliers parameters --- b_inputs.gms | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/b_inputs.gms b/b_inputs.gms index 0d59e562..fdda14c5 100644 --- a/b_inputs.gms +++ b/b_inputs.gms @@ -223,12 +223,18 @@ h2ptcreg "Regions which enforce the H2 production incentive regulations, for the / * written by copy_files.py $include inputs_case%ds%val_h2ptcreg.csv -/ +/, * Hurdle rate regions hurdlereg "Hurdle regions" / $include inputs_case%ds%val_hurdlereg.csv +/, + +* Natural gas regions +gasreg "Natural gas regions" +/ +$include inputs_case%ds%val_gasreg.csv / ; @@ -1282,7 +1288,7 @@ $onlisting * --- Begin hierarchy --- *====================================== -set hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) "hierarchy of various regional definitions" +set hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) "hierarchy of various regional definitions" / $offlisting $ondelim @@ -1304,20 +1310,21 @@ set r_itlgrp(r,itlgrp) r_usda(r,usda_region) r_h2ptcreg(r,h2ptcreg) r_hurdlereg(r,hurdlereg) + r_gasreg(r,gasreg) r_ccreg(r,ccreg) ; -r_nercr(r,nercr) $sum{( transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_transreg(r,transreg) $sum{(nercr, transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_transgrp(r,transgrp) $sum{(nercr,transreg, cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_cendiv(r,cendiv) $sum{(nercr,transreg,transgrp, st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_st(r,st) $sum{(nercr,transreg,transgrp,cendiv, interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_interconnect(r,interconnect) $sum{(nercr,transreg,transgrp,cendiv,st, country,usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_country(r,country) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect, usda_region,h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_usda(r,usda_region) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country, h2ptcreg,hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_h2ptcreg(r,h2ptcreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region, hurdlereg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_hurdlereg(r,hurdlereg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg, ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; -r_ccreg(r,ccreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg ) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,ccreg),1} = yes ; +r_nercr(r,nercr) $sum{( transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_transreg(r,transreg) $sum{(nercr, transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_transgrp(r,transgrp) $sum{(nercr,transreg, cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_cendiv(r,cendiv) $sum{(nercr,transreg,transgrp, st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_st(r,st) $sum{(nercr,transreg,transgrp,cendiv, interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_interconnect(r,interconnect) $sum{(nercr,transreg,transgrp,cendiv,st, country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_country(r,country) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect, usda_region,h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_usda(r,usda_region) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country, h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_h2ptcreg(r,h2ptcreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region, hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_hurdlereg(r,hurdlereg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg, gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_ccreg(r,ccreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg ) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; set r_itlgrp(r,itlgrp) "mapping of r to itlgrp" / @@ -6743,6 +6750,8 @@ Parameter * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" + gas_price_multipliers_r(r,allh,allt) "--unitless-- multiplier for zonal gas prices" + gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- multiplier for cendiv-level gas prices" ; alias(allh,allhh,allhhh) ; From 92f425d30ff3ab738a0c1526e0513a70905dac36 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:44:27 -0400 Subject: [PATCH 27/85] Add val_gasreg.csv to runfiles.csv --- runfiles.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/runfiles.csv b/runfiles.csv index 63e1bbdc..8d816f99 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -466,6 +466,7 @@ val_cs.csv,,1,ignore,ignore,,,,0,none,,,,,, val_hurdlereg.csv,,1,ignore,ignore,,,,0,none,,,,,, val_interconnect.csv,,1,ignore,ignore,,,,0,none,,,,,, val_nercr.csv,,1,ignore,ignore,,,,0,none,,,,,, +val_gasreg.csv,,1,ignore,ignore,,,,0,none,,,,,, val_h2ptcreg.csv,,1,ignore,ignore,,,,0,none,,,,,, val_r.csv,,1,ignore,ignore,0,,,0,none,,1,,,, val_r_all.csv,,1,ignore,ignore,,,,0,none,,,,,, From 143e4ef0193602fa75b459bf604f6f80f0eec13c Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:45:05 -0400 Subject: [PATCH 28/85] Remove unused import --- input_processing/fuelcostprep.py | 1 - 1 file changed, 1 deletion(-) diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index f3860d77..75f7e118 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -18,7 +18,6 @@ import sys import argparse import datetime -import h5py sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import reeds From 9937295909bc2c93e1deb8b4c1e0600c8658c345 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:45:38 -0400 Subject: [PATCH 29/85] Bugfixes --- input_processing/hourly_writetimeseries.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/input_processing/hourly_writetimeseries.py b/input_processing/hourly_writetimeseries.py index 75eedb37..8b87d509 100644 --- a/input_processing/hourly_writetimeseries.py +++ b/input_processing/hourly_writetimeseries.py @@ -239,7 +239,7 @@ def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regio parse_timestamps=True ) dfin = dfin.unstack(level=0) - dfin.columns = dfin.columns.rename(['r','t']) + dfin.columns = dfin.columns.rename([regionlevel,'t']) dfin = dfin.reindex(hmap_myr.timestamp).ffill() dfin.index = ( dfin.index.map(hmap_myr.set_index('timestamp')['actual_h']) @@ -254,7 +254,7 @@ def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regio dfout = dfin.loc[hmap_myr.h.unique()].copy() ### Reshape for ReEDS - dfout = dfout.stack("r").reorder_levels(["r", "h"], axis=0).sort_index() + dfout = dfout.stack(regionlevel).reorder_levels([regionlevel, "h"], axis=0).sort_index() return dfout @@ -531,6 +531,8 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr 'evmc_storage_energy': ['*i','r','h','t'], 'flex_frac_all': ['*flex_type','r','h','t'], 'peak_h': ['*r','h','t','MW'], + 'gas_price_multipliers_r': ['*r','h','t','multiplier'], + 'gas_price_multipliers_cendiv': ['*cendiv','h','t','multiplier'], } for f, columns in write.items(): pd.DataFrame(columns=columns).to_csv( From 075412880a256e5febe5cedc607c9989c8feed2c Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:46:53 -0400 Subject: [PATCH 30/85] Apply daily price multipliers to gas prices in model --- c_supplyobjective.gms | 10 +++++----- d1_temporal_params.gms | 26 ++++++++++++++++++++------ d3_data_dump.gms | 8 ++++---- e_report.gms | 12 ++++++------ 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/c_supplyobjective.gms b/c_supplyobjective.gms index 38a5b0b3..1c174600 100644 --- a/c_supplyobjective.gms +++ b/c_supplyobjective.gms @@ -240,27 +240,27 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 2 (static natural gas prices) *first - gas consumed for electricity generation + sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)$(Sw_GasCurve = 2)], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) } + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gas_price_multipliers_r(r,h,t)} *second - gas consumed by gas-powered DAC + sum{(v,r,h)$[valcap("dac_gas",v,r,t)$(Sw_GasCurve = 2)], hours(h) * dac_gas_cons_rate("dac_gas",v,t) * PRODUCE("DAC","dac_gas",v,r,h,t) }$Sw_DAC_Gas *Sw_GasCurve = 0 (census division supply curves natural gas prices) - + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) } + + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t)} * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) *Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) - * gasadder_cd(cendiv,t,h) + gasprice_nat_bin(gb,t) + * gasadder_cd(cendiv,t,h) * gas_price_multipliers_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) }$(Sw_GasCurve = 3) *Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], - gasmultterm(cendiv,t) * szn_adj_gas(h) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gas_price_multipliers_cendiv(cendiv,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/d1_temporal_params.gms b/d1_temporal_params.gms index 444c7fc5..b4e39b56 100644 --- a/d1_temporal_params.gms +++ b/d1_temporal_params.gms @@ -828,6 +828,26 @@ maxload_szn(r,h,t,szn) = load_exog_static(r,h,t)) $h_szn(h,szn)$Sw_OpRes] = yes ; + +parameter gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +/ +$offlisting +$ondelim +$include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_r.csv +$offdelim +$onlisting +/ ; + +parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +/ +$offlisting +$ondelim +$include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_cendiv.csv +$offdelim +$onlisting +/ ; + + set h_ccseason_prm(allh,ccseason) "peak-load hour for the entire modeled system by ccseason" / $offlisting @@ -881,11 +901,6 @@ gasadder_cd(cendiv,t,h) = gasadder_cd(cendiv,t,h) + gasprice_ref_frac_adder * frac_h_quarter_weights(h,"wint") * gasprice_ref(cendiv,t) ; -szn_adj_gas(allh) = 0 ; -szn_adj_gas(h) = 1 ; -szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = - szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; - *============================================= * -- Round parameters for GAMS -- @@ -898,7 +913,6 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; -szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; diff --git a/d3_data_dump.gms b/d3_data_dump.gms index 29c97036..9520db39 100644 --- a/d3_data_dump.gms +++ b/d3_data_dump.gms @@ -194,19 +194,19 @@ repgasquant(cendiv,t)$[(Sw_GasCurve = 1 or Sw_GasCurve = 2)$tcur(t)] = } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) }], gasprice(cendiv,gb,t) } ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t) }], gasprice(cendiv,gb,t) } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_multipliers_r(r,h,t) } / (repgasquant(cendiv,t)) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * szn_adj_gas(h) * cendiv_weights(r,cendiv) * - hours(h) } / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * gas_price_multipliers_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/e_report.gms b/e_report.gms index ebd14d10..bfe6d6f0 100644 --- a/e_report.gms +++ b/e_report.gms @@ -529,19 +529,19 @@ repgasquant_nat(t)$tmodel_new(t) = sum{cendiv, repgasquant(cendiv,t) } ; *for reported gasprice (not that used to compute system costs) *scale back to $ / mmbtu repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) }], gasprice(cendiv,gb,t) } / gas_scale ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_multipliers_r(r,h,t) } / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * szn_adj_gas(h) * cendiv_weights(r,cendiv) * - hours(h) } / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * gas_price_multipliers_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) @@ -584,8 +584,8 @@ gascost_cendiv(cendiv,t)$tmodel_new(t) = *cost of natural gas for Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount + (sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)], - gasmultterm(cendiv,t) * szn_adj_gas(h) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) * gas_price_multipliers_r(r,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin), gasbinp_regional(fuelbin,cendiv,t) * VGASBINQ_REGIONAL.l(fuelbin,cendiv,t) } From 60ec9031869d1a151b2b680ccd8f0605ce017c6f Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 09:55:29 -0400 Subject: [PATCH 31/85] Add r and cendiv-level daily gas price multipliers --- inputs/userinput/futurefiles.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index e45c8a5c..f57841cb 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -94,6 +94,8 @@ d_szn_7yr.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, dac_assumptions.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant dac_elec.csv,.csv,0,None,t,i,1,0,linear_10,None,None,new, dac_gas.csv,.csv,0,None,t,i,1,0,linear_10,None,None,new, +daily_gas_price_multipliers_r.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 +daily_gas_price_multipliers_cendiv.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 deflator.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant degradation_adj.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, degradation_annual.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant @@ -264,7 +266,6 @@ month2quarter.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, mttr.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, nat_gen_tech_frac.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant natgas_price_cendiv.csv,.csv,0,None,year,None,1,0,constant,None,None,new, -natgas_price_diffs.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,projection?,constant national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, From 09180cade97a4a9a63825f04e6d28eb7b49a46cd Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 6 May 2026 12:13:21 -0400 Subject: [PATCH 32/85] Combine gasreg_hdd.csv and gasreg_cdd.csv into gasreg_degree_days.csv --- input_processing/fuelcostprep.py | 86 ++++++++++-------------- inputs/fuelprices/gasreg_cdd.csv | 42 ------------ inputs/fuelprices/gasreg_degree_days.csv | 83 +++++++++++++++++++++++ inputs/fuelprices/gasreg_hdd.csv | 42 ------------ inputs/userinput/futurefiles.csv | 3 +- runfiles.csv | 3 +- 6 files changed, 122 insertions(+), 137 deletions(-) delete mode 100644 inputs/fuelprices/gasreg_cdd.csv create mode 100644 inputs/fuelprices/gasreg_degree_days.csv delete mode 100644 inputs/fuelprices/gasreg_hdd.csv diff --git a/input_processing/fuelcostprep.py b/input_processing/fuelcostprep.py index 75f7e118..1cda5437 100644 --- a/input_processing/fuelcostprep.py +++ b/input_processing/fuelcostprep.py @@ -117,11 +117,12 @@ def calculate_projected_daily_gasreg_popweighted_degree_days( ) .transform('sum') ) + .reset_index() ) daily_gasreg_popweighted_degree_days = ( pd.merge( - historical_gasreg_popweighted_degree_day_shapes.reset_index(), - annual_gasreg_degree_day_projections.reset_index(), + historical_gasreg_popweighted_degree_day_shapes, + annual_gasreg_degree_day_projections, how='cross', suffixes=('_shape', '_magnitude') ) @@ -129,7 +130,13 @@ def calculate_projected_daily_gasreg_popweighted_degree_days( .rename_axis(['year', 'datetime']) .sort_index() ) - for gasreg in annual_gasreg_degree_day_projections.columns: + gasregs = ( + annual_gasreg_degree_day_projections + .drop(columns='t') + .columns + .tolist() + ) + for gasreg in gasregs: daily_gasreg_popweighted_degree_days[gasreg] = ( daily_gasreg_popweighted_degree_days[f"{gasreg}_shape"] * daily_gasreg_popweighted_degree_days[f"{gasreg}_magnitude"] @@ -175,36 +182,22 @@ def calculate_daily_gasreg_population_weighted_degree_days( st2gasreg ) ) - # Get gasreg-level annual HDD/CDD projections - valid_gasregs = historical_popweighted_hdd_daily_gasreg.columns.tolist() + # Get gasreg-level annual HDD/CDD projections and + # subset to solve years only solveyears = reeds.io.get_years(os.path.dirname(inputs_case)) - gasreg_hdd = pd.read_csv( - os.path.join( - reeds_path, - 'inputs', - 'fuelprices', - "gasreg_hdd.csv" - ), - index_col=0 + gasreg_degree_days = pd.read_csv( + os.path.join(inputs_case, 'gasreg_degree_days.csv') ) - gasreg_hdd = ( - gasreg_hdd.loc[gasreg_hdd.index.isin(solveyears)] - .copy() - [valid_gasregs] + gasreg_degree_days = ( + gasreg_degree_days.loc[gasreg_degree_days['t'].isin(solveyears)] ) - gasreg_cdd = pd.read_csv( - os.path.join( - reeds_path, - 'inputs', - 'fuelprices', - "gasreg_cdd.csv" - ), - index_col=0 + gasreg_hdd = ( + gasreg_degree_days.loc[gasreg_degree_days.ddtype == 'HDD'] + .drop(columns='ddtype') ) gasreg_cdd = ( - gasreg_cdd.loc[gasreg_cdd.index.isin(solveyears)] - .copy() - [valid_gasregs] + gasreg_degree_days.loc[gasreg_degree_days.ddtype == 'CDD'] + .drop(columns='ddtype') ) # Apply annual HDD/CDD projections to historical degree day shapes popweighted_hdd_daily_gasreg = ( @@ -225,11 +218,9 @@ def calculate_daily_gasreg_population_weighted_degree_days( def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): # Get temperature-price regression parameters and daily # population-weighted degree days for each gasreg - params = pd.read_csv( + dd_gas_price_regression_params = pd.read_csv( os.path.join( - reeds_path, - 'inputs', - 'fuelprices', + inputs_case, 'degree_day_gas_price_regression_parameters.csv' ), index_col='param' @@ -242,13 +233,16 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): ) # Apply regression parameters to get daily price multipliers df_out = pd.DataFrame(index=popweighted_hdd_daily_gasreg.index) - regions = popweighted_hdd_daily_gasreg.columns.tolist() - for r in regions: - beta_cdd = params.loc['beta_CDD', r] - beta_hdd = params.loc['beta_HDD', r] - alpha = params.loc['alpha', r] + for gasreg in dd_gas_price_regression_params.columns: + beta_cdd = dd_gas_price_regression_params.loc['beta_CDD', gasreg] + beta_hdd = dd_gas_price_regression_params.loc['beta_HDD', gasreg] + alpha = dd_gas_price_regression_params.loc['alpha', gasreg] # monthly effects - month_effects_map = params.loc[params.index.str.contains('alpha_')][r] + month_effects_map = ( + dd_gas_price_regression_params + .loc[dd_gas_price_regression_params.index.str.contains('alpha_')] + [gasreg] + ) month_effects_map.index = month_effects_map.index.str.removeprefix('alpha_') month_effects = ( popweighted_hdd_daily_gasreg.index @@ -260,24 +254,18 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): ) gasreg_price_log_returns = ( alpha - + beta_cdd * popweighted_cdd_daily_gasreg[r] - + beta_hdd * popweighted_hdd_daily_gasreg[r] + + beta_cdd * popweighted_cdd_daily_gasreg[gasreg] + + beta_hdd * popweighted_hdd_daily_gasreg[gasreg] + month_effects.values ) + df_out[gasreg] = np.exp(gasreg_price_log_returns) - df_out[r] = np.exp(gasreg_price_log_returns) - - valid_zones = reeds.io.get_rmap(os.path.dirname(inputs_case)).index.tolist() - hierarchy = reeds.io.assemble_hierarchy(os.path.dirname(inputs_case)) - hierarchy = hierarchy.loc[hierarchy.r.isin(valid_zones)] - + hierarchy = reeds.io.get_hierarchy(os.path.dirname(inputs_case)) # Create one set of multipliers for model zones # (needed if GSw_GasCurve == 2) - r_gasreg_map = dict(zip(hierarchy['r'], hierarchy['gasreg'])) df_out_r = pd.DataFrame(data={ - r: df_out[gasreg] for r, gasreg in r_gasreg_map.items() + r: df_out[gasreg] for r, gasreg in hierarchy['gasreg'].items() }) - # Create another set of multipliers for census divisions # (needed if GSw_GasCurve != 2) popweighted_dd_daily_gasreg = ( diff --git a/inputs/fuelprices/gasreg_cdd.csv b/inputs/fuelprices/gasreg_cdd.csv deleted file mode 100644 index 637780d2..00000000 --- a/inputs/fuelprices/gasreg_cdd.csv +++ /dev/null @@ -1,42 +0,0 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest -2010,634,913,963,1095,2271,1974,2754,568,294,105,1075 -2011,553,840,858,1074,2260,1725,3112,622,310,111,1151 -2012,563,819,974,1221,2163,1760,2913,780,387,136,1193 -2013,540,685,689,892,2001,1438,2535,714,346,174,1123 -2014,420,600,609,812,2000,1491,2474,850,314,217,1123 -2015,556,809,729,941,2397,1717,2742,831,341,236,1142 -2016,625,891,958,1072,2404,1956,2882,782,334,146,1166 -2017,451,665,708,910,2247,1585,2718,846,346,209,1202 -2018,668,890,972,1134,2411,1928,2855,815,372,188,1200 -2019,536,787,832,951,2503,1886,2759,694,305,150,1091 -2020,645,848,831,964,2335,1636,2735,913,378,157,1303 -2021,604,837,911,1093,2226,1611,2644,817,408,222,1174 -2022,647,838,816,1050,2302,1728,2992,853,394,234,1191 -2023,518,683,713,1042,2258,1669,3117,616,308,214,1173 -2024,620,867,899,1046,2399,1859,3073,861,405,200,1300 -2025,609,845,851,1046,2400,1773,2901,665,346,221,1168 -2026,615,853,856,1051,2415,1781,2915,780,367,259,1240 -2027,621,860,861,1056,2430,1788,2928,787,369,261,1247 -2028,627,868,866,1061,2445,1796,2942,794,371,263,1255 -2029,633,876,871,1066,2460,1803,2955,800,373,266,1262 -2030,640,884,876,1071,2476,1811,2969,807,375,268,1269 -2031,646,892,881,1076,2491,1818,2982,814,378,270,1276 -2032,652,900,886,1081,2507,1826,2996,821,380,272,1283 -2033,659,908,890,1086,2522,1834,3010,827,382,275,1290 -2034,665,915,895,1092,2538,1841,3023,834,384,277,1297 -2035,671,923,900,1097,2553,1849,3037,841,386,279,1304 -2036,678,931,905,1102,2569,1857,3050,848,388,282,1312 -2037,684,939,910,1107,2585,1864,3064,855,390,284,1319 -2038,690,947,915,1112,2600,1872,3077,862,392,286,1326 -2039,697,955,920,1117,2616,1879,3091,869,394,288,1333 -2040,703,963,925,1122,2632,1887,3104,876,396,290,1340 -2041,710,971,930,1128,2648,1895,3118,883,399,293,1346 -2042,716,978,935,1133,2663,1902,3131,890,401,295,1353 -2043,722,986,940,1138,2679,1910,3145,897,403,297,1360 -2044,729,994,945,1143,2695,1918,3158,903,405,300,1367 -2045,735,1002,950,1148,2711,1925,3172,910,407,302,1374 -2046,741,1010,955,1153,2727,1933,3185,918,409,304,1381 -2047,748,1018,960,1159,2742,1940,3199,924,411,307,1388 -2048,754,1026,965,1164,2758,1948,3212,931,413,309,1395 -2049,760,1033,970,1169,2774,1956,3226,938,415,311,1402 -2050,767,1041,975,1174,2790,1963,3239,945,417,313,1409 diff --git a/inputs/fuelprices/gasreg_degree_days.csv b/inputs/fuelprices/gasreg_degree_days.csv new file mode 100644 index 00000000..6740be71 --- /dev/null +++ b/inputs/fuelprices/gasreg_degree_days.csv @@ -0,0 +1,83 @@ +t,ddtype,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest +2010,CDD,634,913,963,1095,2271,1974,2754,568,294,105,1075 +2010,HDD,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 +2011,CDD,553,840,858,1074,2260,1725,3112,622,310,111,1151 +2011,HDD,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 +2012,CDD,563,819,974,1221,2163,1760,2913,780,387,136,1193 +2012,HDD,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 +2013,CDD,540,685,689,892,2001,1438,2535,714,346,174,1123 +2013,HDD,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 +2014,CDD,420,600,609,812,2000,1491,2474,850,314,217,1123 +2014,HDD,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 +2015,CDD,556,809,729,941,2397,1717,2742,831,341,236,1142 +2015,HDD,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 +2016,CDD,625,891,958,1072,2404,1956,2882,782,334,146,1166 +2016,HDD,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 +2017,CDD,451,665,708,910,2247,1585,2718,846,346,209,1202 +2017,HDD,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 +2018,CDD,668,890,972,1134,2411,1928,2855,815,372,188,1200 +2018,HDD,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 +2019,CDD,536,787,832,951,2503,1886,2759,694,305,150,1091 +2019,HDD,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 +2020,CDD,645,848,831,964,2335,1636,2735,913,378,157,1303 +2020,HDD,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 +2021,CDD,604,837,911,1093,2226,1611,2644,817,408,222,1174 +2021,HDD,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 +2022,CDD,647,838,816,1050,2302,1728,2992,853,394,234,1191 +2022,HDD,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 +2023,CDD,518,683,713,1042,2258,1669,3117,616,308,214,1173 +2023,HDD,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 +2024,CDD,620,867,899,1046,2399,1859,3073,861,405,200,1300 +2024,HDD,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 +2025,CDD,609,845,851,1046,2400,1773,2901,665,346,221,1168 +2025,HDD,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 +2026,CDD,615,853,856,1051,2415,1781,2915,780,367,259,1240 +2026,HDD,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 +2027,CDD,621,860,861,1056,2430,1788,2928,787,369,261,1247 +2027,HDD,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 +2028,CDD,627,868,866,1061,2445,1796,2942,794,371,263,1255 +2028,HDD,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 +2029,CDD,633,876,871,1066,2460,1803,2955,800,373,266,1262 +2029,HDD,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 +2030,CDD,640,884,876,1071,2476,1811,2969,807,375,268,1269 +2030,HDD,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 +2031,CDD,646,892,881,1076,2491,1818,2982,814,378,270,1276 +2031,HDD,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 +2032,CDD,652,900,886,1081,2507,1826,2996,821,380,272,1283 +2032,HDD,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 +2033,CDD,659,908,890,1086,2522,1834,3010,827,382,275,1290 +2033,HDD,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 +2034,CDD,665,915,895,1092,2538,1841,3023,834,384,277,1297 +2034,HDD,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 +2035,CDD,671,923,900,1097,2553,1849,3037,841,386,279,1304 +2035,HDD,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 +2036,CDD,678,931,905,1102,2569,1857,3050,848,388,282,1312 +2036,HDD,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 +2037,CDD,684,939,910,1107,2585,1864,3064,855,390,284,1319 +2037,HDD,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 +2038,CDD,690,947,915,1112,2600,1872,3077,862,392,286,1326 +2038,HDD,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 +2039,CDD,697,955,920,1117,2616,1879,3091,869,394,288,1333 +2039,HDD,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 +2040,CDD,703,963,925,1122,2632,1887,3104,876,396,290,1340 +2040,HDD,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 +2041,CDD,710,971,930,1128,2648,1895,3118,883,399,293,1346 +2041,HDD,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 +2042,CDD,716,978,935,1133,2663,1902,3131,890,401,295,1353 +2042,HDD,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 +2043,CDD,722,986,940,1138,2679,1910,3145,897,403,297,1360 +2043,HDD,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 +2044,CDD,729,994,945,1143,2695,1918,3158,903,405,300,1367 +2044,HDD,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 +2045,CDD,735,1002,950,1148,2711,1925,3172,910,407,302,1374 +2045,HDD,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 +2046,CDD,741,1010,955,1153,2727,1933,3185,918,409,304,1381 +2046,HDD,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 +2047,CDD,748,1018,960,1159,2742,1940,3199,924,411,307,1388 +2047,HDD,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 +2048,CDD,754,1026,965,1164,2758,1948,3212,931,413,309,1395 +2048,HDD,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 +2049,CDD,760,1033,970,1169,2774,1956,3226,938,415,311,1402 +2049,HDD,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 +2050,CDD,767,1041,975,1174,2790,1963,3239,945,417,313,1409 +2050,HDD,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 diff --git a/inputs/fuelprices/gasreg_hdd.csv b/inputs/fuelprices/gasreg_hdd.csv deleted file mode 100644 index f6e825cb..00000000 --- a/inputs/fuelprices/gasreg_hdd.csv +++ /dev/null @@ -1,42 +0,0 @@ -t,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest -2010,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 -2011,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 -2012,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 -2013,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 -2014,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 -2015,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 -2016,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 -2017,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 -2018,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 -2019,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 -2020,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 -2021,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 -2022,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 -2023,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 -2024,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 -2025,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 -2026,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 -2027,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 -2028,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 -2029,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 -2030,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 -2031,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 -2032,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 -2033,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 -2034,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 -2035,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 -2036,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 -2037,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 -2038,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 -2039,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 -2040,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 -2041,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 -2042,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 -2043,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 -2044,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 -2045,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 -2046,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 -2047,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 -2048,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 -2049,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 -2050,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index f57841cb..5a8ac420 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -162,6 +162,7 @@ fuel2tech.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, fuelbin.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, futurefiles.csv,.csv,1,None,9999,None,9999,0,constant,None,None,so meta,constant gasprice_ref.csv,.csv,0,None,wide,cendiv,1,0,constant,0,None,done,linear_5 +gasreg_degree_days.csv,.csv,0,None,t,ddtype,1,0,linear_5,None,None,new,linear_5 gb.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gbin_min.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gbin.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, @@ -270,8 +271,6 @@ national_gen_frac_allScen.csv,.csv,0,None,Unnamed: 0,None,1,0,linear_5,0,1,proje national_rps_frac_allScen.csv,.csv,0,None,t,None,1,0,constant,0,1,done,constant net_firm_transfers_nerc.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, net_gen_existing_hydro.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant -gasreg_cdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 -gasreg_hdd.csv,.csv,0,None,t,None,1,0,linear_5,None,None,new,linear_5 ng_crf_penalty_st.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ng_crf_penalty.csv,.csv,0,None,*t,None,0,0,constant,None,None,done,constant ng_demand_elec.csv,.csv,0,None,wide,Unnamed: 0,1,0,constant,0,None,done,linear_5 diff --git a/runfiles.csv b/runfiles.csv index 8d816f99..776c5d86 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -154,8 +154,7 @@ fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,,fuel2tech,, fuel_price.csv,,1,ignore,ignore,,"i,r",,0,0,,,,,,ReEDS-to-PLEXOS output fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,,fuelbin,, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_hdd.csv,inputs/fuelprices/gasreg_hdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, -gasreg_cdd.csv,inputs/fuelprices/gasreg_cdd.csv,1,ignore,ignore,wide_gasreg,t,,1,0,,,,,, +gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,,gb,, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,,gbin,, gbin_min.csv,inputs/growth_constraints/gbin_min.csv,1,ignore,ignore,,,,,0,,,,,, From 2f568214af22961dc68373aaa537a8dcb3142783 Mon Sep 17 00:00:00 2001 From: Lara Bezerra Date: Mon, 18 May 2026 10:30:26 -0600 Subject: [PATCH 33/85] fixing rep of szn_adj_gas in temporal params --- reeds/core/solve/2_temporal_params.gms | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 9e834d1f..72db83fb 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -901,6 +901,10 @@ gasadder_cd(cendiv,t,h) = gasadder_cd(cendiv,t,h) + gasprice_ref_frac_adder * frac_h_quarter_weights(h,"wint") * gasprice_ref(cendiv,t) ; +szn_adj_gas(allh) = 0 ; +szn_adj_gas(h) = 1 ; +szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = + szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; *============================================= * -- Round parameters for GAMS -- @@ -913,6 +917,7 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; +szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; From f3105459af46c8da58402de0177034553edc45c8 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 08:47:26 -0400 Subject: [PATCH 34/85] Add GSw_GasPriceTimestep switch --- cases.csv | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cases.csv b/cases.csv index e813a404..53d88e81 100644 --- a/cases.csv +++ b/cases.csv @@ -47,7 +47,7 @@ retscen,Retirement Scenario,Nuke60RetireYear; Nuke80RetireYear; NukeEarlyRetireY supplycurve,Wind and Solar Supply Curves,default; 0; naris; 2018,default, uraniumscen,Uranium price scenario,AEO_(2023|2025)_reference,AEO_2025_reference, GSw_Region,Specify column from inputs/userinput/modeled_regions.csv or from {column of hierarchy.csv}/{period-delimited entries to keep from that column},N/A,country/USA, -GSw_ZoneSet,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132 +GSw_ZoneSet,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132, capcredit_hierarchy_level,Select level at which to aggregate net load for capacity-credit calculation,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, construction_schedules_suffix,File suffix for construction schedules,default,default, construction_times_suffix,File suffix for construction times by technology,default,default, @@ -143,6 +143,7 @@ GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, GSw_GasCC_H_2x1,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, GSw_GasCT_Aero,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, +GSw_GasPriceTimestep,Select temporal resolution at which to model gas prices,day; season,day, GSw_GasSector,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, GSw_GenMandate,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, GSw_GenMandateList,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, @@ -372,7 +373,7 @@ pras_max_unitsize_prm,Cap the upper bound of disaggregated unit size by zone at pras_samples,Indicate how many Monte Carlo samples to use in PRAS (if 0 then the .pras file is generated but PRAS is not run),int,100, pras_scheduled_outage,Include scheduled outages in PRAS (if 0 then a default outage rate of 0 is applied),0; 1,0, pras_seed,Seed to use for PRAS samples; can be any positive integer. If 0 the seed is set randomly,int,1, -pras_singlethread,Force single-thread operation for PRAS (much slower but sometimes helps avoid Julia hangs and errors),^[0-1]$,0 +pras_singlethread,Force single-thread operation for PRAS (much slower but sometimes helps avoid Julia hangs and errors),^[0-1]$,0, pras_trans_contingency,Indicate whether to use n-0 (0) or n-1 (1) transmission capacities in PRAS,0; 1,0, pras_unitsize_source,Data source for characteristic unit sizes in ReESD2PRAS,atb; r2x,atb, pras_vre_combine,Combine VRE into a single VRE tech in ReEDS2PRAS,0; 1,0, From 5dd607506307e3c0386533576fe6156a275415dd Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 08:48:24 -0400 Subject: [PATCH 35/85] Remove gasprice_ref_frac_adder scalar --- inputs/scalars.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/inputs/scalars.csv b/inputs/scalars.csv index 39179099..1023235a 100644 --- a/inputs/scalars.csv +++ b/inputs/scalars.csv @@ -29,7 +29,6 @@ euros_dollar,1.124,"--USD/Euro-- dollars per euro exchange rate from treasury de forced_outage_rate_h2_smr,0.1,"--fraction-- forced outage rate of steam methane reforming" gas_elasticity,0.76,"--fraction-- gas supply curve elasticity. long run price elasticity as estimated by: https://www.diw.de/documents/publikationen/73/diw_01.c.441773.de/dp1372.pdf" gas_scale,1000000,"--unitless-- conversion factor for gas-related parameters to help in scaling the problem" -gasprice_ref_frac_adder,0.04,"--fraction-- fraction by which to multiply gasprice_ref for winter" gassupplyscale,-0.5,"shifting of reference gas price bin. gassupply scale determines how far the bins reference quantity should deviate from its reference price. With gassupply scale = -0.5, the center of the reference price bin will be the reference quantity. with gassupplyscale = 0, the end of the reference gas price's bin will the limit for that reference bin." geothermal_availability,0.75,"--fraction-- Existing geothermal plants have a 75% availability rate based on historical capacity factors" h2_crp_compressor,15,"--years-- capital recovery period (i.e., financial lifetime / evaluation period) for hydrogen compressors." From 8f6ea7c04994f6a648832e378f340735476ab191 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 08:49:16 -0400 Subject: [PATCH 36/85] Cleanup --- .../hourly_writetimeseries.py | 63 ++++++++++--------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index da8e6895..179100a7 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -227,6 +227,38 @@ def get_yearly_demand(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): return load_in, load_out +def format_climate_inputs(filename, inputs_case, szn_month_weights): + """ + This function converts climate data from monthly to repperiod resolution using the + szn_month_weights + """ + climate_index = { + 'temp_hydadjsea': ['r','season','t'], + 'temp_UnappWaterMult': ['wst','r','season','t'], + 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] + } + + df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) + df_out = szn_month_weights.merge(df, on='month', how='outer') + df_out['value'] = df_out['weight'] * df_out['Value'] + df_out = ( + df_out + .groupby(climate_index[filename]).agg({'value':'sum'}) + .value + ## For rep periods, sum of season weights is 1, so the next line has no effect. + ## For full chronological year (GSw_HourlyType=year), we use four seasons, + ## so the sum of season weights is the number of months in that season and + ## we need to divide sum{cf*weight} by sum{weight}. + / szn_month_weights.groupby('season').weight.sum() + ).rename('value').reset_index().rename(columns={'season':'szn'}) + # Convert to GAMS-readable wide format + climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] + climate_index = [x for x in climate_index if x != 't'] + df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') + + return df_out + + def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): """ This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a @@ -259,37 +291,6 @@ def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regio return dfout - -def format_climate_inputs(filename, inputs_case, szn_month_weights): - """ - This function converts climate data from monthly to repperiod resolution using the - szn_month_weights - """ - climate_index = { - 'temp_hydadjsea': ['r','season','t'], - 'temp_UnappWaterMult': ['wst','r','season','t'], - 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] - } - - df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) - df_out = szn_month_weights.merge(df, on='month', how='outer') - df_out['value'] = df_out['weight'] * df_out['Value'] - df_out = ( - df_out - .groupby(climate_index[filename]).agg({'value':'sum'}) - .value - ## For rep periods, sum of season weights is 1, so the next line has no effect. - ## For full chronological year (GSw_HourlyType=year), we use four seasons, - ## so the sum of season weights is the number of months in that season and - ## we need to divide sum{cf*weight} by sum{weight}. - / szn_month_weights.groupby('season').weight.sum() - ).rename('value').reset_index().rename(columns={'season':'szn'}) - # Convert to GAMS-readable wide format - climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] - climate_index = [x for x in climate_index if x != 't'] - df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') - - return df_out def get_yearly_flexibility( sw, From 5c33c4671e9e30a8e0a981991759caf306e00de8 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 08:50:56 -0400 Subject: [PATCH 37/85] Bugfix --- reeds/input_processing/fuelcostprep.py | 38 ++++++++++++++------------ 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index da758ac6..07574919 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -259,7 +259,11 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): + beta_hdd * popweighted_hdd_daily_gasreg[gasreg] + month_effects.values ) - df_out[gasreg] = np.exp(gasreg_price_log_returns) + gasreg_price_multipliers = np.exp(gasreg_price_log_returns) + gasreg_price_multipliers = gasreg_price_multipliers.div( + gasreg_price_multipliers.groupby(level=0).mean() + ) + df_out[gasreg] = gasreg_price_multipliers hierarchy = reeds.io.get_hierarchy(os.path.dirname(inputs_case)) # Create one set of multipliers for model zones @@ -438,9 +442,6 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): alpha = alpha[alpha.columns[alpha.columns.isin(val_cendiv)]] alpha = alpha.round(6) -daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( - calculate_daily_gas_price_multipliers(reeds_path, inputs_case) -) #%%################### ### Data Write-Out ### @@ -448,22 +449,25 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): fuel.to_csv(os.path.join(inputs_case,'fprice.csv'),index=False) ngprice_cendiv.to_csv(os.path.join(inputs_case,'gasprice_ref.csv')) - - - ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) -reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_r, - 'daily_gas_price_multipliers_r.h5', - inputs_case -) -reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_cendiv, - 'daily_gas_price_multipliers_cendiv.h5', - inputs_case -) + +### Daily gas price multipliers +if sw['GSw_GasPriceTimestep'] == 'day': + daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( + calculate_daily_gas_price_multipliers(reeds_path, inputs_case) + ) + reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_r, + 'daily_gas_price_multipliers_r.h5', + inputs_case + ) + reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_cendiv, + 'daily_gas_price_multipliers_cendiv.h5', + inputs_case + ) reeds.log.toc(tic=tic, year=0, process='input_processing/fuelcostprep.py', path=os.path.join(inputs_case,'..')) From 1451eb43b9de9607522b9f62553a4842fbebbad6 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 08:51:28 -0400 Subject: [PATCH 38/85] Apply GSw_GasPriceTimestep conditionals --- reeds/core/solve/2_temporal_params.gms | 27 ++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 72db83fb..081f6aa7 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -828,8 +828,11 @@ maxload_szn(r,h,t,szn) = load_exog_static(r,h,t)) $h_szn(h,szn)$Sw_OpRes] = yes ; - parameter gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" + +$ifthen.dailygasprices %GSw_GasPriceTimestep% == "day" +parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -837,8 +840,7 @@ $include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_r.csv $offdelim $onlisting / ; - -parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -846,6 +848,16 @@ $include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_cendiv.csv $offdelim $onlisting / ; +gas_price_multipliers_r(r,allh,allt) = daily_gas_price_multipliers_r(r,allh,allt) +gas_price_multipliers_cendiv(cendiv,allh,allt) = daily_gas_price_multipliers_cendiv(cendiv,allh,allt) +$else.dailygasprices +gas_price_multipliers_r(r,allh,allt) = 1 ; +gas_price_multipliers_r(r,h,allt)$frac_h_quarter_weights(h,"wint") = + gas_price_multipliers_r(r,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +gas_price_multipliers_cendiv(cendiv,allh,allt) = 1 ; +gas_price_multipliers_cendiv(cendiv,h,allt)$frac_h_quarter_weights(h,"wint") = + gas_price_multipliers_cendiv(cendiv,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +$endif.dailygasprices set h_ccseason_prm(allh,ccseason) "peak-load hour for the entire modeled system by ccseason" @@ -896,15 +908,6 @@ peakdem_static_h(r,h,t) = peak_h(r,h,t) * (1 - sum{flex_type, flex_demand_frac(f gasadder_cd(cendiv,t,allh) = 0 ; gasadder_cd(cendiv,t,h) = (gasprice_ref(cendiv,t) - gasprice_nat(t))/2 ; -*winter gas gets marked up -gasadder_cd(cendiv,t,h) = - gasadder_cd(cendiv,t,h) - + gasprice_ref_frac_adder * frac_h_quarter_weights(h,"wint") * gasprice_ref(cendiv,t) ; - -szn_adj_gas(allh) = 0 ; -szn_adj_gas(h) = 1 ; -szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = - szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; *============================================= * -- Round parameters for GAMS -- From 90c353e9a33fe48f1d71e5a4ad734c83e2a056a8 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 10:51:36 -0400 Subject: [PATCH 39/85] Delete references to szn_adj_gas --- reeds/core/setup/b_inputs.gms | 1 - tests/objective_function_params.yaml | 5 ----- 2 files changed, 6 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 9d450b08..c2640709 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6131,7 +6131,6 @@ Parameter minloadfrac(r,i,allh) "--fraction-- minimum loading fraction - final used in model" * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" - szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" gas_price_multipliers_r(r,allh,allt) "--unitless-- multiplier for zonal gas prices" gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- multiplier for cendiv-level gas prices" ; diff --git a/tests/objective_function_params.yaml b/tests/objective_function_params.yaml index 8ffddb18..235d59f6 100644 --- a/tests/objective_function_params.yaml +++ b/tests/objective_function_params.yaml @@ -208,11 +208,6 @@ gasmultterm: - r_cendiv switchon: GSw_GasCurve: 1 -szn_adj_gas: - indexsets: - - h - switchon: - GSw_GasCurve: 1 cendiv_weights: indexsets: - valgen From 6692142563c5d2bed4e091352608b79a7f0779c8 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 10:52:10 -0400 Subject: [PATCH 40/85] Write gasreg set --- reeds/input_processing/copy_files.py | 1 + 1 file changed, 1 insertion(+) diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index 0d874903..367040bc 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -384,6 +384,7 @@ def get_regions_and_agglevel( 'transgrp': 'sub-FERC-1000 region', 'transreg': 'Transmission Planning Regions from FERC Order 1000', 'usda_region': 'biomass supply curve region', + 'gasreg': 'gas price region', } for level, comment in comments.items(): df = pd.Series(hier_sub[level].unique()) From 4c9b46ea4f2f268b2968178a7457e40c0352c81e Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 10:52:41 -0400 Subject: [PATCH 41/85] Bugfixes --- reeds/core/solve/2_temporal_params.gms | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 081f6aa7..07e5a092 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -828,8 +828,8 @@ maxload_szn(r,h,t,szn) = load_exog_static(r,h,t)) $h_szn(h,szn)$Sw_OpRes] = yes ; -parameter gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" -parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +parameter gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" ; +parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" ; $ifthen.dailygasprices %GSw_GasPriceTimestep% == "day" parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" @@ -848,15 +848,13 @@ $include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_cendiv.csv $offdelim $onlisting / ; -gas_price_multipliers_r(r,allh,allt) = daily_gas_price_multipliers_r(r,allh,allt) -gas_price_multipliers_cendiv(cendiv,allh,allt) = daily_gas_price_multipliers_cendiv(cendiv,allh,allt) +gas_price_multipliers_r(r,allh,allt) = daily_gas_price_multipliers_r(r,allh,allt) ; +gas_price_multipliers_cendiv(cendiv,allh,allt) = daily_gas_price_multipliers_cendiv(cendiv,allh,allt) ; $else.dailygasprices gas_price_multipliers_r(r,allh,allt) = 1 ; -gas_price_multipliers_r(r,h,allt)$frac_h_quarter_weights(h,"wint") = - gas_price_multipliers_r(r,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +gas_price_multipliers_r(r,h,allt)$frac_h_quarter_weights(h,"wint") = gas_price_multipliers_r(r,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; gas_price_multipliers_cendiv(cendiv,allh,allt) = 1 ; -gas_price_multipliers_cendiv(cendiv,h,allt)$frac_h_quarter_weights(h,"wint") = - gas_price_multipliers_cendiv(cendiv,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +gas_price_multipliers_cendiv(cendiv,h,allt)$frac_h_quarter_weights(h,"wint") = gas_price_multipliers_cendiv(cendiv,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; $endif.dailygasprices @@ -920,7 +918,8 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; -szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; +gas_price_multipliers_r(r,h,t)$gas_price_multipliers_r(r,h,t) = round(gas_price_multipliers_r(r,h,t), 3) ; +gas_price_multipliers_cendiv(cendiv,h,t)$gas_price_multipliers_cendiv(cendiv,h,t) = round(gas_price_multipliers_cendiv(cendiv,h,t), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; From 14afcdc4432b6e4e319436b991906eb4b66455a4 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 10:58:25 -0400 Subject: [PATCH 42/85] Revert change --- .../hourly_writetimeseries.py | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index 179100a7..1dd0b787 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -228,35 +228,35 @@ def get_yearly_demand(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): def format_climate_inputs(filename, inputs_case, szn_month_weights): - """ - This function converts climate data from monthly to repperiod resolution using the - szn_month_weights - """ - climate_index = { - 'temp_hydadjsea': ['r','season','t'], - 'temp_UnappWaterMult': ['wst','r','season','t'], - 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] - } + """ + This function converts climate data from monthly to repperiod resolution using the + szn_month_weights + """ + climate_index = { + 'temp_hydadjsea': ['r','season','t'], + 'temp_UnappWaterMult': ['wst','r','season','t'], + 'temp_UnappWaterSeaAnnDistr': ['wst','r','season','t'] + } - df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) - df_out = szn_month_weights.merge(df, on='month', how='outer') - df_out['value'] = df_out['weight'] * df_out['Value'] - df_out = ( - df_out - .groupby(climate_index[filename]).agg({'value':'sum'}) - .value - ## For rep periods, sum of season weights is 1, so the next line has no effect. - ## For full chronological year (GSw_HourlyType=year), we use four seasons, - ## so the sum of season weights is the number of months in that season and - ## we need to divide sum{cf*weight} by sum{weight}. - / szn_month_weights.groupby('season').weight.sum() - ).rename('value').reset_index().rename(columns={'season':'szn'}) - # Convert to GAMS-readable wide format - climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] - climate_index = [x for x in climate_index if x != 't'] - df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') - - return df_out + df = pd.read_csv(os.path.join(inputs_case,filename+'.csv')) + df_out = szn_month_weights.merge(df, on='month', how='outer') + df_out['value'] = df_out['weight'] * df_out['Value'] + df_out = ( + df_out + .groupby(climate_index[filename]).agg({'value':'sum'}) + .value + ## For rep periods, sum of season weights is 1, so the next line has no effect. + ## For full chronological year (GSw_HourlyType=year), we use four seasons, + ## so the sum of season weights is the number of months in that season and + ## we need to divide sum{cf*weight} by sum{weight}. + / szn_month_weights.groupby('season').weight.sum() + ).rename('value').reset_index().rename(columns={'season':'szn'}) + # Convert to GAMS-readable wide format + climate_index = [x if x != 'season' else 'szn' for x in climate_index[filename]] + climate_index = [x for x in climate_index if x != 't'] + df_out = df_out.pivot_table(index=climate_index, columns='t', values='value') + + return df_out def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): From 450f1290b9959af836b1c2244bf2c2f41e87c753 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 28 May 2026 11:00:22 -0400 Subject: [PATCH 43/85] Revert change --- reeds/input_processing/hourly_writetimeseries.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index 1dd0b787..b3cc3528 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -226,7 +226,6 @@ def get_yearly_demand(sw, hmap_myr, hmap_allyrs, inputs_case, periodtype='rep'): return load_in, load_out - def format_climate_inputs(filename, inputs_case, szn_month_weights): """ This function converts climate data from monthly to repperiod resolution using the From 5099c4ef9e5862c4811c879e22be378292bfce22 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 11:02:57 -0400 Subject: [PATCH 44/85] General cleanup --- cases.csv | 2 +- reeds/core/setup/b_inputs.gms | 5 +-- reeds/core/setup/d_objective.gms | 18 +++++++--- reeds/core/solve/2_temporal_params.gms | 34 +++++++++---------- reeds/input_processing/fuelcostprep.py | 31 ++++++++--------- .../hourly_writetimeseries.py | 22 ++++++------ 6 files changed, 61 insertions(+), 51 deletions(-) diff --git a/cases.csv b/cases.csv index 96697b97..af398c0a 100644 --- a/cases.csv +++ b/cases.csv @@ -143,7 +143,7 @@ GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, GSw_GasCC_H_2x1,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, GSw_GasCT_Aero,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, -GSw_GasPriceTimestep,Select temporal resolution at which to model gas prices,day; season,day, +GSw_GasPriceAdjMethod,"Select method for adjusting gas prices (0 = uniform wintertime markup, 1 = daily adjustments based on regional temperatures)",0; 1,1, GSw_GasSector,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, GSw_GenMandate,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, GSw_GenMandateList,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index c2640709..36d4fee7 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6131,8 +6131,9 @@ Parameter minloadfrac(r,i,allh) "--fraction-- minimum loading fraction - final used in model" * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" - gas_price_multipliers_r(r,allh,allt) "--unitless-- multiplier for zonal gas prices" - gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- multiplier for cendiv-level gas prices" + szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" + daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- multiplier for zonal gas prices" + daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- multiplier for cendiv-level gas prices" ; * Initialize some parameters diff --git a/reeds/core/setup/d_objective.gms b/reeds/core/setup/d_objective.gms index 1c174600..56e30a54 100644 --- a/reeds/core/setup/d_objective.gms +++ b/reeds/core/setup/d_objective.gms @@ -240,27 +240,37 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 2 (static natural gas prices) *first - gas consumed for electricity generation + sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)$(Sw_GasCurve = 2)], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gas_price_multipliers_r(r,h,t)} + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1)} *second - gas consumed by gas-powered DAC + sum{(v,r,h)$[valcap("dac_gas",v,r,t)$(Sw_GasCurve = 2)], hours(h) * dac_gas_cons_rate("dac_gas",v,t) * PRODUCE("DAC","dac_gas",v,r,h,t) }$Sw_DAC_Gas *Sw_GasCurve = 0 (census division supply curves natural gas prices) - + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t)} + + sum{(cendiv,gb), + sum{h, hours(h) * GASUSED(cendiv,gb,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1)} * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) *Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) - * gasadder_cd(cendiv,t,h) * gas_price_multipliers_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) + * gasadder_cd(cendiv,t,h) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + + gasprice_nat_bin(gb,t) }$(Sw_GasCurve = 3) *Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gas_price_multipliers_cendiv(cendiv,h,t) } + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 07e5a092..8a819f9e 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -828,34 +828,27 @@ maxload_szn(r,h,t,szn) = load_exog_static(r,h,t)) $h_szn(h,szn)$Sw_OpRes] = yes ; -parameter gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" ; -parameter gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" ; -$ifthen.dailygasprices %GSw_GasPriceTimestep% == "day" -parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +$onempty +parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim -$include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_r.csv +$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_r.csv $offdelim $onlisting / ; -parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- gas price multipliers by region, timeslice, and year" +$offempty +$onempty +parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim -$include inputs_case%ds%%temporal_inputs%%ds%gas_price_multipliers_cendiv.csv +$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_cendiv.csv $offdelim $onlisting / ; -gas_price_multipliers_r(r,allh,allt) = daily_gas_price_multipliers_r(r,allh,allt) ; -gas_price_multipliers_cendiv(cendiv,allh,allt) = daily_gas_price_multipliers_cendiv(cendiv,allh,allt) ; -$else.dailygasprices -gas_price_multipliers_r(r,allh,allt) = 1 ; -gas_price_multipliers_r(r,h,allt)$frac_h_quarter_weights(h,"wint") = gas_price_multipliers_r(r,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; -gas_price_multipliers_cendiv(cendiv,allh,allt) = 1 ; -gas_price_multipliers_cendiv(cendiv,h,allt)$frac_h_quarter_weights(h,"wint") = gas_price_multipliers_cendiv(cendiv,h,allt) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; -$endif.dailygasprices +$offempty set h_ccseason_prm(allh,ccseason) "peak-load hour for the entire modeled system by ccseason" @@ -906,6 +899,12 @@ peakdem_static_h(r,h,t) = peak_h(r,h,t) * (1 - sum{flex_type, flex_demand_frac(f gasadder_cd(cendiv,t,allh) = 0 ; gasadder_cd(cendiv,t,h) = (gasprice_ref(cendiv,t) - gasprice_nat(t))/2 ; +*winter gas gets marked up if GSw_GasPriceAdjMethod = 0 +szn_adj_gas(allh) = 0 ; +szn_adj_gas(h) = 1 ; +szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = + szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; + *============================================= * -- Round parameters for GAMS -- @@ -918,8 +917,9 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; -gas_price_multipliers_r(r,h,t)$gas_price_multipliers_r(r,h,t) = round(gas_price_multipliers_r(r,h,t), 3) ; -gas_price_multipliers_cendiv(cendiv,h,t)$gas_price_multipliers_cendiv(cendiv,h,t) = round(gas_price_multipliers_cendiv(cendiv,h,t), 3) ; +szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; +daily_gas_price_multipliers_r(r,h,t)$daily_gas_price_multipliers_r(r,h,t) = round(daily_gas_price_multipliers_r(r,h,t), 3) ; +daily_gas_price_multipliers_cendiv(cendiv,h,t)$daily_gas_price_multipliers_cendiv(cendiv,h,t) = round(daily_gas_price_multipliers_cendiv(cendiv,h,t), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 687a7c52..bdc4d415 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -440,6 +440,11 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): alpha = alpha[alpha.columns[alpha.columns.isin(val_cendiv)]] alpha = alpha.round(6) +### Daily gas price multipliers +daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( + calculate_daily_gas_price_multipliers(reeds_path, inputs_case) +) + #%%################### ### Data Write-Out ### @@ -450,22 +455,16 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) - -### Daily gas price multipliers -if sw['GSw_GasPriceTimestep'] == 'day': - daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( - calculate_daily_gas_price_multipliers(reeds_path, inputs_case) - ) - reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_r, - 'daily_gas_price_multipliers_r.h5', - inputs_case - ) - reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_cendiv, - 'daily_gas_price_multipliers_cendiv.h5', - inputs_case - ) +reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_r, + 'daily_gas_price_multipliers_r.h5', + inputs_case +) +reeds.io.write_profile_to_h5( + daily_gas_price_multipliers_cendiv, + 'daily_gas_price_multipliers_cendiv.h5', + inputs_case +) reeds.log.toc(tic=tic, year=0, process='input_processing/fuelcostprep.py', path=os.path.join(inputs_case,'..')) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index b3cc3528..c63bae00 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -258,7 +258,7 @@ def format_climate_inputs(filename, inputs_case, szn_month_weights): return df_out -def get_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): +def get_daily_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): """ This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a GAMS-compatible file. The h5 contains daily multiplicative natural gas price @@ -532,8 +532,8 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr 'evmc_storage_energy': ['*i','r','h','t'], 'flex_frac_all': ['*flex_type','r','h','t'], 'peak_h': ['*r','h','t','MW'], - 'gas_price_multipliers_r': ['*r','h','t','multiplier'], - 'gas_price_multipliers_cendiv': ['*cendiv','h','t','multiplier'], + 'daily_gas_price_multipliers_r': ['*r','h','t','multiplier'], + 'daily_gas_price_multipliers_cendiv': ['*cendiv','h','t','multiplier'], } for f, columns in write.items(): pd.DataFrame(columns=columns).to_csv( @@ -1350,11 +1350,11 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr ) ################################################################# - # -- Weather-based natural gas price multipliers -- # + # -- Weather-based daily natural gas price multipliers -- # ################################################################# - gas_price_multipliers_dict = {} + daily_gas_price_multipliers_dict = {} for regionlevel in ['r', 'cendiv']: - df = get_gas_price_multipliers( + df = get_daily_gas_price_multipliers( sw=sw, hmap_myr=hmap_myr, inputs_case=inputs_case, @@ -1368,7 +1368,7 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr .rename('multiplier') .reset_index() ) - gas_price_multipliers_dict[regionlevel] = df + daily_gas_price_multipliers_dict[regionlevel] = df # %%################################################################################### # -- Write outputs, aggregating hours to GSw_HourlyChunkLength if necessary -- # @@ -1558,13 +1558,13 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr False, ], ## Annual timeslice gas price multipliers - 'gas_price_multipliers_r': [ - gas_price_multipliers_dict['r'].round(decimals), + 'daily_gas_price_multipliers_r': [ + daily_gas_price_multipliers_dict['r'].round(decimals), False, False ], - 'gas_price_multipliers_cendiv': [ - gas_price_multipliers_dict['cendiv'].round(decimals), + 'daily_gas_price_multipliers_cendiv': [ + daily_gas_price_multipliers_dict['cendiv'].round(decimals), False, False ], From df127426a571fadc8894f953fe8660593500013b Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 11:58:04 -0400 Subject: [PATCH 45/85] Bugfix --- reeds/core/solve/2_temporal_params.gms | 44 +++++++++++++------------- reeds/core/solve/6_data_dump.gms | 14 ++++++-- reeds/core/terminus/report.gms | 18 ++++++++--- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 8a819f9e..c5b95af7 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -829,28 +829,6 @@ maxload_szn(r,h,t,szn) $h_szn(h,szn)$Sw_OpRes] = yes ; -$onempty -parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" -/ -$offlisting -$ondelim -$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_r.csv -$offdelim -$onlisting -/ ; -$offempty -$onempty -parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" -/ -$offlisting -$ondelim -$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_cendiv.csv -$offdelim -$onlisting -/ ; -$offempty - - set h_ccseason_prm(allh,ccseason) "peak-load hour for the entire modeled system by ccseason" / $offlisting @@ -905,6 +883,28 @@ szn_adj_gas(h) = 1 ; szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +*daily temperature-based gas price adjustments apply if GSw_GasPriceAdjMethod = 1 +$onempty +parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +/ +$offlisting +$ondelim +$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_r.csv +$offdelim +$onlisting +/ ; +$offempty +$onempty +parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +/ +$offlisting +$ondelim +$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_cendiv.csv +$offdelim +$onlisting +/ ; +$offempty + *============================================= * -- Round parameters for GAMS -- diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index d4dc0448..7af35cce 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -194,11 +194,16 @@ repgasquant(cendiv,t)$[(Sw_GasCurve = 1 or Sw_GasCurve = 2)$tcur(t)] = } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t) }], gasprice(cendiv,gb,t) } ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + }], gasprice(cendiv,gb,t) } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_multipliers_r(r,h,t) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) } / (repgasquant(cendiv,t)) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; @@ -206,7 +211,10 @@ repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * gas_price_multipliers_cendiv(cendiv,h,t)} / sum{h, hours(h) } + hours(h) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + } / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 72be9830..7c96882d 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -529,11 +529,16 @@ repgasquant_nat(t)$tmodel_new(t) = sum{cendiv, repgasquant(cendiv,t) } ; *for reported gasprice (not that used to compute system costs) *scale back to $ / mmbtu repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_multipliers_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + }], gasprice(cendiv,gb,t) } / gas_scale ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_multipliers_r(r,h,t) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) } / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; @@ -541,7 +546,10 @@ repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{ce repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * gas_price_multipliers_cendiv(cendiv,h,t)} / sum{h, hours(h) } + hours(h) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + } / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) @@ -585,7 +593,9 @@ gascost_cendiv(cendiv,t)$tmodel_new(t) = *first - anticipated costs of gas consumption given last year's amount + (sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) * gas_price_multipliers_r(r,h,t) } + hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) + * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) + * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin), gasbinp_regional(fuelbin,cendiv,t) * VGASBINQ_REGIONAL.l(fuelbin,cendiv,t) } From 9e0d82d02d38888198b13adfdafd4f86f03f1a8a Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 14:33:53 -0400 Subject: [PATCH 46/85] Bugfixes --- reeds/core/setup/b_inputs.gms | 4 ++-- reeds/core/setup/d_objective.gms | 17 ++++------------- reeds/core/solve/2_temporal_params.gms | 12 +++++++----- reeds/core/solve/6_data_dump.gms | 15 +++------------ reeds/core/terminus/report.gms | 20 ++++---------------- 5 files changed, 20 insertions(+), 48 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 36d4fee7..6d7017e6 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6132,8 +6132,8 @@ Parameter * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" - daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- multiplier for zonal gas prices" - daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- multiplier for cendiv-level gas prices" + gas_price_adj_r(r,allh,allt) "--fraction-- adjustment for zonal gas prices" + gas_price_adj_cendiv(cendiv,allh,allt) "--fraction-- adjustment for cendiv-level gas prices" ; * Initialize some parameters diff --git a/reeds/core/setup/d_objective.gms b/reeds/core/setup/d_objective.gms index 56e30a54..bd2c4c31 100644 --- a/reeds/core/setup/d_objective.gms +++ b/reeds/core/setup/d_objective.gms @@ -240,9 +240,7 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 2 (static natural gas prices) *first - gas consumed for electricity generation + sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)$(Sw_GasCurve = 2)], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1)} + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gas_price_adj_r(r,h,t)} *second - gas consumed by gas-powered DAC + sum{(v,r,h)$[valcap("dac_gas",v,r,t)$(Sw_GasCurve = 2)], @@ -250,17 +248,12 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 0 (census division supply curves natural gas prices) + sum{(cendiv,gb), - sum{h, hours(h) * GASUSED(cendiv,gb,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1)} + sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)} * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) *Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) - + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) - * gasadder_cd(cendiv,t,h) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) + + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) * gasadder_cd(cendiv,t,h) * gas_price_adj_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) }$(Sw_GasCurve = 3) @@ -268,9 +261,7 @@ eq_Objfn_op(t)$tmodel(t).. *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) } + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gas_price_adj_cendiv(cendiv,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index c5b95af7..0c689415 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -885,7 +885,7 @@ szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = *daily temperature-based gas price adjustments apply if GSw_GasPriceAdjMethod = 1 $onempty -parameter daily_gas_price_multipliers_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +parameter gas_price_adj_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -894,8 +894,10 @@ $offdelim $onlisting / ; $offempty +gas_price_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; + $onempty -parameter daily_gas_price_multipliers_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +parameter gas_price_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -904,6 +906,7 @@ $offdelim $onlisting / ; $offempty +gas_price_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; *============================================= @@ -917,9 +920,8 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; -szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; -daily_gas_price_multipliers_r(r,h,t)$daily_gas_price_multipliers_r(r,h,t) = round(daily_gas_price_multipliers_r(r,h,t), 3) ; -daily_gas_price_multipliers_cendiv(cendiv,h,t)$daily_gas_price_multipliers_cendiv(cendiv,h,t) = round(daily_gas_price_multipliers_cendiv(cendiv,h,t), 3) ; +gas_price_adj_r(r,h,t)$gas_price_adj_r(r,h,t) = round(gas_price_adj_r(r,h,t), 3) ; +gas_price_adj_cendiv(cendiv,h,t)$gas_price_adj_cendiv(cendiv,h,t) = round(gas_price_adj_cendiv(cendiv,h,t), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index 7af35cce..1c9b9bab 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -194,27 +194,18 @@ repgasquant(cendiv,t)$[(Sw_GasCurve = 1 or Sw_GasCurve = 2)$tcur(t)] = } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) - }], gasprice(cendiv,gb,t) } ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_adj_r(r,h,t) } / (repgasquant(cendiv,t)) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) - } / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gas_price_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 7c96882d..d77bb7d4 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -529,27 +529,17 @@ repgasquant_nat(t)$tmodel_new(t) = sum{cendiv, repgasquant(cendiv,t) } ; *for reported gasprice (not that used to compute system costs) *scale back to $ / mmbtu repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) - }], gasprice(cendiv,gb,t) } / gas_scale ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) - } / (repgasquant(cendiv,t) * 1e9) ; + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_adj_r(r,h,t)} / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) - } / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gas_price_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) @@ -593,9 +583,7 @@ gascost_cendiv(cendiv,t)$tmodel_new(t) = *first - anticipated costs of gas consumption given last year's amount + (sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) - * szn_adj_gas(h)$(Sw_GasPriceAdjMethod = 0) - * daily_gas_price_multipliers_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) } + hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) * gas_price_adj_r(r,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin), gasbinp_regional(fuelbin,cendiv,t) * VGASBINQ_REGIONAL.l(fuelbin,cendiv,t) } From 5335414319459ed426c8d9540e2e9729901bc67f Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 14:50:33 -0400 Subject: [PATCH 47/85] Variable renaming --- reeds/core/setup/b_inputs.gms | 4 ++-- reeds/core/setup/d_objective.gms | 8 ++++---- reeds/core/solve/2_temporal_params.gms | 13 +++++++------ reeds/core/solve/6_data_dump.gms | 6 +++--- reeds/core/terminus/report.gms | 8 ++++---- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 6d7017e6..01cdac29 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6132,8 +6132,8 @@ Parameter * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" - gas_price_adj_r(r,allh,allt) "--fraction-- adjustment for zonal gas prices" - gas_price_adj_cendiv(cendiv,allh,allt) "--fraction-- adjustment for cendiv-level gas prices" + gasprice_adj_r(r,allh,allt) "--fraction-- adjustment for zonal gas prices" + gasprice_adj_cendiv(cendiv,allh,allt) "--fraction-- adjustment for cendiv-level gas prices" ; * Initialize some parameters diff --git a/reeds/core/setup/d_objective.gms b/reeds/core/setup/d_objective.gms index bd2c4c31..333e99ea 100644 --- a/reeds/core/setup/d_objective.gms +++ b/reeds/core/setup/d_objective.gms @@ -240,7 +240,7 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 2 (static natural gas prices) *first - gas consumed for electricity generation + sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)$(Sw_GasCurve = 2)], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gas_price_adj_r(r,h,t)} + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gasprice_adj_r(r,h,t)} *second - gas consumed by gas-powered DAC + sum{(v,r,h)$[valcap("dac_gas",v,r,t)$(Sw_GasCurve = 2)], @@ -248,12 +248,12 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 0 (census division supply curves natural gas prices) + sum{(cendiv,gb), - sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)} + sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)} * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) *Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) - + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) * gasadder_cd(cendiv,t,h) * gas_price_adj_cendiv(cendiv,h,t) + + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) * gasadder_cd(cendiv,t,h) * gasprice_adj_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) }$(Sw_GasCurve = 3) @@ -261,7 +261,7 @@ eq_Objfn_op(t)$tmodel(t).. *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gas_price_adj_cendiv(cendiv,h,t) } + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gasprice_adj_cendiv(cendiv,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 0c689415..c040917c 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -885,7 +885,7 @@ szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = *daily temperature-based gas price adjustments apply if GSw_GasPriceAdjMethod = 1 $onempty -parameter gas_price_adj_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +parameter gasprice_adj_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -894,10 +894,10 @@ $offdelim $onlisting / ; $offempty -gas_price_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; +gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; $onempty -parameter gas_price_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +parameter gasprice_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / $offlisting $ondelim @@ -906,7 +906,7 @@ $offdelim $onlisting / ; $offempty -gas_price_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; +gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; *============================================= @@ -920,8 +920,9 @@ h_weight_csapr(h)$h_weight_csapr(h) = round(h_weight_csapr(h),3) ; load_exog(r,h,t)$load_exog(r,h,t) = round(load_exog(r,h,t),3) ; load_exog_static(r,h,t)$load_exog_static(r,h,t) = round(load_exog_static(r,h,t),3) ; minloadfrac(r,i,h)$minloadfrac(r,i,h) = round(minloadfrac(r,i,h),3) ; -gas_price_adj_r(r,h,t)$gas_price_adj_r(r,h,t) = round(gas_price_adj_r(r,h,t), 3) ; -gas_price_adj_cendiv(cendiv,h,t)$gas_price_adj_cendiv(cendiv,h,t) = round(gas_price_adj_cendiv(cendiv,h,t), 3) ; +szn_adj_gas(h)$szn_adj_gas(h) = round(szn_adj_gas(h), 3) ; +gasprice_adj_r(r,h,t)$gasprice_adj_r(r,h,t) = round(gasprice_adj_r(r,h,t), 3) ; +gasprice_adj_cendiv(cendiv,h,t)$gasprice_adj_cendiv(cendiv,h,t) = round(gasprice_adj_cendiv(cendiv,h,t), 3) ; cap_hyd_szn_adj(i,szn,r)$cap_hyd_szn_adj(i,szn,r) = round(cap_hyd_szn_adj(i,szn,r),3) ; peakdem_static_ccseason(r,ccseason,t)$peakdem_static_ccseason(r,ccseason,t) = round(peakdem_static_ccseason(r,ccseason,t),2) ; seas_cap_frac_delta(i,v,r,szn,t)$seas_cap_frac_delta(i,v,r,szn,t) = round(seas_cap_frac_delta(i,v,r,szn,t),3) ; diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index 1c9b9bab..adcd1910 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -194,18 +194,18 @@ repgasquant(cendiv,t)$[(Sw_GasCurve = 1 or Sw_GasCurve = 2)$tcur(t)] = } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_adj_r(r,h,t) + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t) } / (repgasquant(cendiv,t)) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gas_price_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index d77bb7d4..58d1de9e 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -529,17 +529,17 @@ repgasquant_nat(t)$tmodel_new(t) = sum{cendiv, repgasquant(cendiv,t) } ; *for reported gasprice (not that used to compute system costs) *scale back to $ / mmbtu repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gas_price_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gas_price_adj_r(r,h,t)} / (repgasquant(cendiv,t) * 1e9) ; + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t)} / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gas_price_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) @@ -583,7 +583,7 @@ gascost_cendiv(cendiv,t)$tmodel_new(t) = *first - anticipated costs of gas consumption given last year's amount + (sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)], gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) * gas_price_adj_r(r,h,t) } + hours(h) * heat_rate(i,v,r,t) * GEN.l(i,v,r,h,t) * gasprice_adj_r(r,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin), gasbinp_regional(fuelbin,cendiv,t) * VGASBINQ_REGIONAL.l(fuelbin,cendiv,t) } From 637c75ce7a3f23858ad249564e4c8ffa95a8a283 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 15:08:19 -0400 Subject: [PATCH 48/85] Formatting --- reeds/core/setup/d_objective.gms | 11 +++++------ reeds/core/solve/2_temporal_params.gms | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/reeds/core/setup/d_objective.gms b/reeds/core/setup/d_objective.gms index 333e99ea..68866ea3 100644 --- a/reeds/core/setup/d_objective.gms +++ b/reeds/core/setup/d_objective.gms @@ -247,21 +247,20 @@ eq_Objfn_op(t)$tmodel(t).. hours(h) * dac_gas_cons_rate("dac_gas",v,t) * PRODUCE("DAC","dac_gas",v,r,h,t) }$Sw_DAC_Gas *Sw_GasCurve = 0 (census division supply curves natural gas prices) - + sum{(cendiv,gb), - sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)} + + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)} * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) *Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) - + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) * gasadder_cd(cendiv,t,h) * gasprice_adj_cendiv(cendiv,h,t) - + gasprice_nat_bin(gb,t) + + sum{(h,cendiv,gb), hours(h) * GASUSED(cendiv,gb,h,t) + * gasadder_cd(cendiv,t,h) * gasprice_adj_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) }$(Sw_GasCurve = 3) *Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gasprice_adj_cendiv(cendiv,h,t) } + gasmultterm(cendiv,t) * gasprice_adj_cendiv(cendiv,h,t) * cendiv_weights(r,cendiv) * + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index c040917c..989e26d9 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -828,7 +828,6 @@ maxload_szn(r,h,t,szn) = load_exog_static(r,h,t)) $h_szn(h,szn)$Sw_OpRes] = yes ; - set h_ccseason_prm(allh,ccseason) "peak-load hour for the entire modeled system by ccseason" / $offlisting From 1d43c394ad6365aba25f68d20e0a8fe87ec4e730 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Fri, 29 May 2026 15:20:59 -0400 Subject: [PATCH 49/85] Cleanup --- reeds/core/solve/2_temporal_params.gms | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 989e26d9..bd2aba62 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -876,13 +876,7 @@ peakdem_static_h(r,h,t) = peak_h(r,h,t) * (1 - sum{flex_type, flex_demand_frac(f gasadder_cd(cendiv,t,allh) = 0 ; gasadder_cd(cendiv,t,h) = (gasprice_ref(cendiv,t) - gasprice_nat(t))/2 ; -*winter gas gets marked up if GSw_GasPriceAdjMethod = 0 -szn_adj_gas(allh) = 0 ; -szn_adj_gas(h) = 1 ; -szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = - szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; - -*daily temperature-based gas price adjustments apply if GSw_GasPriceAdjMethod = 1 +* Written by hourly_writetimeseries.py $onempty parameter gasprice_adj_r(r,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" / @@ -893,7 +887,6 @@ $offdelim $onlisting / ; $offempty -gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; $onempty parameter gasprice_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" @@ -905,6 +898,14 @@ $offdelim $onlisting / ; $offempty + +* If GSw_GasPriceAdjMethod = 0, apply a uniform winter gas markup instead of daily adjustments +szn_adj_gas(allh) = 0 ; +szn_adj_gas(h) = 1 ; +szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = + szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; + +gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; From 88a1622b6f65b7165559be35cbf8ece9d5b704be Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 1 Jun 2026 08:25:29 -0400 Subject: [PATCH 50/85] Update cendivs for four BAs to match the cendivs of their states --- inputs/zones/PJMcounty/hierarchy_from134.csv | 8 ++++---- inputs/zones/UTcounty/hierarchy_from134.csv | 8 ++++---- inputs/zones/z132/hierarchy_from134.csv | 8 ++++---- inputs/zones/z134/hierarchy_from134.csv | 8 ++++---- inputs/zones/z3109/hierarchy_from134.csv | 8 ++++---- inputs/zones/z69/hierarchy_from134.csv | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/inputs/zones/PJMcounty/hierarchy_from134.csv b/inputs/zones/PJMcounty/hierarchy_from134.csv index de692ba7..e33efda8 100644 --- a/inputs/zones/PJMcounty/hierarchy_from134.csv +++ b/inputs/zones/PJMcounty/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p5 p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central diff --git a/inputs/zones/UTcounty/hierarchy_from134.csv b/inputs/zones/UTcounty/hierarchy_from134.csv index de692ba7..e33efda8 100644 --- a/inputs/zones/UTcounty/hierarchy_from134.csv +++ b/inputs/zones/UTcounty/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p5 p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central diff --git a/inputs/zones/z132/hierarchy_from134.csv b/inputs/zones/z132/hierarchy_from134.csv index de692ba7..e33efda8 100644 --- a/inputs/zones/z132/hierarchy_from134.csv +++ b/inputs/zones/z132/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p5 p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central diff --git a/inputs/zones/z134/hierarchy_from134.csv b/inputs/zones/z134/hierarchy_from134.csv index de692ba7..e33efda8 100644 --- a/inputs/zones/z134/hierarchy_from134.csv +++ b/inputs/zones/z134/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p5 p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central diff --git a/inputs/zones/z3109/hierarchy_from134.csv b/inputs/zones/z3109/hierarchy_from134.csv index de692ba7..e33efda8 100644 --- a/inputs/zones/z3109/hierarchy_from134.csv +++ b/inputs/zones/z3109/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,p29,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,z28,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,p31,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,p32,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p33,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,p34,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,p35,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,p36,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,p37,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,p38,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,p44,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,p45,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,p46,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,p47,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p48,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p49,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,p50,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,p5 p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,p56,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,p57,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,p58,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,p59,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p60,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p61,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,p62,West_South_Central diff --git a/inputs/zones/z69/hierarchy_from134.csv b/inputs/zones/z69/hierarchy_from134.csv index 49507169..8ab46f5c 100644 --- a/inputs/zones/z69/hierarchy_from134.csv +++ b/inputs/zones/z69/hierarchy_from134.csv @@ -30,10 +30,10 @@ p28,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,South p29,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest p30,WECC_SW,WestConnect,WestConnect_South,Mountain,AZ,western,USA,mountain,Southwest,Arizona_Public_Service_Co,AZ,Southwest p31,WECC_SW,WestConnect,WestConnect_South,Mountain,NM,western,USA,mountain,Southwest,Public_Service_Co_of_New_Mexico,NM_WestConnect,Southwest -p32,WECC_NW,WestConnect,WestConnect_North,Mountain,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,SD_WestConnect,West_North_Central +p32,WECC_NW,WestConnect,WestConnect_North,West_North_Central,SD,western,USA,northern-plains,Plains,WAPA_Rocky_Mountain_Region,SD_WestConnect,West_North_Central p33,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain p34,WECC_NW,WestConnect,WestConnect_North,Mountain,CO,western,USA,mountain,Mountain,Public_Service_Co_of_Colorado,CO,Mountain -p35,SPP,SPP,SPP_North,West_North_Central,MT,eastern,USA,mountain,Mountain,SPP,MT_SPP,Mountain +p35,SPP,SPP,SPP_North,Mountain,MT,eastern,USA,mountain,Mountain,SPP,MT_SPP,Mountain p36,SPP,SPP,SPP_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,SPP,ND_SPP,West_North_Central p37,MISO,MISO,MISO_North,West_North_Central,ND,eastern,USA,northern-plains,Plains,MISO,ND_MISO,West_North_Central p38,SPP,SPP,SPP_North,West_North_Central,SD,eastern,USA,northern-plains,Plains,SPP,SD_SPP,West_North_Central @@ -45,7 +45,7 @@ p43,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,M p44,MISO,MISO,MISO_North,West_North_Central,MN,eastern,USA,lake-states,Midwest,MISO,MN,West_North_Central p45,MISO,MISO,MISO_North,West_North_Central,IA,eastern,USA,corn-belt,Midwest,MISO,IA,West_North_Central p46,MISO,MISO,MISO_North,East_North_Central,WI,eastern,USA,lake-states,Midwest,MISO,WI,East_North_Central -p47,SPP,SPP,SPP_South,West_South_Central,NM,eastern,USA,mountain,Southwest,SPP,NM_SPP,Southwest +p47,SPP,SPP,SPP_South,Mountain,NM,eastern,USA,mountain,Southwest,SPP,NM_SPP,Southwest p48,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_N,West_South_Central p49,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central p50,SPP,SPP,SPP_South,West_South_Central,OK,eastern,USA,southern-plains,Plains,SPP,OK,West_South_Central @@ -57,7 +57,7 @@ p55,SPP,SPP,SPP_South,West_North_Central,MO,eastern,USA,corn-belt,Midwest,SPP,MO p56,SPP,SPP,SPP_South,West_South_Central,AR,eastern,USA,delta-states,Delta,SPP,AR_SPP,West_South_Central p57,SPP,SPP,SPP_South,West_South_Central,TX,eastern,USA,southern-plains,Texas,SPP,TX_SPP_E,West_South_Central p58,MISO,MISO,MISO_South,West_South_Central,LA,eastern,USA,delta-states,Delta,MISO,LA,West_South_Central -p59,WECC_SW,WestConnect,WestConnect_South,Mountain,TX,western,USA,southern-plains,Texas,El_Paso_Electric,TX_WestConnect,West_South_Central +p59,WECC_SW,WestConnect,WestConnect_South,West_South_Central,TX,western,USA,southern-plains,Texas,El_Paso_Electric,TX_WestConnect,West_South_Central p60,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central p61,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central p62,ERCOT,ERCOT,ERCOT,West_South_Central,TX,texas,USA,southern-plains,Texas,ERCOT,TX_W_ERCOT,West_South_Central From 8cfc304f8f798b7bfc0731a939d171e25a62c66d Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 1 Jun 2026 16:54:53 -0400 Subject: [PATCH 51/85] Renormalize szn_adj_gas so hour-weighted average is 1 --- reeds/core/solve/2_temporal_params.gms | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index bd2aba62..691dafa7 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -905,6 +905,12 @@ szn_adj_gas(h) = 1 ; szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; +* Renormalize so hour-weighted average of szn_adj_gas is 1 +scalar szn_adj_gas_avg "--unitless-- hour-weighted average of natural gas seasonal adjustment" ; + +szn_adj_gas_avg = sum{h, szn_adj_gas(h) * hours(h) } / sum{h, hours(h) } ; +szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; + gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; From e1ed961bd2d69f2dddacc053d90399d4587d104e Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 09:08:23 -0400 Subject: [PATCH 52/85] Bugfix --- inputs/fuelprices/gasreg_degree_days.csv | 166 +++++++++++------------ 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/inputs/fuelprices/gasreg_degree_days.csv b/inputs/fuelprices/gasreg_degree_days.csv index 6740be71..4820fef8 100644 --- a/inputs/fuelprices/gasreg_degree_days.csv +++ b/inputs/fuelprices/gasreg_degree_days.csv @@ -1,83 +1,83 @@ -t,ddtype,New_England,Mid_Atlantic,East_North_Central,West_North_Central,South_Atlantic,East_South_Central,West_South_Central,California,Mountain,Northwest,Southwest -2010,CDD,634,913,963,1095,2271,1974,2754,568,294,105,1075 -2010,HDD,5935,5539,6188,6570,3163,3954,2450,1303,3624,2324,1436 -2011,CDD,553,840,858,1074,2260,1725,3112,622,310,111,1151 -2011,HDD,6113,5471,6173,6570,2564,3347,2113,1314,3797,2508,1507 -2012,CDD,563,819,974,1221,2163,1760,2913,780,387,136,1193 -2012,HDD,5563,4960,5356,5520,2305,2880,1648,1117,3288,2300,1272 -2013,CDD,540,685,689,892,2001,1438,2535,714,346,174,1123 -2013,HDD,6425,5827,6623,7140,2736,3651,2325,1094,3772,2272,1491 -2014,CDD,420,600,609,812,2000,1491,2474,850,314,217,1123 -2014,HDD,6676,6190,7196,7309,2961,3935,2421,811,3504,1965,1234 -2015,CDD,556,809,729,941,2397,1717,2742,831,341,236,1142 -2015,HDD,6520,5762,6165,6093,2496,3224,2085,959,3285,1942,1311 -2016,CDD,625,891,958,1072,2404,1956,2882,782,334,146,1166 -2016,HDD,5928,5338,5701,5792,2464,3095,1750,991,3388,2043,1231 -2017,CDD,451,665,708,910,2247,1585,2718,846,346,209,1202 -2017,HDD,6037,5318,5684,6004,2239,2837,1580,965,3443,2224,1130 -2018,CDD,668,890,972,1134,2411,1928,2855,815,372,188,1200 -2018,HDD,6323,5769,6434,6975,2638,3479,2252,1033,3516,2138,1293 -2019,CDD,536,787,832,951,2503,1886,2759,694,305,150,1091 -2019,HDD,6538,5736,6427,7082,2392,3181,2143,1218,3831,2328,1478 -2020,CDD,645,848,831,964,2335,1636,2735,913,378,157,1303 -2020,HDD,5822,5198,5855,6326,2263,3064,1812,1053,3465,2165,1318 -2021,CDD,604,837,911,1093,2226,1611,2644,817,408,222,1174 -2021,HDD,5799,5261,5747,6061,2366,3166,1911,1111,3418,2226,1275 -2022,CDD,647,838,816,1050,2302,1728,2992,853,394,234,1191 -2022,HDD,6019,5635,6344,6905,2523,3438,2200,1085,3663,2279,1461 -2023,CDD,518,683,713,1042,2258,1669,3117,616,308,214,1173 -2023,HDD,5564,4954,5417,5929,2150,2826,1725,1329,3674,2277,1439 -2024,CDD,620,867,899,1046,2399,1859,3073,861,405,200,1300 -2024,HDD,5643,4981,5306,5716,2271,3024,1844,1130,3343,2180,1331 -2025,CDD,609,845,851,1046,2400,1773,2901,665,346,221,1168 -2025,HDD,5924,5319,5952,6383,2344,3161,1949,1074,3489,2176,1244 -2026,CDD,615,853,856,1051,2415,1781,2915,780,367,259,1240 -2026,HDD,5901,5298,5937,6376,2329,3148,1942,1087,3562,2203,1270 -2027,CDD,621,860,861,1056,2430,1788,2928,787,369,261,1247 -2027,HDD,5879,5277,5923,6369,2313,3136,1935,1085,3556,2199,1268 -2028,CDD,627,868,866,1061,2445,1796,2942,794,371,263,1255 -2028,HDD,5856,5256,5908,6362,2298,3123,1928,1083,3549,2195,1266 -2029,CDD,633,876,871,1066,2460,1803,2955,800,373,266,1262 -2029,HDD,5833,5235,5894,6355,2283,3111,1921,1081,3542,2190,1264 -2030,CDD,640,884,876,1071,2476,1811,2969,807,375,268,1269 -2030,HDD,5810,5214,5879,6348,2267,3098,1914,1079,3536,2186,1262 -2031,CDD,646,892,881,1076,2491,1818,2982,814,378,270,1276 -2031,HDD,5787,5193,5864,6341,2251,3086,1907,1076,3530,2182,1259 -2032,CDD,652,900,886,1081,2507,1826,2996,821,380,272,1283 -2032,HDD,5764,5172,5850,6334,2235,3073,1900,1074,3524,2177,1257 -2033,CDD,659,908,890,1086,2522,1834,3010,827,382,275,1290 -2033,HDD,5741,5151,5835,6327,2220,3060,1893,1072,3518,2172,1255 -2034,CDD,665,915,895,1092,2538,1841,3023,834,384,277,1297 -2034,HDD,5718,5130,5820,6319,2204,3048,1886,1069,3512,2168,1253 -2035,CDD,671,923,900,1097,2553,1849,3037,841,386,279,1304 -2035,HDD,5695,5109,5806,6312,2188,3035,1879,1067,3506,2163,1251 -2036,CDD,678,931,905,1102,2569,1857,3050,848,388,282,1312 -2036,HDD,5672,5088,5791,6304,2173,3022,1872,1065,3500,2158,1249 -2037,CDD,684,939,910,1107,2585,1864,3064,855,390,284,1319 -2037,HDD,5649,5068,5776,6297,2157,3009,1865,1062,3494,2153,1247 -2038,CDD,690,947,915,1112,2600,1872,3077,862,392,286,1326 -2038,HDD,5626,5047,5762,6289,2141,2996,1858,1060,3489,2148,1244 -2039,CDD,697,955,920,1117,2616,1879,3091,869,394,288,1333 -2039,HDD,5603,5026,5747,6282,2125,2984,1852,1057,3483,2144,1242 -2040,CDD,703,963,925,1122,2632,1887,3104,876,396,290,1340 -2040,HDD,5579,5005,5732,6274,2110,2971,1845,1055,3477,2139,1240 -2041,CDD,710,971,930,1128,2648,1895,3118,883,399,293,1346 -2041,HDD,5556,4984,5717,6267,2094,2958,1838,1052,3471,2134,1238 -2042,CDD,716,978,935,1133,2663,1902,3131,890,401,295,1353 -2042,HDD,5533,4963,5703,6259,2079,2945,1831,1050,3465,2129,1236 -2043,CDD,722,986,940,1138,2679,1910,3145,897,403,297,1360 -2043,HDD,5510,4943,5688,6252,2063,2933,1825,1048,3459,2124,1234 -2044,CDD,729,994,945,1143,2695,1918,3158,903,405,300,1367 -2044,HDD,5487,4922,5673,6244,2047,2920,1818,1045,3454,2119,1232 -2045,CDD,735,1002,950,1148,2711,1925,3172,910,407,302,1374 -2045,HDD,5464,4901,5658,6236,2032,2907,1811,1043,3448,2114,1230 -2046,CDD,741,1010,955,1153,2727,1933,3185,918,409,304,1381 -2046,HDD,5440,4880,5644,6229,2016,2894,1805,1041,3442,2109,1228 -2047,CDD,748,1018,960,1159,2742,1940,3199,924,411,307,1388 -2047,HDD,5417,4859,5629,6221,2001,2881,1798,1038,3437,2104,1226 -2048,CDD,754,1026,965,1164,2758,1948,3212,931,413,309,1395 -2048,HDD,5394,4838,5614,6213,1985,2869,1791,1036,3431,2099,1224 -2049,CDD,760,1033,970,1169,2774,1956,3226,938,415,311,1402 -2049,HDD,5371,4818,5599,6206,1970,2856,1785,1033,3425,2095,1222 -2050,CDD,767,1041,975,1174,2790,1963,3239,945,417,313,1409 -2050,HDD,5348,4797,5585,6198,1955,2843,1778,1031,3420,2090,1220 +t,ddtype,California,East_North_Central,East_South_Central,Mid_Atlantic,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central +2010,CDD,757,963,1974,913,700,634,137,2271,2202,1095,2754 +2010,HDD,2706,6188,3954,5539,6173,5935,5599,3163,2693,6570,2450 +2011,CDD,830,858,1725,840,724,553,112,2260,2335,1074,3112 +2011,HDD,2791,6173,3347,5471,6430,6113,6106,2564,2737,6570,2113 +2012,CDD,1047,974,1760,819,932,563,154,2163,2428,1221,2913 +2012,HDD,2401,5356,2880,4960,5520,5563,5675,2305,2309,5520,1648 +2013,CDD,1011,689,1438,685,888,540,245,2001,2296,892,2535 +2013,HDD,2309,6623,3651,5827,6392,6425,5527,2736,2663,7140,2325 +2014,CDD,1201,609,1491,600,731,420,254,2000,2207,812,2474 +2014,HDD,1765,7196,3935,6190,5776,6676,5073,2961,2162,7309,2421 +2015,CDD,1195,729,1717,809,788,556,304,2397,2262,941,2742 +2015,HDD,2000,6165,3224,5762,5469,6520,4832,2496,2339,6093,2085 +2016,CDD,1073,958,1956,891,852,625,186,2404,2370,1072,2882 +2016,HDD,2110,5701,3095,5338,5551,5928,5082,2464,2129,5792,1750 +2017,CDD,1171,708,1585,665,855,451,279,2247,2390,910,2718 +2017,HDD,2204,5684,2837,5318,5682,6037,5790,2239,1964,6004,1580 +2018,CDD,1044,972,1928,890,878,668,235,2411,2362,1134,2855 +2018,HDD,2281,6434,3479,5769,6000,6323,5547,2638,2486,6975,2252 +2019,CDD,913,832,1886,787,774,536,130,2503,2275,951,2759 +2019,HDD,2636,6427,3181,5736,6422,6538,5696,2392,2571,7082,2143 +2020,CDD,1141,831,1636,848,782,645,193,2335,2501,964,2735 +2020,HDD,2472,5855,3064,5198,6205,5822,5484,2263,2667,6326,1812 +2021,CDD,1050,911,1611,837,818,604,318,2226,2096,1093,2644 +2021,HDD,2567,5747,3166,5261,6095,5799,5610,2366,2510,6061,1911 +2022,CDD,1117,816,1728,838,791,647,283,2302,2180,1050,2992 +2022,HDD,2521,6344,3438,5635,6678,6019,5868,2523,2881,6905,2200 +2023,CDD,782,713,1669,683,584,518,209,2258,2151,1042,3117 +2023,HDD,2956,5417,2826,4954,6638,5564,5709,2150,2972,5929,1725 +2024,CDD,1081,899,1859,867,766,620,235,2399,2363,1046,3073 +2024,HDD,2655,5306,3024,4981,6103,5643,5739,2271,2807,5716,1844 +2025,CDD,814,851,1773,845,711,609,246,2400,2122,1046,2901 +2025,HDD,2383,5952,3161,5319,5864,5924,5485,2344,2465,6383,1949 +2026,CDD,1104,856,1781,853,790,615,240,2415,2154,1051,2915 +2026,HDD,2431,5937,3148,5298,6117,5901,5752,2329,2600,6376,1942 +2027,CDD,1112,861,1788,860,789,621,242,2430,2138,1056,2928 +2027,HDD,2427,5923,3136,5277,6117,5879,5771,2313,2604,6369,1935 +2028,CDD,1120,866,1796,868,789,627,244,2445,2121,1061,2942 +2028,HDD,2424,5908,3123,5256,6117,5856,5789,2298,2609,6362,1928 +2029,CDD,1128,871,1803,876,789,633,246,2460,2105,1066,2955 +2029,HDD,2420,5894,3111,5235,6117,5833,5807,2283,2614,6355,1921 +2030,CDD,1137,876,1811,884,788,640,248,2476,2088,1071,2969 +2030,HDD,2417,5879,3098,5214,6117,5810,5826,2267,2619,6348,1914 +2031,CDD,1145,881,1818,892,788,646,250,2491,2072,1076,2982 +2031,HDD,2413,5864,3086,5193,6117,5787,5844,2251,2623,6341,1907 +2032,CDD,1153,886,1826,900,788,652,252,2507,2056,1081,2996 +2032,HDD,2410,5850,3073,5172,6117,5764,5863,2235,2627,6334,1900 +2033,CDD,1161,890,1834,908,788,659,254,2522,2040,1086,3010 +2033,HDD,2406,5835,3060,5151,6117,5741,5881,2220,2631,6327,1893 +2034,CDD,1169,895,1841,915,787,665,255,2538,2024,1092,3023 +2034,HDD,2403,5820,3048,5130,6117,5718,5900,2204,2635,6319,1886 +2035,CDD,1177,900,1849,923,787,671,257,2553,2008,1097,3037 +2035,HDD,2399,5806,3035,5109,6117,5695,5918,2188,2639,6312,1879 +2036,CDD,1185,905,1857,931,787,678,259,2569,1991,1102,3050 +2036,HDD,2396,5791,3022,5088,6117,5672,5937,2173,2644,6304,1872 +2037,CDD,1193,910,1864,939,786,684,261,2585,1975,1107,3064 +2037,HDD,2392,5776,3009,5068,6117,5649,5955,2157,2648,6297,1865 +2038,CDD,1202,915,1872,947,786,690,263,2600,1958,1112,3077 +2038,HDD,2389,5762,2996,5047,6117,5626,5974,2141,2653,6289,1858 +2039,CDD,1210,920,1879,955,786,697,265,2616,1942,1117,3091 +2039,HDD,2385,5747,2984,5026,6118,5603,5992,2125,2657,6282,1852 +2040,CDD,1218,925,1887,963,785,703,267,2632,1925,1122,3104 +2040,HDD,2382,5732,2971,5005,6118,5579,6011,2110,2662,6274,1845 +2041,CDD,1226,930,1895,971,785,710,269,2648,1908,1128,3118 +2041,HDD,2378,5717,2958,4984,6118,5556,6029,2094,2667,6267,1838 +2042,CDD,1234,935,1902,978,785,716,271,2663,1892,1133,3131 +2042,HDD,2374,5703,2945,4963,6118,5533,6048,2079,2671,6259,1831 +2043,CDD,1242,940,1910,986,784,722,273,2679,1875,1138,3145 +2043,HDD,2371,5688,2933,4943,6119,5510,6066,2063,2676,6252,1825 +2044,CDD,1250,945,1918,994,784,729,275,2695,1858,1143,3158 +2044,HDD,2367,5673,2920,4922,6119,5487,6085,2047,2681,6244,1818 +2045,CDD,1258,950,1925,1002,784,735,277,2711,1841,1148,3172 +2045,HDD,2364,5658,2907,4901,6119,5464,6103,2032,2686,6236,1811 +2046,CDD,1267,955,1933,1010,783,741,278,2727,1824,1153,3185 +2046,HDD,2360,5644,2894,4880,6120,5440,6122,2016,2690,6229,1805 +2047,CDD,1275,960,1940,1018,783,748,280,2742,1807,1159,3199 +2047,HDD,2357,5629,2881,4859,6120,5417,6140,2001,2695,6221,1798 +2048,CDD,1283,965,1948,1026,783,754,282,2758,1790,1164,3212 +2048,HDD,2353,5614,2869,4838,6121,5394,6159,1985,2700,6213,1791 +2049,CDD,1291,970,1956,1033,782,760,284,2774,1772,1169,3226 +2049,HDD,2350,5599,2856,4818,6121,5371,6177,1970,2706,6206,1785 +2050,CDD,1299,975,1963,1041,782,767,286,2790,1755,1174,3239 +2050,HDD,2346,5585,2843,4797,6122,5348,6196,1955,2711,6198,1778 From 88cc16b0a2f214e9e19b27c7f61e37fb5858f8b0 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 12:43:20 -0400 Subject: [PATCH 53/85] Bugfixes --- ...ee_day_gas_price_regression_parameters.csv | 16 -------- ...degree_day_price_regression_parameters.csv | 16 ++++++++ inputs/fuelprices/gasreg_degree_days.csv | 40 +++++++++---------- inputs/userinput/futurefiles.csv | 1 + reeds/input_processing/fuelcostprep.py | 2 +- reeds/input_processing/runfiles.csv | 4 +- 6 files changed, 40 insertions(+), 39 deletions(-) delete mode 100644 inputs/fuelprices/degree_day_gas_price_regression_parameters.csv create mode 100644 inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv diff --git a/inputs/fuelprices/degree_day_gas_price_regression_parameters.csv b/inputs/fuelprices/degree_day_gas_price_regression_parameters.csv deleted file mode 100644 index c2d2953b..00000000 --- a/inputs/fuelprices/degree_day_gas_price_regression_parameters.csv +++ /dev/null @@ -1,16 +0,0 @@ -param,California,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central,Mid_Atlantic,East_North_Central,East_South_Central -beta_CDD,0.03,0.028,0.05,0.031,0.018,0.02,0.01,0.011,0.036,0.009,0.01 -beta_HDD,0.016,0.012,0.036,0.02,0.023,0.015,0.015,0.014,0.029,0.011,0.011 -alpha,-0.328,-0.384,-0.844,-0.562,-0.234,-0.439,-0.273,-0.183,-0.448,-0.208,-0.094 -alpha_JAN,0.119,0.045,-0.01,0.054,-0.038,0.228,-0.351,-0.064,-0.2,-0.214,-0.072 -alpha_FEB,0.094,0.048,-0.122,0.028,-0.043,0.221,-0.279,-0.026,-0.354,-0.155,-0.046 -alpha_MAR,-0.026,-0.086,-0.308,-0.09,-0.097,0.039,-0.268,-0.07,-0.481,-0.192,-0.074 -alpha_APR,-0.009,-0.06,-0.159,-0.081,-0.018,0.046,-0.16,-0.02,-0.223,-0.114,-0.002 -alpha_MAY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 -alpha_JUN,-0.06,0.015,0.143,0.098,-0.068,-0.079,0.046,-0.056,0.027,0.046,-0.078 -alpha_JUL,-0.063,-0.0,0.04,0.224,-0.082,0.001,0.07,-0.057,-0.09,0.059,-0.114 -alpha_AUG,0.036,0.104,0.08,0.319,-0.078,0.113,0.134,-0.007,-0.068,0.117,-0.121 -alpha_SEP,0.075,0.153,0.144,0.299,-0.066,0.121,0.121,0.051,-0.077,0.117,-0.135 -alpha_OCT,0.188,0.093,-0.032,0.21,-0.082,0.202,-0.018,0.072,-0.271,0.01,-0.204 -alpha_NOV,0.192,0.094,-0.147,0.213,-0.03,0.264,-0.156,0.047,-0.319,-0.083,-0.077 -alpha_DEC,0.243,0.103,-0.102,0.16,-0.053,0.315,-0.31,-0.054,-0.368,-0.197,-0.097 diff --git a/inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv b/inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv new file mode 100644 index 00000000..cdcc6720 --- /dev/null +++ b/inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv @@ -0,0 +1,16 @@ +param,California,East_North_Central,East_South_Central,Mid_Atlantic,Mountain,New_England,Northwest,South_Atlantic,Southwest,West_North_Central,West_South_Central +beta_CDD,0.03,0.009,0.01,0.035,0.029,0.05,0.031,0.019,0.02,0.01,0.011 +beta_HDD,0.016,0.011,0.011,0.029,0.012,0.036,0.02,0.022,0.015,0.015,0.014 +alpha,-0.321,-0.208,-0.092,-0.448,-0.383,-0.844,-0.554,-0.227,-0.436,-0.273,-0.18 +alpha_JAN,0.122,-0.214,-0.072,-0.201,0.046,-0.01,0.054,-0.05,0.227,-0.351,-0.066 +alpha_FEB,0.094,-0.156,-0.047,-0.354,0.049,-0.122,0.029,-0.06,0.22,-0.277,-0.028 +alpha_MAR,-0.03,-0.193,-0.075,-0.481,-0.085,-0.308,-0.089,-0.114,0.037,-0.267,-0.072 +alpha_APR,-0.015,-0.113,-0.002,-0.224,-0.059,-0.159,-0.08,-0.026,0.045,-0.159,-0.022 +alpha_MAY,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 +alpha_JUN,-0.044,0.046,-0.077,0.029,0.015,0.143,0.099,-0.064,-0.08,0.045,-0.056 +alpha_JUL,-0.045,0.059,-0.113,-0.088,-0.001,0.04,0.222,-0.083,-0.002,0.069,-0.056 +alpha_AUG,0.05,0.117,-0.12,-0.066,0.104,0.08,0.318,-0.077,0.111,0.133,-0.006 +alpha_SEP,0.079,0.118,-0.134,-0.076,0.153,0.144,0.296,-0.062,0.121,0.12,0.051 +alpha_OCT,0.182,0.01,-0.205,-0.271,0.093,-0.032,0.208,-0.086,0.203,-0.018,0.071 +alpha_NOV,0.19,-0.083,-0.078,-0.319,0.095,-0.147,0.213,-0.043,0.262,-0.156,0.045 +alpha_DEC,0.247,-0.197,-0.098,-0.367,0.105,-0.102,0.16,-0.066,0.315,-0.31,-0.056 diff --git a/inputs/fuelprices/gasreg_degree_days.csv b/inputs/fuelprices/gasreg_degree_days.csv index 4820fef8..087e9e2f 100644 --- a/inputs/fuelprices/gasreg_degree_days.csv +++ b/inputs/fuelprices/gasreg_degree_days.csv @@ -19,26 +19,26 @@ t,ddtype,California,East_North_Central,East_South_Central,Mid_Atlantic,Mountain, 2018,HDD,2281,6434,3479,5769,6000,6323,5547,2638,2486,6975,2252 2019,CDD,913,832,1886,787,774,536,130,2503,2275,951,2759 2019,HDD,2636,6427,3181,5736,6422,6538,5696,2392,2571,7082,2143 -2020,CDD,1141,831,1636,848,782,645,193,2335,2501,964,2735 -2020,HDD,2472,5855,3064,5198,6205,5822,5484,2263,2667,6326,1812 -2021,CDD,1050,911,1611,837,818,604,318,2226,2096,1093,2644 -2021,HDD,2567,5747,3166,5261,6095,5799,5610,2366,2510,6061,1911 -2022,CDD,1117,816,1728,838,791,647,283,2302,2180,1050,2992 -2022,HDD,2521,6344,3438,5635,6678,6019,5868,2523,2881,6905,2200 -2023,CDD,782,713,1669,683,584,518,209,2258,2151,1042,3117 -2023,HDD,2956,5417,2826,4954,6638,5564,5709,2150,2972,5929,1725 -2024,CDD,1081,899,1859,867,766,620,235,2399,2363,1046,3073 -2024,HDD,2655,5306,3024,4981,6103,5643,5739,2271,2807,5716,1844 -2025,CDD,814,851,1773,845,711,609,246,2400,2122,1046,2901 -2025,HDD,2383,5952,3161,5319,5864,5924,5485,2344,2465,6383,1949 -2026,CDD,1104,856,1781,853,790,615,240,2415,2154,1051,2915 -2026,HDD,2431,5937,3148,5298,6117,5901,5752,2329,2600,6376,1942 -2027,CDD,1112,861,1788,860,789,621,242,2430,2138,1056,2928 -2027,HDD,2427,5923,3136,5277,6117,5879,5771,2313,2604,6369,1935 -2028,CDD,1120,866,1796,868,789,627,244,2445,2121,1061,2942 -2028,HDD,2424,5908,3123,5256,6117,5856,5789,2298,2609,6362,1928 -2029,CDD,1128,871,1803,876,789,633,246,2460,2105,1066,2955 -2029,HDD,2420,5894,3111,5235,6117,5833,5807,2283,2614,6355,1921 +2020,CDD,1141,831,1636,848,782,645,193,2335,2502,964,2735 +2020,HDD,2472,5855,3064,5198,6204,5822,5484,2263,2665,6326,1812 +2021,CDD,1050,911,1611,837,818,604,318,2226,2099,1093,2644 +2021,HDD,2567,5747,3166,5261,6097,5799,5610,2366,2506,6061,1911 +2022,CDD,1117,816,1728,838,791,647,283,2302,2186,1050,2992 +2022,HDD,2521,6344,3438,5635,6683,6019,5869,2523,2872,6905,2200 +2023,CDD,782,713,1669,683,583,518,209,2258,2157,1042,3117 +2023,HDD,2956,5417,2826,4954,6642,5564,5710,2150,2963,5929,1725 +2024,CDD,1081,899,1859,867,766,620,235,2399,2371,1046,3073 +2024,HDD,2655,5306,3024,4981,6108,5643,5740,2271,2798,5716,1844 +2025,CDD,814,851,1773,845,710,609,246,2400,2131,1046,2901 +2025,HDD,2383,5952,3161,5319,5867,5924,5487,2344,2453,6383,1949 +2026,CDD,1104,856,1781,853,789,615,240,2415,2160,1051,2915 +2026,HDD,2431,5937,3148,5298,6120,5901,5753,2329,2592,6376,1942 +2027,CDD,1112,861,1788,860,789,621,242,2430,2142,1056,2928 +2027,HDD,2427,5923,3136,5277,6120,5879,5771,2313,2598,6369,1935 +2028,CDD,1120,866,1796,868,789,627,244,2445,2124,1061,2942 +2028,HDD,2424,5908,3123,5256,6119,5856,5789,2298,2605,6362,1928 +2029,CDD,1128,871,1803,876,789,633,246,2460,2106,1066,2955 +2029,HDD,2420,5894,3111,5235,6118,5833,5808,2283,2612,6355,1921 2030,CDD,1137,876,1811,884,788,640,248,2476,2088,1071,2969 2030,HDD,2417,5879,3098,5214,6117,5810,5826,2267,2619,6348,1914 2031,CDD,1145,881,1818,892,788,646,250,2491,2072,1076,2982 diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index e28eb00d..713cf72f 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -162,6 +162,7 @@ fuel2tech.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, fuelbin.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, futurefiles.csv,.csv,1,None,9999,None,9999,0,constant,None,None,so meta,constant gasprice_ref.csv,.csv,0,None,wide,cendiv,1,0,constant,0,None,done,linear_5 +gasreg_degree_day_price_regression_parameters.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gasreg_degree_days.csv,.csv,0,None,t,ddtype,1,0,linear_5,None,None,new,linear_5 gb.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gbin_min.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index bdc4d415..4f28526f 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -222,7 +222,7 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): dd_gas_price_regression_params = pd.read_csv( os.path.join( inputs_case, - 'degree_day_gas_price_regression_parameters.csv' + 'gasreg_degree_day_price_regression_parameters.csv' ), index_col='param' ) diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 45eda538..686dc067 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -58,7 +58,6 @@ dac_elec.csv,inputs/consume/dac_elec_{dacscen}.csv,int(sw.GSw_DAC) != 0,ignore,i dac_gas.csv,inputs/consume/dac_gas_{GSw_DAC_Gas_Case}.csv,int(sw.GSw_DAC) != 0,ignore,ignore,,,,1,0,,1,,,, deflator.csv,inputs/financials/deflator.csv,1,ignore,ignore,,,,,0,,,,,, degradation_annual.csv,inputs/degradation/degradation_annual_{degrade_suffix}.csv,1,ignore,ignore,,,,,0,,,,,, -degree_day_gas_price_regression_parameters.csv,inputs/fuelprices/degree_day_gas_price_regression_parameters.csv,1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, demonstration_plants.csv,inputs/capacity_exogenous/demonstration_plants.csv,int(sw.GSw_NuclearDemo) != 0,sum,ignore,r,"t,i,coolingwatertech,ctt,wst,notes",i,0,0,,,,,, depreciation_schedules.csv,inputs/financials/depreciation_schedules_{depreciation_schedules_suffix}.csv,1,ignore,ignore,,,,1,0,,,,,, diagnose.gms,postprocessing/diagnose/diagnose.gms,1,ignore,ignore,,,,,,,,,,, @@ -94,7 +93,8 @@ forced_retirements.csv,inputs/state_policies/forced_retirements.csv,1,ignore,ign fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,set,fuel2tech,mapping between fuel types and generations, fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,set,fuelbin,gas usage bracket, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, +gasreg_degree_day_price_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) = 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, +gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) = 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,set,gb,gas price bins; must have an odd number of bins; e.g. gb1*gb15, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,set,gbin,growth bins, gbin_min.csv,inputs/growth_constraints/gbin_min.csv,1,ignore,ignore,,,,,0,,,,,, From 862450a51ea927b6307a2e96f3fca2730d48007e Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 12:56:30 -0400 Subject: [PATCH 54/85] Bugfix --- reeds/input_processing/runfiles.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 686dc067..8b93a902 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -93,8 +93,8 @@ forced_retirements.csv,inputs/state_policies/forced_retirements.csv,1,ignore,ign fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,set,fuel2tech,mapping between fuel types and generations, fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,set,fuelbin,gas usage bracket, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_degree_day_price_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) = 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, -gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) = 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, +gasreg_degree_day_price_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, +gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,set,gb,gas price bins; must have an odd number of bins; e.g. gb1*gb15, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,set,gbin,growth bins, gbin_min.csv,inputs/growth_constraints/gbin_min.csv,1,ignore,ignore,,,,,0,,,,,, From f57db4ce30589e0c71054e1b444a191b7186ca6c Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 13:35:58 -0400 Subject: [PATCH 55/85] Bugfixes --- reeds/core/setup/d_objective.gms | 8 ++++---- reeds/core/terminus/report.gms | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/reeds/core/setup/d_objective.gms b/reeds/core/setup/d_objective.gms index 68866ea3..ab21f20f 100644 --- a/reeds/core/setup/d_objective.gms +++ b/reeds/core/setup/d_objective.gms @@ -240,14 +240,14 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 2 (static natural gas prices) *first - gas consumed for electricity generation + sum{(i,v,r,h)$[valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)$(Sw_GasCurve = 2)], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gasprice_adj_r(r,h,t)} + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN(i,v,r,h,t) * gasprice_adj_r(r,h,t) } *second - gas consumed by gas-powered DAC + sum{(v,r,h)$[valcap("dac_gas",v,r,t)$(Sw_GasCurve = 2)], hours(h) * dac_gas_cons_rate("dac_gas",v,t) * PRODUCE("DAC","dac_gas",v,r,h,t) }$Sw_DAC_Gas *Sw_GasCurve = 0 (census division supply curves natural gas prices) - + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)} + + sum{(cendiv,gb), sum{h, hours(h) * GASUSED(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t) } * gasprice(cendiv,gb,t) }$(Sw_GasCurve = 0) @@ -259,8 +259,8 @@ eq_Objfn_op(t)$tmodel(t).. *Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount + (sum{(i,r,v,cendiv,h)$[valgen(i,v,r,t)$gas(i)], - gasmultterm(cendiv,t) * gasprice_adj_cendiv(cendiv,h,t) * cendiv_weights(r,cendiv) * - hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * heat_rate(i,v,r,t) * GEN(i,v,r,h,t) * gasprice_adj_r(r,h,t) } *second - adjustments based on changes from last year's consumption at the regional and national level + sum{(fuelbin,cendiv), diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 58d1de9e..6b7e9146 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -569,15 +569,15 @@ gascost_cendiv(cendiv,t)$tmodel_new(t) = *cost of natural gas for Sw_GasCurve = 2 (static natural gas prices) + sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t) $[not bio(i)]$[not cofire(i)]$[Sw_GasCurve = 2]], - hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN.l(i,v,r,h,t) } + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN.l(i,v,r,h,t) * gasprice_adj_r(r,h,t) } *cost of natural gas for Sw_GasCurve = 0 (census division supply curves natural gas prices) - + sum{gb, sum{h,hours(h) * GASUSED.l(cendiv,gb,h,t) } * gasprice(cendiv,gb,t) + + sum{gb, sum{h,hours(h) * GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t) } * gasprice(cendiv,gb,t) }$[Sw_GasCurve = 0] *cost of natural gas for Sw_GasCurve = 3 (national supply curve for natural gas prices with census division multipliers) + sum{(h,gb), hours(h) * GASUSED.l(cendiv,gb,h,t) - * gasadder_cd(cendiv,t,h) + gasprice_nat_bin(gb,t) + * gasadder_cd(cendiv,t,h) * gasprice_adj_cendiv(cendiv,h,t) + gasprice_nat_bin(gb,t) }$[Sw_GasCurve = 3] *cost of natural gas for Sw_GasCurve = 1 (national and census division supply curves for natural gas prices) *first - anticipated costs of gas consumption given last year's amount From f6cea5363787ed720cc2bd784063b347b79a0d08 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 14:11:34 -0400 Subject: [PATCH 56/85] Misc. cleanup --- reeds/core/setup/b_inputs.gms | 1 + reeds/core/solve/2_temporal_params.gms | 5 ++--- reeds/input_processing/copy_files.py | 2 +- reeds/input_processing/runfiles.csv | 1 - tests/objective_function_params.yaml | 19 +++++++++++++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 01cdac29..03c5b221 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -995,6 +995,7 @@ r_country(r,country) $sum{(nercr,transreg,transgrp,cendiv,st,in r_usda(r,usda_region) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country, h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_h2ptcreg(r,h2ptcreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region, hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_hurdlereg(r,hurdlereg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg, gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; +r_gasreg(r,gasreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg, ,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_ccreg(r,ccreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg ) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; set r_itlgrp(r,itlgrp) "mapping of r to itlgrp" diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 691dafa7..dbeb43bb 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -899,18 +899,17 @@ $onlisting / ; $offempty -* If GSw_GasPriceAdjMethod = 0, apply a uniform winter gas markup instead of daily adjustments +*winter gas gets marked up if GSw_GasPriceAdjMethod = 0 szn_adj_gas(allh) = 0 ; szn_adj_gas(h) = 1 ; szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = szn_adj_gas(h) + frac_h_quarter_weights(h,"wint") * szn_adj_gas_winter ; - * Renormalize so hour-weighted average of szn_adj_gas is 1 scalar szn_adj_gas_avg "--unitless-- hour-weighted average of natural gas seasonal adjustment" ; - szn_adj_gas_avg = sum{h, szn_adj_gas(h) * hours(h) } / sum{h, hours(h) } ; szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; +* If GSw_GasPriceAdjMethod = 0, apply the uniform winter gas markup instead of daily adjustments gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index 48ca75bd..f7e013ab 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -384,7 +384,7 @@ def get_regions_and_agglevel( 'transgrp': 'sub-FERC-1000 region', 'transreg': 'Transmission Planning Regions from FERC Order 1000', 'usda_region': 'biomass supply curve region', - 'gasreg': 'gas price region', + 'gasreg': 'gas price region (for applying daily temperature-based price adjustments)', } for level, comment in comments.items(): df = pd.Series(hier_sub[level].unique()) diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 8b93a902..e35d224b 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -149,7 +149,6 @@ modeled_regions.csv,inputs/userinput/modeled_regions.csv,1,ignore,ignore,,,,,,,, month2quarter.csv,inputs/temporal/month2quarter.csv,1,ignore,ignore,,,,,0,,,,,, mttr.csv,inputs/plant_characteristics/mttr.csv,1,ignore,ignore,,,tech,,0,,,,,, natgas_price_cendiv.csv,inputs/fuelprices/ng_{ngscen}.csv,1,ignore,ignore,wide_cendiv,year,,1,0,,,,,, -natgas_price_diffs.h5,,1,sum,ignore,wide_gasreg,"year,hour",,1,keepindex,,1,,,, national_rps_frac_allScen.csv,inputs/national_generation/national_rps_frac_allScen.csv,int(sw.GSw_StateRPS) != 0,ignore,ignore,,,,1,0,,,,,, net_gen_existing_hydro.csv,inputs/hydro/net_gen_existing_hydro.csv,1,ignore,ignore,,"t,month",,0,0,,,,,, peak_net_imports.csv,inputs/reserves/peak_net_imports.csv,1,ignore,ignore,nercr,t,,0,0,,,,,, diff --git a/tests/objective_function_params.yaml b/tests/objective_function_params.yaml index 235d59f6..999ecf1d 100644 --- a/tests/objective_function_params.yaml +++ b/tests/objective_function_params.yaml @@ -215,6 +215,25 @@ cendiv_weights: - r_cendiv switchon: GSw_GasCurve: 1 +szn_adj_gas: + indexsets: + - h + switchon: + GSw_GasPriceAdjMethod: 0 +gasprice_adj_r: + indexsets: + - r + - h + - t + switchon: + GSw_GasPriceAdjMethod: 1 +gasprice_adj_cendiv: + indexsets: + - cendiv + - h + - t + switchon: + GSw_GasPriceAdjMethod: 1 gasbinp_regional: indexsets: - t From ee59b2acf828474361aa713650e38044dd64f2c7 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 14:13:23 -0400 Subject: [PATCH 57/85] Misc. cleanup --- tests/objective_function_params.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/objective_function_params.yaml b/tests/objective_function_params.yaml index 999ecf1d..d3b410a2 100644 --- a/tests/objective_function_params.yaml +++ b/tests/objective_function_params.yaml @@ -208,6 +208,11 @@ gasmultterm: - r_cendiv switchon: GSw_GasCurve: 1 +szn_adj_gas: + indexsets: + - h + switchon: + GSw_GasPriceAdjMethod: 0 cendiv_weights: indexsets: - valgen @@ -215,11 +220,6 @@ cendiv_weights: - r_cendiv switchon: GSw_GasCurve: 1 -szn_adj_gas: - indexsets: - - h - switchon: - GSw_GasPriceAdjMethod: 0 gasprice_adj_r: indexsets: - r From 8ff0ed3987b092bc73bfcd8bf8333d5f60b9d9ea Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 3 Jun 2026 19:50:13 -0400 Subject: [PATCH 58/85] Cleanup + added docstrings --- inputs/userinput/futurefiles.csv | 2 +- reeds/input_processing/fuelcostprep.py | 428 ++++++++++++------ .../hourly_writetimeseries.py | 55 ++- reeds/input_processing/runfiles.csv | 2 +- reeds/io.py | 13 +- 5 files changed, 328 insertions(+), 172 deletions(-) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 713cf72f..15553a07 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -162,7 +162,7 @@ fuel2tech.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, fuelbin.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, futurefiles.csv,.csv,1,None,9999,None,9999,0,constant,None,None,so meta,constant gasprice_ref.csv,.csv,0,None,wide,cendiv,1,0,constant,0,None,done,linear_5 -gasreg_degree_day_price_regression_parameters.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, +gasreg_degree_day_price_mult_regression_parameters.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gasreg_degree_days.csv,.csv,0,None,t,ddtype,1,0,linear_5,None,None,new,linear_5 gb.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gbin_min.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 4f28526f..6f5ba5f6 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -22,18 +22,34 @@ sys.path.append(str(Path(__file__).parent.parent.parent)) import reeds -def calculate_state_weights( - inputs_case, - st2gasreg -): - ## Calculate state population to calculate - ## population-weighted degree days + +def calculate_region_aggregion_population_weights( + inputs_case: str, + region_level: str, + aggregion_level: str, +) -> pd.Series: + """ + For a given region level and aggregated region (aggregion) + level, calculate each region's share of its corresponding + aggregion's total population. + + + Args: + inputs_case: Path to the inputs case directory. + region_level: Region level (example: 'state') + aggregion_level: Aggregated region level + (example: 'cendiv') + + Returns: + pd.Series + """ # Get county populations county_populations = reeds.io.get_county_populations() county_populations = county_populations.rename( columns={'value': 'population'} ) - # Get county-state map + + # Get county-to-region mapping county2zone = reeds.io.get_county2zone( os.path.dirname(inputs_case), as_map=False @@ -41,89 +57,147 @@ def calculate_state_weights( county2zone['FIPS'] = ( 'p' + county2zone['FIPS'].astype(str).str.zfill(5) ) - county_state_map = county2zone.set_index('FIPS')['state'] - # Calculate state populations - county_populations['state'] = ( - county_populations['FIPS'].map(county_state_map) + state_groups = reeds.io.get_state_groups() + county2zone = county2zone.merge( + state_groups, + left_on='st', + right_on='state' + ) + county_region_map = county2zone.set_index('FIPS')[region_level] + + # Calculate regional populations + county_populations[region_level] = ( + county_populations['FIPS'].map(county_region_map) ) - state_populations = ( - county_populations.groupby('state', as_index=False) + region_populations = ( + county_populations.groupby(region_level, as_index=False) ['population'] .sum() ) - # Calculate state weights - state_populations['gasreg'] = ( - state_populations['state'].map(st2gasreg) + + # Calculate each region's percentage of aggregion population + region2aggregion = dict(zip( + county2zone[region_level], + county2zone[aggregion_level] + )) + region_populations[aggregion_level] = ( + region_populations['state'].map(region2aggregion) ) - state_populations['weight'] = ( - state_populations['population'] + region_populations['weight'] = ( + region_populations['population'] / ( - state_populations.groupby('gasreg') + region_populations.groupby(aggregion_level) ['population'] .transform('sum') ) ) - state_weights = ( - state_populations.set_index('state')['weight'] + region_aggregion_weights = ( + region_populations.set_index(region_level)['weight'] ) - return state_weights + return region_aggregion_weights + +def calculate_historical_daily_state_degree_days( + inputs_case: str +) -> tuple[pd.DataFrame, pd.DataFrame]: + """ + Calculate daily historical heating and cooling degree days for each state + and each weather year (based on the GSw_HourlyWeatherYears switch) using + hourly state-level temperature data. -def calculate_historical_daily_state_degree_days(inputs_case): - # Get hourly state-level temperatures + Args: + inputs_case: Path to the inputs case directory. + + Returns: + (pd.DataFrame, pd.DataFrame) + """ + # Get hourly state-level temperatures for the given weather year(s) sw = reeds.io.get_switches(inputs_case) weather_years = [int(y) for y in sw.GSw_HourlyWeatherYears.split('_')] temp_hourly = reeds.io.get_temperatures(inputs_case, subset_years=False) temp_hourly = temp_hourly.loc[temp_hourly.index.year.isin(weather_years)] - # Get baseline temperature + # Get baseline temperature for calculating degree days scalars = reeds.io.get_scalars(inputs_case) base_temp = scalars['degree_days_base_temperature'] - # Calculate state-level, daily heating and cooling degree days + # Calculate each state's average temperature for each day temp_daily = temp_hourly.resample('D').agg(['min', 'max']) avg_temp_daily = ( temp_daily.xs('min', axis=1, level=1) + temp_daily.xs('max', axis=1, level=1) ) / 2 + + # Take differences between baseline and average temperatures hdd_daily = (base_temp - avg_temp_daily).clip(lower=0) cdd_daily = (avg_temp_daily - base_temp).clip(lower=0) return hdd_daily, cdd_daily -def calculate_historical_daily_gasreg_popweighted_degree_days( - historical_daily_state_degree_days, - state_weights, - st2gasreg -): - historical_daily_gasreg_popweighted_degree_days = ( - (historical_daily_state_degree_days * state_weights) +def aggregate_state_degree_days_to_gasreg( + state_degree_days: pd.DataFrame, + state_weights: pd.Series, + st2gasreg: dict[str, str] +) -> pd.DataFrame: + """ + Aggregate state-level degree days to the gasreg level via + population-weighted average. + + Args: + historical_daily_state_degree_days: Daily historical + state-level degree days. + state_weights: The percentage of each state's share of + gasreg population. + st2gasreg: State-to-gasreg mapping. + + Returns: + pd.DataFrame + """ + gasreg_degree_days = ( + (state_degree_days * state_weights) .transpose() .rename(st2gasreg) .groupby(level=0) .sum() .transpose() ) - return historical_daily_gasreg_popweighted_degree_days - -def calculate_projected_daily_gasreg_popweighted_degree_days( - historical_daily_gasreg_popweighted_degree_days, - annual_gasreg_degree_day_projections -): - # Apply historical degree day shapes to annual projections - historical_gasreg_popweighted_degree_day_shapes = ( - historical_daily_gasreg_popweighted_degree_days.div( - historical_daily_gasreg_popweighted_degree_days.groupby( - historical_daily_gasreg_popweighted_degree_days.index.year + return gasreg_degree_days + +def rescale_historical_daily_degree_days_to_projected_annuals( + historical_daily_degree_days: pd.DataFrame, + projected_annual_degree_days: pd.DataFrame +) -> pd.DataFrame: + """ + Rescale daily, historical degree days so that they match + annual degree day projections. This is used to estimate + daily degree day projections for model solve years. + + Args: + historical_daily_degree_days: Daily historical degree days. + projected_annual_degree_days: Annual degree day projections. + + Returns: + pd.DataFrame + """ + # Normalize the daily degree day profile annually to get daily + # shapes for each historical year + historical_degree_day_shapes = ( + historical_daily_degree_days.div( + historical_daily_degree_days.groupby( + historical_daily_degree_days.index.year ) .transform('sum') ) .reset_index() ) - daily_gasreg_popweighted_degree_days = ( + + # Combine the historical daily normalized values and projected + # annual degree day magnitudes via cartesian product to line + # them up row-by-row for each region + projected_daily_degree_days = ( pd.merge( - historical_gasreg_popweighted_degree_day_shapes, - annual_gasreg_degree_day_projections, + historical_degree_day_shapes, + projected_annual_degree_days, how='cross', suffixes=('_shape', '_magnitude') ) @@ -131,168 +205,225 @@ def calculate_projected_daily_gasreg_popweighted_degree_days( .rename_axis(['year', 'datetime']) .sort_index() ) - gasregs = ( - annual_gasreg_degree_day_projections + + # For each region, multiply the daily normalized value by the + # annual projection to calculate a degree day projection for + # each day + regions = ( + projected_annual_degree_days .drop(columns='t') .columns .tolist() ) - for gasreg in gasregs: - daily_gasreg_popweighted_degree_days[gasreg] = ( - daily_gasreg_popweighted_degree_days[f"{gasreg}_shape"] - * daily_gasreg_popweighted_degree_days[f"{gasreg}_magnitude"] + for region in regions: + projected_daily_degree_days[region] = ( + projected_daily_degree_days[f"{region}_shape"] + * projected_daily_degree_days[f"{region}_magnitude"] ) - daily_gasreg_popweighted_degree_days = ( - daily_gasreg_popweighted_degree_days.drop( - columns=[f"{gasreg}_shape", f"{gasreg}_magnitude"] + projected_daily_degree_days = ( + projected_daily_degree_days.drop( + columns=[f"{region}_shape", f"{region}_magnitude"] ) ) - return daily_gasreg_popweighted_degree_days - -def calculate_daily_gasreg_population_weighted_degree_days( - reeds_path, - inputs_case, -): - # state -> gasreg mapping - state_groups = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'zones', 'state_groups.csv') - ) + return projected_daily_degree_days + +def calculate_daily_gasreg_degree_days( + reeds_path: str, + inputs_case: str, +) -> tuple[pd.DataFrame, pd.DataFrame]: + """ + Calculate daily gasreg-level heating and cooling degree days. + This is done by calculating historical daily state-level degree + days for the given weather year(s), aggregating them to the + gasreg level via population-weighted average, and then rescaling + the historical daily degree days to match projected annual + degree days (corresponding to model solve years) for each gasreg. + + Args: + reeds_path: Path to ReEDS directory. + inputs_case: Path to the inputs case directory. + + Returns: + (pd.DataFrame, pd.DataFrame) + """ + # Get state-to-gasreg mapping + state_groups = reeds.io.get_state_groups st2gasreg = state_groups.set_index('st')['gasreg'] - # Get population-based state weights - state_weights = calculate_state_weights( + + # Calculate population-based state-gasreg weights for + # calculating population-weighted gasreg-level degree days + state_gasreg_weights = calculate_region_aggregion_population_weights( inputs_case, - st2gasreg + region_level='state', + aggregion_level='gasreg' ) - # Get historical state-level daily HDD/CDDs + + # Calculate historical state-level daily HDDs and CDDs historical_hdd_daily_st, historical_cdd_daily_st = ( calculate_historical_daily_state_degree_days(inputs_case) ) - # Calculate historical gasreg-level population-weighted degree days - historical_popweighted_hdd_daily_gasreg = ( - calculate_historical_daily_gasreg_popweighted_degree_days( + + # Aggregate historical daily state-level degree days to + # the gasreg level via population-weighted average + historical_hdd_daily_gasreg = ( + aggregate_state_degree_days_to_gasreg( historical_hdd_daily_st, - state_weights, + state_gasreg_weights, st2gasreg ) ) - historical_popweighted_cdd_daily_gasreg = ( - calculate_historical_daily_gasreg_popweighted_degree_days( + historical_cdd_daily_gasreg = ( + aggregate_state_degree_days_to_gasreg( historical_cdd_daily_st, - state_weights, + state_gasreg_weights, st2gasreg ) ) - # Get gasreg-level annual HDD/CDD projections and - # subset to solve years only + + # Get gasreg-level annual HDD/CDD projections + # for the model solve years solveyears = reeds.io.get_years(os.path.dirname(inputs_case)) - gasreg_degree_days = pd.read_csv( + annual_degree_days_gasreg = pd.read_csv( os.path.join(inputs_case, 'gasreg_degree_days.csv') ) - gasreg_degree_days = ( - gasreg_degree_days.loc[gasreg_degree_days['t'].isin(solveyears)] + annual_degree_days_gasreg = ( + annual_degree_days_gasreg + .loc[annual_degree_days_gasreg['t'].isin(solveyears)] ) - gasreg_hdd = ( - gasreg_degree_days.loc[gasreg_degree_days.ddtype == 'HDD'] + annual_hdd_gasreg = ( + annual_degree_days_gasreg + .loc[annual_degree_days_gasreg.ddtype == 'HDD'] .drop(columns='ddtype') ) - gasreg_cdd = ( - gasreg_degree_days.loc[gasreg_degree_days.ddtype == 'CDD'] + annual_cdd_gasreg = ( + annual_degree_days_gasreg + .loc[annual_degree_days_gasreg.ddtype == 'CDD'] .drop(columns='ddtype') ) - # Apply annual HDD/CDD projections to historical degree day shapes - popweighted_hdd_daily_gasreg = ( - calculate_projected_daily_gasreg_popweighted_degree_days( - historical_popweighted_hdd_daily_gasreg, - gasreg_hdd + + # Apply annual HDD/CDD projections to historical daily degree day shapes to + # estimate daily gasreg-level HDD/CDD projections for each model solve year + hdd_daily_gasreg = ( + rescale_historical_daily_degree_days_to_projected_annuals( + historical_hdd_daily_gasreg, + annual_hdd_gasreg ) ) - popweighted_cdd_daily_gasreg = ( - calculate_projected_daily_gasreg_popweighted_degree_days( - historical_popweighted_cdd_daily_gasreg, - gasreg_cdd + cdd_daily_gasreg = ( + rescale_historical_daily_degree_days_to_projected_annuals( + historical_cdd_daily_gasreg, + annual_cdd_gasreg ) ) - return popweighted_hdd_daily_gasreg, popweighted_cdd_daily_gasreg - -def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): - # Get temperature-price regression parameters and daily - # population-weighted degree days for each gasreg - dd_gas_price_regression_params = pd.read_csv( + return hdd_daily_gasreg, cdd_daily_gasreg + +def calculate_daily_gasprice_multipliers( + reeds_path: str, + inputs_case: str +) -> tuple[pd.DataFrame, pd.DataFrame]: + """ + Calculate daily gas price multipliers at the r and cendiv levels. + This is done by first calculating daily, gasreg-level heating and cooling + degree days, where the daily degree day shapes correspond to temperature + patterns of the given weather year(s) and annual degree day totals + correspond to projections for the model solve years. Then, degree + day-price multiplier regression parameters are applied to derive + gasreg-level price multipliers. To derive r-level multipliers, the + gasreg-level multipliers are copied to their constituent zones. To + derive cendiv-level multipliers, gasreg-level multipliers are + aggregated via population-weighted average. + + Args: + reeds_path: Path to ReEDS directory. + inputs_case: Path to the inputs case directory. + + Returns: + (pd.DataFrame, pd.DataFrame) + """ + # Get degree day-price multiplier regression parameters. These + # parameters represent a regression model where heating and + # cooling degree days were regressed on the log of the multiplicative + # difference between daily gas prices and the annual price for each + # gasreg with monthly fixed effects. + regression_params = pd.read_csv( os.path.join( inputs_case, - 'gasreg_degree_day_price_regression_parameters.csv' + 'gasreg_degree_day_price_mult_regression_parameters.csv' ), index_col='param' ) - popweighted_hdd_daily_gasreg, popweighted_cdd_daily_gasreg = ( - calculate_daily_gasreg_population_weighted_degree_days( + + # Calculate daily gasreg-level HDDs and CDDs + hdd_daily_gasreg, cdd_daily_gasreg = ( + calculate_daily_gasreg_degree_days( reeds_path, inputs_case, ) ) - # Apply regression parameters to get daily price multipliers - df_out = pd.DataFrame(index=popweighted_hdd_daily_gasreg.index) - for gasreg in dd_gas_price_regression_params.columns: - beta_cdd = dd_gas_price_regression_params.loc['beta_CDD', gasreg] - beta_hdd = dd_gas_price_regression_params.loc['beta_HDD', gasreg] - alpha = dd_gas_price_regression_params.loc['alpha', gasreg] - # monthly effects + + # Apply regression parameters to daily HDD/CDDs + # to get daily gasreg-level price multipliers + year_datetime_index = hdd_daily_gasreg.index + df_out = pd.DataFrame(index=year_datetime_index) + for gasreg in regression_params.columns: + beta_cdd = regression_params.loc['beta_CDD', gasreg] + beta_hdd = regression_params.loc['beta_HDD', gasreg] + alpha = regression_params.loc['alpha', gasreg] month_effects_map = ( - dd_gas_price_regression_params - .loc[dd_gas_price_regression_params.index.str.contains('alpha_')] + regression_params + .loc[regression_params.index.str.contains('alpha_')] [gasreg] ) month_effects_map.index = month_effects_map.index.str.removeprefix('alpha_') month_effects = ( - popweighted_hdd_daily_gasreg.index + year_datetime_index .get_level_values('datetime') .strftime('%b') .str .upper() .map(month_effects_map) ) - gasreg_price_log_returns = ( + # Applying the regression parameters gives the log of the + # daily multiplicative difference from the annual average + # price, so exponentiate to get daily price multipliers. + gasreg_price_log_mult_diffs = ( alpha - + beta_cdd * popweighted_cdd_daily_gasreg[gasreg] - + beta_hdd * popweighted_hdd_daily_gasreg[gasreg] + + beta_cdd * cdd_daily_gasreg[gasreg] + + beta_hdd * hdd_daily_gasreg[gasreg] + month_effects.values ) - gasreg_price_multipliers = np.exp(gasreg_price_log_returns) + gasreg_price_multipliers = np.exp(gasreg_price_log_mult_diffs) + # Divide each multiplier by the annual average of the multipliers + # to ensure a mean of 1 (so that the year-round average gas price + # doesn't change). gasreg_price_multipliers = gasreg_price_multipliers.div( gasreg_price_multipliers.groupby(level=0).mean() ) df_out[gasreg] = gasreg_price_multipliers + # Get hierarchy hierarchy = reeds.io.get_hierarchy(os.path.dirname(inputs_case)) - # Create one set of multipliers for model zones - # (needed if GSw_GasCurve == 2) + + # Create one set of multipliers at the r hierarchy level + # by copying the gasreg-level multipliers to their constitutent zones df_out_r = pd.DataFrame(data={ r: df_out[gasreg] for r, gasreg in hierarchy['gasreg'].items() }) - # Create another set of multipliers for census divisions - # (needed if GSw_GasCurve != 2) - popweighted_dd_daily_gasreg = ( - popweighted_hdd_daily_gasreg + popweighted_cdd_daily_gasreg - ) - annual_gasreg_dd = ( - popweighted_dd_daily_gasreg.groupby( - popweighted_dd_daily_gasreg.index.get_level_values('year') - ) - .sum() + + breakpoint() + + # Create another set of multipliers for census divisions by aggregating + # the gasreg-level multipliers via population-weighted average + gasreg_cendiv_weights = calculate_region_aggregion_population_weights( + inputs_case, + region_level='gasreg', + aggregion_level='cendiv' ) gasreg_cendiv_map = dict(zip(hierarchy['gasreg'], hierarchy['cendiv'])) - annual_cendiv_dd = ( - annual_gasreg_dd.transpose() - .assign(cendiv=gasreg_cendiv_map) - .groupby('cendiv', as_index=False) - .transform('sum') - .transpose() - ) - annual_gasreg_cendiv_weights = annual_gasreg_dd / annual_cendiv_dd df_out_cendiv = ( - df_out.mul(annual_gasreg_cendiv_weights, level=0) + df_out.mul(gasreg_cendiv_weights, level=0) .transpose() .rename(gasreg_cendiv_map) .groupby(level=0) @@ -441,8 +572,8 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): alpha = alpha.round(6) ### Daily gas price multipliers -daily_gas_price_multipliers_r, daily_gas_price_multipliers_cendiv = ( - calculate_daily_gas_price_multipliers(reeds_path, inputs_case) +daily_gasprice_multipliers_r, daily_gasprice_multipliers_cendiv = ( + calculate_daily_gasprice_multipliers(reeds_path, inputs_case) ) @@ -452,20 +583,21 @@ def calculate_daily_gas_price_multipliers(reeds_path, inputs_case): fuel.to_csv(os.path.join(inputs_case,'fprice.csv'),index=False) ngprice_cendiv.to_csv(os.path.join(inputs_case,'gasprice_ref.csv')) -ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) -ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) -alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_r, - 'daily_gas_price_multipliers_r.h5', + daily_gasprice_multipliers_r, + 'daily_gasprice_multipliers_r.h5', inputs_case ) reeds.io.write_profile_to_h5( - daily_gas_price_multipliers_cendiv, - 'daily_gas_price_multipliers_cendiv.h5', + daily_gasprice_multipliers_cendiv, + 'daily_gasprice_multipliers_cendiv.h5', inputs_case ) +ngdemand.to_csv(os.path.join(inputs_case,'ng_demand_elec.csv')) +ngtotdemand.to_csv(os.path.join(inputs_case,'ng_demand_tot.csv')) +alpha.to_csv(os.path.join(inputs_case,'alpha.csv')) + reeds.log.toc(tic=tic, year=0, process='input_processing/fuelcostprep.py', path=os.path.join(inputs_case,'..')) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index c63bae00..b9cf275f 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -258,27 +258,40 @@ def format_climate_inputs(filename, inputs_case, szn_month_weights): return df_out -def get_daily_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', regionlevel='r'): +def get_daily_gasprice_multipliers( + sw, + hmap_myr, + inputs_case, + periodtype='rep', + region_level='r' +): """ - This function takes the inputs_case/natgas_price_diffs.h5 and turns it into a - GAMS-compatible file. The h5 contains daily multiplicative natural gas price - factors indexed by (year [model year t], datetime) with model region columns. - Repeat daily value across hours. + After identifying the modeled days, load the daily gas price + multipliers for the given region level and extract the multipliers + on the modeled days for each year. """ - ### Load daily natgas price diffs from fuelcostprep.py + ### Get daily gas price multipliers for region_level dfin = reeds.io.read_file( - os.path.join(inputs_case, f'daily_gas_price_multipliers_{regionlevel}.h5'), + os.path.join(inputs_case, f'daily_gasprice_multipliers_{region_level}.h5'), parse_timestamps=True ) dfin = dfin.unstack(level=0) - dfin.columns = dfin.columns.rename([regionlevel,'t']) + dfin.columns = dfin.columns.rename([region_level,'t']) + + ### Add time index and forward fill so that the multiplier for + ### each day is copied to each hour of that day dfin = dfin.reindex(hmap_myr.timestamp).ffill() dfin.index = ( - dfin.index.map(hmap_myr.set_index('timestamp')['actual_h']) + dfin.index + .map(hmap_myr.set_index('timestamp')['actual_h']) .rename('h') ) + breakpoint() + ### For full year, keep all periods in the modeled years + ### Note the daily multipliers are already filtered to contain + ### only the modeled years if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): dfout = dfin.copy() ### Otherwise, pull out the specified periods @@ -286,7 +299,11 @@ def get_daily_gas_price_multipliers(sw, hmap_myr, inputs_case, periodtype='rep', dfout = dfin.loc[hmap_myr.h.unique()].copy() ### Reshape for ReEDS - dfout = dfout.stack(regionlevel).reorder_levels([regionlevel, "h"], axis=0).sort_index() + dfout = ( + dfout.stack(region_level) + .reorder_levels([region_level, "h"], axis=0) + .sort_index() + ) return dfout @@ -532,8 +549,8 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr 'evmc_storage_energy': ['*i','r','h','t'], 'flex_frac_all': ['*flex_type','r','h','t'], 'peak_h': ['*r','h','t','MW'], - 'daily_gas_price_multipliers_r': ['*r','h','t','multiplier'], - 'daily_gas_price_multipliers_cendiv': ['*cendiv','h','t','multiplier'], + 'daily_gasprice_multipliers_r': ['*r','h','t','multiplier'], + 'daily_gasprice_multipliers_cendiv': ['*cendiv','h','t','multiplier'], } for f, columns in write.items(): pd.DataFrame(columns=columns).to_csv( @@ -1352,9 +1369,9 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr ################################################################# # -- Weather-based daily natural gas price multipliers -- # ################################################################# - daily_gas_price_multipliers_dict = {} + daily_gasprice_multipliers_dict = {} for regionlevel in ['r', 'cendiv']: - df = get_daily_gas_price_multipliers( + df = get_daily_gasprice_multipliers( sw=sw, hmap_myr=hmap_myr, inputs_case=inputs_case, @@ -1368,7 +1385,7 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr .rename('multiplier') .reset_index() ) - daily_gas_price_multipliers_dict[regionlevel] = df + daily_gasprice_multipliers_dict[regionlevel] = df # %%################################################################################### # -- Write outputs, aggregating hours to GSw_HourlyChunkLength if necessary -- # @@ -1558,13 +1575,13 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr False, ], ## Annual timeslice gas price multipliers - 'daily_gas_price_multipliers_r': [ - daily_gas_price_multipliers_dict['r'].round(decimals), + 'daily_gasprice_multipliers_r': [ + daily_gasprice_multipliers_dict['r'].round(decimals), False, False ], - 'daily_gas_price_multipliers_cendiv': [ - daily_gas_price_multipliers_dict['cendiv'].round(decimals), + 'daily_gasprice_multipliers_cendiv': [ + daily_gasprice_multipliers_dict['cendiv'].round(decimals), False, False ], diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index e35d224b..6e048e18 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -93,7 +93,7 @@ forced_retirements.csv,inputs/state_policies/forced_retirements.csv,1,ignore,ign fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,set,fuel2tech,mapping between fuel types and generations, fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,set,fuelbin,gas usage bracket, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_degree_day_price_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, +gasreg_degree_day_price_mult_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,set,gb,gas price bins; must have an odd number of bins; e.g. gb1*gb15, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,set,gbin,growth bins, diff --git a/reeds/io.py b/reeds/io.py index 2685e1e8..dd25e869 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1324,9 +1324,6 @@ def get_distpv_cf_hourly(): return read_file(h5path, parse_timestamps=True) def get_county_populations(): - """ - Get county populations. - """ return pd.read_csv( os.path.join( reeds_path, @@ -1336,6 +1333,16 @@ def get_county_populations(): ) ) +def get_state_groups(): + return pd.read_csv( + os.path.join( + reeds_path, + 'inputs', + 'zones', + 'state_groups.csv' + ) + ) + def get_years(case): return pd.read_csv( os.path.join(case, 'inputs_case', 'modeledyears.csv') From 3878bad0741c3a3d7de422af2b0b6d1a54abf630 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 08:57:00 -0400 Subject: [PATCH 59/85] Rename regression parameters file --- ...csv => gasreg_degree_day_price_mult_regression_parameters.csv} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename inputs/fuelprices/{gasreg_degree_day_price_regression_parameters.csv => gasreg_degree_day_price_mult_regression_parameters.csv} (100%) diff --git a/inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv b/inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv similarity index 100% rename from inputs/fuelprices/gasreg_degree_day_price_regression_parameters.csv rename to inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv From 8fd5662fc2b9ed23488420dcb267d712d92b801d Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 08:57:59 -0400 Subject: [PATCH 60/85] Cleanup + bugfixes --- inputs/userinput/futurefiles.csv | 4 +- reeds/core/solve/2_temporal_params.gms | 4 +- reeds/input_processing/fuelcostprep.py | 59 ++++++++----------- .../hourly_writetimeseries.py | 42 ++++++------- 4 files changed, 49 insertions(+), 60 deletions(-) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 15553a07..8cf2c9b1 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -94,8 +94,8 @@ d_szn_7yr.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, dac_assumptions.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant dac_elec.csv,.csv,0,None,t,i,1,0,linear_10,None,None,new, dac_gas.csv,.csv,0,None,t,i,1,0,linear_10,None,None,new, -daily_gas_price_multipliers_r.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 -daily_gas_price_multipliers_cendiv.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 +daily_gasprice_multipliers_r.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 +daily_gasprice_multipliers_cendiv.h5,.h5,0,None,year,datetime,1,keepindex,linear_5,None,None,done,linear_5 deflator.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant degradation_adj.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, degradation_annual.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index dbeb43bb..bb018636 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -882,7 +882,7 @@ parameter gasprice_adj_r(r,allh,allt) "--unitless-- daily gas price multipliers / $offlisting $ondelim -$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_r.csv +$include inputs_case%ds%%temporal_inputs%%ds%daily_gasprice_multipliers_r.csv $offdelim $onlisting / ; @@ -893,7 +893,7 @@ parameter gasprice_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price mu / $offlisting $ondelim -$include inputs_case%ds%%temporal_inputs%%ds%daily_gas_price_multipliers_cendiv.csv +$include inputs_case%ds%%temporal_inputs%%ds%daily_gasprice_multipliers_cendiv.csv $offdelim $onlisting / ; diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 6f5ba5f6..2113de15 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -60,8 +60,8 @@ def calculate_region_aggregion_population_weights( state_groups = reeds.io.get_state_groups() county2zone = county2zone.merge( state_groups, - left_on='st', - right_on='state' + left_on='state', + right_on='st' ) county_region_map = county2zone.set_index('FIPS')[region_level] @@ -81,7 +81,7 @@ def calculate_region_aggregion_population_weights( county2zone[aggregion_level] )) region_populations[aggregion_level] = ( - region_populations['state'].map(region2aggregion) + region_populations[region_level].map(region2aggregion) ) region_populations['weight'] = ( region_populations['population'] @@ -136,8 +136,7 @@ def calculate_historical_daily_state_degree_days( def aggregate_state_degree_days_to_gasreg( state_degree_days: pd.DataFrame, - state_weights: pd.Series, - st2gasreg: dict[str, str] + state_weights: pd.Series ) -> pd.DataFrame: """ Aggregate state-level degree days to the gasreg level via @@ -153,6 +152,11 @@ def aggregate_state_degree_days_to_gasreg( Returns: pd.DataFrame """ + # Get state-to-gasreg mapping + state_groups = reeds.io.get_state_groups() + st2gasreg = state_groups.set_index('st')['gasreg'] + + # Calculate weighted average gasreg_degree_days = ( (state_degree_days * state_weights) .transpose() @@ -229,7 +233,6 @@ def rescale_historical_daily_degree_days_to_projected_annuals( return projected_daily_degree_days def calculate_daily_gasreg_degree_days( - reeds_path: str, inputs_case: str, ) -> tuple[pd.DataFrame, pd.DataFrame]: """ @@ -241,16 +244,11 @@ def calculate_daily_gasreg_degree_days( degree days (corresponding to model solve years) for each gasreg. Args: - reeds_path: Path to ReEDS directory. inputs_case: Path to the inputs case directory. Returns: (pd.DataFrame, pd.DataFrame) """ - # Get state-to-gasreg mapping - state_groups = reeds.io.get_state_groups - st2gasreg = state_groups.set_index('st')['gasreg'] - # Calculate population-based state-gasreg weights for # calculating population-weighted gasreg-level degree days state_gasreg_weights = calculate_region_aggregion_population_weights( @@ -266,19 +264,13 @@ def calculate_daily_gasreg_degree_days( # Aggregate historical daily state-level degree days to # the gasreg level via population-weighted average - historical_hdd_daily_gasreg = ( - aggregate_state_degree_days_to_gasreg( - historical_hdd_daily_st, - state_gasreg_weights, - st2gasreg - ) + historical_hdd_daily_gasreg = aggregate_state_degree_days_to_gasreg( + historical_hdd_daily_st, + state_gasreg_weights ) - historical_cdd_daily_gasreg = ( - aggregate_state_degree_days_to_gasreg( - historical_cdd_daily_st, - state_gasreg_weights, - st2gasreg - ) + historical_cdd_daily_gasreg = aggregate_state_degree_days_to_gasreg( + historical_cdd_daily_st, + state_gasreg_weights ) # Get gasreg-level annual HDD/CDD projections @@ -320,7 +312,6 @@ def calculate_daily_gasreg_degree_days( return hdd_daily_gasreg, cdd_daily_gasreg def calculate_daily_gasprice_multipliers( - reeds_path: str, inputs_case: str ) -> tuple[pd.DataFrame, pd.DataFrame]: """ @@ -336,7 +327,6 @@ def calculate_daily_gasprice_multipliers( aggregated via population-weighted average. Args: - reeds_path: Path to ReEDS directory. inputs_case: Path to the inputs case directory. Returns: @@ -356,11 +346,8 @@ def calculate_daily_gasprice_multipliers( ) # Calculate daily gasreg-level HDDs and CDDs - hdd_daily_gasreg, cdd_daily_gasreg = ( - calculate_daily_gasreg_degree_days( - reeds_path, - inputs_case, - ) + hdd_daily_gasreg, cdd_daily_gasreg = calculate_daily_gasreg_degree_days( + inputs_case ) # Apply regression parameters to daily HDD/CDDs @@ -376,7 +363,11 @@ def calculate_daily_gasprice_multipliers( .loc[regression_params.index.str.contains('alpha_')] [gasreg] ) - month_effects_map.index = month_effects_map.index.str.removeprefix('alpha_') + month_effects_map.index = ( + month_effects_map.index + .str + .removeprefix('alpha_') + ) month_effects = ( year_datetime_index .get_level_values('datetime') @@ -412,8 +403,6 @@ def calculate_daily_gasprice_multipliers( r: df_out[gasreg] for r, gasreg in hierarchy['gasreg'].items() }) - breakpoint() - # Create another set of multipliers for census divisions by aggregating # the gasreg-level multipliers via population-weighted average gasreg_cendiv_weights = calculate_region_aggregion_population_weights( @@ -423,7 +412,7 @@ def calculate_daily_gasprice_multipliers( ) gasreg_cendiv_map = dict(zip(hierarchy['gasreg'], hierarchy['cendiv'])) df_out_cendiv = ( - df_out.mul(gasreg_cendiv_weights, level=0) + df_out.mul(gasreg_cendiv_weights) .transpose() .rename(gasreg_cendiv_map) .groupby(level=0) @@ -573,7 +562,7 @@ def calculate_daily_gasprice_multipliers( ### Daily gas price multipliers daily_gasprice_multipliers_r, daily_gasprice_multipliers_cendiv = ( - calculate_daily_gasprice_multipliers(reeds_path, inputs_case) + calculate_daily_gasprice_multipliers(inputs_case) ) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index b9cf275f..36ecb351 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -262,7 +262,6 @@ def get_daily_gasprice_multipliers( sw, hmap_myr, inputs_case, - periodtype='rep', region_level='r' ): """ @@ -287,12 +286,10 @@ def get_daily_gasprice_multipliers( .rename('h') ) - breakpoint() - ### For full year, keep all periods in the modeled years ### Note the daily multipliers are already filtered to contain ### only the modeled years - if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): + if sw.GSw_HourlyType == 'year': dfout = dfin.copy() ### Otherwise, pull out the specified periods else: @@ -1369,23 +1366,26 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr ################################################################# # -- Weather-based daily natural gas price multipliers -- # ################################################################# - daily_gasprice_multipliers_dict = {} - for regionlevel in ['r', 'cendiv']: - df = get_daily_gasprice_multipliers( - sw=sw, - hmap_myr=hmap_myr, - inputs_case=inputs_case, - periodtype=periodtype, - regionlevel=regionlevel - ) - # Apply hourly chunk length - df = ( - df.loc[df.index.get_level_values('h').isin(chunkmap.values())] - .stack('t') - .rename('multiplier') - .reset_index() - ) - daily_gasprice_multipliers_dict[regionlevel] = df + if periodtype == 'rep': + daily_gasprice_multipliers_dict = {} + for region_level in ['r', 'cendiv']: + df = get_daily_gasprice_multipliers( + sw=sw, + hmap_myr=hmap_myr, + inputs_case=inputs_case, + region_level=region_level + ) + # Update to GSw_HourlyChunkLength resolution. + # Note no aggregation method is needed because all hours within + # a given day have the same multiplier value, so we just select + # the set of hours in chunkmap. + df = ( + df.loc[df.index.get_level_values('h').isin(chunkmap.values())] + .stack('t') + .rename('multiplier') + .reset_index() + ) + daily_gasprice_multipliers_dict[region_level] = df # %%################################################################################### # -- Write outputs, aggregating hours to GSw_HourlyChunkLength if necessary -- # From 0e5d1360882f93723354130396a4dbcd131ac001 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 09:30:23 -0400 Subject: [PATCH 61/85] Bugfix --- .../hourly_writetimeseries.py | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index 36ecb351..101e2b79 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -1366,26 +1366,25 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr ################################################################# # -- Weather-based daily natural gas price multipliers -- # ################################################################# - if periodtype == 'rep': - daily_gasprice_multipliers_dict = {} - for region_level in ['r', 'cendiv']: - df = get_daily_gasprice_multipliers( - sw=sw, - hmap_myr=hmap_myr, - inputs_case=inputs_case, - region_level=region_level - ) - # Update to GSw_HourlyChunkLength resolution. - # Note no aggregation method is needed because all hours within - # a given day have the same multiplier value, so we just select - # the set of hours in chunkmap. - df = ( - df.loc[df.index.get_level_values('h').isin(chunkmap.values())] - .stack('t') - .rename('multiplier') - .reset_index() - ) - daily_gasprice_multipliers_dict[region_level] = df + daily_gasprice_multipliers_dict = {} + for region_level in ['r', 'cendiv']: + df = get_daily_gasprice_multipliers( + sw=sw, + hmap_myr=hmap_myr, + inputs_case=inputs_case, + region_level=region_level + ) + # Update to GSw_HourlyChunkLength resolution. + # Note no aggregation method is needed because all hours within + # a given day have the same multiplier value, so we just select + # the set of hours in chunkmap. + df = ( + df.loc[df.index.get_level_values('h').isin(chunkmap.values())] + .stack('t') + .rename('multiplier') + .reset_index() + ) + daily_gasprice_multipliers_dict[region_level] = df # %%################################################################################### # -- Write outputs, aggregating hours to GSw_HourlyChunkLength if necessary -- # From 52514d372ada24127d1f1d73ed6cdb28c806d61e Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 09:32:38 -0400 Subject: [PATCH 62/85] Bugfix --- reeds/input_processing/hourly_writetimeseries.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index 101e2b79..5a092e20 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -262,6 +262,7 @@ def get_daily_gasprice_multipliers( sw, hmap_myr, inputs_case, + periodtype='rep', region_level='r' ): """ @@ -289,7 +290,7 @@ def get_daily_gasprice_multipliers( ### For full year, keep all periods in the modeled years ### Note the daily multipliers are already filtered to contain ### only the modeled years - if sw.GSw_HourlyType == 'year': + if (sw.GSw_HourlyType == 'year') and (periodtype == 'rep'): dfout = dfin.copy() ### Otherwise, pull out the specified periods else: @@ -1372,6 +1373,7 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr sw=sw, hmap_myr=hmap_myr, inputs_case=inputs_case, + periodtype=periodtype, region_level=region_level ) # Update to GSw_HourlyChunkLength resolution. From a58f5e1b596a1c3849797dbe32fbebb4f15a56e2 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 12:06:57 -0400 Subject: [PATCH 63/85] bugfixes --- reeds/core/setup/b_inputs.gms | 2 -- tests/objective_function_params.yaml | 14 -------------- 2 files changed, 16 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 03c5b221..b77c98ed 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -981,7 +981,6 @@ set r_itlgrp(r,itlgrp) r_usda(r,usda_region) r_h2ptcreg(r,h2ptcreg) r_hurdlereg(r,hurdlereg) - r_gasreg(r,gasreg) r_ccreg(r,ccreg) ; @@ -995,7 +994,6 @@ r_country(r,country) $sum{(nercr,transreg,transgrp,cendiv,st,in r_usda(r,usda_region) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country, h2ptcreg,hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_h2ptcreg(r,h2ptcreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region, hurdlereg,gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_hurdlereg(r,hurdlereg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg, gasreg,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; -r_gasreg(r,gasreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg, ,ccreg) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; r_ccreg(r,ccreg) $sum{(nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg ) $hierarchy(r,nercr,transreg,transgrp,cendiv,st,interconnect,country,usda_region,h2ptcreg,hurdlereg,gasreg,ccreg),1} = yes ; set r_itlgrp(r,itlgrp) "mapping of r to itlgrp" diff --git a/tests/objective_function_params.yaml b/tests/objective_function_params.yaml index d3b410a2..34acaaee 100644 --- a/tests/objective_function_params.yaml +++ b/tests/objective_function_params.yaml @@ -220,20 +220,6 @@ cendiv_weights: - r_cendiv switchon: GSw_GasCurve: 1 -gasprice_adj_r: - indexsets: - - r - - h - - t - switchon: - GSw_GasPriceAdjMethod: 1 -gasprice_adj_cendiv: - indexsets: - - cendiv - - h - - t - switchon: - GSw_GasPriceAdjMethod: 1 gasbinp_regional: indexsets: - t From 6204f349f1698fe470c777475befd3122c93f04e Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 4 Jun 2026 12:09:24 -0400 Subject: [PATCH 64/85] Shorten name of regression params file --- ...s.csv => gasreg_degree_day_price_mult_regression_params.csv} | 0 inputs/userinput/futurefiles.csv | 2 +- reeds/input_processing/fuelcostprep.py | 2 +- reeds/input_processing/runfiles.csv | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename inputs/fuelprices/{gasreg_degree_day_price_mult_regression_parameters.csv => gasreg_degree_day_price_mult_regression_params.csv} (100%) diff --git a/inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv b/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv similarity index 100% rename from inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv rename to inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 8cf2c9b1..dfaeaecd 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -162,7 +162,7 @@ fuel2tech.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, fuelbin.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, futurefiles.csv,.csv,1,None,9999,None,9999,0,constant,None,None,so meta,constant gasprice_ref.csv,.csv,0,None,wide,cendiv,1,0,constant,0,None,done,linear_5 -gasreg_degree_day_price_mult_regression_parameters.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, +gasreg_degree_day_price_mult_regression_params.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gasreg_degree_days.csv,.csv,0,None,t,ddtype,1,0,linear_5,None,None,new,linear_5 gb.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, gbin_min.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 2113de15..ba66aad6 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -340,7 +340,7 @@ def calculate_daily_gasprice_multipliers( regression_params = pd.read_csv( os.path.join( inputs_case, - 'gasreg_degree_day_price_mult_regression_parameters.csv' + 'gasreg_degree_day_price_mult_regression_params.csv' ), index_col='param' ) diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 6e048e18..7e885b0f 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -93,7 +93,7 @@ forced_retirements.csv,inputs/state_policies/forced_retirements.csv,1,ignore,ign fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,set,fuel2tech,mapping between fuel types and generations, fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,set,fuelbin,gas usage bracket, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_degree_day_price_mult_regression_parameters.csv,inputs/fuelprices/gasreg_degree_day_price_mult_regression_parameters.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, +gasreg_degree_day_price_mult_regression_params.csv,inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,set,gb,gas price bins; must have an odd number of bins; e.g. gb1*gb15, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,set,gbin,growth bins, From f3024a1ebcaeeb9666aa407176a01f078f4066f0 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 8 Jun 2026 11:39:36 -0400 Subject: [PATCH 65/85] Move renormalization of daily gas price multipliers to hourly_writetimeseries.py --- cases.csv | 2 +- reeds/core/solve/2_temporal_params.gms | 2 +- reeds/input_processing/fuelcostprep.py | 14 +++++++------- reeds/input_processing/hourly_writetimeseries.py | 6 ++++++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cases.csv b/cases.csv index 2f6e36ca..a1f50144 100644 --- a/cases.csv +++ b/cases.csv @@ -143,7 +143,7 @@ GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, GSw_GasCC_H_2x1,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, GSw_GasCT_Aero,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, -GSw_GasPriceAdjMethod,"Select method for adjusting gas prices (0 = uniform wintertime markup, 1 = daily adjustments based on regional temperatures)",0; 1,1, +GSw_GasPriceAdjMethod,"Select method for adjusting gas prices (0 = national wintertime markup, 1 = daily adjustments based on regional temperatures)",0; 1,0, GSw_GasSector,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, GSw_GenMandate,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, GSw_GenMandateList,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 89db6e2c..fda34bab 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -912,7 +912,7 @@ scalar szn_adj_gas_avg "--unitless-- hour-weighted average of natural gas season szn_adj_gas_avg = sum{h, szn_adj_gas(h) * hours(h) } / sum{h, hours(h) } ; szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; -* If GSw_GasPriceAdjMethod = 0, apply the uniform winter gas markup instead of daily adjustments +* If GSw_GasPriceAdjMethod = 0, apply the national winter gas markup instead of daily regional adjustments gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index ba66aad6..3c81a34b 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -324,7 +324,13 @@ def calculate_daily_gasprice_multipliers( gasreg-level price multipliers. To derive r-level multipliers, the gasreg-level multipliers are copied to their constituent zones. To derive cendiv-level multipliers, gasreg-level multipliers are - aggregated via population-weighted average. + aggregated via population-weighted average. + + Note that this function just gives an intermediate result, which is + passed to hourly_writetimeseries.py for further processing. In + hourly_writetimeseries.py, the multipliers are renormalized so that the + year-round average multiplier for the set of representative periods + is 1 for each region. Args: inputs_case: Path to the inputs case directory. @@ -386,12 +392,6 @@ def calculate_daily_gasprice_multipliers( + month_effects.values ) gasreg_price_multipliers = np.exp(gasreg_price_log_mult_diffs) - # Divide each multiplier by the annual average of the multipliers - # to ensure a mean of 1 (so that the year-round average gas price - # doesn't change). - gasreg_price_multipliers = gasreg_price_multipliers.div( - gasreg_price_multipliers.groupby(level=0).mean() - ) df_out[gasreg] = gasreg_price_multipliers # Get hierarchy diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index f0fce523..ba00c85e 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -1384,7 +1384,13 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr df.loc[df.index.get_level_values('h').isin(chunkmap.values())] .stack('t') .rename('multiplier') + ) + # Renormalize so the average for each region and year is 1, + # ensuring the year-round average gas price doesn't change. + df = ( + df.div(df.groupby(level=[region_level, 't']).mean()) .reset_index() + [[region_level, 'h', 't', 'multiplier']] ) daily_gasprice_multipliers_dict[region_level] = df From 092d11374d1f013bebcb029ab3025039a3a671c5 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 8 Jun 2026 15:39:39 -0400 Subject: [PATCH 66/85] Cleanup --- reeds/core/setup/b_inputs.gms | 4 +- reeds/core/solve/2_temporal_params.gms | 4 +- reeds/core/solve/6_data_dump.gms | 2 +- reeds/core/terminus/report.gms | 6 +- reeds/input_processing/fuelcostprep.py | 97 ++++++++++++------- .../hourly_writetimeseries.py | 2 +- reeds/inputs.py | 20 ++++ reeds/io.py | 20 ---- 8 files changed, 92 insertions(+), 63 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index c3464b78..eadeb9f1 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6131,8 +6131,8 @@ Parameter * Fossil gas supply curve gasadder_cd(cendiv,t,allh) "--$/MMbtu-- adder for NG census division" szn_adj_gas(allh) "--fraction-- seasonal adjustment for gas prices" - gasprice_adj_r(r,allh,allt) "--fraction-- adjustment for zonal gas prices" - gasprice_adj_cendiv(cendiv,allh,allt) "--fraction-- adjustment for cendiv-level gas prices" + gasprice_adj_r(r,allh,allt) "--fraction-- adjustment for zonal gas prices" + gasprice_adj_cendiv(cendiv,allh,allt) "--fraction-- adjustment for cendiv-level gas prices" ; * Initialize some parameters diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index fda34bab..482d72a1 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -892,7 +892,7 @@ $onlisting $offempty $onempty -parameter gasprice_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by region, timeslice, and year" +parameter gasprice_adj_cendiv(cendiv,allh,allt) "--unitless-- daily gas price multipliers by cendiv, timeslice, and year" / $offlisting $ondelim @@ -912,7 +912,7 @@ scalar szn_adj_gas_avg "--unitless-- hour-weighted average of natural gas season szn_adj_gas_avg = sum{h, szn_adj_gas(h) * hours(h) } / sum{h, hours(h) } ; szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; -* If GSw_GasPriceAdjMethod = 0, apply the national winter gas markup instead of daily regional adjustments +* If GSw_GasPriceAdjMethod = 0, replace daily regional adjustments with the national wintertime markup gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index adcd1910..5c232bd6 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -205,7 +205,7 @@ repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_r(r,h,t)} / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 6b7e9146..787959cb 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -533,13 +533,15 @@ repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t)} / (repgasquant(cendiv,t) * 1e9) ; + hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t) + } / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_cendiv(cendiv,h,t)} / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * gasprice_adj_cendiv(cendiv,h,t) } / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 3c81a34b..6db816a2 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -33,7 +33,6 @@ def calculate_region_aggregion_population_weights( level, calculate each region's share of its corresponding aggregion's total population. - Args: inputs_case: Path to the inputs case directory. region_level: Region level (example: 'state') @@ -44,7 +43,7 @@ def calculate_region_aggregion_population_weights( pd.Series """ # Get county populations - county_populations = reeds.io.get_county_populations() + county_populations = reeds.inputs.get_county_populations() county_populations = county_populations.rename( columns={'value': 'population'} ) @@ -57,7 +56,7 @@ def calculate_region_aggregion_population_weights( county2zone['FIPS'] = ( 'p' + county2zone['FIPS'].astype(str).str.zfill(5) ) - state_groups = reeds.io.get_state_groups() + state_groups = reeds.inputs.get_state_groups() county2zone = county2zone.merge( state_groups, left_on='state', @@ -134,38 +133,66 @@ def calculate_historical_daily_state_degree_days( return hdd_daily, cdd_daily -def aggregate_state_degree_days_to_gasreg( - state_degree_days: pd.DataFrame, - state_weights: pd.Series +def aggregate_regional_degree_days_to_aggregion( + regional_degree_days: pd.DataFrame, + region_aggregion_weights: pd.Series, + region2aggregion: dict[str, str] ) -> pd.DataFrame: """ - Aggregate state-level degree days to the gasreg level via - population-weighted average. + Aggregate region-level degree days to the aggregated region + ("aggregion") level via weighted average. Args: - historical_daily_state_degree_days: Daily historical - state-level degree days. - state_weights: The percentage of each state's share of - gasreg population. - st2gasreg: State-to-gasreg mapping. + regional_degree_days: Region-level degree days. + region_aggregion_weights: The "weight" of each region + corresponding to its aggregion to use in weighted + average calculation. + region2aggregion: Mapping between regions and aggregions. Returns: pd.DataFrame """ - # Get state-to-gasreg mapping - state_groups = reeds.io.get_state_groups() - st2gasreg = state_groups.set_index('st')['gasreg'] - - # Calculate weighted average - gasreg_degree_days = ( - (state_degree_days * state_weights) + aggregional_degree_days = ( + regional_degree_days.mul(region_aggregion_weights) .transpose() - .rename(st2gasreg) + .rename(region2aggregion) .groupby(level=0) .sum() .transpose() ) - return gasreg_degree_days + return aggregional_degree_days + +# def aggregate_state_degree_days_to_gasreg( +# state_degree_days: pd.DataFrame, +# state_weights: pd.Series +# ) -> pd.DataFrame: +# """ +# Aggregate state-level degree days to the gasreg level via +# population-weighted average. + +# Args: +# historical_daily_state_degree_days: Daily historical +# state-level degree days. +# state_weights: The percentage of each state's share of +# gasreg population. + +# Returns: +# pd.DataFrame +# """ +# # Get state-to-gasreg mapping +# state_groups = reeds.inputs.get_state_groups() +# st2gasreg = state_groups.set_index('st')['gasreg'] + +# # Calculate weighted average +# gasreg_degree_days = ( +# (state_degree_days * state_weights) +# .transpose() +# .rename(st2gasreg) +# .groupby(level=0) +# .sum() +# .transpose() +# ) +# return gasreg_degree_days def rescale_historical_daily_degree_days_to_projected_annuals( historical_daily_degree_days: pd.DataFrame, @@ -249,8 +276,7 @@ def calculate_daily_gasreg_degree_days( Returns: (pd.DataFrame, pd.DataFrame) """ - # Calculate population-based state-gasreg weights for - # calculating population-weighted gasreg-level degree days + # Calculate population-based state-gasreg weights state_gasreg_weights = calculate_region_aggregion_population_weights( inputs_case, region_level='state', @@ -264,13 +290,17 @@ def calculate_daily_gasreg_degree_days( # Aggregate historical daily state-level degree days to # the gasreg level via population-weighted average - historical_hdd_daily_gasreg = aggregate_state_degree_days_to_gasreg( + state_groups = reeds.inputs.get_state_groups() + st2gasreg = state_groups.set_index('st')['gasreg'] + historical_hdd_daily_gasreg = aggregate_regional_degree_days_to_aggregion( historical_hdd_daily_st, - state_gasreg_weights + state_gasreg_weights, + st2gasreg ) - historical_cdd_daily_gasreg = aggregate_state_degree_days_to_gasreg( + historical_cdd_daily_gasreg = aggregate_regional_degree_days_to_aggregion( historical_cdd_daily_st, - state_gasreg_weights + state_gasreg_weights, + st2gasreg ) # Get gasreg-level annual HDD/CDD projections @@ -411,13 +441,10 @@ def calculate_daily_gasprice_multipliers( aggregion_level='cendiv' ) gasreg_cendiv_map = dict(zip(hierarchy['gasreg'], hierarchy['cendiv'])) - df_out_cendiv = ( - df_out.mul(gasreg_cendiv_weights) - .transpose() - .rename(gasreg_cendiv_map) - .groupby(level=0) - .sum() - .transpose() + df_out_cendiv = aggregate_regional_degree_days_to_aggregion( + df_out, + gasreg_cendiv_weights, + gasreg_cendiv_map ) return df_out_r, df_out_cendiv diff --git a/reeds/input_processing/hourly_writetimeseries.py b/reeds/input_processing/hourly_writetimeseries.py index ba00c85e..cfe38709 100644 --- a/reeds/input_processing/hourly_writetimeseries.py +++ b/reeds/input_processing/hourly_writetimeseries.py @@ -1581,7 +1581,7 @@ def main(sw, reeds_path, inputs_case, periodtype='rep', make_plots=1, logging=Tr False, False, ], - ## Annual timeslice gas price multipliers + ## Gas price multipliers 'daily_gasprice_multipliers_r': [ daily_gasprice_multipliers_dict['r'].round(decimals), False, diff --git a/reeds/inputs.py b/reeds/inputs.py index 416bebbd..65c61c69 100644 --- a/reeds/inputs.py +++ b/reeds/inputs.py @@ -838,3 +838,23 @@ def validate_zoneset(GSw_ZoneSet): "to ensure each aggreg is only assigned to a single hierarchy level." ) raise ValueError(err) + +def get_county_populations(): + return pd.read_csv( + os.path.join( + reeds.io.reeds_path, + 'inputs', + 'disaggregation', + 'county_population.csv' + ) + ) + +def get_state_groups(): + return pd.read_csv( + os.path.join( + reeds.io.reeds_path, + 'inputs', + 'zones', + 'state_groups.csv' + ) + ) \ No newline at end of file diff --git a/reeds/io.py b/reeds/io.py index dd25e869..c255756d 100644 --- a/reeds/io.py +++ b/reeds/io.py @@ -1323,26 +1323,6 @@ def get_distpv_cf_hourly(): ) return read_file(h5path, parse_timestamps=True) -def get_county_populations(): - return pd.read_csv( - os.path.join( - reeds_path, - 'inputs', - 'disaggregation', - 'county_population.csv' - ) - ) - -def get_state_groups(): - return pd.read_csv( - os.path.join( - reeds_path, - 'inputs', - 'zones', - 'state_groups.csv' - ) - ) - def get_years(case): return pd.read_csv( os.path.join(case, 'inputs_case', 'modeledyears.csv') From 185a4108f2501e4863841d60554d457b5a21455b Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 8 Jun 2026 15:49:38 -0400 Subject: [PATCH 67/85] Cleanup --- reeds/input_processing/fuelcostprep.py | 32 -------------------------- 1 file changed, 32 deletions(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index 6db816a2..b6756568 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -162,38 +162,6 @@ def aggregate_regional_degree_days_to_aggregion( ) return aggregional_degree_days -# def aggregate_state_degree_days_to_gasreg( -# state_degree_days: pd.DataFrame, -# state_weights: pd.Series -# ) -> pd.DataFrame: -# """ -# Aggregate state-level degree days to the gasreg level via -# population-weighted average. - -# Args: -# historical_daily_state_degree_days: Daily historical -# state-level degree days. -# state_weights: The percentage of each state's share of -# gasreg population. - -# Returns: -# pd.DataFrame -# """ -# # Get state-to-gasreg mapping -# state_groups = reeds.inputs.get_state_groups() -# st2gasreg = state_groups.set_index('st')['gasreg'] - -# # Calculate weighted average -# gasreg_degree_days = ( -# (state_degree_days * state_weights) -# .transpose() -# .rename(st2gasreg) -# .groupby(level=0) -# .sum() -# .transpose() -# ) -# return gasreg_degree_days - def rescale_historical_daily_degree_days_to_projected_annuals( historical_daily_degree_days: pd.DataFrame, projected_annual_degree_days: pd.DataFrame From 03e1c79f4fe796b960f388f0323b0aceeb507efb Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 8 Jun 2026 16:32:26 -0400 Subject: [PATCH 68/85] Cleanup --- reeds/core/solve/6_data_dump.gms | 3 ++- reeds/core/terminus/report.gms | 4 ++-- reeds/input_processing/fuelcostprep.py | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index 5c232bd6..7de608a9 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -205,7 +205,8 @@ repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tcur(t)] = ( sum{(h,cendiv), - gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * hours(h) * gasprice_adj_r(r,h,t)} / sum{h, hours(h) } + gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * + hours(h) * gasprice_adj_r(r,h,t) } / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 787959cb..6b3dfbd0 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -529,7 +529,7 @@ repgasquant_nat(t)$tmodel_new(t) = sum{cendiv, repgasquant(cendiv,t) } ; *for reported gasprice (not that used to compute system costs) *scale back to $ / mmbtu repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } / gas_scale ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t) }], gasprice(cendiv,gb,t) } / gas_scale ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], @@ -541,7 +541,7 @@ repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{ce repgasprice_r(r,t)$[(Sw_GasCurve = 1)$tmodel_new(t)] = ( sum{(h,cendiv), gasmultterm(cendiv,t) * cendiv_weights(r,cendiv) * - hours(h) * gasprice_adj_cendiv(cendiv,h,t) } / sum{h, hours(h) } + hours(h) * gasprice_adj_r(r,h,t) } / sum{h, hours(h) } + smax((fuelbin,cendiv)$[VGASBINQ_REGIONAL.l(fuelbin,cendiv,t)$r_cendiv(r,cendiv)], gasbinp_regional(fuelbin,cendiv,t) ) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index b6756568..9a29754f 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -113,7 +113,7 @@ def calculate_historical_daily_state_degree_days( # Get hourly state-level temperatures for the given weather year(s) sw = reeds.io.get_switches(inputs_case) weather_years = [int(y) for y in sw.GSw_HourlyWeatherYears.split('_')] - temp_hourly = reeds.io.get_temperatures(inputs_case, subset_years=False) + temp_hourly = reeds.io.get_temperatures(inputs_case) temp_hourly = temp_hourly.loc[temp_hourly.index.year.isin(weather_years)] # Get baseline temperature for calculating degree days From 29959e3027475197657f6739364697c59f850a25 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 8 Jun 2026 16:34:44 -0400 Subject: [PATCH 69/85] Cleanup --- reeds/core/solve/6_data_dump.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index 7de608a9..f7f33645 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -194,7 +194,7 @@ repgasquant(cendiv,t)$[(Sw_GasCurve = 1 or Sw_GasCurve = 2)$tcur(t)] = } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = - smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t)}], gasprice(cendiv,gb,t) } ; + smax{gb$[sum{h, GASUSED.l(cendiv,gb,h,t) * gasprice_adj_cendiv(cendiv,h,t) }], gasprice(cendiv,gb,t) } ; repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], From c64471a412b92216230c167997c8d2b827c9b22d Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 10 Jun 2026 14:06:52 -0400 Subject: [PATCH 70/85] Update model documentation --- docs/source/model_documentation.md | 25 ++++++++++++++++++++++++- docs/source/references.bib | 16 ++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index c214c2a1..8aa5d816 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -1646,8 +1646,16 @@ The switch `GSw_GasCurve` controls the choice of natural gas supply curve. The file `inputs/fuelprices/cendivweights.csv` contains the weights applied to the fuel prices to help smooth the prices across census divisions when setting `GSw_GasCurve` to 1. This file was created by taking an input file of county-level spatial resolution and assigning a weight to each balancing area. The highest weight is farthest from the census region border and an exponential decay length of 150 km is applied, blending the weight values across balancing areas and census regions. ``` -The natural gas fuel prices also include a seasonal price adjustor, making winter prices higher than the natural gas prices seen during the other seasons of the year. +The natural gas fuel prices also include time-based price adjustors. +One option is a seasonal price adjustor, which makes winter prices higher than the natural gas prices seen during the other seasons of the year CONUS-wide. For details, see the [Seasonal Natural Gas Price Adjustments section](#seasonal-natural-gas-price-adjustments) of the appendix. +The other option is a daily price adjustor, which adjusts prices in accordance with regional temperatures using coefficients developed through a linear regression analysis regressing daily heating and cooling degree days on daily deviations of natural gas spot prices from their annual average price. +For details, see the [Daily Natural Gas Price Adjustments section](#daily-natural-gas-price-adjustments) of the appendix. + +```{admonition} Natural gas price adjustments +The switch `GSw_GasPriceAdjMethods` controls the choice of natural gas price adjustments. +0 = national wintertime markup, 1 = daily adjustments based on regional temperatures +``` ## Electricity Demand @@ -3608,6 +3616,21 @@ and $\rho$ and $\sigma$ are the seasonal multipliers for winter and nonwinter, r The multipliers $\rho$ and $\sigma$ are determined by solving {eq}`gas-year` through {eq}`gas-nonwinter`. +### Daily Natural Gas Price Adjustments + +Daily gas price adjustments use degree day coefficients derived from an ordinary least squares regression regressing daily regional heating and cooling degree days on daily deviations of regional natural gas spot prices from their annual average price with monthly fixed effects. +The regions used in the regression mostly correspond to census divisions, except in two cases where census divisions are broken up into two smaller regions. +The Pacific census division is broken up into the subregions "Northwest" (Oregon and Washington) and "California" (California). +The Mountain census division is broken up into the subregions "Southwest" (Arizona and New Mexico) and "Mountain" (all remaining states in the Mountain census division). +To derive daily gas price adjustments, the regression parameters are applied to projections of daily heating and cooling degree days. +These projections are derived by rescaling historical daily heating and cooling degree days (calculated using hourly average temperatures observed during the weather years corresponding to representative periods) to match projections of annual degree days. +In cases where the regression regions correspond to census divisions, annual degree day projections are taken from AEO. +Otherwise, annual degree day projections are calculated by taking historical (1995-2025) annual state-level degree days from {cite}`noaaDailyDegreeDays`, projecting them out to 2050 using a 30-year linear trend, and then aggregating them to the scope of the regression regions via population-weighted average. +For purposes of calculating this population-weighted average, state-level population projections for 2030, 2040, and 2050 are taken from {cite}`uvaWeldonCooperCenterPopulationProjections` and in-between years are linearly interpolated. +Depending on the spatial resolution of the gas prices being used in the model, the daily gas price adjustments are either downscaled to the zone level by copying each regression region's adjustments to their constituent zones or upscaled to the census division level via population-weighted average. +Once representative periods are selected in the model, the daily adjustments are filtered to include only the representative periods and then renormalized so that the average price multiplier for each zone or census division and each model year is one, thus ensuring the year-round average gas price remains unchanged. + + ### Capital Cost Financial Multipliers The financial multiplier represents the present value of revenue requirements necessary to finance a new investment, including construction financing, return to equity holders, interest on debt, taxes, and depreciation. diff --git a/docs/source/references.bib b/docs/source/references.bib index 1fd019de..921520ba 100644 --- a/docs/source/references.bib +++ b/docs/source/references.bib @@ -21425,6 +21425,14 @@ @techreport{nipscoNIPSCOIntegratedResource2018a url = {https://www.nipsco.com/docs/librariesprovider11/rates-and-tariffs/irp/2018-nipsco-irp-appendix-a.pdf?sfvrsn=2} } +@misc{noaaDailyDegreeDays, + title = {Daily Degree Days}, + author = {NOAA}, + institution = {{National Oceanic and Atmospheric Administration}}, + url = {https://ftp.cpc.ncep.noaa.gov/htdocs/degree_days/weighted/daily_data/}, + urldate = {2026-06-10} +} + @techreport{noaaNationalClimateReport2010, title = {National {{Climate Report}} - {{December}} 2009}, author = {NOAA}, @@ -28028,6 +28036,14 @@ @article{usterOptimizationDesignOperation2014 abstract = {We consider the problem of designing a new natural gas transmission network or expanding an existing network while minimizing the total investment and operating costs. We develop an integrated large-scale mixed-integer nonlinear optimization model to determine pipelines in the network, compressor stations and their capacities, timings of these installations in a multi-period planning horizon, and natural gas purchase and steady-state flow decisions for each period in the network. The model is solvable using state-of-the-art solution methodologies available online. Employing our modeling and the solution methodology for its solution, we conduct computational studies on various test instances generated using realistic network structure and data based on the natural gas network in Turkey as well as data from literature. Our analysis provides insights into sensitivity of network configuration and operations to the number of periods within the planning horizon and cost parameters as well as into strategic decision making for design and expansion of natural gas networks.} } +@misc{uvaWeldonCooperCenterPopulationProjections, + title = {National and 50-State Population Projections}, + author = {{University of Virginia, Weldon Cooper Center for Public Serivce}}, + year = 2024, + url = {https://coopercenter.org/national-population-projections}, + urldate = {2026-06-10} +} + @article{vageroEffectsFairAllocation2024, title = {The Effects of Fair Allocation Principles on Energy System Model Designs}, author = {V{\aa}ger{\"o}, Oskar and Jackson Inderberg, Tor H{\aa}kon and Zeyringer, Marianne}, From c8c8ec54ef0cb6a99b55aed2ad7a273e1678e810 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 10 Jun 2026 14:18:02 -0400 Subject: [PATCH 71/85] Update model documentation --- docs/source/model_documentation.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 8aa5d816..969b4748 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -1653,7 +1653,7 @@ The other option is a daily price adjustor, which adjusts prices in accordance w For details, see the [Daily Natural Gas Price Adjustments section](#daily-natural-gas-price-adjustments) of the appendix. ```{admonition} Natural gas price adjustments -The switch `GSw_GasPriceAdjMethods` controls the choice of natural gas price adjustments. +The switch `GSw_GasPriceAdjMethod` controls the choice of natural gas price adjustments. 0 = national wintertime markup, 1 = daily adjustments based on regional temperatures ``` @@ -3622,11 +3622,13 @@ Daily gas price adjustments use degree day coefficients derived from an ordinary The regions used in the regression mostly correspond to census divisions, except in two cases where census divisions are broken up into two smaller regions. The Pacific census division is broken up into the subregions "Northwest" (Oregon and Washington) and "California" (California). The Mountain census division is broken up into the subregions "Southwest" (Arizona and New Mexico) and "Mountain" (all remaining states in the Mountain census division). + To derive daily gas price adjustments, the regression parameters are applied to projections of daily heating and cooling degree days. These projections are derived by rescaling historical daily heating and cooling degree days (calculated using hourly average temperatures observed during the weather years corresponding to representative periods) to match projections of annual degree days. In cases where the regression regions correspond to census divisions, annual degree day projections are taken from AEO. -Otherwise, annual degree day projections are calculated by taking historical (1995-2025) annual state-level degree days from {cite}`noaaDailyDegreeDays`, projecting them out to 2050 using a 30-year linear trend, and then aggregating them to the scope of the regression regions via population-weighted average. +Otherwise, annual degree day projections are calculated by taking historical (1995-2025) state-level degree days from {cite}`noaaDailyDegreeDays`, projecting them out to 2050 using a 30-year linear trend, and then aggregating them to the scope of the regression regions via population-weighted average. For purposes of calculating this population-weighted average, state-level population projections for 2030, 2040, and 2050 are taken from {cite}`uvaWeldonCooperCenterPopulationProjections` and in-between years are linearly interpolated. + Depending on the spatial resolution of the gas prices being used in the model, the daily gas price adjustments are either downscaled to the zone level by copying each regression region's adjustments to their constituent zones or upscaled to the census division level via population-weighted average. Once representative periods are selected in the model, the daily adjustments are filtered to include only the representative periods and then renormalized so that the average price multiplier for each zone or census division and each model year is one, thus ensuring the year-round average gas price remains unchanged. From 8e50aa6b4a9dd23c8cab7d7a6147a4d87dac5701 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 11 Jun 2026 09:09:46 -0400 Subject: [PATCH 72/85] Add new gasreg inputs to sources documentation --- docs/sources.csv | 2 ++ docs/sources_documentation.md | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/docs/sources.csv b/docs/sources.csv index 456c17fe..0fc29959 100644 --- a/docs/sources.csv +++ b/docs/sources.csv @@ -263,6 +263,8 @@ RelativeFilePath,RelativeFolderPath,FileName_new,FileExtension,Description_new,I /inputs/fuelprices/coal_AEO_2026_altelec.csv,/inputs/fuelprices,coal_AEO_2026_altelec,.csv,AEO2026 Alternative Electricity case census division fuel price of coal with missing New England values set to Mid Atlantic,"t,cendiv",2025,AEO2026,Input,$/MMBtu /inputs/fuelprices/coal_AEO_2026_baseline.csv,/inputs/fuelprices,coal_AEO_2026_baseline,.csv,AEO2026 Counterfactual Baseline case census division fuel price of coal with missing values forward-filled from earlier years and missing New England values set to Mid Atlantic,"t,cendiv",2025,AEO2026,Input,$/MMBtu /inputs/fuelprices/dollaryear.csv,/inputs/fuelprices,dollaryear,.csv,Dollar year mapping for each fuel price scenario,,,,, +/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,/inputs/fuelprices,gasreg_degree_day_price_mult_regression_params,.csv,"Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects. ""Beta"" values are HDD/CDD coefficients and ""alpha"" values are intercepts and monthly fixed effects.",param,,,Input, +/inputs/fuelprices/gasreg_degree_days.csv,/inputs/fuelprices,gasreg_degree_days,.csv,Annual heating and cooling degree days for each gasreg,"t,ddtype",,AEO: https://github.com/EIAgov/NEMS/blob/main/input/bld/kdegday.txt,Input, /inputs/fuelprices/h2-combustion_10.csv,/inputs/fuelprices,h2-combustion_10,.csv,price of hydrogen for combustion technologies (h2-ct and cc) at $10/MMBtu for all years,,,,, /inputs/fuelprices/h2-combustion_30.csv,/inputs/fuelprices,h2-combustion_30,.csv,price of hydrogen for combustion technologies (h2-ct and cc) at $30/MMBtu for all years,,,,, /inputs/fuelprices/h2-combustion_reference.csv,/inputs/fuelprices,h2-combustion_reference,.csv,price of hydrogen for combustion technologies (h2-ct and cc) at $20/MMBtu for all years,,,,, diff --git a/docs/sources_documentation.md b/docs/sources_documentation.md index 4af952c0..565e66cc 100644 --- a/docs/sources_documentation.md +++ b/docs/sources_documentation.md @@ -1574,6 +1574,19 @@ - **Description:** Dollar year mapping for each fuel price scenario --- + - [gasreg_degree_day_price_mult_regression_params.csv](/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv) + - **File Type:** Input + - **Description:** Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects. "Beta" values are HDD/CDD coefficients and "alpha" values are intercepts and monthly fixed effects. + - **Indices:** param +--- + + - [gasreg_degree_days.csv](/inputs/fuelprices/gasreg_degree_days.csv) + - **File Type:** Input + - **Description:** Annual heating and cooling degree days for each gasreg + - **Indices:** t,ddtype + - **Citation:** AEO: https://github.com/EIAgov/NEMS/blob/main/input/bld/kdegday.txt +--- + - [h2-combustion_10.csv](/inputs/fuelprices/h2-combustion_10.csv) - **Description:** price of hydrogen for combustion technologies (h2-ct and cc) at $10/MMBtu for all years --- From 0f1c4a5a92f5a469a21f8d596b399861919898cb Mon Sep 17 00:00:00 2001 From: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> Date: Fri, 12 Jun 2026 17:15:08 -0600 Subject: [PATCH 73/85] docs: hierarchy.png -> spatial_layers_states.png, spatial_layers_zones.png, spatial_zonesets.png --- docs/source/figs/docs/hierarchy.png | 3 - .../figs/docs/spatial_layers_states.png | 3 + .../source/figs/docs/spatial_layers_zones.png | 3 + docs/source/figs/docs/spatial_zonesets.png | 3 + docs/source/model_documentation.md | 67 +++++++------- docs/source/plotting_scripts/maps.py | 92 ++++++++++++------- docs/source/user_guide.md | 2 +- 7 files changed, 104 insertions(+), 69 deletions(-) delete mode 100644 docs/source/figs/docs/hierarchy.png create mode 100644 docs/source/figs/docs/spatial_layers_states.png create mode 100644 docs/source/figs/docs/spatial_layers_zones.png create mode 100644 docs/source/figs/docs/spatial_zonesets.png diff --git a/docs/source/figs/docs/hierarchy.png b/docs/source/figs/docs/hierarchy.png deleted file mode 100644 index fb9f345b..00000000 --- a/docs/source/figs/docs/hierarchy.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fcd25f1740960b6381039e6a25e60b2247367d619c404f330b5fb00e073b26a7 -size 2266315 diff --git a/docs/source/figs/docs/spatial_layers_states.png b/docs/source/figs/docs/spatial_layers_states.png new file mode 100644 index 00000000..9fc6ed49 --- /dev/null +++ b/docs/source/figs/docs/spatial_layers_states.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e457ab426a438dd862b4e7944ccd81e8c7a573305b5899b1027a31070898c312 +size 908675 diff --git a/docs/source/figs/docs/spatial_layers_zones.png b/docs/source/figs/docs/spatial_layers_zones.png new file mode 100644 index 00000000..0fd1dc40 --- /dev/null +++ b/docs/source/figs/docs/spatial_layers_zones.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c82f7563e9bacd77c1ed7148ea9e81f74b7b1a1fa42c067952db298fde053aa7 +size 1474305 diff --git a/docs/source/figs/docs/spatial_zonesets.png b/docs/source/figs/docs/spatial_zonesets.png new file mode 100644 index 00000000..f89c1392 --- /dev/null +++ b/docs/source/figs/docs/spatial_zonesets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c2ab6e9949504fe373adbccd8056699f183a2640980dd06461754bedc265042 +size 2309492 diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index d070f5a2..ab83c900 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -354,29 +354,40 @@ Methane leakage is not included in emissions estimates for transportation or res ### Spatial Resolution ReEDS is typically used to study the CONUS.[^ref9] -By default, two of the smaller regions are aggregated into neighboring regions, producing 132 regions (with region p119 aggregated into p122 and region p30 aggregated into p28). -ReEDS model regions can be seen in {numref}`figure-hierarchy`. +The 132 default ReEDS model zones are shown in {numref}`figure-spatial_layers_zones`. The model zones comprise groups of counties and do not align perfectly with real balancing authority areas. The zones respect state boundaries, allowing the model to represent individual state regulations and incentives. -Transmission flows across the roughly 300 interfaces between model zones are subject to transfer limits, as discussed in the [Transmission](#transmission) section. -Additional geographical layers used to define model characteristics include 3 synchronous interconnections, -18 planning subregions designed after existing regional transmission organizations (RTOs), -13 North American Electric Reliability Corporation (NERC) reliability subregions, -9 census divisions as defined by the U.S. Census Bureau, -and 48 states.[^ref10] -The spatial configuration in the model is flexible so the model can be run at various resolutions (i.e., aggregations of model zones), and data within the model are filtered to include data only for the regions being modeled in a given scenario. +Transmission flows across the interfaces between model zones are subject to transfer limits, as discussed in the [Transmission](#transmission) section. [^ref9]: A ReEDS-India model version has also been developed. Details of the implementation are not discussed here. +```{figure} figs/docs/spatial_layers_zones.png +:name: figure-spatial_layers_zones + +Default 132 model zones and spatial layers defined by groups of zones. +``` + +Additional spatial layers are used in different parts of the model.[^ref10] +Layers defined by groups of zones are shown in {numref}`figure-spatial_layers_zones`. +Layers defined by groups of states (and a subset of the ~50,000 resource sites, which are held fixed across different model zone resolutions) are shown in {numref}`figure-spatial_layers_states`. + [^ref10]: These additional geographical layers defined in ReEDS do not necessarily align perfectly with the actual regions, except for state boundaries, which are accurately represented. +```{figure} figs/docs/spatial_layers_states.png +:name: figure-spatial_layers_states + +A subset of the ~50,000 resource sites (lower left) and spatial layers defined by groups of states. +``` + +The spatial resolution is flexible, such that model zones can be defined by groups of counties within the same state. +{numref}`figure-spatial_zonesets` shows the currently supported spatial resolutions for model zones. For more information on the spatial flexibility in the model, including running the model at county resolution, see the [Spatial Resolution Capabilities](#spatial-resolution-capabilities) section. -```{figure} figs/docs/hierarchy.png -:name: figure-hierarchy +```{figure} figs/docs/spatial_zonesets.png +:name: figure-spatial_zonesets -Levels of spatial resolution used in ReEDS. +Currently supported model zone definitions. ``` @@ -423,7 +434,7 @@ The optimization approach is used by default and is briefly described here. The optimized method considers three "features" (wind capacity factor, solar capacity factor, and electricity demand) and their daily average values over a user-specified number of regions. -The 18 planning subregions shown in {numref}`figure-hierarchy` are used by default, resulting in 3 × 18 = 54 combinations of features and regions. +The 18 planning subregions shown in {numref}`figure-spatial_layers_zones` are used by default, resulting in 3 × 18 = 54 combinations of features and regions. The two-step optimization method is illustrated graphically in {numref}`figure-temporal-repdays`. First, a linear optimization is performed to identify a set of daily "weights" that, when multiplied by the observed daily feature values in each region and summed over the year, @@ -1904,12 +1915,12 @@ in general, the ITL for power flow from Zone A to Zone B is not the same as the As discussed in {cite}`brownGeneralMethodEstimating2023`, because of the constraints imposed by Kirchhoff's voltage law and nodal load participation factors, the ITL tends to be smaller than the sum of line ratings that cross an interface; that is, every transmission line between a pair of regions cannot in general be used at its rated capacity at the same time. -{numref}`figure-transmission-itl-r` illustrates this effect for the default 134 ReEDS zones. +{numref}`figure-transmission-itl-r` illustrates this effect for the default ReEDS zones. The same effect is observed for larger interfaces; when modeled at nodal resolution, the maximum flow between SPP and MISO (for example) is smaller than the sum of the zonal ITLs for the zonal interfaces that span the larger SPP-MISO interface. For this reason, transmission flows are constrained by ITLs at two levels within ReEDS: -between the model zones and between the planning subregions (see {numref}`figure-hierarchy` for maps of each). +between the model zones and between the planning subregions (see {numref}`figure-spatial_layers_zones` for maps of each). When running the model at a resolution that includes individual counties, the ReEDS BA interface limits are still enforced, meaning that the sum of county-to-county flows across a BA interface cannot exceed the BA interface limit. @@ -2078,13 +2089,13 @@ If `GSw_OffshoreBackflow` is set to `0`, transmission flows from land to offshor ReEDS includes a default hurdle rate of \$0.01/MWh (in 2004\$) to reduce degeneracy by marginally incentivizing local energy consumption over interzonal energy trades. Higher hurdle rates, although not turned on by default, can also be used. -Different hurdle rates can be applied at different levels of the regional structure shown in {numref}`figure-hierarchy`. +Different hurdle rates can be applied at different levels of the regional structure shown in {numref}`figure-spatial_layers_zones`. For example, a higher hurdle rate can be applied to flows between planning regions than to flows within planning regions. ```{admonition} Hurdle rates Higher hurdle rates can be turned on by setting `GSw_TransHurdleRate=1`. When this setting is activated, the hurdle rate for flows between planning subregions starts at 8 \$2020/MWh {cite}`johntsoukalis_et_al_2020` and linearly declines to half of that value between 2026 and 2050. -The hurdle rate for flows between hurdle regions ({numref}`figure-hierarchy`) starts at the same value but declines to zero by 2050. +The hurdle rate for flows between hurdle regions ({numref}`figure-spatial_layers_zones`) starts at the same value but declines to zero by 2050. Within hurdle regions, only the nominal \$0.01/MWh hurdle rate is applied. These region boundaries can be changed using the `GSw_TransHurdleLevel1` and `GSw_TransHurdleLevel2` switches. ``` @@ -2163,7 +2174,7 @@ The estimated regulation requirements (0.5% wind generation and 0.3% PV capacity All ancillary reserve requirements must be satisfied in each zone for each time slice; however, reserve provision can be traded between zones using AC transmission interfaces. -Trades are allowed only within planning regions ({numref}`figure-hierarchy`) and not across planning region boundaries. +Trades are allowed only within planning regions ({numref}`figure-spatial_layers_zones`) and not across planning region boundaries. The amount of reserves that can be traded is limited by the amount of carrying capacity of an AC transmission interface that is not already being used for trading energy. The ability of technologies to contribute to reserves is limited by the ramping requirement for a given reserve product, the plant ramp rate, and online capacity (see {numref}`generation-techs-flexibility-params`). @@ -2256,7 +2267,7 @@ If a stress period has no consecutively adjacent stress periods, it is modeled w (the same treatment as representative periods, as long as [interday storage operation](#inter-day-storage-operation) is not enabled). - Interregional transmission flows are allowed during stress periods by default, allowing interregional coordination to help meet resource adequacy needs. New transmission capacity is derated by 15% during stress periods to approximate contingency considerations. -- Coincident net imports into NERC regions ({numref}`figure-hierarchy`) during stress periods are by default limited to historical peak net firm capacity transfers from {cite}`northamericanelectricreliabilitycorporation2023LongtermReliability2023` through 2030 to approximate barriers to coordinated interregional resource adequacy planning. +- Coincident net imports into NERC regions ({numref}`figure-spatial_layers_zones`) during stress periods are by default limited to historical peak net firm capacity transfers from {cite}`northamericanelectricreliabilitycorporation2023LongtermReliability2023` through 2030 to approximate barriers to coordinated interregional resource adequacy planning. @@ -2372,7 +2383,7 @@ The default reliability threshold of 1 ppm NEUE is roughly equivalent to a loss Iterative capacity expansion and resource adequacy model flow for an illustrative scenario, reproduced from {cite}`maiIncorporatingStressfulGrid2024`. **a**, "Seed" stress periods. **b**, ReEDS capacity expansion results for the first iteration using only the "seed" stress periods. -Actual results are at zonal resolution but are aggregated here to the level of the 18 planning subregions ({numref}`figure-hierarchy`) for clarity. +Actual results are at zonal resolution but are aggregated here to the level of the 18 planning subregions ({numref}`figure-spatial_layers_zones`) for clarity. **c**, Regional NEUE determined by PRAS for the ReEDS system shown in **b**. Some regions do not meet the 1 ppm NEUE threshold, triggering a second iteration in the process. **d**, Hourly expected unserved energy (EUE) for the 2007--2013 weather years as determined by PRAS. @@ -2494,7 +2505,7 @@ In all cases, the VRE profile is compared against the aggregated regional load p ```{admonition} Capacity credit settings Many settings related to capacity credit calculations can be adjusted by the user. -- `capcredit_hierarchy_level` (default `transreg` for the 11 planning regions shown in {numref}`figure-hierarchy`): Level at which to aggregate net load for capacity credit calculation +- `capcredit_hierarchy_level` (default `transreg` for the 11 planning regions shown in {numref}`figure-spatial_layers_zones`): Level at which to aggregate net load for capacity credit calculation - `GSw_PRM_CapCreditHours` (default 20): Number of peak net load hours per capacity credit season considered in capacity credit calculation - `marg_vre_mw` (default 1000): Amount of marginal VRE capacity to add in MW for marginal capacity credit calculation - `marg_stor_mw` (default 100): Amount of marginal storage capacity to add in MW for marginal capacity credit calculation @@ -3464,7 +3475,7 @@ Rather, a regional supply curve representation is used to approximate the NG sys For more information on the impact of natural gas representation in ReEDS, see {cite}`coleViewFutureNatural`. The premise of using regional supply curves is that the price in each region will be a function of both the regional and national NG demand. -The supply curves are parameterized from AEO scenarios for each of the nine EIA census divisions (shown in {numref}`figure-hierarchy`). +The supply curves are parameterized from AEO scenarios for each of the nine EIA census divisions (shown in {numref}`figure-spatial_layers_states`). Two methods exist to parameterize the natural gas supply curves; both are discussed here. The first method involves estimating a linear regression of prices on regional and national quantities. The second method involves parameterizing a constant elasticity of supply curve. @@ -3985,7 +3996,7 @@ DNI resource is used to show opportunities to charge the storage. ### Spatial Resolution Capabilities -The default model zones are shown in {numref}`figure-hierarchy`. +The default model zones are shown in {numref}`figure-spatial_layers_zones`. Depending on the needs of the user, different spatial resolutions can also be used. The default zones can be aggregated into larger regions, or collections of zones can be disaggregated into their constituent counties ({numref}`figure-counties`). @@ -4008,14 +4019,6 @@ For example, California can be represented using the default model zones while t This approach can enable finer detail for a specific region of interest while capturing trades with neighboring regions at lower resolution but with a reasonable solution time. -#### Data inputs and handling - -Nearly all ReEDS data inputs that include a spatial dimension are specified at the 134-zone model resolution.[^ref67] -To be able to perform runs at county-level resolution, some inputs are included at both the county level and zonal resolution. - -[^ref67]: Exceptions include state-level policies, which are specified at the state level; NOx emission trading groups; and transmission interface limits between system operator boundaries. - - #### Transmission data Transmission capacity between counties is based on nodal transmission network data (see {numref}`figure-nodal-transmission-network-data`) collected as part of the North American Renewable Integration Study {cite}`brinkmanNorthAmericanRenewable2021a`. @@ -4092,7 +4095,7 @@ The shapefiles are converted to the ESRI:102008 coordinate reference system, and #### Scaling datasets to county resolution -All datasets besides those described above were downscaled from 134-zone resolution to county-level resolution using one of the following three methods. +All datasets besides those described above were downscaled to county-level resolution using one of the following three methods. **Uniform disaggregation:** All counties within a model zone are assigned the same value as the one used for the zone. diff --git a/docs/source/plotting_scripts/maps.py b/docs/source/plotting_scripts/maps.py index ec6d4f5f..bc6dd048 100644 --- a/docs/source/plotting_scripts/maps.py +++ b/docs/source/plotting_scripts/maps.py @@ -48,37 +48,37 @@ c = {'r':cm(7), 'g':cm(5), 'b':cm(1), 'y':cm(3)} cmap = { 'transreg': { - 'CAISO':plt.cm.tab20(3), - 'NorthernGrid':plt.cm.tab20(1), - 'WestConnect':plt.cm.tab20(5), - 'SPP':plt.cm.tab20(3), - 'MISO':plt.cm.tab20(5), - 'ERCOT':plt.cm.tab20(1), - 'PJM':plt.cm.tab20(3), - 'SERTP':plt.cm.tab20(1), - 'FRCC':plt.cm.tab20(5), - 'NYISO':plt.cm.tab20(1), - 'ISONE':plt.cm.tab20(5), + 'CAISO':cm(3), + 'NorthernGrid':cm(1), + 'WestConnect':cm(5), + 'SPP':cm(3), + 'MISO':cm(5), + 'ERCOT':cm(1), + 'PJM':cm(3), + 'SERTP':cm(1), + 'FRCC':cm(5), + 'NYISO':cm(1), + 'ISONE':cm(5), }, 'transgrp': { - 'CAISO':plt.cm.tab20c(6), - 'NorthernGrid_West':plt.cm.tab20c(1), - 'NorthernGrid_East':plt.cm.tab20c(2), - 'NorthernGrid_South':plt.cm.tab20c(3), - 'WestConnect_North':plt.cm.tab20c(9), - 'WestConnect_South':plt.cm.tab20c(10), - 'SPP_North':plt.cm.tab20c(5), - 'SPP_South':plt.cm.tab20c(6), - 'MISO_North':plt.cm.tab20c(9), - 'MISO_Central':plt.cm.tab20c(10), - 'MISO_South':plt.cm.tab20c(11), - 'ERCOT':plt.cm.tab20c(2), - 'PJM_West':plt.cm.tab20c(5), - 'PJM_East':plt.cm.tab20c(6), - 'SERTP':plt.cm.tab20c(2), - 'FRCC':plt.cm.tab20c(10), - 'NYISO':plt.cm.tab20c(2), - 'ISONE':plt.cm.tab20c(10), + 'CAISO':cm2(6), + 'NorthernGrid_West':cm2(1), + 'NorthernGrid_East':cm2(2), + 'NorthernGrid_South':cm2(3), + 'WestConnect_North':cm2(9), + 'WestConnect_South':cm2(10), + 'SPP_North':cm2(5), + 'SPP_South':cm2(6), + 'MISO_North':cm2(9), + 'MISO_Central':cm2(10), + 'MISO_South':cm2(11), + 'ERCOT':cm2(2), + 'PJM_West':cm2(5), + 'PJM_East':cm2(6), + 'SERTP':cm2(2), + 'FRCC':cm2(10), + 'NYISO':cm2(2), + 'ISONE':cm2(10), }, 'st': { 'WA':c['b'], 'OR':c['y'], 'CA':c['b'], 'ID':c['r'], 'NV':c['g'], @@ -120,6 +120,19 @@ 'Mid_Atlantic':c['y'], 'New_England':c['b'], }, + 'gasreg': { + 'California':cm2(2), + 'Northwest':cm2(3), + 'Mountain':cm2(6), + 'Southwest':cm2(7), + 'West_North_Central':c['b'], + 'West_South_Central':c['g'], + 'East_North_Central':c['g'], + 'East_South_Central':c['y'], + 'South_Atlantic':c['b'], + 'Mid_Atlantic':c['y'], + 'New_England':c['b'], + }, 'nercr': { 'WECC_CA':c['y'], 'WECC_NW':c['b'], @@ -154,8 +167,21 @@ ### Plot it alpha = 0.8 draw_states = True -draw_zones = True -label_zones = {'r': False} +draw_zones = { + 'st':False, + 'cendiv':False, + 'usda_region':False, + 'h2ptcreg':False, + 'gasreg':False, +} +label_zones = { + 'r':False, + 'st':False, + 'cendiv':False, + 'usda_region':False, + 'h2ptcreg':False, + 'gasreg':False, +} draw_lakes = True draw_counties = False label_regions = {'hurdlereg': False} @@ -176,7 +202,7 @@ ) if draw_states: dfmap['st'].plot(ax=ax, facecolor='none', edgecolor='C7', lw=0.6, zorder=1e8) - if draw_zones: + if draw_zones.get(level, True): dfmap['r'].plot(ax=ax, facecolor='none', edgecolor='C7', lw=0.3, zorder=1e7) if draw_counties: dfcounty.plot(ax=ax, facecolor='none', edgecolor='C7', lw=0.02, zorder=1e6) @@ -210,7 +236,7 @@ ax.axis('off') savename = ( f"{level}" - f"-z{int(draw_zones)}" + f"-z{int(draw_zones.get(level, True))}" f"-s{int(draw_states)}" f"-l{int(draw_lakes)}" f"-zl{int(label_zones.get(level, True))}" diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index 4ee15efb..e2a86bc9 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -236,7 +236,7 @@ To ensure the low carbon intensity of the electricity powering electrolyzers, th Example: if an electrolyzer is put in service in 2028, only generators whose commercial operations dates are between 2025-2028 may qualify to power this electrolyzer. This requirement starts immediately. There are special exceptions for nuclear, CCS and states with robust GHG emission caps - we do not model these additional pathways in ReEDS. 2. Hourly matching: each MWh must be consumed by an electrolyzer in the same hour of the year in which it was generated. -3. Deliverablity: each MWh must be consumed by an electrolyzer in the same region in which it was generated. Regional matching is required at the National Transmission Needs Study region level, which corresponds to the H2 PTC region level shown in {numref}`figure-hierarchy`. +3. Deliverablity: each MWh must be consumed by an electrolyzer in the same region in which it was generated. Regional matching is required at the National Transmission Needs Study region level, which corresponds to the H2 PTC region level shown in {numref}`figure-spatial_layers_states`. Source: [Guidelines to Determine Well-to-Gate GHG Emissions of Hydrogen Production Pathways using 45VH2-GREET 2023](https://www.energy.gov/sites/default/files/2023-12/greet-manual_2023-12-20.pdf), 2023, Figure 2 From ca37f8f00c33b8d55686a3d286692e23ffa6f828 Mon Sep 17 00:00:00 2001 From: kodiobika <35176195+kodiobika@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:20:51 -0400 Subject: [PATCH 74/85] Update reeds/core/terminus/report.gms Co-authored-by: Wesley Cole <49044852+wesleyjcole@users.noreply.github.com> --- reeds/core/terminus/report.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 16ccf1ac..8700db16 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -533,7 +533,7 @@ repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tmodel_new(t)$repgasquant(cendiv,t)] = repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tmodel_new(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t) + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN.l(i,v,r,h,t) * gasprice_adj_r(r,h,t) } / (repgasquant(cendiv,t) * 1e9) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tmodel_new(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; From 0131b0aea31dcb2c01d8b2d110029e8cbff68b2b Mon Sep 17 00:00:00 2001 From: kodiobika <35176195+kodiobika@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:21:09 -0400 Subject: [PATCH 75/85] Update reeds/core/solve/6_data_dump.gms Co-authored-by: Wesley Cole <49044852+wesleyjcole@users.noreply.github.com> --- reeds/core/solve/6_data_dump.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/solve/6_data_dump.gms b/reeds/core/solve/6_data_dump.gms index f7f33645..305a481c 100644 --- a/reeds/core/solve/6_data_dump.gms +++ b/reeds/core/solve/6_data_dump.gms @@ -198,7 +198,7 @@ repgasprice(cendiv,t)$[(Sw_GasCurve = 0)$tcur(t)] = repgasprice(cendiv,t)$[(Sw_GasCurve = 2)$tcur(t)$repgasquant(cendiv,t)] = sum{(i,v,r,h)$[r_cendiv(r,cendiv)$valgen(i,v,r,t)$gas(i)$heat_rate(i,v,r,t)], - hours(h)*heat_rate(i,v,r,t)*fuel_price(i,r,t)*GEN.l(i,v,r,h,t)*gasprice_adj_r(r,h,t) + hours(h) * heat_rate(i,v,r,t) * fuel_price(i,r,t) * GEN.l(i,v,r,h,t) * gasprice_adj_r(r,h,t) } / (repgasquant(cendiv,t)) ; repgasprice_r(r,t)$[(Sw_GasCurve = 0 or Sw_GasCurve = 2)$tcur(t)] = sum{cendiv$r_cendiv(r,cendiv), repgasprice(cendiv,t) } ; From 2eb6178b2a6d369833518d1b5f02712a4bda9629 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 18 Jun 2026 17:44:57 -0400 Subject: [PATCH 76/85] Add 'no price adjustment' option (GSw_GasPriceAdjMethod=0) --- cases.csv | 2 +- docs/source/model_documentation.md | 2 +- reeds/core/solve/2_temporal_params.gms | 10 ++++++---- reeds/input_processing/runfiles.csv | 4 ++-- tests/objective_function_params.yaml | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cases.csv b/cases.csv index 229ca83d..53220ba5 100644 --- a/cases.csv +++ b/cases.csv @@ -143,7 +143,7 @@ GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, GSw_GasCC_H_2x1,Turn on/off both gas-CC_H_2x1 and gas-CC_H_2x1-CCS_mod/max plant options,0; 1,0, GSw_GasCT_Aero,Turn on/off gas-CT_aeroderivative technology option,0; 1,0, -GSw_GasPriceAdjMethod,"Select method for adjusting gas prices (0 = national wintertime markup, 1 = daily adjustments based on regional temperatures)",0; 1,0, +GSw_GasPriceAdjMethod,"Select method for adjusting gas prices (0 = no adjustment, 1 = national wintertime markup, 2 = daily adjustments based on regional temperatures)",0; 1; 2,1, GSw_GasRegionSmooth,Exponential decay length [km] to use when smoothing regional (census division) gas prices together (if 0 then no smoothing is applied and r:cendiv map is used 1:1),float,150, GSw_GasSector,Select sector scope of gas curves,electric_sector; energy_sector,electric_sector, GSw_GenMandate,Turn on/off national Gen Requirement. 2 turns on and applies constraint at busbar.,0; 1; 2,0, diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 4b83286d..a6f727f7 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -1669,7 +1669,7 @@ For details, see the [Daily Natural Gas Price Adjustments section](#daily-natura ```{admonition} Natural gas price adjustments The switch `GSw_GasPriceAdjMethod` controls the choice of natural gas price adjustments. -0 = national wintertime markup, 1 = daily adjustments based on regional temperatures +0 = no adjustment, 1 = national wintertime markup, 2 = daily adjustments based on regional temperatures ``` diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 482d72a1..08df791f 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -902,7 +902,7 @@ $onlisting / ; $offempty -*winter gas gets marked up if GSw_GasPriceAdjMethod = 0 +* If GSw_GasPriceAdjMethod = 1, replace daily regional adjustments with the national wintertime markup szn_adj_gas(allh) = 0 ; szn_adj_gas(h) = 1 ; szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = @@ -911,10 +911,12 @@ szn_adj_gas(h)$frac_h_quarter_weights(h,"wint") = scalar szn_adj_gas_avg "--unitless-- hour-weighted average of natural gas seasonal adjustment" ; szn_adj_gas_avg = sum{h, szn_adj_gas(h) * hours(h) } / sum{h, hours(h) } ; szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; +gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) = szn_adj_gas(h) ; +gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) = szn_adj_gas(h) ; -* If GSw_GasPriceAdjMethod = 0, replace daily regional adjustments with the national wintertime markup -gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; -gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = szn_adj_gas(h) ; +If GSw_GasPriceAdjMethod = 0, nullify the price adjustments +gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = 1 ; +gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = 1 ; *============================================= diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 7bedc1b8..dff2b6ea 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -92,8 +92,8 @@ forced_retirements.csv,inputs/state_policies/forced_retirements.csv,1,ignore,ign fuel2tech.csv,inputs/sets/fuel2tech.csv,1,ignore,ignore,,,,,0,,,set,fuel2tech,mapping between fuel types and generations, fuelbin.csv,inputs/sets/fuelbin.csv,1,ignore,ignore,,,,,,,,set,fuelbin,gas usage bracket, futurefiles.csv,inputs/userinput/futurefiles.csv,1,ignore,ignore,,,,,0,,,,,, -gasreg_degree_day_price_mult_regression_params.csv,inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,param,,1,0,,,,,, -gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) == 1,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, +gasreg_degree_day_price_mult_regression_params.csv,inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,int(sw.GSw_GasPriceAdjMethod) == 2,ignore,ignore,wide_gasreg,param,,1,0,,,,,, +gasreg_degree_days.csv,inputs/fuelprices/gasreg_degree_days.csv,int(sw.GSw_GasPriceAdjMethod) == 2,ignore,ignore,wide_gasreg,"t,ddtype",,1,0,,,,,, gb.csv,inputs/sets/gb.csv,1,ignore,ignore,,,,,,,,set,gb,gas price bins; must have an odd number of bins; e.g. gb1*gb15, gbin.csv,inputs/sets/gbin.csv,1,ignore,ignore,,,,,,,,set,gbin,growth bins, gbin_min.csv,inputs/growth_constraints/gbin_min.csv,1,ignore,ignore,,,,,0,,,,,, diff --git a/tests/objective_function_params.yaml b/tests/objective_function_params.yaml index 34acaaee..cddc4441 100644 --- a/tests/objective_function_params.yaml +++ b/tests/objective_function_params.yaml @@ -212,7 +212,7 @@ szn_adj_gas: indexsets: - h switchon: - GSw_GasPriceAdjMethod: 0 + GSw_GasPriceAdjMethod: 1 cendiv_weights: indexsets: - valgen From 473024406ce927a34bd2ea450a479ba8dc02bdba Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 18 Jun 2026 17:57:37 -0400 Subject: [PATCH 77/85] Generalize naming of weighted average function --- reeds/input_processing/fuelcostprep.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index a0034ee9..a3f42444 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -134,17 +134,17 @@ def calculate_historical_daily_state_degree_days( return hdd_daily, cdd_daily -def aggregate_regional_degree_days_to_aggregion( - regional_degree_days: pd.DataFrame, +def aggregate_by_weighted_average( + regional_data: pd.DataFrame, region_aggregion_weights: pd.Series, region2aggregion: dict[str, str] ) -> pd.DataFrame: """ - Aggregate region-level degree days to the aggregated region + Aggregate region-level data to the aggregated region ("aggregion") level via weighted average. Args: - regional_degree_days: Region-level degree days. + regional_data: Region-level data. region_aggregion_weights: The "weight" of each region corresponding to its aggregion to use in weighted average calculation. @@ -153,15 +153,15 @@ def aggregate_regional_degree_days_to_aggregion( Returns: pd.DataFrame """ - aggregional_degree_days = ( - regional_degree_days.mul(region_aggregion_weights) + aggregional_data = ( + regional_data.mul(region_aggregion_weights) .transpose() .rename(region2aggregion) .groupby(level=0) .sum() .transpose() ) - return aggregional_degree_days + return aggregional_data def rescale_historical_daily_degree_days_to_projected_annuals( historical_daily_degree_days: pd.DataFrame, @@ -261,12 +261,12 @@ def calculate_daily_gasreg_degree_days( # the gasreg level via population-weighted average state_groups = reeds.inputs.get_state_groups() st2gasreg = state_groups.set_index('st')['gasreg'] - historical_hdd_daily_gasreg = aggregate_regional_degree_days_to_aggregion( + historical_hdd_daily_gasreg = aggregate_by_weighted_average( historical_hdd_daily_st, state_gasreg_weights, st2gasreg ) - historical_cdd_daily_gasreg = aggregate_regional_degree_days_to_aggregion( + historical_cdd_daily_gasreg = aggregate_by_weighted_average( historical_cdd_daily_st, state_gasreg_weights, st2gasreg @@ -410,7 +410,7 @@ def calculate_daily_gasprice_multipliers( aggregion_level='cendiv' ) gasreg_cendiv_map = dict(zip(hierarchy['gasreg'], hierarchy['cendiv'])) - df_out_cendiv = aggregate_regional_degree_days_to_aggregion( + df_out_cendiv = aggregate_by_weighted_average( df_out, gasreg_cendiv_weights, gasreg_cendiv_map From 6ecd3121e4e26735ff94d211e0bef6e8942bf655 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 18 Jun 2026 18:05:31 -0400 Subject: [PATCH 78/85] Add pointer to input processing repo --- docs/sources.csv | 2 +- docs/sources_documentation.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sources.csv b/docs/sources.csv index 0ddd19a4..97acaad4 100644 --- a/docs/sources.csv +++ b/docs/sources.csv @@ -262,7 +262,7 @@ RelativeFilePath,RelativeFolderPath,FileName_new,FileExtension,Description_new,I /inputs/fuelprices/coal_AEO_2026_altelec.csv,/inputs/fuelprices,coal_AEO_2026_altelec,.csv,AEO2026 Alternative Electricity case census division fuel price of coal with missing New England values set to Mid Atlantic,"t,cendiv",2025,AEO2026,Input,$/MMBtu /inputs/fuelprices/coal_AEO_2026_baseline.csv,/inputs/fuelprices,coal_AEO_2026_baseline,.csv,AEO2026 Counterfactual Baseline case census division fuel price of coal with missing values forward-filled from earlier years and missing New England values set to Mid Atlantic,"t,cendiv",2025,AEO2026,Input,$/MMBtu /inputs/fuelprices/dollaryear.csv,/inputs/fuelprices,dollaryear,.csv,Dollar year mapping for each fuel price scenario,,,,, -/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,/inputs/fuelprices,gasreg_degree_day_price_mult_regression_params,.csv,"Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects. ""Beta"" values are HDD/CDD coefficients and ""alpha"" values are intercepts and monthly fixed effects.",param,,,Input, +/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv,/inputs/fuelprices,gasreg_degree_day_price_mult_regression_params,.csv,"Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects (https://github.com/ReEDS-Model/ReEDS_Input_Processing/tree/main/aeo_updates/temperature_gas_price_regression). ""Beta"" values are HDD/CDD coefficients and ""alpha"" values are intercepts and monthly fixed effects.",param,,,Input, /inputs/fuelprices/gasreg_degree_days.csv,/inputs/fuelprices,gasreg_degree_days,.csv,Annual heating and cooling degree days for each gasreg,"t,ddtype",,AEO: https://github.com/EIAgov/NEMS/blob/main/input/bld/kdegday.txt,Input, /inputs/fuelprices/h2-combustion_10.csv,/inputs/fuelprices,h2-combustion_10,.csv,price of hydrogen for combustion technologies (h2-ct and cc) at $10/MMBtu for all years,,,,, /inputs/fuelprices/h2-combustion_30.csv,/inputs/fuelprices,h2-combustion_30,.csv,price of hydrogen for combustion technologies (h2-ct and cc) at $30/MMBtu for all years,,,,, diff --git a/docs/sources_documentation.md b/docs/sources_documentation.md index 269693e7..211de65e 100644 --- a/docs/sources_documentation.md +++ b/docs/sources_documentation.md @@ -1571,7 +1571,7 @@ - [gasreg_degree_day_price_mult_regression_params.csv](/inputs/fuelprices/gasreg_degree_day_price_mult_regression_params.csv) - **File Type:** Input - - **Description:** Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects. "Beta" values are HDD/CDD coefficients and "alpha" values are intercepts and monthly fixed effects. + - **Description:** Coefficients and intercepts derived from regression regressing daily gasreg heating/cooling degree days on daily deviations of gas prices from their annual average price with monthly fixed effects (https://github.com/ReEDS-Model/ReEDS_Input_Processing/tree/main/aeo_updates/temperature_gas_price_regression). "Beta" values are HDD/CDD coefficients and "alpha" values are intercepts and monthly fixed effects. - **Indices:** param --- From 8f804522c9d23a2d4d4ae12eea251356439dd795 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Thu, 18 Jun 2026 22:03:52 -0400 Subject: [PATCH 79/85] Bugfix --- reeds/core/solve/2_temporal_params.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/solve/2_temporal_params.gms b/reeds/core/solve/2_temporal_params.gms index 08df791f..8cf07aae 100644 --- a/reeds/core/solve/2_temporal_params.gms +++ b/reeds/core/solve/2_temporal_params.gms @@ -914,7 +914,7 @@ szn_adj_gas(h) = szn_adj_gas(h) / szn_adj_gas_avg ; gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 1) = szn_adj_gas(h) ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 1) = szn_adj_gas(h) ; -If GSw_GasPriceAdjMethod = 0, nullify the price adjustments +* If GSw_GasPriceAdjMethod = 0, nullify the price adjustments gasprice_adj_r(r,h,t)$(Sw_GasPriceAdjMethod = 0) = 1 ; gasprice_adj_cendiv(cendiv,h,t)$(Sw_GasPriceAdjMethod = 0) = 1 ; From 650b173ca38782b0798094ab705659766768c991 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 22 Jun 2026 10:10:36 -0400 Subject: [PATCH 80/85] Add example natural gas price adjustment plots --- docs/source/figs/docs/natural-gas-price-adjustments.png | 3 +++ docs/source/model_documentation.md | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 docs/source/figs/docs/natural-gas-price-adjustments.png diff --git a/docs/source/figs/docs/natural-gas-price-adjustments.png b/docs/source/figs/docs/natural-gas-price-adjustments.png new file mode 100644 index 00000000..8aeb710a --- /dev/null +++ b/docs/source/figs/docs/natural-gas-price-adjustments.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2119b815e30bad3c183e78be923d45b4ad5e6842a733d3bd312a7ee5d3106c03 +size 322083 diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index a6f727f7..2eea30c0 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -3647,6 +3647,14 @@ For purposes of calculating this population-weighted average, state-level popula Depending on the spatial resolution of the gas prices being used in the model, the daily gas price adjustments are either downscaled to the zone level by copying each regression region's adjustments to their constituent zones or upscaled to the census division level via population-weighted average. Once representative periods are selected in the model, the daily adjustments are filtered to include only the representative periods and then renormalized so that the average price multiplier for each zone or census division and each model year is one, thus ensuring the year-round average gas price remains unchanged. +{numref}`figure-natural-gas-price-adjustments` shows an example set of price adjustments including the national wintertime markup and daily adjustments for each census division. + +```{figure} figs/docs/natural-gas-price-adjustments.png +:name: figure-natural-gas-price-adjustments + +Seasonal and daily natural gas price adjustments for model year 2050 and weather year 2012. +This example uses one weather year, but the method can also be applied across multiple weather years. +``` ### Capital Cost Financial Multipliers From 9b79ec00d07a87c1c81df12ae1e884b2e1822943 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 22 Jun 2026 12:17:43 -0400 Subject: [PATCH 81/85] Add gasreg description to zones README.md --- inputs/zones/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/inputs/zones/README.md b/inputs/zones/README.md index 00fc6295..2246e6b0 100644 --- a/inputs/zones/README.md +++ b/inputs/zones/README.md @@ -82,3 +82,4 @@ The offshore zones are not user-adjustable. - `cendiv`: [Census divisions](https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf) - `usda_region`: [USDA Farm Production Regions](https://www.ers.usda.gov/data-products/arms-farm-financial-and-crop-production-practices/documentation) - `h2ptcreg`: Hydrogen tax credit regions ([DOE 2023, Figure 2](https://www.energy.gov/sites/default/files/2023-12/greet-manual_2023-12-20.pdf)) + - `gasreg`: Gas price regions. These are specific to the ReEDS model and are based on a mix of [census divisions](https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf), EIA-NEMS natural gas regions used to report regional flows and capacity ([EIA Natural Gas Market Module of the Natural Energy Modeling System: Model Documentation 2025, Figure 2.5](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)), and EIA-NEMS Natural Gas-Electricity Market Module regions ([EIA Natural Gas Market Module of the Natural Energy Modeling System: Model Documentation 2025, Figure 2.7](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)) From c37452544520b33e32052c674c810d29e33252f6 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Mon, 22 Jun 2026 12:40:09 -0400 Subject: [PATCH 82/85] Fix typo --- inputs/zones/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inputs/zones/README.md b/inputs/zones/README.md index 2246e6b0..150ae06c 100644 --- a/inputs/zones/README.md +++ b/inputs/zones/README.md @@ -82,4 +82,4 @@ The offshore zones are not user-adjustable. - `cendiv`: [Census divisions](https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf) - `usda_region`: [USDA Farm Production Regions](https://www.ers.usda.gov/data-products/arms-farm-financial-and-crop-production-practices/documentation) - `h2ptcreg`: Hydrogen tax credit regions ([DOE 2023, Figure 2](https://www.energy.gov/sites/default/files/2023-12/greet-manual_2023-12-20.pdf)) - - `gasreg`: Gas price regions. These are specific to the ReEDS model and are based on a mix of [census divisions](https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf), EIA-NEMS natural gas regions used to report regional flows and capacity ([EIA Natural Gas Market Module of the Natural Energy Modeling System: Model Documentation 2025, Figure 2.5](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)), and EIA-NEMS Natural Gas-Electricity Market Module regions ([EIA Natural Gas Market Module of the Natural Energy Modeling System: Model Documentation 2025, Figure 2.7](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)) + - `gasreg`: Gas price regions. These are specific to the ReEDS model and are based on a mix of [census divisions](https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf), EIA-NEMS natural gas regions used to report regional flows and capacity ([EIA Natural Gas Market Module of the National Energy Modeling System: Model Documentation 2025, Figure 2.5](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)), and EIA-NEMS Natural Gas-Electricity Market Module regions ([EIA Natural Gas Market Module of the National Energy Modeling System: Model Documentation 2025, Figure 2.7](https://www.eia.gov/outlooks/aeo/nems/documentation/ngmm/pdf/NGMM_AEO2025.pdf)) From 4bf4e48b42bca5ae04f532c5d58430c1bee62b1b Mon Sep 17 00:00:00 2001 From: kodiobika <35176195+kodiobika@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:35:40 -0400 Subject: [PATCH 83/85] Update reeds/input_processing/fuelcostprep.py Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/input_processing/fuelcostprep.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index a3f42444..cf741a5f 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -122,11 +122,7 @@ def calculate_historical_daily_state_degree_days( base_temp = scalars['degree_days_base_temperature'] # Calculate each state's average temperature for each day - temp_daily = temp_hourly.resample('D').agg(['min', 'max']) - avg_temp_daily = ( - temp_daily.xs('min', axis=1, level=1) - + temp_daily.xs('max', axis=1, level=1) - ) / 2 + avg_temp_daily = temp_hourly.resample('D').mean() # Take differences between baseline and average temperatures hdd_daily = (base_temp - avg_temp_daily).clip(lower=0) From afcc544ebd6fb5baebb52cf7850ab1a15c5d63ea Mon Sep 17 00:00:00 2001 From: kodiobika <35176195+kodiobika@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:46:36 -0400 Subject: [PATCH 84/85] Update reeds/input_processing/fuelcostprep.py Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/input_processing/fuelcostprep.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index cf741a5f..b7282a70 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -13,7 +13,6 @@ ### =========================================================================== import pandas as pd -import numpy as np import os import sys import argparse From e97fc89495317239335a8ceff22b33ca08b739b9 Mon Sep 17 00:00:00 2001 From: kodiobika <35176195+kodiobika@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:47:04 -0400 Subject: [PATCH 85/85] Update reeds/input_processing/fuelcostprep.py Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/input_processing/fuelcostprep.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/input_processing/fuelcostprep.py b/reeds/input_processing/fuelcostprep.py index b7282a70..a6a2f5e6 100644 --- a/reeds/input_processing/fuelcostprep.py +++ b/reeds/input_processing/fuelcostprep.py @@ -24,7 +24,7 @@ def calculate_region_aggregion_population_weights( - inputs_case: str, + inputs_case: str | Path, region_level: str, aggregion_level: str, ) -> pd.Series: