From e46c710c462e53c824d6818b2aa63704a67434e1 Mon Sep 17 00:00:00 2001 From: kodiobika Date: Wed, 15 Apr 2026 18:15:35 -0400 Subject: [PATCH 01/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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,