From f9736132e4d5c106f4e41aa1c314e81ab4c698e3 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Thu, 5 Oct 2023 09:18:31 -0400 Subject: [PATCH 01/69] initial changes to read in ak bk --- util/pace/util/grid/eta.py | 818 +------------------------------------ 1 file changed, 6 insertions(+), 812 deletions(-) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index dc37aaa2..1a8a7db7 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -35,820 +35,14 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: Returns: a HybridPressureCoefficients dataclass """ - if km == 79: - ak = np.array( - [ - 300, - 646.7159, - 1045.222, - 1469.188, - 1897.829, - 2325.385, - 2754.396, - 3191.294, - 3648.332, - 4135.675, - 4668.282, - 5247.94, - 5876.271, - 6554.716, - 7284.521, - 8066.738, - 8902.188, - 9791.482, - 10734.99, - 11626.25, - 12372.12, - 12990.41, - 13496.29, - 13902.77, - 14220.98, - 14460.58, - 14629.93, - 14736.33, - 14786.17, - 14785.11, - 14738.12, - 14649.66, - 14523.7, - 14363.82, - 14173.24, - 13954.91, - 13711.48, - 13445.4, - 13158.9, - 12854.07, - 12532.8, - 12196.85, - 11847.88, - 11487.39, - 11116.82, - 10737.48, - 10350.62, - 9957.395, - 9558.875, - 9156.069, - 8749.922, - 8341.315, - 7931.065, - 7519.942, - 7108.648, - 6698.281, - 6290.007, - 5884.984, - 5484.372, - 5089.319, - 4700.96, - 4320.421, - 3948.807, - 3587.201, - 3236.666, - 2898.237, - 2572.912, - 2261.667, - 1965.424, - 1685.079, - 1421.479, - 1175.419, - 947.6516, - 738.8688, - 549.713, - 380.7626, - 232.5417, - 105.481, - -0.0008381903, - 0, - ] - ) - bk = np.array( - [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0.001065947, - 0.004128662, - 0.009006631, - 0.01554263, - 0.02359921, - 0.03305481, - 0.0438012, - 0.05574095, - 0.06878554, - 0.08285347, - 0.09786981, - 0.1137643, - 0.130471, - 0.1479275, - 0.1660746, - 0.1848558, - 0.2042166, - 0.2241053, - 0.2444716, - 0.2652672, - 0.286445, - 0.3079604, - 0.3297701, - 0.351832, - 0.3741062, - 0.3965532, - 0.4191364, - 0.4418194, - 0.4645682, - 0.48735, - 0.5101338, - 0.5328897, - 0.5555894, - 0.5782067, - 0.6007158, - 0.6230936, - 0.6452944, - 0.6672683, - 0.6889648, - 0.7103333, - 0.7313231, - 0.7518838, - 0.7719651, - 0.7915173, - 0.8104913, - 0.828839, - 0.846513, - 0.8634676, - 0.8796583, - 0.8950421, - 0.9095779, - 0.9232264, - 0.9359506, - 0.9477157, - 0.9584892, - 0.9682413, - 0.9769447, - 0.9845753, - 0.9911126, - 0.9965372, - 1, - ] - ) - elif km == 91: - ak = np.array( - [ - 1.00000000, - 1.75000000, - 2.75000000, - 4.09999990, - 5.98951054, - 8.62932968, - 12.2572632, - 17.1510906, - 23.6545467, - 32.1627693, - 43.1310921, - 57.1100426, - 74.6595764, - 96.4470978, - 123.169769, - 155.601318, - 194.594009, - 241.047531, - 295.873840, - 360.046967, - 434.604828, - 520.628723, - 619.154846, - 731.296021, - 858.240906, - 1001.06561, - 1160.92859, - 1339.03992, - 1536.50012, - 1754.48938, - 1994.17834, - 2256.67407, - 2543.17139, - 2854.76392, - 3192.58569, - 3557.75366, - 3951.35107, - 4374.28662, - 4827.11084, - 5310.22168, - 5823.87793, - 6369.04248, - 6948.75244, - 7566.91992, - 8226.34277, - 8931.20996, - 9684.46191, - 10482.2725, - 11318.2793, - 12184.0771, - 13065.5674, - 13953.2207, - 14830.7285, - 15687.2617, - 16508.0645, - 17281.0996, - 17994.2988, - 18636.3223, - 19196.1797, - 19664.0723, - 20030.1914, - 20285.3691, - 20421.5254, - 20430.0684, - 20302.8730, - 20032.3711, - 19611.0664, - 19031.3848, - 18286.6426, - 17377.7930, - 16322.4639, - 15144.4033, - 13872.5674, - 12540.4785, - 11183.4170, - 9835.32715, - 8526.30664, - 7282.24512, - 6123.26074, - 5063.50684, - 4111.24902, - 3270.00122, - 2539.22729, - 1915.30762, - 1392.44995, - 963.134766, - 620.599365, - 357.989502, - 169.421387, - 51.0314941, - 2.48413086, - 0.00000000, - ] - ) + #set filename, ex, eta79.txt; read file into ak, bk arrays + etafile = 'eta ' + str(km) + 'txt' + ak, bk = np.loadtxt(etafile, dtype=np.float(64), unpack=True) - bk = np.array( - [ - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 3.50123992e-06, - 2.81484008e-05, - 9.38666999e-05, - 2.28561999e-04, - 5.12343016e-04, - 1.04712998e-03, - 1.95625005e-03, - 3.42317997e-03, - 5.58632007e-03, - 8.65428988e-03, - 1.27844000e-02, - 1.81719996e-02, - 2.49934997e-02, - 3.34198996e-02, - 4.36249003e-02, - 5.57769015e-02, - 7.00351968e-02, - 8.65636021e-02, - 0.105520003, - 0.127051994, - 0.151319996, - 0.178477004, - 0.208675995, - 0.242069006, - 0.278813988, - 0.319043010, - 0.362558991, - 0.408596009, - 0.456384987, - 0.505111992, - 0.553902984, - 0.601903021, - 0.648333013, - 0.692534983, - 0.733981013, - 0.772292018, - 0.807236016, - 0.838724971, - 0.866774976, - 0.891497016, - 0.913065016, - 0.931702971, - 0.947658002, - 0.961175978, - 0.972495019, - 0.981844008, - 0.989410996, - 0.995342016, - 1.00000000, - ] - ) - - elif km == 72: - ak = np.array( - [ - 1.00000000, - 2.00000024, - 3.27000046, - 4.75850105, - 6.60000134, - 8.93450165, - 11.9703016, - 15.9495029, - 21.1349030, - 27.8526058, - 36.5041084, - 47.5806084, - 61.6779099, - 79.5134125, - 101.944023, - 130.051025, - 165.079025, - 208.497040, - 262.021057, - 327.643066, - 407.657104, - 504.680115, - 621.680115, - 761.984192, - 929.294189, - 1127.69019, - 1364.34021, - 1645.71033, - 1979.16040, - 2373.04053, - 2836.78052, - 3381.00073, - 4017.54102, - 4764.39111, - 5638.79102, - 6660.34131, - 7851.23145, - 9236.57227, - 10866.3018, - 12783.7031, - 15039.3027, - 17693.0039, - 20119.2012, - 21686.5020, - 22436.3008, - 22389.8008, - 21877.5977, - 21214.9980, - 20325.8984, - 19309.6953, - 18161.8965, - 16960.8965, - 15625.9961, - 14290.9951, - 12869.5938, - 11895.8623, - 10918.1709, - 9936.52148, - 8909.99219, - 7883.42188, - 7062.19824, - 6436.26367, - 5805.32129, - 5169.61084, - 4533.90088, - 3898.20093, - 3257.08081, - 2609.20068, - 1961.31055, - 1313.48035, - 659.375244, - 4.80482578, - 0.00000000, - ] - ) - - bk = np.array( - [ - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 8.17541324e-09, - 6.96002459e-03, - 2.80100405e-02, - 6.37200624e-02, - 0.113602079, - 0.156224087, - 0.200350106, - 0.246741116, - 0.294403106, - 0.343381137, - 0.392891139, - 0.443740189, - 0.494590193, - 0.546304166, - 0.581041515, - 0.615818441, - 0.650634944, - 0.685899913, - 0.721165955, - 0.749378204, - 0.770637512, - 0.791946948, - 0.813303947, - 0.834660947, - 0.856018007, - 0.877429008, - 0.898908019, - 0.920387030, - 0.941865027, - 0.963406026, - 0.984951973, - 1.00000000, - ] - ) - - elif km == 137: - ak = np.array( - [ - 1.00000000, - 1.82500005, - 3.00000000, - 4.63000011, - 6.82797718, - 9.74696636, - 13.6054239, - 18.6089306, - 24.9857178, - 32.9857101, - 42.8792419, - 54.9554634, - 69.5205765, - 86.8958817, - 107.415741, - 131.425507, - 159.279404, - 191.338562, - 227.968948, - 269.539581, - 316.420746, - 368.982361, - 427.592499, - 492.616028, - 564.413452, - 643.339905, - 729.744141, - 823.967834, - 926.344910, - 1037.20117, - 1156.85364, - 1285.61035, - 1423.77014, - 1571.62292, - 1729.44897, - 1897.51929, - 2076.09595, - 2265.43164, - 2465.77051, - 2677.34814, - 2900.39136, - 3135.11938, - 3381.74365, - 3640.46826, - 3911.49048, - 4194.93066, - 4490.81738, - 4799.14941, - 5119.89502, - 5452.99072, - 5798.34473, - 6156.07422, - 6526.94678, - 6911.87061, - 7311.86914, - 7727.41211, - 8159.35400, - 8608.52539, - 9076.40039, - 9562.68262, - 10065.9785, - 10584.6318, - 11116.6621, - 11660.0674, - 12211.5479, - 12766.8730, - 13324.6689, - 13881.3311, - 14432.1396, - 14975.6152, - 15508.2568, - 16026.1152, - 16527.3223, - 17008.7891, - 17467.6133, - 17901.6211, - 18308.4336, - 18685.7188, - 19031.2891, - 19343.5117, - 19620.0430, - 19859.3906, - 20059.9316, - 20219.6641, - 20337.8633, - 20412.3086, - 20442.0781, - 20425.7188, - 20361.8164, - 20249.5117, - 20087.0859, - 19874.0254, - 19608.5723, - 19290.2266, - 18917.4609, - 18489.7070, - 18006.9258, - 17471.8398, - 16888.6875, - 16262.0469, - 15596.6953, - 14898.4531, - 14173.3242, - 13427.7695, - 12668.2578, - 11901.3398, - 11133.3047, - 10370.1758, - 9617.51562, - 8880.45312, - 8163.37500, - 7470.34375, - 6804.42188, - 6168.53125, - 5564.38281, - 4993.79688, - 4457.37500, - 3955.96094, - 3489.23438, - 3057.26562, - 2659.14062, - 2294.24219, - 1961.50000, - 1659.47656, - 1387.54688, - 1143.25000, - 926.507812, - 734.992188, - 568.062500, - 424.414062, - 302.476562, - 202.484375, - 122.101562, - 62.7812500, - 22.8359375, - 3.75781298, - 0.00000000, - 0.00000000, - ] - ) - - bk = np.array( - [ - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 0.00000000, - 7.00000010e-06, - 2.40000008e-05, - 5.90000018e-05, - 1.12000002e-04, - 1.99000002e-04, - 3.39999999e-04, - 5.61999972e-04, - 8.90000025e-04, - 1.35300006e-03, - 1.99200003e-03, - 2.85700010e-03, - 3.97100020e-03, - 5.37799997e-03, - 7.13300006e-03, - 9.26099997e-03, - 1.18060000e-02, - 1.48160001e-02, - 1.83179993e-02, - 2.23549996e-02, - 2.69639995e-02, - 3.21759991e-02, - 3.80260013e-02, - 4.45480011e-02, - 5.17730005e-02, - 5.97280003e-02, - 6.84479997e-02, - 7.79580027e-02, - 8.82859975e-02, - 9.94620025e-02, - 0.111505002, - 0.124448001, - 0.138312995, - 0.153125003, - 0.168909997, - 0.185689002, - 0.203491002, - 0.222332999, - 0.242244005, - 0.263242006, - 0.285353988, - 0.308598012, - 0.332938999, - 0.358253986, - 0.384362996, - 0.411125004, - 0.438391000, - 0.466003001, - 0.493800014, - 0.521619022, - 0.549301028, - 0.576691985, - 0.603648007, - 0.630035996, - 0.655736029, - 0.680643022, - 0.704668999, - 0.727738976, - 0.749796987, - 0.770798028, - 0.790717006, - 0.809535980, - 0.827256024, - 0.843881011, - 0.859431982, - 0.873929024, - 0.887408018, - 0.899900019, - 0.911448002, - 0.922096014, - 0.931881011, - 0.940859973, - 0.949064016, - 0.956550002, - 0.963352025, - 0.969512999, - 0.975077987, - 0.980072021, - 0.984542012, - 0.988499999, - 0.991984010, - 0.995002985, - 0.997630000, - 1.00000000, - ] - ) - - else: - raise NotImplementedError( - "Only grids with 72, 79, 91 or 137 vertical levels" - "have been implemented so far" - ) + # check size of ak and bk array is km + if ak.size != km : raise ValueError("size of ak array is not equal to "+str(km)) + if bk.size != km : raise ValueError("size of bk array is not equal to "+str(km)) if 0.0 in bk: ks = 0 if km == 91 else np.where(bk == 0)[0][-1] From 1b55098a9fab31cf15835fb17d9c0072fc94c371 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 17 Oct 2023 15:47:47 -0400 Subject: [PATCH 02/69] read ak/bk --- tests/main/grid/input/eta79.txt | 80 ++++++++++++++++++ tests/main/grid/test_eta.py | 140 ++++++++++++++++++++++++++++++ tests/main/grid/test_eta.py~ | 145 ++++++++++++++++++++++++++++++++ util/pace/util/grid/eta.py | 23 +++-- 4 files changed, 381 insertions(+), 7 deletions(-) create mode 100644 tests/main/grid/input/eta79.txt create mode 100755 tests/main/grid/test_eta.py create mode 100755 tests/main/grid/test_eta.py~ diff --git a/tests/main/grid/input/eta79.txt b/tests/main/grid/input/eta79.txt new file mode 100644 index 00000000..7b7afbec --- /dev/null +++ b/tests/main/grid/input/eta79.txt @@ -0,0 +1,80 @@ +300.0 0.0 +646.7159 0.0 +1045.222 0.0 +1469.188 0.0 +1897.829 0.0 +2325.385 0.0 +2754.396 0.0 +3191.294 0.0 +3648.332 0.0 +4135.675 0.0 +142.0 142.0 +5247.94 0.0 +5876.271 0.0 +6554.716 0.0 +7284.521 0.0 +8066.738 0.0 +8902.188 0.0 +9791.482 0.0 +10734.99 0.0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0.0 1.0 diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py new file mode 100755 index 00000000..f2ae0261 --- /dev/null +++ b/tests/main/grid/test_eta.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 + +import os +import numpy as np +from pace.util.grid import set_hybrid_pressure_coefficients + +input_dir='./input/' + +ak_ref = np.array( + [ + 300, 646.7159, 1045.222, + 1469.188, 1897.829, 2325.385, + 2754.396, 3191.294, 3648.332, + 4135.675, 4668.282, 5247.94, + 5876.271, 6554.716, 7284.521, + 8066.738, 8902.188, 9791.482, + 10734.99, 11626.25, 12372.12, + 12990.41, 13496.29, 13902.77, + 14220.98, 14460.58, 14629.93, + 14736.33, 14786.17, 14785.11, + 14738.12, 14649.66, 14523.7, + 14363.82, 14173.24, 13954.91, + 13711.48, 13445.4, 13158.9, + 12854.07, 12532.8, 12196.85, + 11847.88, 11487.39, 11116.82, + 10737.48, 10350.62, 9957.395, + 9558.875, 9156.069, 8749.922, + 8341.315, 7931.065, 7519.942, + 7108.648, 6698.281, 6290.007, + 5884.984, 5484.372, 5089.319, + 4700.96, 4320.421, 3948.807, + 3587.201, 3236.666, 2898.237, + 2572.912, 2261.667, 1965.424, + 1685.079, 1421.479, 1175.419, + 947.6516, 738.8688, 549.713, + 380.7626, 232.5417, 105.481, + -0.0008381903, 0]) + +bk_ref = np.array([ + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0.001065947, 0.004128662, + 0.009006631, 0.01554263, 0.02359921, + 0.03305481, 0.0438012, 0.05574095, + 0.06878554, 0.08285347, 0.09786981, + 0.1137643, 0.130471, 0.1479275, + 0.1660746, 0.1848558, 0.2042166, + 0.2241053, 0.2444716, 0.2652672, + 0.286445, 0.3079604, 0.3297701, + 0.351832, 0.3741062, 0.3965532, + 0.4191364, 0.4418194, 0.4645682, + 0.48735, 0.5101338, 0.5328897, + 0.5555894, 0.5782067, 0.6007158, + 0.6230936, 0.6452944, 0.6672683, + 0.6889648, 0.7103333, 0.7313231, + 0.7518838, 0.7719651, 0.7915173, + 0.8104913, 0.828839, 0.846513, + 0.8634676, 0.8796583, 0.8950421, + 0.9095779, 0.9232264, 0.9359506, + 0.9477157, 0.9584892, 0.9682413, + 0.9769447, 0.9845753, 0.9911126, + 0.9965372, 1]) + + +def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): + + """ write eta files for testing """ + + if os.path.isfile(eta_file) : cleanup(eta_file) + os.mkdir(input_dir) + with open(eta_file,'w') as myfile: + for i in range(80): myfile.write('{0} {1}\n'.format(ak_in[i],bk_in[i])) + + +def cleanup(eta_file='./input/eta79.txt') : + + """ remove input directory """ + + os.remove(eta_file) + os.rmdir(input_dir) + + +#@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nofile() : + + # file does not exist + km = 79 + try : + pressure_data = set_hybrid_pressure_coefficients( km ) + except : + print("expected failure so success!") + + +def test_set_hybrid_pressure_coefficients_correct(km=79) : + + ak = ak_ref[:] + bk = bk_ref[:] + + ak_answer=ak_ref[:] + bk_answer=bk_ref[:] + ks_answer = 18 + ptop_answer = 300.0 + + write_files(ak_in=ak, bk_in=bk, eta_file='./input/eta79.txt') + pressure_data = set_hybrid_pressure_coefficients( km ) + + if( not np.array_equal(ak_answer,pressure_data.ak) ) : + raise ValueError("Unexpected values in ak array") + if( not np.array_equal(bk_answer,pressure_data.bk) ) : + raise ValueError("Unexpected values in bk array") + if( ks_answer != pressure_data.ks ) : + raise ValueError("Unexpected ks value") + if( ptop_answer != pressure_data.ptop) : + raise ValueError("Unexpected ptopt value") + + cleanup('./input/eta79.txt') + + +#@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : + + ak = ak_ref[:] + bk = bk_ref[:] + + ak[10]=142. #random number + bk[10]=142. #random number + + write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") + try : + pressure_data = set_hybrid_pressure_coefficients( km ) + except : + print("expected failure so success!") + +test_set_hybrid_pressure_coefficients_nofile() +test_set_hybrid_pressure_coefficients_correct( km=79 ) +test_set_hybrid_pressure_coefficients_nonincreasing( km=79 ) diff --git a/tests/main/grid/test_eta.py~ b/tests/main/grid/test_eta.py~ new file mode 100755 index 00000000..9aa604ba --- /dev/null +++ b/tests/main/grid/test_eta.py~ @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 + +import os +import numpy as np +from pace.util.grid import set_hybrid_pressure_coefficients + +input_dir='./input/' + +ak_ref = np.array( + [ + 300, 646.7159, 1045.222, + 1469.188, 1897.829, 2325.385, + 2754.396, 3191.294, 3648.332, + 4135.675, 4668.282, 5247.94, + 5876.271, 6554.716, 7284.521, + 8066.738, 8902.188, 9791.482, + 10734.99, 11626.25, 12372.12, + 12990.41, 13496.29, 13902.77, + 14220.98, 14460.58, 14629.93, + 14736.33, 14786.17, 14785.11, + 14738.12, 14649.66, 14523.7, + 14363.82, 14173.24, 13954.91, + 13711.48, 13445.4, 13158.9, + 12854.07, 12532.8, 12196.85, + 11847.88, 11487.39, 11116.82, + 10737.48, 10350.62, 9957.395, + 9558.875, 9156.069, 8749.922, + 8341.315, 7931.065, 7519.942, + 7108.648, 6698.281, 6290.007, + 5884.984, 5484.372, 5089.319, + 4700.96, 4320.421, 3948.807, + 3587.201, 3236.666, 2898.237, + 2572.912, 2261.667, 1965.424, + 1685.079, 1421.479, 1175.419, + 947.6516, 738.8688, 549.713, + 380.7626, 232.5417, 105.481, + -0.0008381903, 0]) + +bk_ref = np.array([ + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0.001065947, 0.004128662, + 0.009006631, 0.01554263, 0.02359921, + 0.03305481, 0.0438012, 0.05574095, + 0.06878554, 0.08285347, 0.09786981, + 0.1137643, 0.130471, 0.1479275, + 0.1660746, 0.1848558, 0.2042166, + 0.2241053, 0.2444716, 0.2652672, + 0.286445, 0.3079604, 0.3297701, + 0.351832, 0.3741062, 0.3965532, + 0.4191364, 0.4418194, 0.4645682, + 0.48735, 0.5101338, 0.5328897, + 0.5555894, 0.5782067, 0.6007158, + 0.6230936, 0.6452944, 0.6672683, + 0.6889648, 0.7103333, 0.7313231, + 0.7518838, 0.7719651, 0.7915173, + 0.8104913, 0.828839, 0.846513, + 0.8634676, 0.8796583, 0.8950421, + 0.9095779, 0.9232264, 0.9359506, + 0.9477157, 0.9584892, 0.9682413, + 0.9769447, 0.9845753, 0.9911126, + 0.9965372, 1]) + + +def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): + + """ write eta files for testing """ + + if os.path.isfile(eta_file) : cleanup(eta_file) + os.mkdir(input_dir) + with open(eta_file,'w') as myfile: + for i in range(80): myfile.write('{0} {1}\n'.format(ak_in[i],bk_in[i])) + + +def cleanup(eta_file='./input/eta79.txt') : + + """ remove input directory """ + + os.remove(eta_file) + os.rmdir(input_dir) + + +#@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nofile() : + + # file does not exist + km = 79 + pressure_data = set_hybrid_pressure_coefficients( km ) + + +def test_set_hybrid_pressure_coefficients_correct(km=79) : + + ak = ak_ref[:] + bk = bk_ref[:] + + ak_answer=ak_ref[:] + bk_answer=bk_ref[:] + ks_answer = 18 + ptop_answer = 300.0 + + write_files(ak_in=ak, bk_in=bk, eta_file='./input/eta79.txt') + pressure_data = set_hybrid_pressure_coefficients( km ) + + if( not np.array_equal(ak_answer,pressure_data.ak) ) : + raise ValueError("Unexpected values in ak array") + if( not np.array_equal(bk_answer,pressure_data.bk) ) : + raise ValueError("Unexpected values in bk array") + if( ks_answer != pressure_data.ks ) : + raise ValueError("Unexpected ks value") + if( ptop_answer != pressure_data.ptop) : + raise ValueError("Unexpected ptopt value") + + cleanup('./input/eta79.txt') + + +#@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : + + ak = ak_ref[:] + bk = bk_ref[:] + + ak[10]=142. #random number + bk[10]=142. #random number + + write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") + try : + pressure_data = set_hybrid_pressure_coefficients( km ) + except : + print("expected failure. success") + + + +#test_set_hybrid_pressure_coefficients_nofile() +test_set_hybrid_pressure_coefficients_correct( km=79 ) +test_set_hybrid_pressure_coefficients_nonincreasing( km=79 ) + + + + +#add tests for more cases +#add more checks in set_hybrid_pressure_coefficients diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 1a8a7db7..79498f10 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -1,7 +1,7 @@ from dataclasses import dataclass import numpy as np - +import os @dataclass class HybridPressureCoefficients: @@ -36,13 +36,22 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: a HybridPressureCoefficients dataclass """ - #set filename, ex, eta79.txt; read file into ak, bk arrays - etafile = 'eta ' + str(km) + 'txt' - ak, bk = np.loadtxt(etafile, dtype=np.float(64), unpack=True) + # set path where the eta file lives + GRID_DIR=os.path.join( os.path.abspath('./'), "input/") + + # set filename, e.g, eta79.txt for km=79 + eta_file = GRID_DIR + 'eta' + str(km) + '.txt' + if( not os.path.isfile(eta_file) ) : raise IOError("file "+eta_file+" does not exist") + + # read file into ak, bk arrays + ak, bk = np.loadtxt(eta_file, unpack=True) + + # check size of ak and bk array is km+1 + if ak.size-1 != km : raise ValueError("size of ak array is not equal to km="+str(km)) + if bk.size-1 != km : raise ValueError("size of bk array is not equal to km="+str(km)) - # check size of ak and bk array is km - if ak.size != km : raise ValueError("size of ak array is not equal to "+str(km)) - if bk.size != km : raise ValueError("size of bk array is not equal to "+str(km)) + # check bk is monotonically increasing + if( not np.array_equal(bk, bk.sort()) ) : raise ValueError(" bk array is not monotonically increasing") if 0.0 in bk: ks = 0 if km == 91 else np.where(bk == 0)[0][-1] From d93a45d418211ff59a3cf3e7ef4a3bc7641a99f3 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Thu, 19 Oct 2023 14:27:36 -0400 Subject: [PATCH 03/69] add xfail --- tests/main/grid/test_eta.py | 38 +++++---- tests/main/grid/test_eta.py~ | 145 ----------------------------------- 2 files changed, 18 insertions(+), 165 deletions(-) delete mode 100755 tests/main/grid/test_eta.py~ diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index f2ae0261..82034dfb 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os +import pytest import numpy as np from pace.util.grid import set_hybrid_pressure_coefficients @@ -68,7 +69,7 @@ def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): - """ write eta files for testing """ + """ Write eta files for testing """ if os.path.isfile(eta_file) : cleanup(eta_file) os.mkdir(input_dir) @@ -78,25 +79,25 @@ def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): def cleanup(eta_file='./input/eta79.txt') : - """ remove input directory """ + """ Remove input directory """ - os.remove(eta_file) - os.rmdir(input_dir) + if( os.path.isfile(eta_file) ) : os.remove(eta_file) + if( os.path.isfile(input_dir) ) : os.rmdir(input_dir) -#@pytest.mark.xfail +@pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile() : - # file does not exist + """ File does not exist. Test should fail """ + km = 79 - try : - pressure_data = set_hybrid_pressure_coefficients( km ) - except : - print("expected failure so success!") + pressure_data = set_hybrid_pressure_coefficients( km ) def test_set_hybrid_pressure_coefficients_correct(km=79) : + """ Good values of ak, bk. Test should pass """ + ak = ak_ref[:] bk = bk_ref[:] @@ -120,21 +121,18 @@ def test_set_hybrid_pressure_coefficients_correct(km=79) : cleanup('./input/eta79.txt') -#@pytest.mark.xfail +@pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : + """ + Array bk is not monotonically increasing. + Test is expected to fail + """ + ak = ak_ref[:] bk = bk_ref[:] - ak[10]=142. #random number bk[10]=142. #random number write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") - try : - pressure_data = set_hybrid_pressure_coefficients( km ) - except : - print("expected failure so success!") - -test_set_hybrid_pressure_coefficients_nofile() -test_set_hybrid_pressure_coefficients_correct( km=79 ) -test_set_hybrid_pressure_coefficients_nonincreasing( km=79 ) + pressure_data = set_hybrid_pressure_coefficients( km ) diff --git a/tests/main/grid/test_eta.py~ b/tests/main/grid/test_eta.py~ deleted file mode 100755 index 9aa604ba..00000000 --- a/tests/main/grid/test_eta.py~ +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env python3 - -import os -import numpy as np -from pace.util.grid import set_hybrid_pressure_coefficients - -input_dir='./input/' - -ak_ref = np.array( - [ - 300, 646.7159, 1045.222, - 1469.188, 1897.829, 2325.385, - 2754.396, 3191.294, 3648.332, - 4135.675, 4668.282, 5247.94, - 5876.271, 6554.716, 7284.521, - 8066.738, 8902.188, 9791.482, - 10734.99, 11626.25, 12372.12, - 12990.41, 13496.29, 13902.77, - 14220.98, 14460.58, 14629.93, - 14736.33, 14786.17, 14785.11, - 14738.12, 14649.66, 14523.7, - 14363.82, 14173.24, 13954.91, - 13711.48, 13445.4, 13158.9, - 12854.07, 12532.8, 12196.85, - 11847.88, 11487.39, 11116.82, - 10737.48, 10350.62, 9957.395, - 9558.875, 9156.069, 8749.922, - 8341.315, 7931.065, 7519.942, - 7108.648, 6698.281, 6290.007, - 5884.984, 5484.372, 5089.319, - 4700.96, 4320.421, 3948.807, - 3587.201, 3236.666, 2898.237, - 2572.912, 2261.667, 1965.424, - 1685.079, 1421.479, 1175.419, - 947.6516, 738.8688, 549.713, - 380.7626, 232.5417, 105.481, - -0.0008381903, 0]) - -bk_ref = np.array([ - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0.001065947, 0.004128662, - 0.009006631, 0.01554263, 0.02359921, - 0.03305481, 0.0438012, 0.05574095, - 0.06878554, 0.08285347, 0.09786981, - 0.1137643, 0.130471, 0.1479275, - 0.1660746, 0.1848558, 0.2042166, - 0.2241053, 0.2444716, 0.2652672, - 0.286445, 0.3079604, 0.3297701, - 0.351832, 0.3741062, 0.3965532, - 0.4191364, 0.4418194, 0.4645682, - 0.48735, 0.5101338, 0.5328897, - 0.5555894, 0.5782067, 0.6007158, - 0.6230936, 0.6452944, 0.6672683, - 0.6889648, 0.7103333, 0.7313231, - 0.7518838, 0.7719651, 0.7915173, - 0.8104913, 0.828839, 0.846513, - 0.8634676, 0.8796583, 0.8950421, - 0.9095779, 0.9232264, 0.9359506, - 0.9477157, 0.9584892, 0.9682413, - 0.9769447, 0.9845753, 0.9911126, - 0.9965372, 1]) - - -def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): - - """ write eta files for testing """ - - if os.path.isfile(eta_file) : cleanup(eta_file) - os.mkdir(input_dir) - with open(eta_file,'w') as myfile: - for i in range(80): myfile.write('{0} {1}\n'.format(ak_in[i],bk_in[i])) - - -def cleanup(eta_file='./input/eta79.txt') : - - """ remove input directory """ - - os.remove(eta_file) - os.rmdir(input_dir) - - -#@pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile() : - - # file does not exist - km = 79 - pressure_data = set_hybrid_pressure_coefficients( km ) - - -def test_set_hybrid_pressure_coefficients_correct(km=79) : - - ak = ak_ref[:] - bk = bk_ref[:] - - ak_answer=ak_ref[:] - bk_answer=bk_ref[:] - ks_answer = 18 - ptop_answer = 300.0 - - write_files(ak_in=ak, bk_in=bk, eta_file='./input/eta79.txt') - pressure_data = set_hybrid_pressure_coefficients( km ) - - if( not np.array_equal(ak_answer,pressure_data.ak) ) : - raise ValueError("Unexpected values in ak array") - if( not np.array_equal(bk_answer,pressure_data.bk) ) : - raise ValueError("Unexpected values in bk array") - if( ks_answer != pressure_data.ks ) : - raise ValueError("Unexpected ks value") - if( ptop_answer != pressure_data.ptop) : - raise ValueError("Unexpected ptopt value") - - cleanup('./input/eta79.txt') - - -#@pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : - - ak = ak_ref[:] - bk = bk_ref[:] - - ak[10]=142. #random number - bk[10]=142. #random number - - write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") - try : - pressure_data = set_hybrid_pressure_coefficients( km ) - except : - print("expected failure. success") - - - -#test_set_hybrid_pressure_coefficients_nofile() -test_set_hybrid_pressure_coefficients_correct( km=79 ) -test_set_hybrid_pressure_coefficients_nonincreasing( km=79 ) - - - - -#add tests for more cases -#add more checks in set_hybrid_pressure_coefficients From a6cc76e20f8e60f2461d1827e6d958f3307e30b5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Thu, 19 Oct 2023 14:32:59 -0400 Subject: [PATCH 04/69] remove input dir --- tests/main/grid/input/eta79.txt | 80 --------------------------------- tests/main/grid/test_eta.py | 4 ++ 2 files changed, 4 insertions(+), 80 deletions(-) delete mode 100644 tests/main/grid/input/eta79.txt diff --git a/tests/main/grid/input/eta79.txt b/tests/main/grid/input/eta79.txt deleted file mode 100644 index 7b7afbec..00000000 --- a/tests/main/grid/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300.0 0.0 -646.7159 0.0 -1045.222 0.0 -1469.188 0.0 -1897.829 0.0 -2325.385 0.0 -2754.396 0.0 -3191.294 0.0 -3648.332 0.0 -4135.675 0.0 -142.0 142.0 -5247.94 0.0 -5876.271 0.0 -6554.716 0.0 -7284.521 0.0 -8066.738 0.0 -8902.188 0.0 -9791.482 0.0 -10734.99 0.0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0.0 1.0 diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 82034dfb..1527ef6a 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -136,3 +136,7 @@ def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") pressure_data = set_hybrid_pressure_coefficients( km ) + + +def test_cleanup(): + cleanup("./input/eta79.txt") From 59c8308ee4098f29e61fc6e098dd28ed12e11b40 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Thu, 26 Oct 2023 15:06:53 -0400 Subject: [PATCH 05/69] more fixes --- .../pace/fv3core/initialization/baroclinic.py | 4 +- .../baroclinic_jablonowski_williamson.py | 21 +---- tests/main/grid/test_eta.py | 88 +++++++++---------- util/pace/util/grid/__init__.py | 6 ++ util/pace/util/grid/eta.py | 11 ++- 5 files changed, 58 insertions(+), 72 deletions(-) diff --git a/fv3core/pace/fv3core/initialization/baroclinic.py b/fv3core/pace/fv3core/initialization/baroclinic.py index 7110732e..ba4e994d 100644 --- a/fv3core/pace/fv3core/initialization/baroclinic.py +++ b/fv3core/pace/fv3core/initialization/baroclinic.py @@ -10,7 +10,7 @@ import pace.util.constants as constants from pace.dsl.typing import Float from pace.fv3core.initialization.dycore_state import DycoreState -from pace.util.grid import GridData, lon_lat_midpoint +from pace.util.grid import GridData, lon_lat_midpoint, compute_eta nhalo = fv3util.N_HALO_DEFAULT @@ -240,7 +240,7 @@ def setup_pressure_fields( pe[:] = initialize_edge_pressure(delp, ptop) peln[:] = initialize_log_pressure_interfaces(pe, ptop) pk[:], pkz[:] = initialize_kappa_pressures(pe, peln, ptop) - eta[:-1], eta_v[:-1] = jablo_init.compute_eta(ak, bk) + eta[:-1], eta_v[:-1] = compute_eta(ak, bk) def baroclinic_initialization( diff --git a/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py b/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py index d27fb8a2..bcf7bd91 100644 --- a/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py +++ b/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py @@ -3,7 +3,7 @@ import numpy as np import pace.util.constants as constants -from pace.util.grid import great_circle_distance_lon_lat +from pace.util.grid import great_circle_distance_lon_lat, vertical_coordinate, compute_eta """ @@ -19,7 +19,6 @@ pcen = [math.pi / 9.0, 2.0 * math.pi / 9.0] # From Table VI of DCMIP2016 u1 = 1.0 pt0 = 0.0 -eta_0 = 0.252 eta_surface = 1.0 eta_tropopause = 0.2 t_0 = 288.0 @@ -30,24 +29,6 @@ R = constants.RADIUS / 10.0 # Perturbation radiusfor test case 13 -def vertical_coordinate(eta_value): - """ - Equation (1) JRMS2006 - computes eta_v, the auxiliary variable vertical coordinate - """ - return (eta_value - eta_0) * math.pi * 0.5 - - -def compute_eta(ak, bk): - """ - Equation (1) JRMS2006 - eta is the vertical coordinate and eta_v is an auxiliary vertical coordinate - """ - eta = 0.5 * ((ak[:-1] + ak[1:]) / surface_pressure + bk[:-1] + bk[1:]) - eta_v = vertical_coordinate(eta) - return eta, eta_v - - def zonal_wind(eta_v, lat): """ Equation (2) JRMS2006 diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 1527ef6a..268ce3d5 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -3,12 +3,15 @@ import os import pytest import numpy as np -from pace.util.grid import set_hybrid_pressure_coefficients +from main.test_util.generate_eta_file import write_eta_file +from main.test_util.global_utils import remove_file, remove_input_dir +from pace.util.grid.eta import set_hybrid_pressure_coefficients +km = 79 input_dir='./input/' +eta_file = input_dir + 'eta' + str(km) + '.txt' -ak_ref = np.array( - [ +ak_79 = [ 300, 646.7159, 1045.222, 1469.188, 1897.829, 2325.385, 2754.396, 3191.294, 3648.332, @@ -35,9 +38,9 @@ 1685.079, 1421.479, 1175.419, 947.6516, 738.8688, 549.713, 380.7626, 232.5417, 105.481, - -0.0008381903, 0]) + -0.0008381903, 0] -bk_ref = np.array([ +bk_79 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -64,79 +67,68 @@ 0.9095779, 0.9232264, 0.9359506, 0.9477157, 0.9584892, 0.9682413, 0.9769447, 0.9845753, 0.9911126, - 0.9965372, 1]) - - -def write_files(ak_in=ak_ref, bk_in=bk_ref, eta_file='./input/eta79.txt'): - - """ Write eta files for testing """ - - if os.path.isfile(eta_file) : cleanup(eta_file) - os.mkdir(input_dir) - with open(eta_file,'w') as myfile: - for i in range(80): myfile.write('{0} {1}\n'.format(ak_in[i],bk_in[i])) - - -def cleanup(eta_file='./input/eta79.txt') : - - """ Remove input directory """ - - if( os.path.isfile(eta_file) ) : os.remove(eta_file) - if( os.path.isfile(input_dir) ) : os.rmdir(input_dir) + 0.9965372, 1] @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile() : +def test_set_hybrid_pressure_coefficients_nofile( ) : """ File does not exist. Test should fail """ - km = 79 + remove_file( eta_file ) pressure_data = set_hybrid_pressure_coefficients( km ) + - -def test_set_hybrid_pressure_coefficients_correct(km=79) : +def test_set_hybrid_pressure_coefficients_correct( ) : """ Good values of ak, bk. Test should pass """ - ak = ak_ref[:] - bk = bk_ref[:] + ks = 18 + ptop = 300.0 - ak_answer=ak_ref[:] - bk_answer=bk_ref[:] - ks_answer = 18 - ptop_answer = 300.0 + remove_file( eta_file ) + write_eta_file( eta_file, ak_79, bk_79 ) - write_files(ak_in=ak, bk_in=bk, eta_file='./input/eta79.txt') pressure_data = set_hybrid_pressure_coefficients( km ) - - if( not np.array_equal(ak_answer,pressure_data.ak) ) : + + if( not np.array_equal(ak_79,pressure_data.ak) ) : raise ValueError("Unexpected values in ak array") - if( not np.array_equal(bk_answer,pressure_data.bk) ) : + + if( not np.array_equal(bk_79,pressure_data.bk) ) : raise ValueError("Unexpected values in bk array") - if( ks_answer != pressure_data.ks ) : + + if( ks != pressure_data.ks ) : raise ValueError("Unexpected ks value") - if( ptop_answer != pressure_data.ptop) : + + if( ptop != pressure_data.ptop) : raise ValueError("Unexpected ptopt value") - cleanup('./input/eta79.txt') + remove_file( eta_file ) @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nonincreasing(km=79) : +def test_set_hybrid_pressure_coefficients_nonincreasing( ) : """ Array bk is not monotonically increasing. Test is expected to fail """ - ak = ak_ref[:] - bk = bk_ref[:] + ak_cp = a_79k[:] + bk_cp = bk_79[:] + + bk_cp[10]=0.1 #random number + ak_cp[13]=1.4 #random number - bk[10]=142. #random number + remove_file( eta_file ) + write_eta_file( eta_file, ak_cp, bk_cp) - write_files(ak_in=ak, bk_in=bk, eta_file="./input/eta79.txt") pressure_data = set_hybrid_pressure_coefficients( km ) + +def test_cleanup( ): + + """ Remove all input files produced during testing """ + + remove_file(eta_file) -def test_cleanup(): - cleanup("./input/eta79.txt") diff --git a/util/pace/util/grid/__init__.py b/util/pace/util/grid/__init__.py index 5e488743..db25ef97 100644 --- a/util/pace/util/grid/__init__.py +++ b/util/pace/util/grid/__init__.py @@ -21,3 +21,9 @@ VerticalGridData, ) from .stretch_transformation import direct_transform + +from .utils import ( + vertical_coordinate, + compute_eta, +) + diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 79498f10..13aaed9f 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -1,5 +1,6 @@ from dataclasses import dataclass +from .utils import compute_eta import numpy as np import os @@ -50,9 +51,14 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: if ak.size-1 != km : raise ValueError("size of ak array is not equal to km="+str(km)) if bk.size-1 != km : raise ValueError("size of bk array is not equal to km="+str(km)) - # check bk is monotonically increasing - if( not np.array_equal(bk, bk.sort()) ) : raise ValueError(" bk array is not monotonically increasing") + # check that the eta values computed from ak and bk are monotonically increasing + eta, etav = compute_eta(ak, bk) + ( eta_sorted, etav_sorted ) = ( np.sort(eta), np.sort(etav) ) + for i in range( eta.size ) : + if eta_sorted[i] != eta[i] : raise ValueError("ETA values are not monotonically increasing") + if etav_sorted[i] != etav[i] : raise ValueError("ETAV values are not monotonically increasing") + if 0.0 in bk: ks = 0 if km == 91 else np.where(bk == 0)[0][-1] ptop = ak[0] @@ -60,4 +66,5 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: raise ValueError("bk must contain at least one 0.") pressure_data = HybridPressureCoefficients(ks, ptop, ak, bk) + return pressure_data From aebcdbab13a489c9d739499286a6bcfb8989fe7d Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 30 Oct 2023 14:25:17 -0400 Subject: [PATCH 06/69] further changes to unit tests --- tests/main/driver/input/eta79.txt | 80 ++++++++++++++++++++++++++ tests/main/driver/input/eta91.txt | 92 ++++++++++++++++++++++++++++++ tests/main/fv3core/input/eta79.txt | 80 ++++++++++++++++++++++++++ tests/main/fv3core/input/eta91.txt | 92 ++++++++++++++++++++++++++++++ tests/main/grid/input/eta79.txt | 80 ++++++++++++++++++++++++++ tests/main/grid/input/eta91.txt | 92 ++++++++++++++++++++++++++++++ tests/main/grid/test_eta.py | 84 ++------------------------- tests/main/input/eta79.txt | 80 ++++++++++++++++++++++++++ tests/main/input/eta91.txt | 92 ++++++++++++++++++++++++++++++ tests/main/physics/input/eta79.txt | 80 ++++++++++++++++++++++++++ tests/main/physics/input/eta91.txt | 92 ++++++++++++++++++++++++++++++ 11 files changed, 865 insertions(+), 79 deletions(-) create mode 100644 tests/main/driver/input/eta79.txt create mode 100644 tests/main/driver/input/eta91.txt create mode 100644 tests/main/fv3core/input/eta79.txt create mode 100644 tests/main/fv3core/input/eta91.txt create mode 100644 tests/main/grid/input/eta79.txt create mode 100644 tests/main/grid/input/eta91.txt create mode 100644 tests/main/input/eta79.txt create mode 100644 tests/main/input/eta91.txt create mode 100644 tests/main/physics/input/eta79.txt create mode 100644 tests/main/physics/input/eta91.txt diff --git a/tests/main/driver/input/eta79.txt b/tests/main/driver/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/tests/main/driver/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/driver/input/eta91.txt b/tests/main/driver/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/tests/main/driver/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 diff --git a/tests/main/fv3core/input/eta79.txt b/tests/main/fv3core/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/tests/main/fv3core/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/fv3core/input/eta91.txt b/tests/main/fv3core/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/tests/main/fv3core/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 diff --git a/tests/main/grid/input/eta79.txt b/tests/main/grid/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/tests/main/grid/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/grid/input/eta91.txt b/tests/main/grid/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/tests/main/grid/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 268ce3d5..715b0b11 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -8,75 +8,15 @@ from pace.util.grid.eta import set_hybrid_pressure_coefficients km = 79 -input_dir='./input/' -eta_file = input_dir + 'eta' + str(km) + '.txt' - -ak_79 = [ - 300, 646.7159, 1045.222, - 1469.188, 1897.829, 2325.385, - 2754.396, 3191.294, 3648.332, - 4135.675, 4668.282, 5247.94, - 5876.271, 6554.716, 7284.521, - 8066.738, 8902.188, 9791.482, - 10734.99, 11626.25, 12372.12, - 12990.41, 13496.29, 13902.77, - 14220.98, 14460.58, 14629.93, - 14736.33, 14786.17, 14785.11, - 14738.12, 14649.66, 14523.7, - 14363.82, 14173.24, 13954.91, - 13711.48, 13445.4, 13158.9, - 12854.07, 12532.8, 12196.85, - 11847.88, 11487.39, 11116.82, - 10737.48, 10350.62, 9957.395, - 9558.875, 9156.069, 8749.922, - 8341.315, 7931.065, 7519.942, - 7108.648, 6698.281, 6290.007, - 5884.984, 5484.372, 5089.319, - 4700.96, 4320.421, 3948.807, - 3587.201, 3236.666, 2898.237, - 2572.912, 2261.667, 1965.424, - 1685.079, 1421.479, 1175.419, - 947.6516, 738.8688, 549.713, - 380.7626, 232.5417, 105.481, - -0.0008381903, 0] - -bk_79 = [ - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0.001065947, 0.004128662, - 0.009006631, 0.01554263, 0.02359921, - 0.03305481, 0.0438012, 0.05574095, - 0.06878554, 0.08285347, 0.09786981, - 0.1137643, 0.130471, 0.1479275, - 0.1660746, 0.1848558, 0.2042166, - 0.2241053, 0.2444716, 0.2652672, - 0.286445, 0.3079604, 0.3297701, - 0.351832, 0.3741062, 0.3965532, - 0.4191364, 0.4418194, 0.4645682, - 0.48735, 0.5101338, 0.5328897, - 0.5555894, 0.5782067, 0.6007158, - 0.6230936, 0.6452944, 0.6672683, - 0.6889648, 0.7103333, 0.7313231, - 0.7518838, 0.7719651, 0.7915173, - 0.8104913, 0.828839, 0.846513, - 0.8634676, 0.8796583, 0.8950421, - 0.9095779, 0.9232264, 0.9359506, - 0.9477157, 0.9584892, 0.9682413, - 0.9769447, 0.9845753, 0.9911126, - 0.9965372, 1] - +eta_file='./input/eta79.txt' +ak_79, bk_79 = np.loadtxt(eta_file, unpack=True) @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile( ) : """ File does not exist. Test should fail """ - remove_file( eta_file ) - pressure_data = set_hybrid_pressure_coefficients( km ) + pressure_data = set_hybrid_pressure_coefficients( km=90 ) def test_set_hybrid_pressure_coefficients_correct( ) : @@ -86,9 +26,6 @@ def test_set_hybrid_pressure_coefficients_correct( ) : ks = 18 ptop = 300.0 - remove_file( eta_file ) - write_eta_file( eta_file, ak_79, bk_79 ) - pressure_data = set_hybrid_pressure_coefficients( km ) if( not np.array_equal(ak_79,pressure_data.ak) ) : @@ -103,9 +40,7 @@ def test_set_hybrid_pressure_coefficients_correct( ) : if( ptop != pressure_data.ptop) : raise ValueError("Unexpected ptopt value") - remove_file( eta_file ) - - + @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nonincreasing( ) : @@ -114,21 +49,12 @@ def test_set_hybrid_pressure_coefficients_nonincreasing( ) : Test is expected to fail """ - ak_cp = a_79k[:] + ak_cp = ak_79k[:] bk_cp = bk_79[:] bk_cp[10]=0.1 #random number ak_cp[13]=1.4 #random number - remove_file( eta_file ) - write_eta_file( eta_file, ak_cp, bk_cp) - pressure_data = set_hybrid_pressure_coefficients( km ) -def test_cleanup( ): - - """ Remove all input files produced during testing """ - - remove_file(eta_file) - diff --git a/tests/main/input/eta79.txt b/tests/main/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/tests/main/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/input/eta91.txt b/tests/main/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/tests/main/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 diff --git a/tests/main/physics/input/eta79.txt b/tests/main/physics/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/tests/main/physics/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/physics/input/eta91.txt b/tests/main/physics/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/tests/main/physics/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 From 327bd102f58a210dc0f4a4925beacd3be71d0826 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 09:08:01 -0500 Subject: [PATCH 07/69] finish up test --- tests/main/grid/test_eta.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 715b0b11..3555670d 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -3,8 +3,6 @@ import os import pytest import numpy as np -from main.test_util.generate_eta_file import write_eta_file -from main.test_util.global_utils import remove_file, remove_input_dir from pace.util.grid.eta import set_hybrid_pressure_coefficients km = 79 From 95c3bfdd4bb3682bc464a03bb23932dfe58914b4 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 12:00:02 -0500 Subject: [PATCH 08/69] add history --- util/HISTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/HISTORY.md b/util/HISTORY.md index 0b0a42b6..03cf7cae 100644 --- a/util/HISTORY.md +++ b/util/HISTORY.md @@ -8,6 +8,8 @@ latest - Added `dx_const`, `dy_const`, and `deglat` to grid generation code for doubly-periodic grids - Added f32 support to halo exchange data transformation - Use one single logger, from logging.py +- Removed hard-coded values of `ak` and `bk` arrays and added in the feature to read in `ak` and `bk` values + from an ASCII file to compute the `eta` and `eta_v` values. v0.10.0 ------- From b6227d519d1c24c3f9b9e3750a4d412e3ba847ed Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 12:55:23 -0500 Subject: [PATCH 09/69] commit uncommited files --- tests/main/grid/__init__.py | 1 + util/pace/util/grid/utils.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/main/grid/__init__.py create mode 100644 util/pace/util/grid/utils.py diff --git a/tests/main/grid/__init__.py b/tests/main/grid/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/main/grid/__init__.py @@ -0,0 +1 @@ + diff --git a/util/pace/util/grid/utils.py b/util/pace/util/grid/utils.py new file mode 100644 index 00000000..ad4837b4 --- /dev/null +++ b/util/pace/util/grid/utils.py @@ -0,0 +1,25 @@ +import math + +import numpy as np + +eta_0 = 0.252 +surface_pressure = 1.0e5 # units of (Pa), from Table VI of DCMIP2016 + +def vertical_coordinate(eta_value): + """ + Equation (1) JRMS2006 + computes eta_v, the auxiliary variable vertical coordinate + """ + return (eta_value - eta_0) * math.pi * 0.5 + + +def compute_eta(ak, bk): + """ + Equation (1) JRMS2006 + eta is the vertical coordinate and eta_v is an auxiliary vertical coordinate + """ + eta = 0.5 * ((ak[:-1] + ak[1:]) / surface_pressure + bk[:-1] + bk[1:]) + eta_v = vertical_coordinate(eta) + return eta, eta_v + + From b571feb826ae9035ec02b8fb240054c1d07ecb7a Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 13:12:12 -0500 Subject: [PATCH 10/69] lint --- .../pace/fv3core/initialization/baroclinic.py | 2 +- .../baroclinic_jablonowski_williamson.py | 2 +- tests/main/grid/__init__.py | 1 - tests/main/grid/test_eta.py | 42 +++++++++---------- util/pace/util/grid/__init__.py | 7 +--- util/pace/util/grid/eta.py | 33 +++++++++------ util/pace/util/grid/utils.py | 4 +- 7 files changed, 45 insertions(+), 46 deletions(-) diff --git a/fv3core/pace/fv3core/initialization/baroclinic.py b/fv3core/pace/fv3core/initialization/baroclinic.py index ba4e994d..3efe722d 100644 --- a/fv3core/pace/fv3core/initialization/baroclinic.py +++ b/fv3core/pace/fv3core/initialization/baroclinic.py @@ -10,7 +10,7 @@ import pace.util.constants as constants from pace.dsl.typing import Float from pace.fv3core.initialization.dycore_state import DycoreState -from pace.util.grid import GridData, lon_lat_midpoint, compute_eta +from pace.util.grid import GridData, compute_eta, lon_lat_midpoint nhalo = fv3util.N_HALO_DEFAULT diff --git a/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py b/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py index bcf7bd91..dd7dccc3 100644 --- a/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py +++ b/fv3core/pace/fv3core/initialization/baroclinic_jablonowski_williamson.py @@ -3,7 +3,7 @@ import numpy as np import pace.util.constants as constants -from pace.util.grid import great_circle_distance_lon_lat, vertical_coordinate, compute_eta +from pace.util.grid import great_circle_distance_lon_lat, vertical_coordinate """ diff --git a/tests/main/grid/__init__.py b/tests/main/grid/__init__.py index 8b137891..e69de29b 100644 --- a/tests/main/grid/__init__.py +++ b/tests/main/grid/__init__.py @@ -1 +0,0 @@ - diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 3555670d..2939218f 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -1,58 +1,58 @@ #!/usr/bin/env python3 -import os -import pytest import numpy as np +import pytest + from pace.util.grid.eta import set_hybrid_pressure_coefficients + km = 79 -eta_file='./input/eta79.txt' +eta_file = "./input/eta79.txt" ak_79, bk_79 = np.loadtxt(eta_file, unpack=True) + @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile( ) : +def test_set_hybrid_pressure_coefficients_nofile(): """ File does not exist. Test should fail """ - pressure_data = set_hybrid_pressure_coefficients( km=90 ) - + pressure_data = set_hybrid_pressure_coefficients(km=90) -def test_set_hybrid_pressure_coefficients_correct( ) : + +def test_set_hybrid_pressure_coefficients_correct(): """ Good values of ak, bk. Test should pass """ ks = 18 ptop = 300.0 - pressure_data = set_hybrid_pressure_coefficients( km ) - - if( not np.array_equal(ak_79,pressure_data.ak) ) : + pressure_data = set_hybrid_pressure_coefficients(km) + + if not np.array_equal(ak_79, pressure_data.ak): raise ValueError("Unexpected values in ak array") - if( not np.array_equal(bk_79,pressure_data.bk) ) : + if not np.array_equal(bk_79, pressure_data.bk): raise ValueError("Unexpected values in bk array") - if( ks != pressure_data.ks ) : + if ks != pressure_data.ks: raise ValueError("Unexpected ks value") - if( ptop != pressure_data.ptop) : + if ptop != pressure_data.ptop: raise ValueError("Unexpected ptopt value") - + @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nonincreasing( ) : +def test_set_hybrid_pressure_coefficients_nonincreasing(): """ Array bk is not monotonically increasing. Test is expected to fail """ - ak_cp = ak_79k[:] + ak_cp = ak_79[:] bk_cp = bk_79[:] - bk_cp[10]=0.1 #random number - ak_cp[13]=1.4 #random number - - pressure_data = set_hybrid_pressure_coefficients( km ) + bk_cp[10] = 0.1 # random number + ak_cp[13] = 1.4 # random number - + pressure_data = set_hybrid_pressure_coefficients(km) diff --git a/util/pace/util/grid/__init__.py b/util/pace/util/grid/__init__.py index db25ef97..2a755d0c 100644 --- a/util/pace/util/grid/__init__.py +++ b/util/pace/util/grid/__init__.py @@ -21,9 +21,4 @@ VerticalGridData, ) from .stretch_transformation import direct_transform - -from .utils import ( - vertical_coordinate, - compute_eta, -) - +from .utils import compute_eta, vertical_coordinate diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 13aaed9f..4589e943 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -1,8 +1,10 @@ +import os from dataclasses import dataclass -from .utils import compute_eta import numpy as np -import os + +from .utils import compute_eta + @dataclass class HybridPressureCoefficients: @@ -38,27 +40,32 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: """ # set path where the eta file lives - GRID_DIR=os.path.join( os.path.abspath('./'), "input/") + GRID_DIR = os.path.join(os.path.abspath("./"), "input/") # set filename, e.g, eta79.txt for km=79 - eta_file = GRID_DIR + 'eta' + str(km) + '.txt' - if( not os.path.isfile(eta_file) ) : raise IOError("file "+eta_file+" does not exist") + eta_file = GRID_DIR + "eta" + str(km) + ".txt" + if not os.path.isfile(eta_file): + raise IOError("file " + eta_file + " does not exist") # read file into ak, bk arrays ak, bk = np.loadtxt(eta_file, unpack=True) # check size of ak and bk array is km+1 - if ak.size-1 != km : raise ValueError("size of ak array is not equal to km="+str(km)) - if bk.size-1 != km : raise ValueError("size of bk array is not equal to km="+str(km)) + if ak.size - 1 != km: + raise ValueError("size of ak array is not equal to km=" + str(km)) + if bk.size - 1 != km: + raise ValueError("size of bk array is not equal to km=" + str(km)) # check that the eta values computed from ak and bk are monotonically increasing eta, etav = compute_eta(ak, bk) - ( eta_sorted, etav_sorted ) = ( np.sort(eta), np.sort(etav) ) - for i in range( eta.size ) : - if eta_sorted[i] != eta[i] : raise ValueError("ETA values are not monotonically increasing") - if etav_sorted[i] != etav[i] : raise ValueError("ETAV values are not monotonically increasing") - + (eta_sorted, etav_sorted) = (np.sort(eta), np.sort(etav)) + for i in range(eta.size): + if eta_sorted[i] != eta[i]: + raise ValueError("ETA values are not monotonically increasing") + if etav_sorted[i] != etav[i]: + raise ValueError("ETAV values are not monotonically increasing") + if 0.0 in bk: ks = 0 if km == 91 else np.where(bk == 0)[0][-1] ptop = ak[0] @@ -66,5 +73,5 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: raise ValueError("bk must contain at least one 0.") pressure_data = HybridPressureCoefficients(ks, ptop, ak, bk) - + return pressure_data diff --git a/util/pace/util/grid/utils.py b/util/pace/util/grid/utils.py index ad4837b4..17a15568 100644 --- a/util/pace/util/grid/utils.py +++ b/util/pace/util/grid/utils.py @@ -1,10 +1,10 @@ import math -import numpy as np eta_0 = 0.252 surface_pressure = 1.0e5 # units of (Pa), from Table VI of DCMIP2016 + def vertical_coordinate(eta_value): """ Equation (1) JRMS2006 @@ -21,5 +21,3 @@ def compute_eta(ak, bk): eta = 0.5 * ((ak[:-1] + ak[1:]) / surface_pressure + bk[:-1] + bk[1:]) eta_v = vertical_coordinate(eta) return eta, eta_v - - From a2513d344c555edab429a7d3862c2be61e55196d Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 13:17:06 -0500 Subject: [PATCH 11/69] fix test comment --- tests/main/grid/test_eta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 2939218f..ed7b1016 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -14,7 +14,7 @@ @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile(): - """ File does not exist. Test should fail """ + """ File, eta90.txt, does not exist. Test should fail """ pressure_data = set_hybrid_pressure_coefficients(km=90) @@ -45,7 +45,7 @@ def test_set_hybrid_pressure_coefficients_correct(): def test_set_hybrid_pressure_coefficients_nonincreasing(): """ - Array bk is not monotonically increasing. + eta values are not monotically increasing Test is expected to fail """ From 406497ce05be9ee7ac1250d57b5370896db3c36a Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 6 Nov 2023 15:47:04 -0500 Subject: [PATCH 12/69] add input to top --- input/eta79.txt | 80 ++++++++++++++++++++++++++++++++++++++++++ input/eta91.txt | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 input/eta79.txt create mode 100644 input/eta91.txt diff --git a/input/eta79.txt b/input/eta79.txt new file mode 100644 index 00000000..7ccd6bdb --- /dev/null +++ b/input/eta79.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +7284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.0438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/input/eta91.txt b/input/eta91.txt new file mode 100644 index 00000000..5d6710ad --- /dev/null +++ b/input/eta91.txt @@ -0,0 +1,92 @@ + 1.00000000 0.00000000 + 1.75000000 0.00000000 + 2.75000000 0.00000000 + 4.09999990 0.00000000 + 5.98951054 0.00000000 + 8.62932968 0.00000000 + 12.2572632 0.00000000 + 17.1510906 0.00000000 + 23.6545467 0.00000000 + 32.1627693 0.00000000 + 43.1310921 0.00000000 + 57.1100426 0.00000000 + 74.6595764 0.00000000 + 96.4470978 0.00000000 + 123.169769 0.00000000 + 155.601318 0.00000000 + 194.594009 0.00000000 + 241.047531 0.00000000 + 295.873840 0.00000000 + 360.046967 0.00000000 + 434.604828 0.00000000 + 520.628723 0.00000000 + 619.154846 0.00000000 + 731.296021 0.00000000 + 858.240906 0.00000000 + 1001.06561 0.00000000 + 1160.92859 0.00000000 + 1339.03992 0.00000000 + 1536.50012 0.00000000 + 1754.48938 0.00000000 + 1994.17834 0.00000000 + 2256.67407 0.00000000 + 2543.17139 0.00000000 + 2854.76392 0.00000000 + 3192.58569 0.00000000 + 3557.75366 0.00000000 + 3951.35107 0.00000000 + 4374.28662 0.00000000 + 4827.11084 0.00000000 + 5310.22168 0.00000000 + 5823.87793 0.00000000 + 6369.04248 0.00000000 + 6948.75244 0.00000000 + 7566.91992 3.50123992e-06 + 8226.34277 2.81484008e-05 + 8931.20996 9.38666999e-05 + 9684.46191 2.28561999e-04 + 10482.2725 5.12343016e-04 + 11318.2793 1.04712998e-03 + 12184.0771 1.95625005e-03 + 13065.5674 3.42317997e-03 + 13953.2207 5.58632007e-03 + 14830.7285 8.65428988e-03 + 15687.2617 1.27844000e-02 + 16508.0645 1.81719996e-02 + 17281.0996 2.49934997e-02 + 17994.2988 3.34198996e-02 + 18636.3223 4.36249003e-02 + 19196.1797 5.57769015e-02 + 19664.0723 7.00351968e-02 + 20030.1914 8.65636021e-02 + 20285.3691 0.105520003 + 20421.5254 0.127051994 + 20430.0684 0.151319996 + 20302.8730 0.178477004 + 20032.3711 0.208675995 + 19611.0664 0.242069006 + 19031.3848 0.278813988 + 18286.6426 0.319043010 + 17377.7930 0.362558991 + 16322.4639 0.408596009 + 15144.4033 0.456384987 + 13872.5674 0.505111992 + 12540.4785 0.553902984 + 11183.4170 0.601903021 + 9835.32715 0.648333013 + 8526.30664 0.692534983 + 7282.24512 0.733981013 + 6123.26074 0.772292018 + 5063.50684 0.807236016 + 4111.24902 0.838724971 + 3270.00122 0.866774976 + 2539.22729 0.891497016 + 1915.30762 0.913065016 + 1392.44995 0.931702971 + 963.134766 0.947658002 + 620.599365 0.961175978 + 357.989502 0.972495019 + 169.421387 0.981844008 + 51.0314941 0.989410996 + 2.48413086 0.995342016 + 0.00000000 1.00000000 From 362eb55bf470f891d1036c5f7ff8d1dc99a59d6c Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 5 Dec 2023 13:35:17 -0500 Subject: [PATCH 13/69] read in data --- driver/pace/driver/grid.py | 5 +- tests/main/grid/input/eta91.txt | 92 ------------------------------- tests/main/grid/test_eta.py | 58 ------------------- util/pace/util/grid/eta.py | 11 ++-- util/pace/util/grid/generation.py | 81 +++++++++++++++------------ util/pace/util/grid/helper.py | 14 +++-- 6 files changed, 64 insertions(+), 197 deletions(-) delete mode 100644 tests/main/grid/input/eta91.txt delete mode 100755 tests/main/grid/test_eta.py diff --git a/driver/pace/driver/grid.py b/driver/pace/driver/grid.py index 1cf59d07..33a0b43e 100644 --- a/driver/pace/driver/grid.py +++ b/driver/pace/driver/grid.py @@ -99,6 +99,7 @@ class GeneratedGridConfig(GridInitializer): dx_const: Optional[float] = 1000.0 dy_const: Optional[float] = 1000.0 deglat: Optional[float] = 15.0 + eta_file: str = "None" def get_grid( self, @@ -124,7 +125,9 @@ def get_grid( self.restart_path, quantity_factory=quantity_factory ) else: - vertical_data = VerticalGridData.new_from_metric_terms(metric_terms) + vertical_data = VerticalGridData.new_from_metric_terms( + metric_terms, self.eta_file + ) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) angle_data = AngleGridData.new_from_metric_terms(metric_terms) grid_data = GridData( diff --git a/tests/main/grid/input/eta91.txt b/tests/main/grid/input/eta91.txt deleted file mode 100644 index 5d6710ad..00000000 --- a/tests/main/grid/input/eta91.txt +++ /dev/null @@ -1,92 +0,0 @@ - 1.00000000 0.00000000 - 1.75000000 0.00000000 - 2.75000000 0.00000000 - 4.09999990 0.00000000 - 5.98951054 0.00000000 - 8.62932968 0.00000000 - 12.2572632 0.00000000 - 17.1510906 0.00000000 - 23.6545467 0.00000000 - 32.1627693 0.00000000 - 43.1310921 0.00000000 - 57.1100426 0.00000000 - 74.6595764 0.00000000 - 96.4470978 0.00000000 - 123.169769 0.00000000 - 155.601318 0.00000000 - 194.594009 0.00000000 - 241.047531 0.00000000 - 295.873840 0.00000000 - 360.046967 0.00000000 - 434.604828 0.00000000 - 520.628723 0.00000000 - 619.154846 0.00000000 - 731.296021 0.00000000 - 858.240906 0.00000000 - 1001.06561 0.00000000 - 1160.92859 0.00000000 - 1339.03992 0.00000000 - 1536.50012 0.00000000 - 1754.48938 0.00000000 - 1994.17834 0.00000000 - 2256.67407 0.00000000 - 2543.17139 0.00000000 - 2854.76392 0.00000000 - 3192.58569 0.00000000 - 3557.75366 0.00000000 - 3951.35107 0.00000000 - 4374.28662 0.00000000 - 4827.11084 0.00000000 - 5310.22168 0.00000000 - 5823.87793 0.00000000 - 6369.04248 0.00000000 - 6948.75244 0.00000000 - 7566.91992 3.50123992e-06 - 8226.34277 2.81484008e-05 - 8931.20996 9.38666999e-05 - 9684.46191 2.28561999e-04 - 10482.2725 5.12343016e-04 - 11318.2793 1.04712998e-03 - 12184.0771 1.95625005e-03 - 13065.5674 3.42317997e-03 - 13953.2207 5.58632007e-03 - 14830.7285 8.65428988e-03 - 15687.2617 1.27844000e-02 - 16508.0645 1.81719996e-02 - 17281.0996 2.49934997e-02 - 17994.2988 3.34198996e-02 - 18636.3223 4.36249003e-02 - 19196.1797 5.57769015e-02 - 19664.0723 7.00351968e-02 - 20030.1914 8.65636021e-02 - 20285.3691 0.105520003 - 20421.5254 0.127051994 - 20430.0684 0.151319996 - 20302.8730 0.178477004 - 20032.3711 0.208675995 - 19611.0664 0.242069006 - 19031.3848 0.278813988 - 18286.6426 0.319043010 - 17377.7930 0.362558991 - 16322.4639 0.408596009 - 15144.4033 0.456384987 - 13872.5674 0.505111992 - 12540.4785 0.553902984 - 11183.4170 0.601903021 - 9835.32715 0.648333013 - 8526.30664 0.692534983 - 7282.24512 0.733981013 - 6123.26074 0.772292018 - 5063.50684 0.807236016 - 4111.24902 0.838724971 - 3270.00122 0.866774976 - 2539.22729 0.891497016 - 1915.30762 0.913065016 - 1392.44995 0.931702971 - 963.134766 0.947658002 - 620.599365 0.961175978 - 357.989502 0.972495019 - 169.421387 0.981844008 - 51.0314941 0.989410996 - 2.48413086 0.995342016 - 0.00000000 1.00000000 diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py deleted file mode 100755 index ed7b1016..00000000 --- a/tests/main/grid/test_eta.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import pytest - -from pace.util.grid.eta import set_hybrid_pressure_coefficients - - -km = 79 -eta_file = "./input/eta79.txt" -ak_79, bk_79 = np.loadtxt(eta_file, unpack=True) - - -@pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile(): - - """ File, eta90.txt, does not exist. Test should fail """ - - pressure_data = set_hybrid_pressure_coefficients(km=90) - - -def test_set_hybrid_pressure_coefficients_correct(): - - """ Good values of ak, bk. Test should pass """ - - ks = 18 - ptop = 300.0 - - pressure_data = set_hybrid_pressure_coefficients(km) - - if not np.array_equal(ak_79, pressure_data.ak): - raise ValueError("Unexpected values in ak array") - - if not np.array_equal(bk_79, pressure_data.bk): - raise ValueError("Unexpected values in bk array") - - if ks != pressure_data.ks: - raise ValueError("Unexpected ks value") - - if ptop != pressure_data.ptop: - raise ValueError("Unexpected ptopt value") - - -@pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nonincreasing(): - - """ - eta values are not monotically increasing - Test is expected to fail - """ - - ak_cp = ak_79[:] - bk_cp = bk_79[:] - - bk_cp[10] = 0.1 # random number - ak_cp[13] = 1.4 # random number - - pressure_data = set_hybrid_pressure_coefficients(km) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 4589e943..d0aee7c6 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -24,7 +24,9 @@ class HybridPressureCoefficients: bk: np.ndarray -def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: +def set_hybrid_pressure_coefficients( + km: int, eta_file: str +) -> HybridPressureCoefficients: """ Sets the coefficients describing the hybrid pressure coordinates. @@ -39,11 +41,8 @@ def set_hybrid_pressure_coefficients(km: int) -> HybridPressureCoefficients: a HybridPressureCoefficients dataclass """ - # set path where the eta file lives - GRID_DIR = os.path.join(os.path.abspath("./"), "input/") - - # set filename, e.g, eta79.txt for km=79 - eta_file = GRID_DIR + "eta" + str(km) + ".txt" + if eta_file == "None": + raise IOError("eta file not specified") if not os.path.isfile(eta_file): raise IOError("file " + eta_file + " does not exist") diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index e61afe2d..f13a99d2 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -3,6 +3,7 @@ import warnings from typing import Tuple +import eta # import set_hybrid_pressure_coefficients import numpy as np from pace import util @@ -18,7 +19,6 @@ from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_INTERFACE_DIM from pace.util.constants import N_HALO_DEFAULT, PI, RADIUS -from .eta import set_hybrid_pressure_coefficients from .geometry import ( calc_unit_vector_south, calc_unit_vector_west, @@ -581,62 +581,70 @@ def dyc(self) -> util.Quantity: self._dx_center, self._dy_center = self._compute_dxdy_center() return self._dy_center - @property - def ks(self) -> util.Quantity: + def ks(self, eta_file="") -> util.Quantity: """ number of levels where the vertical coordinate is purely pressure-based """ if self._ks is None: - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() + if not eta_file == "": + ( + self._ks, + self._ptop, + self._ak, + self._bk, + ) = self._set_hybrid_pressure_coefficients(eta_file) + else: + raise IOError("eta file is not specified") return self._ks - @property - def ak(self) -> util.Quantity: + def ak(self, eta_file="") -> util.Quantity: """ the ak coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._ak is None: - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() + if not eta_file == "": + ( + self._ks, + self._ptop, + self._ak, + self._bk, + ) = self._set_hybrid_pressure_coefficients(eta_file) + else: + raise IOError("eta file is not specified") return self._ak - @property - def bk(self) -> util.Quantity: + def bk(self, eta_file="") -> util.Quantity: """ the bk coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._bk is None: - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() + if not eta_file == "": + ( + self._ks, + self._ptop, + self._ak, + self._bk, + ) = self._set_hybrid_pressure_coefficients(eta_file) + else: + raise IOError("eta file is not specified") return self._bk - @property - def ptop(self) -> util.Quantity: + def ptop(self, eta_file="") -> util.Quantity: """ the pressure of the top of atmosphere level """ if self._ptop is None: - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() + if not eta_file == "": + ( + self._ks, + self._ptop, + self._ak, + self._bk, + ) = self._set_hybrid_pressure_coefficients(eta_file) + else: + raise IOError("eta file is not specified") return self._ptop @property @@ -2128,7 +2136,7 @@ def _compute_area_c_cartesian(self): area_cgrid_64.data[:, :] = self._dx_const * self._dy_const return quantity_cast_to_model_float(self.quantity_factory, area_cgrid_64) - def _set_hybrid_pressure_coefficients(self): + def _set_hybrid_pressure_coefficients(self, eta_file=""): ks = self.quantity_factory.zeros( [], "", @@ -2149,7 +2157,10 @@ def _set_hybrid_pressure_coefficients(self): "", dtype=Float, ) - pressure_coefficients = set_hybrid_pressure_coefficients(self._npz) + pressure_coefficients = eta.HybridPressureCoefficients + pressure_coefficients = pressure_coefficients.set_hybrid_pressure_coefficients( + self._npz, eta_file + ) ks = pressure_coefficients.ks ptop = pressure_coefficients.ptop ak.data[:] = asarray(pressure_coefficients.ak, type(ak.data)) diff --git a/util/pace/util/grid/helper.py b/util/pace/util/grid/helper.py index 6b3003d1..6b8c1bc4 100644 --- a/util/pace/util/grid/helper.py +++ b/util/pace/util/grid/helper.py @@ -143,10 +143,12 @@ def __post_init__(self): self._p_interface = None @classmethod - def new_from_metric_terms(cls, metric_terms: MetricTerms) -> "VerticalGridData": + def new_from_metric_terms( + cls, metric_terms: MetricTerms, eta_file: str + ) -> "VerticalGridData": return cls( - ak=metric_terms.ak, - bk=metric_terms.bk, + ak=metric_terms.ak(eta_file), + bk=metric_terms.bk(eta_file), ) @classmethod @@ -321,9 +323,11 @@ def __init__( self._fC_agrid = None @classmethod - def new_from_metric_terms(cls, metric_terms: MetricTerms): + def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file=""): horizontal_data = HorizontalGridData.new_from_metric_terms(metric_terms) - vertical_data = VerticalGridData.new_from_metric_terms(metric_terms) + vertical_data = VerticalGridData.new_from_metric_terms( + metric_terms, eta_file="" + ) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) angle_data = AngleGridData.new_from_metric_terms(metric_terms) return cls(horizontal_data, vertical_data, contravariant_data, angle_data) From c0a5fc232cf42350037a990d57f8a28824544dc4 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 11:56:50 -0500 Subject: [PATCH 14/69] read in netcdf file in eta mod --- util/pace/util/grid/eta.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index d0aee7c6..fd03e460 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -2,6 +2,7 @@ from dataclasses import dataclass import numpy as np +import xrray as xr from .utils import compute_eta @@ -47,7 +48,9 @@ def set_hybrid_pressure_coefficients( raise IOError("file " + eta_file + " does not exist") # read file into ak, bk arrays - ak, bk = np.loadtxt(eta_file, unpack=True) + data = xr.open_dataset(eta_file) + ak = data["ak"].values + bk = data["bk"].values # check size of ak and bk array is km+1 if ak.size - 1 != km: From 6bde165acd6e8d89b94500672d85c2945c819dc5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 12:27:36 -0500 Subject: [PATCH 15/69] remove txt file --- tests/main/grid/input/eta79.txt | 80 --------------------------------- util/pace/util/grid/eta.py | 2 +- 2 files changed, 1 insertion(+), 81 deletions(-) delete mode 100644 tests/main/grid/input/eta79.txt diff --git a/tests/main/grid/input/eta79.txt b/tests/main/grid/input/eta79.txt deleted file mode 100644 index 7ccd6bdb..00000000 --- a/tests/main/grid/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -7284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index fd03e460..6f476461 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -2,7 +2,7 @@ from dataclasses import dataclass import numpy as np -import xrray as xr +import xarray as xr from .utils import compute_eta From ed5846e5e1ab425a4290142a4337e4f173bdd735 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 13:39:46 -0500 Subject: [PATCH 16/69] test --- util/pace/util/grid/generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index f13a99d2..23cb973e 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -3,7 +3,6 @@ import warnings from typing import Tuple -import eta # import set_hybrid_pressure_coefficients import numpy as np from pace import util @@ -18,6 +17,7 @@ ) from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_INTERFACE_DIM from pace.util.constants import N_HALO_DEFAULT, PI, RADIUS +from pace.util.grid import eta # import set_hybrid_pressure_coefficients from .geometry import ( calc_unit_vector_south, From a6b899808fa606e07f720277aedb61571a1bb62c Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 13:48:57 -0500 Subject: [PATCH 17/69] modify test and fix generate.py --- tests/main/grid/input/eta_not_mono.txt | 80 +++++++++++++ tests/main/grid/input/test_config_79.yaml | 106 ++++++++++++++++++ tests/main/grid/input/test_config_nofile.yaml | 105 +++++++++++++++++ .../main/grid/input/test_config_not_mono.yaml | 106 ++++++++++++++++++ .../grid/input/test_config_not_mono.yaml~ | 106 ++++++++++++++++++ tests/main/grid/test_eta.py | 62 ++++++++++ util/pace/util/grid/generation.py | 3 +- 7 files changed, 566 insertions(+), 2 deletions(-) create mode 100644 tests/main/grid/input/eta_not_mono.txt create mode 100644 tests/main/grid/input/test_config_79.yaml create mode 100644 tests/main/grid/input/test_config_nofile.yaml create mode 100644 tests/main/grid/input/test_config_not_mono.yaml create mode 100644 tests/main/grid/input/test_config_not_mono.yaml~ create mode 100755 tests/main/grid/test_eta.py diff --git a/tests/main/grid/input/eta_not_mono.txt b/tests/main/grid/input/eta_not_mono.txt new file mode 100644 index 00000000..310c9cc8 --- /dev/null +++ b/tests/main/grid/input/eta_not_mono.txt @@ -0,0 +1,80 @@ +300 0 +646.7159 0 +1045.222 0 +1469.188 0 +1897.829 0 +2325.385 0 +2754.396 0 +3191.294 0 +3648.332 0 +4135.675 0 +4668.282 0 +5247.94 0 +5876.271 0 +6554.716 0 +284.521 0 +8066.738 0 +8902.188 0 +9791.482 0 +10734.99 0 +11626.25 0.001065947 +12372.12 0.004128662 +12990.41 0.009006631 +13496.29 0.01554263 +13902.77 0.02359921 +14220.98 0.03305481 +14460.58 0.438012 +14629.93 0.05574095 +14736.33 0.06878554 +14786.17 0.08285347 +14785.11 0.09786981 +14738.12 0.1137643 +14649.66 0.130471 +14523.7 0.1479275 +14363.82 0.1660746 +14173.24 0.1848558 +13954.91 0.2042166 +13711.48 0.2241053 +13445.4 0.2444716 +13158.9 0.2652672 +12854.07 0.286445 +12532.8 0.3079604 +12196.85 0.3297701 +11847.88 0.351832 +11487.39 0.3741062 +11116.82 0.3965532 +10737.48 0.4191364 +10350.62 0.4418194 +9957.395 0.4645682 +9558.875 0.48735 +9156.069 0.5101338 +8749.922 0.5328897 +8341.315 0.5555894 +7931.065 0.5782067 +7519.942 0.6007158 +7108.648 0.6230936 +6698.281 0.6452944 +6290.007 0.6672683 +5884.984 0.6889648 +5484.372 0.7103333 +5089.319 0.7313231 +4700.96 0.7518838 +4320.421 0.7719651 +3948.807 0.7915173 +3587.201 0.8104913 +3236.666 0.828839 +2898.237 0.846513 +2572.912 0.8634676 +2261.667 0.8796583 +1965.424 0.8950421 +1685.079 0.9095779 +1421.479 0.9232264 +1175.419 0.9359506 +947.6516 0.9477157 +738.8688 0.9584892 +549.713 0.9682413 +380.7626 0.9769447 +232.5417 0.9845753 +105.481 0.9911126 +-0.0008381903 0.9965372 +0 1 diff --git a/tests/main/grid/input/test_config_79.yaml b/tests/main/grid/input/test_config_79.yaml new file mode 100644 index 00000000..b7b8de57 --- /dev/null +++ b/tests/main/grid/input/test_config_79.yaml @@ -0,0 +1,106 @@ +#modified version of baroclinic_c12_dp.yaml +stencil_config: + compilation_config: + backend: numpy + rebuild: false + validate_args: true + format_source: false + device_sync: false +grid_config: + type: generated + config: + grid_type: 4 + dx_const: 3000.0 + dy_const: 3000.0 + deglat: 10.0 + eta_file: './input/eta79.nc' +initialization: + type: analytic + config: + case: baroclinic +performance_config: + collect_performance: true + experiment_name: c12_baroclinic +nx_tile: 12 +nz: 79 +dt_atmos: 225 +minutes: 15 +layout: + - 1 + - 1 +diagnostics_config: + path: output + output_format: netcdf + names: + - u + - v + - ua + - va + - pt + - delp + - qvapor + - qliquid + - qice + - qrain + - qsnow + - qgraupel + z_select: + - level: 65 + names: + - pt +dycore_config: + a_imp: 1.0 + beta: 0. + consv_te: 0. + d2_bg: 0. + d2_bg_k1: 0.2 + d2_bg_k2: 0.1 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.5 + delt_max: 0.002 + do_sat_adj: true + do_vort_damp: true + fill: true + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + k_split: 1 + ke_bg: 0. + kord_mt: 9 + kord_tm: -9 + kord_tr: 9 + kord_wz: 9 + n_split: 1 + nord: 3 + nwat: 6 + p_fac: 0.05 + rf_cutoff: 3000. + rf_fast: true + tau: 10. + vtdm4: 0.06 + z_tracer: true + do_qa: true + tau_i2s: 1000. + tau_g2v: 1200. + ql_gen: 0.001 + ql_mlt: 0.002 + qs_mlt: 0.000001 + qi_lim: 1.0 + dw_ocean: 0.1 + dw_land: 0.15 + icloud_f: 0 + tau_l2v: 300. + tau_v2l: 90. + fv_sg_adj: 0 + n_sponge: 48 + u_max: 355.0 + +physics_config: + hydrostatic: false + nwat: 6 + do_qa: true diff --git a/tests/main/grid/input/test_config_nofile.yaml b/tests/main/grid/input/test_config_nofile.yaml new file mode 100644 index 00000000..94443f4d --- /dev/null +++ b/tests/main/grid/input/test_config_nofile.yaml @@ -0,0 +1,105 @@ +#modified version of baroclinic_c12_dp.yaml +stencil_config: + compilation_config: + backend: numpy + rebuild: false + validate_args: true + format_source: false + device_sync: false +grid_config: + type: generated + config: + grid_type: 4 + dx_const: 3000.0 + dy_const: 3000.0 + deglat: 10.0 +initialization: + type: analytic + config: + case: baroclinic +performance_config: + collect_performance: true + experiment_name: c12_baroclinic +nx_tile: 12 +nz: 79 +dt_atmos: 225 +minutes: 15 +layout: + - 1 + - 1 +diagnostics_config: + path: output + output_format: netcdf + names: + - u + - v + - ua + - va + - pt + - delp + - qvapor + - qliquid + - qice + - qrain + - qsnow + - qgraupel + z_select: + - level: 65 + names: + - pt +dycore_config: + a_imp: 1.0 + beta: 0. + consv_te: 0. + d2_bg: 0. + d2_bg_k1: 0.2 + d2_bg_k2: 0.1 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.5 + delt_max: 0.002 + do_sat_adj: true + do_vort_damp: true + fill: true + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + k_split: 1 + ke_bg: 0. + kord_mt: 9 + kord_tm: -9 + kord_tr: 9 + kord_wz: 9 + n_split: 1 + nord: 3 + nwat: 6 + p_fac: 0.05 + rf_cutoff: 3000. + rf_fast: true + tau: 10. + vtdm4: 0.06 + z_tracer: true + do_qa: true + tau_i2s: 1000. + tau_g2v: 1200. + ql_gen: 0.001 + ql_mlt: 0.002 + qs_mlt: 0.000001 + qi_lim: 1.0 + dw_ocean: 0.1 + dw_land: 0.15 + icloud_f: 0 + tau_l2v: 300. + tau_v2l: 90. + fv_sg_adj: 0 + n_sponge: 48 + u_max: 355.0 + +physics_config: + hydrostatic: false + nwat: 6 + do_qa: true diff --git a/tests/main/grid/input/test_config_not_mono.yaml b/tests/main/grid/input/test_config_not_mono.yaml new file mode 100644 index 00000000..b741e011 --- /dev/null +++ b/tests/main/grid/input/test_config_not_mono.yaml @@ -0,0 +1,106 @@ +#modified version of baroclinic_c12_dp.yaml +stencil_config: + compilation_config: + backend: numpy + rebuild: false + validate_args: true + format_source: false + device_sync: false +grid_config: + type: generated + config: + grid_type: 4 + dx_const: 3000.0 + dy_const: 3000.0 + deglat: 10.0 + eta_file: './input/eta_not_mono.nc' +initialization: + type: analytic + config: + case: baroclinic +performance_config: + collect_performance: true + experiment_name: c12_baroclinic +nx_tile: 12 +nz: 79 +dt_atmos: 225 +minutes: 15 +layout: + - 1 + - 1 +diagnostics_config: + path: output + output_format: netcdf + names: + - u + - v + - ua + - va + - pt + - delp + - qvapor + - qliquid + - qice + - qrain + - qsnow + - qgraupel + z_select: + - level: 65 + names: + - pt +dycore_config: + a_imp: 1.0 + beta: 0. + consv_te: 0. + d2_bg: 0. + d2_bg_k1: 0.2 + d2_bg_k2: 0.1 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.5 + delt_max: 0.002 + do_sat_adj: true + do_vort_damp: true + fill: true + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + k_split: 1 + ke_bg: 0. + kord_mt: 9 + kord_tm: -9 + kord_tr: 9 + kord_wz: 9 + n_split: 1 + nord: 3 + nwat: 6 + p_fac: 0.05 + rf_cutoff: 3000. + rf_fast: true + tau: 10. + vtdm4: 0.06 + z_tracer: true + do_qa: true + tau_i2s: 1000. + tau_g2v: 1200. + ql_gen: 0.001 + ql_mlt: 0.002 + qs_mlt: 0.000001 + qi_lim: 1.0 + dw_ocean: 0.1 + dw_land: 0.15 + icloud_f: 0 + tau_l2v: 300. + tau_v2l: 90. + fv_sg_adj: 0 + n_sponge: 48 + u_max: 355.0 + +physics_config: + hydrostatic: false + nwat: 6 + do_qa: true diff --git a/tests/main/grid/input/test_config_not_mono.yaml~ b/tests/main/grid/input/test_config_not_mono.yaml~ new file mode 100644 index 00000000..419ed670 --- /dev/null +++ b/tests/main/grid/input/test_config_not_mono.yaml~ @@ -0,0 +1,106 @@ +#modified version of baroclinic_c12_dp.yaml +stencil_config: + compilation_config: + backend: numpy + rebuild: false + validate_args: true + format_source: false + device_sync: false +grid_config: + type: generated + config: + grid_type: 4 + dx_const: 3000.0 + dy_const: 3000.0 + deglat: 10.0 + eta_file: './input/eta_not_mono.txt' +initialization: + type: analytic + config: + case: baroclinic +performance_config: + collect_performance: true + experiment_name: c12_baroclinic +nx_tile: 12 +nz: 79 +dt_atmos: 225 +minutes: 15 +layout: + - 1 + - 1 +diagnostics_config: + path: output + output_format: netcdf + names: + - u + - v + - ua + - va + - pt + - delp + - qvapor + - qliquid + - qice + - qrain + - qsnow + - qgraupel + z_select: + - level: 65 + names: + - pt +dycore_config: + a_imp: 1.0 + beta: 0. + consv_te: 0. + d2_bg: 0. + d2_bg_k1: 0.2 + d2_bg_k2: 0.1 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.5 + delt_max: 0.002 + do_sat_adj: true + do_vort_damp: true + fill: true + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + k_split: 1 + ke_bg: 0. + kord_mt: 9 + kord_tm: -9 + kord_tr: 9 + kord_wz: 9 + n_split: 1 + nord: 3 + nwat: 6 + p_fac: 0.05 + rf_cutoff: 3000. + rf_fast: true + tau: 10. + vtdm4: 0.06 + z_tracer: true + do_qa: true + tau_i2s: 1000. + tau_g2v: 1200. + ql_gen: 0.001 + ql_mlt: 0.002 + qs_mlt: 0.000001 + qi_lim: 1.0 + dw_ocean: 0.1 + dw_land: 0.15 + icloud_f: 0 + tau_l2v: 300. + tau_v2l: 90. + fv_sg_adj: 0 + n_sponge: 48 + u_max: 355.0 + +physics_config: + hydrostatic: false + nwat: 6 + do_qa: true diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py new file mode 100755 index 00000000..ed7bfcab --- /dev/null +++ b/tests/main/grid/test_eta.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +import numpy as np +import pytest +import xarray as xr +import yaml + +import pace.driver + + +def set_answers(config_file): + + eta_file = "./input/eta79.nc" + data = xr.open_dataset(eta_file) + return data["ak"].values, data["bk"].values + + +def test_set_hybrid_pressure_coefficients_correct(): + + config_file = "./input/test_config_79.yaml" + with open(config_file, "r") as f: + yaml_config = yaml.safe_load(f) + + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver = pace.driver.Driver(config=driver_config) + + p_results = driver.state.grid_data.p.data + ak_results = driver.state.grid_data.ak.data + bk_results = driver.state.grid_data.bk.data + ak_answers, bk_answers = set_answers(config_file) + + if ak_answers.size != ak_results.size: + raise ValueError("Unexpected size of bk") + if bk_answers.size != bk_results.size: + raise ValueError("Unexpected size of ak") + + if not np.array_equal(ak_answers, ak_results): + raise ValueError("Unexpected value of ak") + if not np.array_equal(bk_answers, bk_results): + raise ValueError("Unexpected value of bk") + + +@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nofile(): + + config_file = "./input/test_config_nofile.yaml" + with open(config_file, "r") as f: + yaml_config = yaml.safe_load(f) + + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver = pace.driver.Driver(config=driver_config) + + +@pytest.mark.xfail +def test_set_hybrid_pressure_coefficients_nonmonotonic(): + + config_file = "./input/test_config_not_mono.yaml" + with open(config_file, "r") as f: + yaml_config = yaml.safe_load(f) + + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver = pace.driver.Driver(config=driver_config) diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index 23cb973e..a7a2258a 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -2157,8 +2157,7 @@ def _set_hybrid_pressure_coefficients(self, eta_file=""): "", dtype=Float, ) - pressure_coefficients = eta.HybridPressureCoefficients - pressure_coefficients = pressure_coefficients.set_hybrid_pressure_coefficients( + pressure_coefficients = eta.set_hybrid_pressure_coefficients( self._npz, eta_file ) ks = pressure_coefficients.ks From 4b22fc3c3a2b967180a7d1e6eb52bef3a8cb970f Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 13:49:41 -0500 Subject: [PATCH 18/69] remove emacs backup file --- .../grid/input/test_config_not_mono.yaml~ | 106 ------------------ 1 file changed, 106 deletions(-) delete mode 100644 tests/main/grid/input/test_config_not_mono.yaml~ diff --git a/tests/main/grid/input/test_config_not_mono.yaml~ b/tests/main/grid/input/test_config_not_mono.yaml~ deleted file mode 100644 index 419ed670..00000000 --- a/tests/main/grid/input/test_config_not_mono.yaml~ +++ /dev/null @@ -1,106 +0,0 @@ -#modified version of baroclinic_c12_dp.yaml -stencil_config: - compilation_config: - backend: numpy - rebuild: false - validate_args: true - format_source: false - device_sync: false -grid_config: - type: generated - config: - grid_type: 4 - dx_const: 3000.0 - dy_const: 3000.0 - deglat: 10.0 - eta_file: './input/eta_not_mono.txt' -initialization: - type: analytic - config: - case: baroclinic -performance_config: - collect_performance: true - experiment_name: c12_baroclinic -nx_tile: 12 -nz: 79 -dt_atmos: 225 -minutes: 15 -layout: - - 1 - - 1 -diagnostics_config: - path: output - output_format: netcdf - names: - - u - - v - - ua - - va - - pt - - delp - - qvapor - - qliquid - - qice - - qrain - - qsnow - - qgraupel - z_select: - - level: 65 - names: - - pt -dycore_config: - a_imp: 1.0 - beta: 0. - consv_te: 0. - d2_bg: 0. - d2_bg_k1: 0.2 - d2_bg_k2: 0.1 - d4_bg: 0.15 - d_con: 1.0 - d_ext: 0.0 - dddmp: 0.5 - delt_max: 0.002 - do_sat_adj: true - do_vort_damp: true - fill: true - hord_dp: 6 - hord_mt: 6 - hord_tm: 6 - hord_tr: 8 - hord_vt: 6 - hydrostatic: false - k_split: 1 - ke_bg: 0. - kord_mt: 9 - kord_tm: -9 - kord_tr: 9 - kord_wz: 9 - n_split: 1 - nord: 3 - nwat: 6 - p_fac: 0.05 - rf_cutoff: 3000. - rf_fast: true - tau: 10. - vtdm4: 0.06 - z_tracer: true - do_qa: true - tau_i2s: 1000. - tau_g2v: 1200. - ql_gen: 0.001 - ql_mlt: 0.002 - qs_mlt: 0.000001 - qi_lim: 1.0 - dw_ocean: 0.1 - dw_land: 0.15 - icloud_f: 0 - tau_l2v: 300. - tau_v2l: 90. - fv_sg_adj: 0 - n_sponge: 48 - u_max: 355.0 - -physics_config: - hydrostatic: false - nwat: 6 - do_qa: true From eb8d88d5998d1c56d251736fce055058cf40a989 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 14:21:53 -0500 Subject: [PATCH 19/69] driver tests pass --- driver/examples/configs/baroclinic_c12.yaml | 5 ++ tests/main/driver/test_restart_serial.py | 6 +- tests/main/input/eta79.txt | 80 --------------------- 3 files changed, 10 insertions(+), 81 deletions(-) delete mode 100644 tests/main/input/eta79.txt diff --git a/driver/examples/configs/baroclinic_c12.yaml b/driver/examples/configs/baroclinic_c12.yaml index 1785f9ab..2b0a2e3f 100644 --- a/driver/examples/configs/baroclinic_c12.yaml +++ b/driver/examples/configs/baroclinic_c12.yaml @@ -94,3 +94,8 @@ physics_config: hydrostatic: false nwat: 6 do_qa: true + +grid_config: + type: generated + config: + eta_file: 'tests/main/input/eta79.nc' diff --git a/tests/main/driver/test_restart_serial.py b/tests/main/driver/test_restart_serial.py index 3e62b863..113dec55 100644 --- a/tests/main/driver/test_restart_serial.py +++ b/tests/main/driver/test_restart_serial.py @@ -70,7 +70,11 @@ def test_restart_save_to_disk(): damping_coefficients, driver_grid_data, grid_data, - ) = pace.driver.GeneratedGridConfig().get_grid(quantity_factory, communicator) + ) = pace.driver.GeneratedGridConfig( + eta_file="tests/main/input/eta79.nc" + ).get_grid( + quantity_factory, communicator + ) init = AnalyticInit() driver_state = init.get_driver_state( quantity_factory=quantity_factory, diff --git a/tests/main/input/eta79.txt b/tests/main/input/eta79.txt deleted file mode 100644 index 7ccd6bdb..00000000 --- a/tests/main/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -7284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 From 63bdef32a6c6f043e7653bd333ddabdd5bdb48f0 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 14:32:23 -0500 Subject: [PATCH 20/69] fix helper.py --- util/pace/util/grid/helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/pace/util/grid/helper.py b/util/pace/util/grid/helper.py index 6b8c1bc4..9b7b3d3f 100644 --- a/util/pace/util/grid/helper.py +++ b/util/pace/util/grid/helper.py @@ -144,7 +144,7 @@ def __post_init__(self): @classmethod def new_from_metric_terms( - cls, metric_terms: MetricTerms, eta_file: str + cls, metric_terms: MetricTerms, eta_file="" ) -> "VerticalGridData": return cls( ak=metric_terms.ak(eta_file), @@ -326,7 +326,7 @@ def __init__( def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file=""): horizontal_data = HorizontalGridData.new_from_metric_terms(metric_terms) vertical_data = VerticalGridData.new_from_metric_terms( - metric_terms, eta_file="" + metric_terms, eta_file=eta_file ) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) angle_data = AngleGridData.new_from_metric_terms(metric_terms) From a2ff82d97ebd979d3c355a7c5234ecf81ceec0d5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:23:12 -0500 Subject: [PATCH 21/69] fix fv3core tests --- fv3core/pace/fv3core/wrappers/geos_wrapper.py | 5 +- tests/main/fv3core/test_dycore_call.py | 4 +- tests/main/fv3core/test_init_from_geos.py | 3 + tests/main/input/eta91.txt | 92 ------------------- 4 files changed, 10 insertions(+), 94 deletions(-) delete mode 100644 tests/main/input/eta91.txt diff --git a/fv3core/pace/fv3core/wrappers/geos_wrapper.py b/fv3core/pace/fv3core/wrappers/geos_wrapper.py index e1d1defe..ccd72e32 100644 --- a/fv3core/pace/fv3core/wrappers/geos_wrapper.py +++ b/fv3core/pace/fv3core/wrappers/geos_wrapper.py @@ -126,7 +126,10 @@ def __init__( metric_terms = pace.util.grid.MetricTerms( quantity_factory=quantity_factory, communicator=self.communicator ) - grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) + + grid_data = pace.util.grid.GridData.new_from_metric_terms( + metric_terms, eta_file=namelist["grid_config"]["config"]["eta_file"] + ) stencil_config = pace.dsl.stencil.StencilConfig( compilation_config=pace.dsl.stencil.CompilationConfig( diff --git a/tests/main/fv3core/test_dycore_call.py b/tests/main/fv3core/test_dycore_call.py index ac79fdb5..64fb230b 100644 --- a/tests/main/fv3core/test_dycore_call.py +++ b/tests/main/fv3core/test_dycore_call.py @@ -101,7 +101,9 @@ def setup_dycore() -> Tuple[ quantity_factory=quantity_factory, communicator=communicator, ) - grid_data = GridData.new_from_metric_terms(metric_terms) + grid_data = GridData.new_from_metric_terms( + metric_terms, eta_file="tests/main/input/eta79.nc" + ) # create an initial state from the Jablonowski & Williamson Baroclinic # test case perturbation. JRMS2006 diff --git a/tests/main/fv3core/test_init_from_geos.py b/tests/main/fv3core/test_init_from_geos.py index 16efe9e9..7e03caf0 100644 --- a/tests/main/fv3core/test_init_from_geos.py +++ b/tests/main/fv3core/test_init_from_geos.py @@ -74,6 +74,9 @@ def test_geos_wrapper(): "fv_sg_adj": 0, "n_sponge": 48, }, + "grid_config": { + "config": {"eta_file": "tests/main/input/eta91.nc"}, + }, } namelist = f90nml.namelist.Namelist(namelist_dict) diff --git a/tests/main/input/eta91.txt b/tests/main/input/eta91.txt deleted file mode 100644 index 5d6710ad..00000000 --- a/tests/main/input/eta91.txt +++ /dev/null @@ -1,92 +0,0 @@ - 1.00000000 0.00000000 - 1.75000000 0.00000000 - 2.75000000 0.00000000 - 4.09999990 0.00000000 - 5.98951054 0.00000000 - 8.62932968 0.00000000 - 12.2572632 0.00000000 - 17.1510906 0.00000000 - 23.6545467 0.00000000 - 32.1627693 0.00000000 - 43.1310921 0.00000000 - 57.1100426 0.00000000 - 74.6595764 0.00000000 - 96.4470978 0.00000000 - 123.169769 0.00000000 - 155.601318 0.00000000 - 194.594009 0.00000000 - 241.047531 0.00000000 - 295.873840 0.00000000 - 360.046967 0.00000000 - 434.604828 0.00000000 - 520.628723 0.00000000 - 619.154846 0.00000000 - 731.296021 0.00000000 - 858.240906 0.00000000 - 1001.06561 0.00000000 - 1160.92859 0.00000000 - 1339.03992 0.00000000 - 1536.50012 0.00000000 - 1754.48938 0.00000000 - 1994.17834 0.00000000 - 2256.67407 0.00000000 - 2543.17139 0.00000000 - 2854.76392 0.00000000 - 3192.58569 0.00000000 - 3557.75366 0.00000000 - 3951.35107 0.00000000 - 4374.28662 0.00000000 - 4827.11084 0.00000000 - 5310.22168 0.00000000 - 5823.87793 0.00000000 - 6369.04248 0.00000000 - 6948.75244 0.00000000 - 7566.91992 3.50123992e-06 - 8226.34277 2.81484008e-05 - 8931.20996 9.38666999e-05 - 9684.46191 2.28561999e-04 - 10482.2725 5.12343016e-04 - 11318.2793 1.04712998e-03 - 12184.0771 1.95625005e-03 - 13065.5674 3.42317997e-03 - 13953.2207 5.58632007e-03 - 14830.7285 8.65428988e-03 - 15687.2617 1.27844000e-02 - 16508.0645 1.81719996e-02 - 17281.0996 2.49934997e-02 - 17994.2988 3.34198996e-02 - 18636.3223 4.36249003e-02 - 19196.1797 5.57769015e-02 - 19664.0723 7.00351968e-02 - 20030.1914 8.65636021e-02 - 20285.3691 0.105520003 - 20421.5254 0.127051994 - 20430.0684 0.151319996 - 20302.8730 0.178477004 - 20032.3711 0.208675995 - 19611.0664 0.242069006 - 19031.3848 0.278813988 - 18286.6426 0.319043010 - 17377.7930 0.362558991 - 16322.4639 0.408596009 - 15144.4033 0.456384987 - 13872.5674 0.505111992 - 12540.4785 0.553902984 - 11183.4170 0.601903021 - 9835.32715 0.648333013 - 8526.30664 0.692534983 - 7282.24512 0.733981013 - 6123.26074 0.772292018 - 5063.50684 0.807236016 - 4111.24902 0.838724971 - 3270.00122 0.866774976 - 2539.22729 0.891497016 - 1915.30762 0.913065016 - 1392.44995 0.931702971 - 963.134766 0.947658002 - 620.599365 0.961175978 - 357.989502 0.972495019 - 169.421387 0.981844008 - 51.0314941 0.989410996 - 2.48413086 0.995342016 - 0.00000000 1.00000000 From 92dda5a3663344ac8df3bf2144770bbf3bccfe83 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:25:07 -0500 Subject: [PATCH 22/69] fix physics test --- tests/main/physics/test_integration.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/main/physics/test_integration.py b/tests/main/physics/test_integration.py index a55d9f98..cfeac7fd 100644 --- a/tests/main/physics/test_integration.py +++ b/tests/main/physics/test_integration.py @@ -65,7 +65,9 @@ def setup_physics(): quantity_factory=quantity_factory, communicator=communicator, ) - grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) + grid_data = pace.util.grid.GridData.new_from_metric_terms( + metric_terms, eta_file="tests/main/input/eta79.nc" + ) physics = pace.physics.Physics( stencil_factory, quantity_factory, From 1d0bb2569fea7c26438e4418b6dc2ed828704d43 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:32:56 -0500 Subject: [PATCH 23/69] fix grid tests --- tests/main/grid/input/eta_not_mono.txt | 80 ------------------- tests/main/grid/input/test_config_79.yaml | 2 +- .../main/grid/input/test_config_not_mono.yaml | 2 +- tests/main/grid/test_eta.py | 8 +- 4 files changed, 6 insertions(+), 86 deletions(-) delete mode 100644 tests/main/grid/input/eta_not_mono.txt diff --git a/tests/main/grid/input/eta_not_mono.txt b/tests/main/grid/input/eta_not_mono.txt deleted file mode 100644 index 310c9cc8..00000000 --- a/tests/main/grid/input/eta_not_mono.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 diff --git a/tests/main/grid/input/test_config_79.yaml b/tests/main/grid/input/test_config_79.yaml index b7b8de57..25feb960 100644 --- a/tests/main/grid/input/test_config_79.yaml +++ b/tests/main/grid/input/test_config_79.yaml @@ -13,7 +13,7 @@ grid_config: dx_const: 3000.0 dy_const: 3000.0 deglat: 10.0 - eta_file: './input/eta79.nc' + eta_file: 'tests/main/input/eta79.nc' initialization: type: analytic config: diff --git a/tests/main/grid/input/test_config_not_mono.yaml b/tests/main/grid/input/test_config_not_mono.yaml index b741e011..7671fae6 100644 --- a/tests/main/grid/input/test_config_not_mono.yaml +++ b/tests/main/grid/input/test_config_not_mono.yaml @@ -13,7 +13,7 @@ grid_config: dx_const: 3000.0 dy_const: 3000.0 deglat: 10.0 - eta_file: './input/eta_not_mono.nc' + eta_file: 'test/main/input/eta_not_mono.nc' initialization: type: analytic config: diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index ed7bfcab..26a46c6a 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -10,14 +10,14 @@ def set_answers(config_file): - eta_file = "./input/eta79.nc" + eta_file = "tests/main/input/eta79.nc" data = xr.open_dataset(eta_file) return data["ak"].values, data["bk"].values def test_set_hybrid_pressure_coefficients_correct(): - config_file = "./input/test_config_79.yaml" + config_file = "tests/main/grid/input/test_config_79.yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) @@ -43,7 +43,7 @@ def test_set_hybrid_pressure_coefficients_correct(): @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile(): - config_file = "./input/test_config_nofile.yaml" + config_file = "tests/main/grid/input/test_config_nofile.yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) @@ -54,7 +54,7 @@ def test_set_hybrid_pressure_coefficients_nofile(): @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nonmonotonic(): - config_file = "./input/test_config_not_mono.yaml" + config_file = "tests/main/grid/input/test_config_not_mono.yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) From c7f0b07fb9ad8f516f9fc0b1eb7d9354635e0bb3 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:35:43 -0500 Subject: [PATCH 24/69] nullcommconfig --- tests/main/grid/test_eta.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 26a46c6a..3dfb6fa3 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -22,6 +22,7 @@ def test_set_hybrid_pressure_coefficients_correct(): yaml_config = yaml.safe_load(f) driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) p_results = driver.state.grid_data.p.data @@ -48,6 +49,7 @@ def test_set_hybrid_pressure_coefficients_nofile(): yaml_config = yaml.safe_load(f) driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) @@ -59,4 +61,5 @@ def test_set_hybrid_pressure_coefficients_nonmonotonic(): yaml_config = yaml.safe_load(f) driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) From 07a55ae795128a645cb6c52a1f3935f7c3721983 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:40:15 -0500 Subject: [PATCH 25/69] cleanup input --- tests/main/fv3core/input/eta79.txt | 80 ------------------------- tests/main/fv3core/input/eta91.txt | 92 ----------------------------- tests/main/input/eta79.nc | Bin 0 -> 7424 bytes tests/main/input/eta79_not_mono.nc | Bin 0 -> 7424 bytes tests/main/input/eta91.nc | Bin 0 -> 7616 bytes tests/main/physics/input/eta79.txt | 80 ------------------------- tests/main/physics/input/eta91.txt | 92 ----------------------------- 7 files changed, 344 deletions(-) delete mode 100644 tests/main/fv3core/input/eta79.txt delete mode 100644 tests/main/fv3core/input/eta91.txt create mode 100644 tests/main/input/eta79.nc create mode 100644 tests/main/input/eta79_not_mono.nc create mode 100644 tests/main/input/eta91.nc delete mode 100644 tests/main/physics/input/eta79.txt delete mode 100644 tests/main/physics/input/eta91.txt diff --git a/tests/main/fv3core/input/eta79.txt b/tests/main/fv3core/input/eta79.txt deleted file mode 100644 index 7ccd6bdb..00000000 --- a/tests/main/fv3core/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -7284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 diff --git a/tests/main/fv3core/input/eta91.txt b/tests/main/fv3core/input/eta91.txt deleted file mode 100644 index 5d6710ad..00000000 --- a/tests/main/fv3core/input/eta91.txt +++ /dev/null @@ -1,92 +0,0 @@ - 1.00000000 0.00000000 - 1.75000000 0.00000000 - 2.75000000 0.00000000 - 4.09999990 0.00000000 - 5.98951054 0.00000000 - 8.62932968 0.00000000 - 12.2572632 0.00000000 - 17.1510906 0.00000000 - 23.6545467 0.00000000 - 32.1627693 0.00000000 - 43.1310921 0.00000000 - 57.1100426 0.00000000 - 74.6595764 0.00000000 - 96.4470978 0.00000000 - 123.169769 0.00000000 - 155.601318 0.00000000 - 194.594009 0.00000000 - 241.047531 0.00000000 - 295.873840 0.00000000 - 360.046967 0.00000000 - 434.604828 0.00000000 - 520.628723 0.00000000 - 619.154846 0.00000000 - 731.296021 0.00000000 - 858.240906 0.00000000 - 1001.06561 0.00000000 - 1160.92859 0.00000000 - 1339.03992 0.00000000 - 1536.50012 0.00000000 - 1754.48938 0.00000000 - 1994.17834 0.00000000 - 2256.67407 0.00000000 - 2543.17139 0.00000000 - 2854.76392 0.00000000 - 3192.58569 0.00000000 - 3557.75366 0.00000000 - 3951.35107 0.00000000 - 4374.28662 0.00000000 - 4827.11084 0.00000000 - 5310.22168 0.00000000 - 5823.87793 0.00000000 - 6369.04248 0.00000000 - 6948.75244 0.00000000 - 7566.91992 3.50123992e-06 - 8226.34277 2.81484008e-05 - 8931.20996 9.38666999e-05 - 9684.46191 2.28561999e-04 - 10482.2725 5.12343016e-04 - 11318.2793 1.04712998e-03 - 12184.0771 1.95625005e-03 - 13065.5674 3.42317997e-03 - 13953.2207 5.58632007e-03 - 14830.7285 8.65428988e-03 - 15687.2617 1.27844000e-02 - 16508.0645 1.81719996e-02 - 17281.0996 2.49934997e-02 - 17994.2988 3.34198996e-02 - 18636.3223 4.36249003e-02 - 19196.1797 5.57769015e-02 - 19664.0723 7.00351968e-02 - 20030.1914 8.65636021e-02 - 20285.3691 0.105520003 - 20421.5254 0.127051994 - 20430.0684 0.151319996 - 20302.8730 0.178477004 - 20032.3711 0.208675995 - 19611.0664 0.242069006 - 19031.3848 0.278813988 - 18286.6426 0.319043010 - 17377.7930 0.362558991 - 16322.4639 0.408596009 - 15144.4033 0.456384987 - 13872.5674 0.505111992 - 12540.4785 0.553902984 - 11183.4170 0.601903021 - 9835.32715 0.648333013 - 8526.30664 0.692534983 - 7282.24512 0.733981013 - 6123.26074 0.772292018 - 5063.50684 0.807236016 - 4111.24902 0.838724971 - 3270.00122 0.866774976 - 2539.22729 0.891497016 - 1915.30762 0.913065016 - 1392.44995 0.931702971 - 963.134766 0.947658002 - 620.599365 0.961175978 - 357.989502 0.972495019 - 169.421387 0.981844008 - 51.0314941 0.989410996 - 2.48413086 0.995342016 - 0.00000000 1.00000000 diff --git a/tests/main/input/eta79.nc b/tests/main/input/eta79.nc new file mode 100644 index 0000000000000000000000000000000000000000..c9c08db4f0b451903303701158e7b55882ab0cd9 GIT binary patch literal 7424 zcmeHIdsvKF7(X*pNhXC#xiz$lQV|uFoRev~=q3$T8<}d-sHRNg*0Msa#S-m4XV+4W~NcIebX zDt*II9F7TD;c_^fiHr%Wc_t*|Zv8E(7yt-BPkqpH3AWOuYT+4>e0gBKF1>Llv!6{$ z_nk@chY(X9&;$C!x6sEmFc9>>Q>1=Urkj_q$S=^#-!CLk=;|W^{2&Yf-k?iw@N@MQ zQTB+j7e~tC1^6cs$fZi5o4X)f79*9%%VOn%(78&1JXZO7X`VzOlY~Y~?FEdC8U{#0 zT!`r7e&b46aNVV$oXR%@rGvTLFQh}b-qMAv-bgO$CX5lV2HvO zVLOV))WHhz6HZjb#z_@Q872TZU<2@<*v^wG$mwtyZi^2Lrn-xx{V00}+sN<;Cl?2M zhvD`P{<%NpV#D{!KVK`!&u!Tc*NA8KM6lNxVv6Q3B4?6^Z?|Ct-AN*M(Ikx^9xbi*Y|NxW3~8s&y7J(0sK#2nFSy*X()F}z6FSG~V6|X~S^6tw^o@_uXU1#2(xF;Pw3@GYXZnG1` z;_0(VnTXFFvSLHaUbH&;K}S|%4mz(=sd5G#L<<`RI(UxFLoNo_ceO4#ghpZqq9=u@ zbx(!&;mt>=akBC_ijQ31e0n!DrF4!NDn^gU%rwCT?-XIfRwVgmEgA5$9sio~ok8HdQKQ z9h`E?v{r>YYZFY?)~INIXH=BG>a8lYdDEs%>gg(k&7Rg9s;Kze_MfBHm9Dh^;>xpV z1eW~qw2sd|L)q*1K7%5NBveuLM_;a_>$a*yMg5YSa$_qfyU4pU|nMV1(dy%S0(f5sgr(A5PE1KUE1(M8;z%(7$1 zE-zip?5T*VIfzbd?=>`C zy&t`-UeFMsmxJ7KV6j&g@(VTobYaGBgtxU_w#Y!YKhj$|IeQ1vA&n{6M)N?t8Cm`K z>lckq8;}KF*f%{DZCq!R;GDh&^)s98``By+!fr+%vRjI3PITQmLNy;%b#mDGdSP-BWo1fD5fIA9ZesgY8>p&hDmI22Y-vw&+rI3QYFT zv<BJ*qtoR^^>9|b+o0C`diZ@up;;es z1GKS@h+nN~fH9TT)78n1aLydDe5Y9xEPa0O{FghLVC2&>YwLjz;kS~d;-MK2Va)h~ zKEmG3P+c^wXZO|3aNT039KXlS@J@$q&4Iuc*y#LdRaMztl fsbri{#!?MD+@LIXIIMx^8fSIvxT}FQ_gdlaNen`U literal 0 HcmV?d00001 diff --git a/tests/main/input/eta79_not_mono.nc b/tests/main/input/eta79_not_mono.nc new file mode 100644 index 0000000000000000000000000000000000000000..d2bd5a767ff5b5719e99c04d779f603f2db71886 GIT binary patch literal 7424 zcmeHIc~q2D6n`@Vh&Tu;Ah^INr9yzBfSS^KI1KwDFlrHs0}L_(0}i7mX#zrJmMC=) zH8c%W0vA9Q7Zj9D9hY39u`G~87GWS4N-}%zTQWU)?2kItIdjj5hryJFfwBb zAPI5t{zCzuBorPXRYpcdJGsl^Wl_Kw^MP)OfJzR>#Nw*R8bo6VUW}mt;>3v{;4}m{ zJ;v?R9ZJyU**+oL4p05z#0PiNoM-@2n3l7Ma-WZ=8}a7>6I=jpC|iIqAwdx(lS`D+ zq^HZk?Z(k5VKo`h1oWk=1sHT%Mzb%^(V@fjhy{9Q42e4+gPwUYeY)4u$Q?984B_BumM(frlqO!DyUHie)YEb3FXL#udBY7jn=y@zBPAmF1iy`X<28x z8zo@#+4OwG=f3h@cF#VvA@24-K}r!iuTrUsCLThoIwm-J%`QQ%22G#$u04#V;|)aj z%2Ds$df$p|N2qaz@;FM0+1!0R?IgP5A7N}BS%c;ewJ)i%I*l^Af-2wXuSEnDL0LV* zVa(LxkI@0omSm^!GgKZghn+p=MYw|KCh`zUZSf(f0l|G+cv6@ zO<3kB(-sx-YDqTP*sMaQ?@tOdI-^1-c8;2Sqct0C+q!kDdZ7woxBKmeDk}bt1LvrC zN;i7{s)n;@8kW*Iv`#8LL;35EK7*o(BsWs^$6aoq>$Yw{m6jP@#R>J4Urc!&m1osY zwN(7T>9th;C5qEjor#5~Q2E_QSM_h!pyeN%>pU>4K~@-ueLmIHe#QeQ(6zTZCiI0@ zp^LaZ`L)N8eMzpy)AlGL?ciipB6re=U&_(g(5PAAab+kTwb$~TNQX40YzNH) z@it`r&Cl<2I%gvbJh6Xa7TU7ODA^_VBV=i|)c>y8dkAkc^RRs?YCbXa(`l-esBw_% z_IbnN5ivI|3PtIv%@5#8-;<=j|78hwXgBX#5d>FRUq0&6kqG;@FJ3xKkp@qmdSmsa ztC=t(FyAi9HU|b>SBGcb`3z>68b*$Z-vbY1=5&tupa{09kAK^}y%-MO!rgS!xeSV5 zo!Q{5`4_!4r(lhhx}wLe4mNcjZwf7Ffcq0CaO$kj zLZ7h?>)t-7f-x!4v0wXKgtKnhd0Icb1pBk<-Ln;~#5-=4}O~kE3tHz7OMaR-qLnx z`9*r#{`d-LYZINcLDK=_8?G)?XLQ14%f#~CW?iu6;ScBE-PHwS?$_GbOt=F-k)(;hV;NrmmfdqE9`-?MYZN7yk?Y_s(}?9$~wmi4LsMmWMEgT2GZQ?g}(s^;6kqe literal 0 HcmV?d00001 diff --git a/tests/main/input/eta91.nc b/tests/main/input/eta91.nc new file mode 100644 index 0000000000000000000000000000000000000000..794e13bf40909e42e5a5600f88ab7f62b36f7ce1 GIT binary patch literal 7616 zcmeHIdr*^C7Qab&M8tv?j3AnTFHoTh5wvW)2a-ToUMs=UVoL}lj;R6)k?F%06|^Jc z0;RRBOEn;~DBVJ}RxGRAd_Jnh2ZBLFEhdaBt&fOWnRSrLe)r4wX?51w{bP5w)5)16 z=iYnHx%Zsk{hgalDn;BF4}TB7P>47gVTGFHSee5bN=&|ksVYSp-}5Ve5VIx_uqH0# zY3;#BJmTUup8WD$$S)DW3Vr^7V~D)H$>7hd?JaiI&6f;#E_`;*&smPy(|iLEaTf5< z)5mdh2@(mBsD$=%Woi+4 zkbDK`eOE`|4mO@k%JrE^dCnrP0_28-WN&#=j9QJJrUBlPvTK1a|M%zR9??eW5K#D~7k2}C1gW3QY;l>cl*V~D>1`OpQ> z7s?eNFDNL~8S=G8ebJL;(AQ0$&IqT;#6iGBN41Cs-60dX!83IE@1?5$6&5ys$D#ix zETUL)|HoLE6Q^xVm8%jxlN^-wqDf8P$YVw)C8*PpA6*n7yNLc029W;aF5(Hz(u1u1 zygIUj?99CfoF8AiJc1>P=OWsV;W5)#niTmT3JX^13ylVv0Hndf=r8dt))$iQkcH2t z8-}L3Od7TzEFx5=FV?RpSV{MearQFZ(s{DEVROU7!lzu@^{9S2_zC&%*GlqJtnch5 zJ98buJ!dP~qCMA;o)plp+Z=*!nletArc9A5H4M6u^cDnNoz|!=(i8iGULUCjw3coCr7(a3bJDz=?np0Ve{#0t9YjM-s!Vb_2?= zTeEbjH`M3GK(XG@d7#ePG<_}@q*y2z`Z84}Gh_jnQ-iEtdZ<^edYhiI}zgYH4DHM3cLe|BN zjNRT@4(gyySsPWAQ0(IULCySD>$;PFfv8o5=DnAjLEB*0B#hq! zA`?G5;L?{6y3m!H|IJs7wwYVtV95qpu$ZpXT_!pf``gl}LYT%EV(JZ!%mSb?P|SLaS=OD{F&EZCCN9a1!3P zufebV;}kTvXa1&-)G%P#xL0-3sK>wb%c$wO4-@IN};!o>G%ISc;O z5=rBwPAC{xN)_JkfK+&18{Kz?*)QV5(~O^Lf+J7ayWc_7rkLz~=f8zj6UW#Z=N$pd zp&>kDCk3Cp@B+24@E{ycx@3;Mu^&=`71X-pdtpraF*Eks&ESSMH^S=|GBw8TddT_a zAd0qcgN!A6%%=`*fgjStk&j;mgX>9MDZIGF6P?o(!@h?fp*5j;n0;MdD`=|UbP78)Z=g$Arx$*3uT|q-_VdCXA+I)}W&+-FE6Ai648>=nDcsWrxL+F) z^I*mz>^`#9{71KJoLFX}>>ewydV(msxvv-p?ieM>XkCZDm^4?sFRUC#RNcnSHPv`V zZ=&Yv$6N8uPj{FN0d-j09ZaE@8gM{R9X?UG9+!Olz*;c Date: Tue, 12 Dec 2023 15:43:15 -0500 Subject: [PATCH 26/69] last commit of the day, remove driver input. sorry for spamming --- tests/main/driver/input/eta79.txt | 80 --------------------------- tests/main/driver/input/eta91.txt | 92 ------------------------------- 2 files changed, 172 deletions(-) delete mode 100644 tests/main/driver/input/eta79.txt delete mode 100644 tests/main/driver/input/eta91.txt diff --git a/tests/main/driver/input/eta79.txt b/tests/main/driver/input/eta79.txt deleted file mode 100644 index 7ccd6bdb..00000000 --- a/tests/main/driver/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -7284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 diff --git a/tests/main/driver/input/eta91.txt b/tests/main/driver/input/eta91.txt deleted file mode 100644 index 5d6710ad..00000000 --- a/tests/main/driver/input/eta91.txt +++ /dev/null @@ -1,92 +0,0 @@ - 1.00000000 0.00000000 - 1.75000000 0.00000000 - 2.75000000 0.00000000 - 4.09999990 0.00000000 - 5.98951054 0.00000000 - 8.62932968 0.00000000 - 12.2572632 0.00000000 - 17.1510906 0.00000000 - 23.6545467 0.00000000 - 32.1627693 0.00000000 - 43.1310921 0.00000000 - 57.1100426 0.00000000 - 74.6595764 0.00000000 - 96.4470978 0.00000000 - 123.169769 0.00000000 - 155.601318 0.00000000 - 194.594009 0.00000000 - 241.047531 0.00000000 - 295.873840 0.00000000 - 360.046967 0.00000000 - 434.604828 0.00000000 - 520.628723 0.00000000 - 619.154846 0.00000000 - 731.296021 0.00000000 - 858.240906 0.00000000 - 1001.06561 0.00000000 - 1160.92859 0.00000000 - 1339.03992 0.00000000 - 1536.50012 0.00000000 - 1754.48938 0.00000000 - 1994.17834 0.00000000 - 2256.67407 0.00000000 - 2543.17139 0.00000000 - 2854.76392 0.00000000 - 3192.58569 0.00000000 - 3557.75366 0.00000000 - 3951.35107 0.00000000 - 4374.28662 0.00000000 - 4827.11084 0.00000000 - 5310.22168 0.00000000 - 5823.87793 0.00000000 - 6369.04248 0.00000000 - 6948.75244 0.00000000 - 7566.91992 3.50123992e-06 - 8226.34277 2.81484008e-05 - 8931.20996 9.38666999e-05 - 9684.46191 2.28561999e-04 - 10482.2725 5.12343016e-04 - 11318.2793 1.04712998e-03 - 12184.0771 1.95625005e-03 - 13065.5674 3.42317997e-03 - 13953.2207 5.58632007e-03 - 14830.7285 8.65428988e-03 - 15687.2617 1.27844000e-02 - 16508.0645 1.81719996e-02 - 17281.0996 2.49934997e-02 - 17994.2988 3.34198996e-02 - 18636.3223 4.36249003e-02 - 19196.1797 5.57769015e-02 - 19664.0723 7.00351968e-02 - 20030.1914 8.65636021e-02 - 20285.3691 0.105520003 - 20421.5254 0.127051994 - 20430.0684 0.151319996 - 20302.8730 0.178477004 - 20032.3711 0.208675995 - 19611.0664 0.242069006 - 19031.3848 0.278813988 - 18286.6426 0.319043010 - 17377.7930 0.362558991 - 16322.4639 0.408596009 - 15144.4033 0.456384987 - 13872.5674 0.505111992 - 12540.4785 0.553902984 - 11183.4170 0.601903021 - 9835.32715 0.648333013 - 8526.30664 0.692534983 - 7282.24512 0.733981013 - 6123.26074 0.772292018 - 5063.50684 0.807236016 - 4111.24902 0.838724971 - 3270.00122 0.866774976 - 2539.22729 0.891497016 - 1915.30762 0.913065016 - 1392.44995 0.931702971 - 963.134766 0.947658002 - 620.599365 0.961175978 - 357.989502 0.972495019 - 169.421387 0.981844008 - 51.0314941 0.989410996 - 2.48413086 0.995342016 - 0.00000000 1.00000000 From 13141170fac76cb2105abc333714710250aaa12a Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 12 Dec 2023 15:47:05 -0500 Subject: [PATCH 27/69] remove top level input --- input/eta79.txt | 80 ------------------------------------------ input/eta91.txt | 92 ------------------------------------------------- 2 files changed, 172 deletions(-) delete mode 100644 input/eta79.txt delete mode 100644 input/eta91.txt diff --git a/input/eta79.txt b/input/eta79.txt deleted file mode 100644 index 7ccd6bdb..00000000 --- a/input/eta79.txt +++ /dev/null @@ -1,80 +0,0 @@ -300 0 -646.7159 0 -1045.222 0 -1469.188 0 -1897.829 0 -2325.385 0 -2754.396 0 -3191.294 0 -3648.332 0 -4135.675 0 -4668.282 0 -5247.94 0 -5876.271 0 -6554.716 0 -7284.521 0 -8066.738 0 -8902.188 0 -9791.482 0 -10734.99 0 -11626.25 0.001065947 -12372.12 0.004128662 -12990.41 0.009006631 -13496.29 0.01554263 -13902.77 0.02359921 -14220.98 0.03305481 -14460.58 0.0438012 -14629.93 0.05574095 -14736.33 0.06878554 -14786.17 0.08285347 -14785.11 0.09786981 -14738.12 0.1137643 -14649.66 0.130471 -14523.7 0.1479275 -14363.82 0.1660746 -14173.24 0.1848558 -13954.91 0.2042166 -13711.48 0.2241053 -13445.4 0.2444716 -13158.9 0.2652672 -12854.07 0.286445 -12532.8 0.3079604 -12196.85 0.3297701 -11847.88 0.351832 -11487.39 0.3741062 -11116.82 0.3965532 -10737.48 0.4191364 -10350.62 0.4418194 -9957.395 0.4645682 -9558.875 0.48735 -9156.069 0.5101338 -8749.922 0.5328897 -8341.315 0.5555894 -7931.065 0.5782067 -7519.942 0.6007158 -7108.648 0.6230936 -6698.281 0.6452944 -6290.007 0.6672683 -5884.984 0.6889648 -5484.372 0.7103333 -5089.319 0.7313231 -4700.96 0.7518838 -4320.421 0.7719651 -3948.807 0.7915173 -3587.201 0.8104913 -3236.666 0.828839 -2898.237 0.846513 -2572.912 0.8634676 -2261.667 0.8796583 -1965.424 0.8950421 -1685.079 0.9095779 -1421.479 0.9232264 -1175.419 0.9359506 -947.6516 0.9477157 -738.8688 0.9584892 -549.713 0.9682413 -380.7626 0.9769447 -232.5417 0.9845753 -105.481 0.9911126 --0.0008381903 0.9965372 -0 1 diff --git a/input/eta91.txt b/input/eta91.txt deleted file mode 100644 index 5d6710ad..00000000 --- a/input/eta91.txt +++ /dev/null @@ -1,92 +0,0 @@ - 1.00000000 0.00000000 - 1.75000000 0.00000000 - 2.75000000 0.00000000 - 4.09999990 0.00000000 - 5.98951054 0.00000000 - 8.62932968 0.00000000 - 12.2572632 0.00000000 - 17.1510906 0.00000000 - 23.6545467 0.00000000 - 32.1627693 0.00000000 - 43.1310921 0.00000000 - 57.1100426 0.00000000 - 74.6595764 0.00000000 - 96.4470978 0.00000000 - 123.169769 0.00000000 - 155.601318 0.00000000 - 194.594009 0.00000000 - 241.047531 0.00000000 - 295.873840 0.00000000 - 360.046967 0.00000000 - 434.604828 0.00000000 - 520.628723 0.00000000 - 619.154846 0.00000000 - 731.296021 0.00000000 - 858.240906 0.00000000 - 1001.06561 0.00000000 - 1160.92859 0.00000000 - 1339.03992 0.00000000 - 1536.50012 0.00000000 - 1754.48938 0.00000000 - 1994.17834 0.00000000 - 2256.67407 0.00000000 - 2543.17139 0.00000000 - 2854.76392 0.00000000 - 3192.58569 0.00000000 - 3557.75366 0.00000000 - 3951.35107 0.00000000 - 4374.28662 0.00000000 - 4827.11084 0.00000000 - 5310.22168 0.00000000 - 5823.87793 0.00000000 - 6369.04248 0.00000000 - 6948.75244 0.00000000 - 7566.91992 3.50123992e-06 - 8226.34277 2.81484008e-05 - 8931.20996 9.38666999e-05 - 9684.46191 2.28561999e-04 - 10482.2725 5.12343016e-04 - 11318.2793 1.04712998e-03 - 12184.0771 1.95625005e-03 - 13065.5674 3.42317997e-03 - 13953.2207 5.58632007e-03 - 14830.7285 8.65428988e-03 - 15687.2617 1.27844000e-02 - 16508.0645 1.81719996e-02 - 17281.0996 2.49934997e-02 - 17994.2988 3.34198996e-02 - 18636.3223 4.36249003e-02 - 19196.1797 5.57769015e-02 - 19664.0723 7.00351968e-02 - 20030.1914 8.65636021e-02 - 20285.3691 0.105520003 - 20421.5254 0.127051994 - 20430.0684 0.151319996 - 20302.8730 0.178477004 - 20032.3711 0.208675995 - 19611.0664 0.242069006 - 19031.3848 0.278813988 - 18286.6426 0.319043010 - 17377.7930 0.362558991 - 16322.4639 0.408596009 - 15144.4033 0.456384987 - 13872.5674 0.505111992 - 12540.4785 0.553902984 - 11183.4170 0.601903021 - 9835.32715 0.648333013 - 8526.30664 0.692534983 - 7282.24512 0.733981013 - 6123.26074 0.772292018 - 5063.50684 0.807236016 - 4111.24902 0.838724971 - 3270.00122 0.866774976 - 2539.22729 0.891497016 - 1915.30762 0.913065016 - 1392.44995 0.931702971 - 963.134766 0.947658002 - 620.599365 0.961175978 - 357.989502 0.972495019 - 169.421387 0.981844008 - 51.0314941 0.989410996 - 2.48413086 0.995342016 - 0.00000000 1.00000000 From 4c72d51bf1fd8b408915d7c6d55cea565ee1ae98 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 19 Dec 2023 13:02:03 -0500 Subject: [PATCH 28/69] fix circular import problems --- .../configs/baroclinic_c12_write_restart.yaml | 5 ++ driver/pace/driver/diagnostics.py | 9 ++-- driver/pace/driver/driver.py | 15 ++---- driver/pace/driver/grid.py | 12 ++--- driver/pace/driver/initialization.py | 51 +++++++++---------- driver/pace/driver/state.py | 21 ++++---- .../fv3core/initialization/analytic_init.py | 2 +- .../pace/fv3core/initialization/init_utils.py | 7 ++- fv3core/pace/fv3core/stencils/a2b_ord4.py | 2 +- fv3core/pace/fv3core/stencils/c_sw.py | 2 +- fv3core/pace/fv3core/stencils/d2a2c_vect.py | 2 +- fv3core/pace/fv3core/stencils/d_sw.py | 2 +- fv3core/pace/fv3core/stencils/del2cubed.py | 2 +- fv3core/pace/fv3core/stencils/delnflux.py | 2 +- .../fv3core/stencils/divergence_damping.py | 2 +- fv3core/pace/fv3core/stencils/dyn_core.py | 2 +- fv3core/pace/fv3core/stencils/fv_dynamics.py | 2 +- fv3core/pace/fv3core/stencils/fvtp2d.py | 2 +- fv3core/pace/fv3core/stencils/fxadv.py | 2 +- fv3core/pace/fv3core/stencils/nh_p_grad.py | 2 +- fv3core/pace/fv3core/stencils/updatedzd.py | 2 +- .../fv3core/testing/translate_fvdynamics.py | 2 +- physics/pace/physics/stencils/microphysics.py | 2 +- physics/pace/physics/stencils/physics.py | 2 +- stencils/pace/stencils/c2l_ord.py | 2 +- stencils/pace/stencils/fv_update_phys.py | 2 +- stencils/pace/stencils/testing/grid.py | 4 +- stencils/pace/stencils/update_atmos_state.py | 2 +- stencils/pace/stencils/update_dwind_phys.py | 2 +- util/pace/util/grid/__init__.py | 1 - util/pace/util/grid/eta.py | 2 +- util/pace/util/grid/generation.py | 18 +++---- util/pace/util/grid/helper.py | 4 +- util/pace/util/grid/utils.py | 23 --------- 34 files changed, 94 insertions(+), 120 deletions(-) delete mode 100644 util/pace/util/grid/utils.py diff --git a/driver/examples/configs/baroclinic_c12_write_restart.yaml b/driver/examples/configs/baroclinic_c12_write_restart.yaml index 55e5b2b1..7bca3032 100644 --- a/driver/examples/configs/baroclinic_c12_write_restart.yaml +++ b/driver/examples/configs/baroclinic_c12_write_restart.yaml @@ -92,3 +92,8 @@ physics_config: hydrostatic: false nwat: 6 do_qa: true + +grid_config: + type: generated + config: + eta_file: "tests/main/input/eta79.nc" diff --git a/driver/pace/driver/diagnostics.py b/driver/pace/driver/diagnostics.py index 36f5960a..d417f903 100644 --- a/driver/pace/driver/diagnostics.py +++ b/driver/pace/driver/diagnostics.py @@ -7,11 +7,10 @@ import pace.driver import pace.dsl import pace.stencils -import pace.util -import pace.util.grid from pace.dsl.dace.orchestration import dace_inhibitor from pace.fv3core.dycore_state import DycoreState from pace.util.constants import RGRAV +from pace.util.grid.helper import GridData from .state import DriverState @@ -28,7 +27,7 @@ def store(self, time: Union[datetime, timedelta], state: DriverState): ... @abc.abstractmethod - def store_grid(self, grid_data: pace.util.grid.GridData): + def store_grid(self, grid_data: GridData): ... @abc.abstractmethod @@ -198,7 +197,7 @@ def _get_z_select_state(self, state: DycoreState): z_select_state.update(zselect.select_data(state)) return z_select_state - def store_grid(self, grid_data: pace.util.grid.GridData): + def store_grid(self, grid_data: GridData): zarr_grid = { "lat": grid_data.lat, "lon": grid_data.lon, @@ -218,7 +217,7 @@ class NullDiagnostics(Diagnostics): def store(self, time: Union[datetime, timedelta], state: DriverState): pass - def store_grid(self, grid_data: pace.util.grid.GridData): + def store_grid(self, grid_data: GridData): pass def cleanup(self): diff --git a/driver/pace/driver/driver.py b/driver/pace/driver/driver.py index c8d1490f..3694d69d 100644 --- a/driver/pace/driver/driver.py +++ b/driver/pace/driver/driver.py @@ -13,8 +13,6 @@ import pace.dsl import pace.physics import pace.stencils -import pace.util -import pace.util.grid from pace import fv3core from pace.driver.safety_checks import SafetyChecker from pace.dsl.dace.dace_config import DaceConfig @@ -29,6 +27,7 @@ CubedSphereCommunicator, TileCommunicator, ) +from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData from pace.util.logging import pace_log from . import diagnostics @@ -165,11 +164,7 @@ def get_grid( self, communicator: pace.util.Communicator, quantity_factory: Optional[pace.util.QuantityFactory] = None, - ) -> Tuple[ - pace.util.grid.DampingCoefficients, - pace.util.grid.DriverGridData, - pace.util.grid.GridData, - ]: + ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: if quantity_factory is None: sizer = pace.util.SubtileGridSizer.from_tile_params( nx_tile=self.nx_tile, @@ -193,9 +188,9 @@ def get_grid( def get_driver_state( self, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, quantity_factory: Optional[pace.util.QuantityFactory] = None, stencil_factory: Optional[pace.dsl.StencilFactory] = None, ) -> DriverState: diff --git a/driver/pace/driver/grid.py b/driver/pace/driver/grid.py index 33a0b43e..90e7cd23 100644 --- a/driver/pace/driver/grid.py +++ b/driver/pace/driver/grid.py @@ -11,19 +11,17 @@ import pace.util.grid from pace.stencils.testing import TranslateGrid from pace.util import Communicator, QuantityFactory -from pace.util.grid import ( - DampingCoefficients, - DriverGridData, - GridData, - MetricTerms, - direct_transform, -) from pace.util.grid.helper import ( AngleGridData, ContravariantGridData, + DampingCoefficients, + DriverGridData, + GridData, HorizontalGridData, + MetricTerms, VerticalGridData, ) +from pace.util.grid.stretch_transformation import direct_transform from pace.util.logging import pace_log from pace.util.namelist import Namelist diff --git a/driver/pace/driver/initialization.py b/driver/pace/driver/initialization.py index 3cf52376..651da6f5 100644 --- a/driver/pace/driver/initialization.py +++ b/driver/pace/driver/initialization.py @@ -12,14 +12,13 @@ import pace.fv3core.initialization.analytic_init as analytic_init import pace.physics import pace.stencils -import pace.util -import pace.util.grid from pace import fv3core from pace.dsl.dace.orchestration import DaceConfig from pace.dsl.stencil import StencilFactory from pace.dsl.stencil_config import CompilationConfig from pace.fv3core.testing import TranslateFVDynamics from pace.stencils.testing import TranslateGrid +from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData from pace.util.namelist import Namelist from .registry import Registry @@ -37,9 +36,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: ... @@ -74,9 +73,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: return self.config.get_driver_state( quantity_factory=quantity_factory, @@ -106,9 +105,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: dycore_state = analytic_init.init_analytic_state( analytic_init_case=self.case, @@ -149,9 +148,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: state = _restart_driver_state( self.path, @@ -198,9 +197,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: state = _restart_driver_state( self.path, @@ -269,9 +268,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: backend = quantity_factory.zeros( dims=[pace.util.X_DIM, pace.util.Y_DIM], units="unknown" @@ -337,18 +336,18 @@ class PredefinedStateInit(Initializer): dycore_state: fv3core.DycoreState physics_state: pace.physics.PhysicsState tendency_state: TendencyState - grid_data: pace.util.grid.GridData - damping_coefficients: pace.util.grid.DampingCoefficients - driver_grid_data: pace.util.grid.DriverGridData + grid_data: GridData + damping_coefficients: DampingCoefficients + driver_grid_data: DriverGridData start_time: datetime = datetime(2016, 8, 1) def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> DriverState: return DriverState( dycore_state=self.dycore_state, diff --git a/driver/pace/driver/state.py b/driver/pace/driver/state.py index 54241b1d..79c375ef 100644 --- a/driver/pace/driver/state.py +++ b/driver/pace/driver/state.py @@ -5,10 +5,9 @@ import pace.dsl.gt4py_utils as gt_utils import pace.physics -import pace.util -import pace.util.grid from pace import fv3core from pace.dsl.typing import Float +from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData @dataclasses.dataclass() @@ -60,9 +59,9 @@ class DriverState: dycore_state: fv3core.DycoreState physics_state: pace.physics.PhysicsState tendency_state: TendencyState - grid_data: pace.util.grid.GridData - damping_coefficients: pace.util.grid.DampingCoefficients - driver_grid_data: pace.util.grid.DriverGridData + grid_data: GridData + damping_coefficients: DampingCoefficients + driver_grid_data: DriverGridData # TODO: the driver_config argument here isn't type hinted from # import due to a circular dependency. This can be fixed by refactoring @@ -72,9 +71,9 @@ def load_state_from_restart( cls, restart_path: str, driver_config, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ) -> "DriverState": comm = driver_config.comm_config.get_comm() communicator = pace.util.Communicator.from_layout( @@ -173,9 +172,9 @@ def _restart_driver_state( rank: int, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: pace.util.grid.DampingCoefficients, - driver_grid_data: pace.util.grid.DriverGridData, - grid_data: pace.util.grid.GridData, + damping_coefficients: DampingCoefficients, + driver_grid_data: DriverGridData, + grid_data: GridData, ): fs = pace.util.get_fs(path) diff --git a/fv3core/pace/fv3core/initialization/analytic_init.py b/fv3core/pace/fv3core/initialization/analytic_init.py index e8f6b07e..4f40adbf 100644 --- a/fv3core/pace/fv3core/initialization/analytic_init.py +++ b/fv3core/pace/fv3core/initialization/analytic_init.py @@ -2,7 +2,7 @@ import pace.util as fv3util from pace.fv3core.dycore_state import DycoreState -from pace.util.grid import GridData +from pace.util.grid.helper import GridData class MetaEnumStr(EnumMeta): diff --git a/fv3core/pace/fv3core/initialization/init_utils.py b/fv3core/pace/fv3core/initialization/init_utils.py index 42252e87..bfb55f71 100644 --- a/fv3core/pace/fv3core/initialization/init_utils.py +++ b/fv3core/pace/fv3core/initialization/init_utils.py @@ -8,8 +8,11 @@ import pace.util.constants as constants from pace.dsl.typing import Float from pace.fv3core.dycore_state import DycoreState -from pace.util.grid import lon_lat_midpoint -from pace.util.grid.gnomonic import get_lonlat_vect, get_unit_vector_direction +from pace.util.grid.gnomonic import ( + get_lonlat_vect, + get_unit_vector_direction, + lon_lat_midpoint, +) # maximum windspeed amplitude - close to windspeed of zonal-mean time-mean diff --git a/fv3core/pace/fv3core/stencils/a2b_ord4.py b/fv3core/pace/fv3core/stencils/a2b_ord4.py index 95b6ab02..9dba2001 100644 --- a/fv3core/pace/fv3core/stencils/a2b_ord4.py +++ b/fv3core/pace/fv3core/stencils/a2b_ord4.py @@ -17,7 +17,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldI, FloatFieldIJ from pace.fv3core.stencils.basic_operations import copy_defn from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData # comact 4-pt cubic interpolation diff --git a/fv3core/pace/fv3core/stencils/c_sw.py b/fv3core/pace/fv3core/stencils/c_sw.py index e74b9319..c5ce83e9 100644 --- a/fv3core/pace/fv3core/stencils/c_sw.py +++ b/fv3core/pace/fv3core/stencils/c_sw.py @@ -14,7 +14,7 @@ from pace.fv3core.stencils.d2a2c_vect import DGrid2AGrid2CGridVectors from pace.stencils import corners from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData def zero_delpc_ptc(delpc: FloatField, ptc: FloatField): diff --git a/fv3core/pace/fv3core/stencils/d2a2c_vect.py b/fv3core/pace/fv3core/stencils/d2a2c_vect.py index 1b3e4d33..a01a7503 100644 --- a/fv3core/pace/fv3core/stencils/d2a2c_vect.py +++ b/fv3core/pace/fv3core/stencils/d2a2c_vect.py @@ -8,7 +8,7 @@ from pace.fv3core.stencils.a2b_ord4 import a1, a2, lagrange_x_func, lagrange_y_func from pace.stencils import corners from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData c1 = -2.0 / 14.0 diff --git a/fv3core/pace/fv3core/stencils/d_sw.py b/fv3core/pace/fv3core/stencils/d_sw.py index e08af776..301dca78 100644 --- a/fv3core/pace/fv3core/stencils/d_sw.py +++ b/fv3core/pace/fv3core/stencils/d_sw.py @@ -24,7 +24,7 @@ from pace.fv3core.stencils.xtp_u import advect_u_along_x from pace.fv3core.stencils.ytp_v import advect_v_along_y from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData dcon_threshold = 1e-5 diff --git a/fv3core/pace/fv3core/stencils/del2cubed.py b/fv3core/pace/fv3core/stencils/del2cubed.py index d4676eac..d06b44c8 100644 --- a/fv3core/pace/fv3core/stencils/del2cubed.py +++ b/fv3core/pace/fv3core/stencils/del2cubed.py @@ -7,7 +7,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldIJ, cast_to_index3d from pace.fv3core.stencils.basic_operations import copy_defn from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import DampingCoefficients +from pace.util.grid.helper import DampingCoefficients # diff --git a/fv3core/pace/fv3core/stencils/delnflux.py b/fv3core/pace/fv3core/stencils/delnflux.py index 898a8a7f..9c76e695 100644 --- a/fv3core/pace/fv3core/stencils/delnflux.py +++ b/fv3core/pace/fv3core/stencils/delnflux.py @@ -15,7 +15,7 @@ from pace.dsl.stencil import StencilFactory, get_stencils_with_varied_bounds from pace.dsl.typing import Float, FloatField, FloatFieldIJ, FloatFieldK from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import DampingCoefficients +from pace.util.grid.helper import DampingCoefficients def calc_damp( diff --git a/fv3core/pace/fv3core/stencils/divergence_damping.py b/fv3core/pace/fv3core/stencils/divergence_damping.py index a3e5a32b..ba03dd86 100644 --- a/fv3core/pace/fv3core/stencils/divergence_damping.py +++ b/fv3core/pace/fv3core/stencils/divergence_damping.py @@ -21,7 +21,7 @@ ) from pace.fv3core.stencils.d2a2c_vect import contravariant from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData @gtscript.function diff --git a/fv3core/pace/fv3core/stencils/dyn_core.py b/fv3core/pace/fv3core/stencils/dyn_core.py index bef8f6f0..6769a9b9 100644 --- a/fv3core/pace/fv3core/stencils/dyn_core.py +++ b/fv3core/pace/fv3core/stencils/dyn_core.py @@ -42,7 +42,7 @@ Z_DIM, Z_INTERFACE_DIM, ) -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData HUGE_R = 1.0e40 diff --git a/fv3core/pace/fv3core/stencils/fv_dynamics.py b/fv3core/pace/fv3core/stencils/fv_dynamics.py index 8e82f549..ba7225e6 100644 --- a/fv3core/pace/fv3core/stencils/fv_dynamics.py +++ b/fv3core/pace/fv3core/stencils/fv_dynamics.py @@ -21,7 +21,7 @@ from pace.fv3core.stencils.remapping import LagrangianToEulerian from pace.stencils.c2l_ord import CubedToLatLon from pace.util import X_DIM, Y_DIM, Z_INTERFACE_DIM, Timer, constants -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData from pace.util.logging import pace_log from pace.util.mpi import MPI diff --git a/fv3core/pace/fv3core/stencils/fvtp2d.py b/fv3core/pace/fv3core/stencils/fvtp2d.py index 3369bcab..6e30bea3 100644 --- a/fv3core/pace/fv3core/stencils/fvtp2d.py +++ b/fv3core/pace/fv3core/stencils/fvtp2d.py @@ -12,7 +12,7 @@ from pace.fv3core.stencils.xppm import XPiecewiseParabolic from pace.fv3core.stencils.yppm import YPiecewiseParabolic from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData @gtscript.function diff --git a/fv3core/pace/fv3core/stencils/fxadv.py b/fv3core/pace/fv3core/stencils/fxadv.py index 1527c898..6b854b2b 100644 --- a/fv3core/pace/fv3core/stencils/fxadv.py +++ b/fv3core/pace/fv3core/stencils/fxadv.py @@ -11,7 +11,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.fv3core.stencils.d2a2c_vect import contravariant -from pace.util.grid import GridData +from pace.util.grid.helper import GridData def main_uc_vc_contra( diff --git a/fv3core/pace/fv3core/stencils/nh_p_grad.py b/fv3core/pace/fv3core/stencils/nh_p_grad.py index 5504ba2b..4b56b847 100644 --- a/fv3core/pace/fv3core/stencils/nh_p_grad.py +++ b/fv3core/pace/fv3core/stencils/nh_p_grad.py @@ -6,7 +6,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.fv3core.stencils.a2b_ord4 import AGrid2BGridFourthOrder from pace.util import X_DIM, Y_DIM, Z_INTERFACE_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData def set_k0_and_calc_wk( diff --git a/fv3core/pace/fv3core/stencils/updatedzd.py b/fv3core/pace/fv3core/stencils/updatedzd.py index 92dd1c20..dbc74667 100644 --- a/fv3core/pace/fv3core/stencils/updatedzd.py +++ b/fv3core/pace/fv3core/stencils/updatedzd.py @@ -18,7 +18,7 @@ Z_DIM, Z_INTERFACE_DIM, ) -from pace.util.grid import DampingCoefficients, GridData +from pace.util.grid.helper import DampingCoefficients, GridData DZ_MIN = constants.DZ_MIN diff --git a/fv3core/pace/fv3core/testing/translate_fvdynamics.py b/fv3core/pace/fv3core/testing/translate_fvdynamics.py index cdd773f7..3561d36c 100644 --- a/fv3core/pace/fv3core/testing/translate_fvdynamics.py +++ b/fv3core/pace/fv3core/testing/translate_fvdynamics.py @@ -12,7 +12,7 @@ from pace.fv3core.dycore_state import DycoreState from pace.stencils.testing import ParallelTranslateBaseSlicing from pace.stencils.testing.translate import TranslateFortranData2Py -from pace.util.grid import GridData +from pace.util.grid.helper import GridData class TranslateDycoreFortranData2Py(TranslateFortranData2Py): diff --git a/physics/pace/physics/stencils/microphysics.py b/physics/pace/physics/stencils/microphysics.py index 064bc1c7..5da2676a 100644 --- a/physics/pace/physics/stencils/microphysics.py +++ b/physics/pace/physics/stencils/microphysics.py @@ -18,7 +18,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ, Int from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData from .._config import PhysicsConfig diff --git a/physics/pace/physics/stencils/physics.py b/physics/pace/physics/stencils/physics.py index a4dfdb2f..cfc8f9f0 100644 --- a/physics/pace/physics/stencils/physics.py +++ b/physics/pace/physics/stencils/physics.py @@ -22,7 +22,7 @@ from pace.physics.stencils.get_prs_fv3 import get_prs_fv3 from pace.physics.stencils.microphysics import Microphysics from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData from .._config import PhysicsConfig diff --git a/stencils/pace/stencils/c2l_ord.py b/stencils/pace/stencils/c2l_ord.py index e4610b69..ed0d5834 100644 --- a/stencils/pace/stencils/c2l_ord.py +++ b/stencils/pace/stencils/c2l_ord.py @@ -14,7 +14,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.util.constants import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid import GridData +from pace.util.grid.helper import GridData A1 = 0.5625 diff --git a/stencils/pace/stencils/fv_update_phys.py b/stencils/pace/stencils/fv_update_phys.py index fe027cd0..2fe28b2e 100644 --- a/stencils/pace/stencils/fv_update_phys.py +++ b/stencils/pace/stencils/fv_update_phys.py @@ -11,7 +11,7 @@ from pace.stencils.c2l_ord import CubedToLatLon from pace.stencils.update_dwind_phys import AGrid2DGridPhysics from pace.util import X_DIM, Y_DIM -from pace.util.grid import DriverGridData, GridData +from pace.util.grid.helper import DriverGridData, GridData # TODO: This is the same as moist_cv.py in fv3core, should move to integration dir diff --git a/stencils/pace/stencils/testing/grid.py b/stencils/pace/stencils/testing/grid.py index 4cf623b1..e8d7919d 100644 --- a/stencils/pace/stencils/testing/grid.py +++ b/stencils/pace/stencils/testing/grid.py @@ -6,13 +6,13 @@ import pace.util from pace.dsl import gt4py_utils as utils from pace.dsl.stencil import GridIndexing -from pace.util.grid import ( +from pace.util.grid.generation import GridDefinitions +from pace.util.grid.helper import ( AngleGridData, ContravariantGridData, DampingCoefficients, DriverGridData, GridData, - GridDefinitions, HorizontalGridData, MetricTerms, VerticalGridData, diff --git a/stencils/pace/stencils/update_atmos_state.py b/stencils/pace/stencils/update_atmos_state.py index 789e40ea..d9b777ad 100644 --- a/stencils/pace/stencils/update_atmos_state.py +++ b/stencils/pace/stencils/update_atmos_state.py @@ -9,7 +9,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField from pace.stencils.fv_update_phys import ApplyPhysicsToDycore -from pace.util.grid import DriverGridData, GridData +from pace.util.grid.helper import DriverGridData, GridData # TODO: when this file is not importable from physics or fv3core, import diff --git a/stencils/pace/stencils/update_dwind_phys.py b/stencils/pace/stencils/update_dwind_phys.py index f5d3242d..5823a989 100644 --- a/stencils/pace/stencils/update_dwind_phys.py +++ b/stencils/pace/stencils/update_dwind_phys.py @@ -5,7 +5,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import FloatField, FloatFieldI, FloatFieldIJ from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid import DriverGridData +from pace.util.grid.helper import DriverGridData def set_winds_zero( diff --git a/util/pace/util/grid/__init__.py b/util/pace/util/grid/__init__.py index 2a755d0c..5e488743 100644 --- a/util/pace/util/grid/__init__.py +++ b/util/pace/util/grid/__init__.py @@ -21,4 +21,3 @@ VerticalGridData, ) from .stretch_transformation import direct_transform -from .utils import compute_eta, vertical_coordinate diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 6f476461..ff459e68 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -4,7 +4,7 @@ import numpy as np import xarray as xr -from .utils import compute_eta +from pace.fv3core.initialization.init_utils import compute_eta @dataclass diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index a7a2258a..a0ba5d54 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -581,12 +581,12 @@ def dyc(self) -> util.Quantity: self._dx_center, self._dy_center = self._compute_dxdy_center() return self._dy_center - def ks(self, eta_file="") -> util.Quantity: + def ks(self, eta_file="None") -> util.Quantity: """ number of levels where the vertical coordinate is purely pressure-based """ if self._ks is None: - if not eta_file == "": + if not eta_file == "None": ( self._ks, self._ptop, @@ -597,13 +597,13 @@ def ks(self, eta_file="") -> util.Quantity: raise IOError("eta file is not specified") return self._ks - def ak(self, eta_file="") -> util.Quantity: + def ak(self, eta_file="None") -> util.Quantity: """ the ak coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._ak is None: - if not eta_file == "": + if not eta_file == "None": ( self._ks, self._ptop, @@ -614,13 +614,13 @@ def ak(self, eta_file="") -> util.Quantity: raise IOError("eta file is not specified") return self._ak - def bk(self, eta_file="") -> util.Quantity: + def bk(self, eta_file="None") -> util.Quantity: """ the bk coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._bk is None: - if not eta_file == "": + if not eta_file == "None": ( self._ks, self._ptop, @@ -631,12 +631,12 @@ def bk(self, eta_file="") -> util.Quantity: raise IOError("eta file is not specified") return self._bk - def ptop(self, eta_file="") -> util.Quantity: + def ptop(self, eta_file="None") -> util.Quantity: """ the pressure of the top of atmosphere level """ if self._ptop is None: - if not eta_file == "": + if not eta_file == "None": ( self._ks, self._ptop, @@ -2136,7 +2136,7 @@ def _compute_area_c_cartesian(self): area_cgrid_64.data[:, :] = self._dx_const * self._dy_const return quantity_cast_to_model_float(self.quantity_factory, area_cgrid_64) - def _set_hybrid_pressure_coefficients(self, eta_file=""): + def _set_hybrid_pressure_coefficients(self, eta_file="None"): ks = self.quantity_factory.zeros( [], "", diff --git a/util/pace/util/grid/helper.py b/util/pace/util/grid/helper.py index 9b7b3d3f..321c4def 100644 --- a/util/pace/util/grid/helper.py +++ b/util/pace/util/grid/helper.py @@ -144,7 +144,7 @@ def __post_init__(self): @classmethod def new_from_metric_terms( - cls, metric_terms: MetricTerms, eta_file="" + cls, metric_terms: MetricTerms, eta_file="None" ) -> "VerticalGridData": return cls( ak=metric_terms.ak(eta_file), @@ -323,7 +323,7 @@ def __init__( self._fC_agrid = None @classmethod - def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file=""): + def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file="None"): horizontal_data = HorizontalGridData.new_from_metric_terms(metric_terms) vertical_data = VerticalGridData.new_from_metric_terms( metric_terms, eta_file=eta_file diff --git a/util/pace/util/grid/utils.py b/util/pace/util/grid/utils.py deleted file mode 100644 index 17a15568..00000000 --- a/util/pace/util/grid/utils.py +++ /dev/null @@ -1,23 +0,0 @@ -import math - - -eta_0 = 0.252 -surface_pressure = 1.0e5 # units of (Pa), from Table VI of DCMIP2016 - - -def vertical_coordinate(eta_value): - """ - Equation (1) JRMS2006 - computes eta_v, the auxiliary variable vertical coordinate - """ - return (eta_value - eta_0) * math.pi * 0.5 - - -def compute_eta(ak, bk): - """ - Equation (1) JRMS2006 - eta is the vertical coordinate and eta_v is an auxiliary vertical coordinate - """ - eta = 0.5 * ((ak[:-1] + ak[1:]) / surface_pressure + bk[:-1] + bk[1:]) - eta_v = vertical_coordinate(eta) - return eta, eta_v From d650ed073bee9aa9b31a7a5bf6006574732d8904 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 19 Dec 2023 13:16:04 -0500 Subject: [PATCH 29/69] modify eta_file readin for test_restart_serial --- tests/main/driver/test_restart_serial.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/main/driver/test_restart_serial.py b/tests/main/driver/test_restart_serial.py index 113dec55..51ce615a 100644 --- a/tests/main/driver/test_restart_serial.py +++ b/tests/main/driver/test_restart_serial.py @@ -66,13 +66,12 @@ def test_restart_save_to_disk(): sizer=sizer, backend=backend ) + eta_file = driver_config.grid_config.config.eta_file ( damping_coefficients, driver_grid_data, grid_data, - ) = pace.driver.GeneratedGridConfig( - eta_file="tests/main/input/eta79.nc" - ).get_grid( + ) = pace.driver.GeneratedGridConfig(eta_file=eta_file).get_grid( quantity_factory, communicator ) init = AnalyticInit() From a8a7df499c0bb7890b14d80eb3a5387427a1cea8 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 19 Dec 2023 15:54:25 -0500 Subject: [PATCH 30/69] comment out 91 test --- tests/main/grid/test_eta.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 3dfb6fa3..3c1fbf66 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -10,12 +10,15 @@ def set_answers(config_file): - eta_file = "tests/main/input/eta79.nc" + if "79" in config_file: + eta_file = "tests/main/input/eta79.nc" + if "91" in config_file: + eta_file = "tests/main/input/eta91.nc" data = xr.open_dataset(eta_file) return data["ak"].values, data["bk"].values -def test_set_hybrid_pressure_coefficients_correct(): +def test_set_hybrid_pressure_coefficients_79_correct(): config_file = "tests/main/grid/input/test_config_79.yaml" with open(config_file, "r") as f: @@ -41,6 +44,32 @@ def test_set_hybrid_pressure_coefficients_correct(): raise ValueError("Unexpected value of bk") +# def test_set_hybrid_pressure_coefficients_91_correct(): +# +# config_file = "tests/main/grid/input/test_config_91.yaml" +# with open(config_file, "r") as f: +# yaml_config = yaml.safe_load(f) +# +# driver_config = pace.driver.DriverConfig.from_dict(yaml_config) +# driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) +# driver = pace.driver.Driver(config=driver_config) +# +# p_results = driver.state.grid_data.p.data +# ak_results = driver.state.grid_data.ak.data +# bk_results = driver.state.grid_data.bk.data +# ak_answers, bk_answers = set_answers(config_file) +# +# if ak_answers.size != ak_results.size: +# raise ValueError("Unexpected size of bk") +# if bk_answers.size != bk_results.size: +# raise ValueError("Unexpected size of ak") +# +# if not np.array_equal(ak_answers, ak_results): +# raise ValueError("Unexpected value of ak") +# if not np.array_equal(bk_answers, bk_results): +# raise ValueError("Unexpected value of bk") + + @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile(): From 6624a92042810937b2dce1a12e9e8c16bdfb9ac7 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 2 Jan 2024 11:35:49 -0500 Subject: [PATCH 31/69] rm safety checks --- tests/main/grid/input/test_config_91.yaml | 106 ++++++++++++++++++++++ tests/main/grid/test_eta.py | 50 +++++----- tests/main/input/eta79.nc | Bin 7424 -> 7424 bytes tests/main/input/eta79_not_mono.nc | Bin 7424 -> 7424 bytes tests/main/input/eta91.nc | Bin 7616 -> 7616 bytes 5 files changed, 132 insertions(+), 24 deletions(-) create mode 100644 tests/main/grid/input/test_config_91.yaml diff --git a/tests/main/grid/input/test_config_91.yaml b/tests/main/grid/input/test_config_91.yaml new file mode 100644 index 00000000..d66f897c --- /dev/null +++ b/tests/main/grid/input/test_config_91.yaml @@ -0,0 +1,106 @@ +#modified version of baroclinic_c12_dp.yaml +stencil_config: + compilation_config: + backend: numpy + rebuild: false + validate_args: true + format_source: false + device_sync: false +grid_config: + type: generated + config: + grid_type: 4 + dx_const: 3000.0 + dy_const: 3000.0 + deglat: 10.0 + eta_file: 'tests/main/input/eta91.nc' +initialization: + type: analytic + config: + case: baroclinic +performance_config: + collect_performance: true + experiment_name: c12_baroclinic +nx_tile: 12 +nz: 91 +dt_atmos: 225 +minutes: 15 +layout: + - 1 + - 1 +diagnostics_config: + path: output + output_format: netcdf + names: + - u + - v + - ua + - va + - pt + - delp + - qvapor + - qliquid + - qice + - qrain + - qsnow + - qgraupel + z_select: + - level: 65 + names: + - pt +dycore_config: + a_imp: 1.0 + beta: 0. + consv_te: 0. + d2_bg: 0. + d2_bg_k1: 0.2 + d2_bg_k2: 0.1 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.5 + delt_max: 0.002 + do_sat_adj: true + do_vort_damp: true + fill: true + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + k_split: 1 + ke_bg: 0. + kord_mt: 9 + kord_tm: -9 + kord_tr: 9 + kord_wz: 9 + n_split: 1 + nord: 3 + nwat: 6 + p_fac: 0.05 + rf_cutoff: 3000. + rf_fast: true + tau: 10. + vtdm4: 0.06 + z_tracer: true + do_qa: true + tau_i2s: 1000. + tau_g2v: 1200. + ql_gen: 0.001 + ql_mlt: 0.002 + qs_mlt: 0.000001 + qi_lim: 1.0 + dw_ocean: 0.1 + dw_land: 0.15 + icloud_f: 0 + tau_l2v: 300. + tau_v2l: 90. + fv_sg_adj: 0 + n_sponge: 48 + u_max: 355.0 + +physics_config: + hydrostatic: false + nwat: 6 + do_qa: true diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 3c1fbf66..8af44cd0 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -43,31 +43,33 @@ def test_set_hybrid_pressure_coefficients_79_correct(): if not np.array_equal(bk_answers, bk_results): raise ValueError("Unexpected value of bk") + driver.safety_checker.clear_all_checks() -# def test_set_hybrid_pressure_coefficients_91_correct(): -# -# config_file = "tests/main/grid/input/test_config_91.yaml" -# with open(config_file, "r") as f: -# yaml_config = yaml.safe_load(f) -# -# driver_config = pace.driver.DriverConfig.from_dict(yaml_config) -# driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) -# driver = pace.driver.Driver(config=driver_config) -# -# p_results = driver.state.grid_data.p.data -# ak_results = driver.state.grid_data.ak.data -# bk_results = driver.state.grid_data.bk.data -# ak_answers, bk_answers = set_answers(config_file) -# -# if ak_answers.size != ak_results.size: -# raise ValueError("Unexpected size of bk") -# if bk_answers.size != bk_results.size: -# raise ValueError("Unexpected size of ak") -# -# if not np.array_equal(ak_answers, ak_results): -# raise ValueError("Unexpected value of ak") -# if not np.array_equal(bk_answers, bk_results): -# raise ValueError("Unexpected value of bk") + +def test_set_hybrid_pressure_coefficients_91_correct(): + + config_file = "tests/main/grid/input/test_config_91.yaml" + with open(config_file, "r") as f: + yaml_config = yaml.safe_load(f) + + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) + driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) + driver = pace.driver.Driver(config=driver_config) + + p_results = driver.state.grid_data.p.data + ak_results = driver.state.grid_data.ak.data + bk_results = driver.state.grid_data.bk.data + ak_answers, bk_answers = set_answers(config_file) + + if ak_answers.size != ak_results.size: + raise ValueError("Unexpected size of bk") + if bk_answers.size != bk_results.size: + raise ValueError("Unexpected size of ak") + + if not np.array_equal(ak_answers, ak_results): + raise ValueError("Unexpected value of ak") + if not np.array_equal(bk_answers, bk_results): + raise ValueError("Unexpected value of bk") @pytest.mark.xfail diff --git a/tests/main/input/eta79.nc b/tests/main/input/eta79.nc index c9c08db4f0b451903303701158e7b55882ab0cd9..0720e33766807b1975fc9a5b728009cb8fe0bb9d 100644 GIT binary patch delta 688 zcmZp$YOtDM&&V>-L8D%j0SFjbKqLq-W#_(!uo&3HKnz9}Mkt>-JJ-;d3BqB6YJ+ka zm=d$gnNg*nTn473>}II(0slmJOWd@ndzky(^w(?;VMB$FpYJxRIAs<+#9)cu`3ykQ~0AOUf012ph?e1I;Q z?7-?N3UZUf_OE9_s$pJX1ceJ@;N)X0^8R{IH*&6BOrIsY8q}iJ2S?U?< zrlgjo=HwUTrskFCWTd2-+8XK^8tEC8yDWVMu@Q*`SuwevS%MX2yD!Vt%r@@H6ItUK v876;Zl~aMG2bd;UB7pJVUYe6S*^w=B5{H5mELp*l69-h0G1F!%j$uf^m#W~Iq7Oo~hsStr*s zz2kytv@M#%KDnGZK#4;LBmgu(0wU1>wFPD}6WHX*f0K!PCHb{|Rs5vV{F{+`w8oEnY`a64g^Y{S6VDbi5U)8^*W*0yruyA37x`HV& z+ZgJ49@oj5Z1Q?aKpBuoS!z*nW`3TnkxpJ}Npeb>t%;t6o}o@gN}8#yp`M|Uo}vH7 zdmDj%P~k+j%98`6*`?{?waKjP@e&*i;J{{JP+(wUWMqU|#lSS#kV9Mq79&u%Fzn1> e7TX-iah7oshk_I=eqmaGCV|0whRs$S$3y^VLr_Qn diff --git a/tests/main/input/eta79_not_mono.nc b/tests/main/input/eta79_not_mono.nc index d2bd5a767ff5b5719e99c04d779f603f2db71886..3449ab86fc71642aff7c59ade390b1f4590f9609 100644 GIT binary patch delta 688 zcmZp$YOtDM&&V>-L8D%j0SFjbKqLq-W#_(!uo&3HKnz9}Mkt>-JJ-;d3BqB6YJ+ka zm=d$gnNg*nTn473>}II(0slmJOWd@ndzky(^w(?;VMB$FpYJxRIAs<+#9)cu`3ykQ~0AOUf012ph?e1I;Q z?7-?N3UZUf_OE9_s$pJX1ceJ@;N)X0^8R{IH*&6BOrIsY8q}iJ2S?U?< zrlgjo=HwUTrskFCWTd2-+8XK^8tEC8yDWVMu@Q*`SuwevS%MX2yD!Vt%r@@H6ItUK v876;Zl~aMG2bd;UB7pJVUYe6S*^w=B5{H5mELp*l69-h0G1F!%j$uf^m#W~Iq7Oo~hsStr*s zz2kytv@M#%KDnGZK#4;LBmgu(0wU1>wFPD}6WHX*f0K!PCHb{|Rs5vV{F{+`w8oEnY`a64g^Y{S6VDbi5U)8^*W*0yruyA37x`HV& z+ZgJ49@oj5Z1Q?aKpBuoS!z*nW`3TnkxpJ}Npeb>t%;t6o}o@gN}8#yp`M|Uo}vH7 zdmDj%P~k+j%98`6*`?{?waKjP@e&*i;J{{JP+(wUWMqU|#lSS#kV9Mq79&u%Fzn1> e7TX-iah7oshk_I=eqmaGCV|0whRs$S$3y^VLr_Qn diff --git a/tests/main/input/eta91.nc b/tests/main/input/eta91.nc index 794e13bf40909e42e5a5600f88ab7f62b36f7ce1..3d3c7f08b39e8d41ce4e37fa211d27be0a0a8bfb 100644 GIT binary patch delta 625 zcmX?LeZYExJtNCR2aS4B1|VQ$0g)iUl%4w?!eU?(12Gs`7@>UT>|8@*CJ2WOstw9z zU`os`XGWERav7MCvYVmC3kZOeFtR}uHi9T+5YgrK<(0pOOAr&U1tX&fNQ8-zkue&? z0D|brT#TBE96}&AGvj|K$bmXbRE7a$Iy3X+4a`!La~S&=4JZF*G-65rwaa(ndoLzd z_Q}?a@36kisB5R!r oEJ9(*VX+9~KQ*1Rbh0B`1|VQ$0g)iUoRgaO9>Qc05CAcjLglKUqHLld1|tg-l+Tou zZO;s0i^?#76f-k2OcrDlWBLD|fq(Kwc42O-g50@Y&UW>_f%u17Em=u{NvQDmN zddCIP_{-y@>Ev?e03{9~kO0sC35di4s4Xy)nZPDb{>$tt15yBSp*PfpQ4l>04AMYb z6BzRG_~%`SjMVBx|Dbp=ym zwlUQ8lhxV6S(IO{hyuDxf)iQ0CkIH0OVh<`lUdp8CR=a_h`<69Y7E2Xm#G^z2XdTc YoW!9Z1&bP3;B!D#y=T~L#nC1T0LxuSPyhe` From ba79aa13d244fffb99d1c789d6fe4ae80960dff5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 08:51:49 -0500 Subject: [PATCH 32/69] revert diagnostics.py --- CONTRIBUTORS.md | 1 + driver/pace/driver/diagnostics.py | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 0ca00ff5..7030919a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -11,6 +11,7 @@ List format (alphabetical order): Surname, Name. Employer/Affiliation * Fuhrer, Oliver. Allen Institute for AI. * George, Rhea. Allen Institute for AI. * Harris, Lucas. GFDL. +* Lee, Mi Kyung. GFDL. * Kung, Chris. NASA. * McGibbon, Jeremy. Allen Institute for AI. * Niedermayr, Yannick. ETH. diff --git a/driver/pace/driver/diagnostics.py b/driver/pace/driver/diagnostics.py index d417f903..36f5960a 100644 --- a/driver/pace/driver/diagnostics.py +++ b/driver/pace/driver/diagnostics.py @@ -7,10 +7,11 @@ import pace.driver import pace.dsl import pace.stencils +import pace.util +import pace.util.grid from pace.dsl.dace.orchestration import dace_inhibitor from pace.fv3core.dycore_state import DycoreState from pace.util.constants import RGRAV -from pace.util.grid.helper import GridData from .state import DriverState @@ -27,7 +28,7 @@ def store(self, time: Union[datetime, timedelta], state: DriverState): ... @abc.abstractmethod - def store_grid(self, grid_data: GridData): + def store_grid(self, grid_data: pace.util.grid.GridData): ... @abc.abstractmethod @@ -197,7 +198,7 @@ def _get_z_select_state(self, state: DycoreState): z_select_state.update(zselect.select_data(state)) return z_select_state - def store_grid(self, grid_data: GridData): + def store_grid(self, grid_data: pace.util.grid.GridData): zarr_grid = { "lat": grid_data.lat, "lon": grid_data.lon, @@ -217,7 +218,7 @@ class NullDiagnostics(Diagnostics): def store(self, time: Union[datetime, timedelta], state: DriverState): pass - def store_grid(self, grid_data: GridData): + def store_grid(self, grid_data: pace.util.grid.GridData): pass def cleanup(self): From c23aa18a157a5992bd4adc2c0e7119733b58edcc Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:01:58 -0500 Subject: [PATCH 33/69] restore driver.py --- driver/pace/driver/driver.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/driver/pace/driver/driver.py b/driver/pace/driver/driver.py index 3694d69d..c8d1490f 100644 --- a/driver/pace/driver/driver.py +++ b/driver/pace/driver/driver.py @@ -13,6 +13,8 @@ import pace.dsl import pace.physics import pace.stencils +import pace.util +import pace.util.grid from pace import fv3core from pace.driver.safety_checks import SafetyChecker from pace.dsl.dace.dace_config import DaceConfig @@ -27,7 +29,6 @@ CubedSphereCommunicator, TileCommunicator, ) -from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData from pace.util.logging import pace_log from . import diagnostics @@ -164,7 +165,11 @@ def get_grid( self, communicator: pace.util.Communicator, quantity_factory: Optional[pace.util.QuantityFactory] = None, - ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: + ) -> Tuple[ + pace.util.grid.DampingCoefficients, + pace.util.grid.DriverGridData, + pace.util.grid.GridData, + ]: if quantity_factory is None: sizer = pace.util.SubtileGridSizer.from_tile_params( nx_tile=self.nx_tile, @@ -188,9 +193,9 @@ def get_grid( def get_driver_state( self, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, quantity_factory: Optional[pace.util.QuantityFactory] = None, stencil_factory: Optional[pace.dsl.StencilFactory] = None, ) -> DriverState: From 7a192fa557674ce8a7fa42d9367c1e69a4e6b4d5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:04:03 -0500 Subject: [PATCH 34/69] revert initialization.py --- driver/pace/driver/initialization.py | 51 ++++++++++++++-------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/driver/pace/driver/initialization.py b/driver/pace/driver/initialization.py index 651da6f5..3cf52376 100644 --- a/driver/pace/driver/initialization.py +++ b/driver/pace/driver/initialization.py @@ -12,13 +12,14 @@ import pace.fv3core.initialization.analytic_init as analytic_init import pace.physics import pace.stencils +import pace.util +import pace.util.grid from pace import fv3core from pace.dsl.dace.orchestration import DaceConfig from pace.dsl.stencil import StencilFactory from pace.dsl.stencil_config import CompilationConfig from pace.fv3core.testing import TranslateFVDynamics from pace.stencils.testing import TranslateGrid -from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData from pace.util.namelist import Namelist from .registry import Registry @@ -36,9 +37,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: ... @@ -73,9 +74,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: return self.config.get_driver_state( quantity_factory=quantity_factory, @@ -105,9 +106,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: dycore_state = analytic_init.init_analytic_state( analytic_init_case=self.case, @@ -148,9 +149,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: state = _restart_driver_state( self.path, @@ -197,9 +198,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: state = _restart_driver_state( self.path, @@ -268,9 +269,9 @@ def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: backend = quantity_factory.zeros( dims=[pace.util.X_DIM, pace.util.Y_DIM], units="unknown" @@ -336,18 +337,18 @@ class PredefinedStateInit(Initializer): dycore_state: fv3core.DycoreState physics_state: pace.physics.PhysicsState tendency_state: TendencyState - grid_data: GridData - damping_coefficients: DampingCoefficients - driver_grid_data: DriverGridData + grid_data: pace.util.grid.GridData + damping_coefficients: pace.util.grid.DampingCoefficients + driver_grid_data: pace.util.grid.DriverGridData start_time: datetime = datetime(2016, 8, 1) def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> DriverState: return DriverState( dycore_state=self.dycore_state, From e74027115f0f46916462ba11a5a87dc69375e970 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:05:20 -0500 Subject: [PATCH 35/69] restore state.py --- driver/pace/driver/state.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/driver/pace/driver/state.py b/driver/pace/driver/state.py index 79c375ef..54241b1d 100644 --- a/driver/pace/driver/state.py +++ b/driver/pace/driver/state.py @@ -5,9 +5,10 @@ import pace.dsl.gt4py_utils as gt_utils import pace.physics +import pace.util +import pace.util.grid from pace import fv3core from pace.dsl.typing import Float -from pace.util.grid.helper import DampingCoefficients, DriverGridData, GridData @dataclasses.dataclass() @@ -59,9 +60,9 @@ class DriverState: dycore_state: fv3core.DycoreState physics_state: pace.physics.PhysicsState tendency_state: TendencyState - grid_data: GridData - damping_coefficients: DampingCoefficients - driver_grid_data: DriverGridData + grid_data: pace.util.grid.GridData + damping_coefficients: pace.util.grid.DampingCoefficients + driver_grid_data: pace.util.grid.DriverGridData # TODO: the driver_config argument here isn't type hinted from # import due to a circular dependency. This can be fixed by refactoring @@ -71,9 +72,9 @@ def load_state_from_restart( cls, restart_path: str, driver_config, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ) -> "DriverState": comm = driver_config.comm_config.get_comm() communicator = pace.util.Communicator.from_layout( @@ -172,9 +173,9 @@ def _restart_driver_state( rank: int, quantity_factory: pace.util.QuantityFactory, communicator: pace.util.Communicator, - damping_coefficients: DampingCoefficients, - driver_grid_data: DriverGridData, - grid_data: GridData, + damping_coefficients: pace.util.grid.DampingCoefficients, + driver_grid_data: pace.util.grid.DriverGridData, + grid_data: pace.util.grid.GridData, ): fs = pace.util.get_fs(path) From 60c18058acfc59ebc05aebefed435bb2a499f9e1 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:06:50 -0500 Subject: [PATCH 36/69] restore analytic_init.py --- fv3core/pace/fv3core/initialization/analytic_init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fv3core/pace/fv3core/initialization/analytic_init.py b/fv3core/pace/fv3core/initialization/analytic_init.py index 4f40adbf..e8f6b07e 100644 --- a/fv3core/pace/fv3core/initialization/analytic_init.py +++ b/fv3core/pace/fv3core/initialization/analytic_init.py @@ -2,7 +2,7 @@ import pace.util as fv3util from pace.fv3core.dycore_state import DycoreState -from pace.util.grid.helper import GridData +from pace.util.grid import GridData class MetaEnumStr(EnumMeta): From b26acefc849859eaa9de6dc16e6503758c3732c5 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:08:21 -0500 Subject: [PATCH 37/69] restore init_utils.py and analytic_init.py --- fv3core/pace/fv3core/initialization/init_utils.py | 7 ++----- fv3core/pace/fv3core/stencils/a2b_ord4.py | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/fv3core/pace/fv3core/initialization/init_utils.py b/fv3core/pace/fv3core/initialization/init_utils.py index bfb55f71..42252e87 100644 --- a/fv3core/pace/fv3core/initialization/init_utils.py +++ b/fv3core/pace/fv3core/initialization/init_utils.py @@ -8,11 +8,8 @@ import pace.util.constants as constants from pace.dsl.typing import Float from pace.fv3core.dycore_state import DycoreState -from pace.util.grid.gnomonic import ( - get_lonlat_vect, - get_unit_vector_direction, - lon_lat_midpoint, -) +from pace.util.grid import lon_lat_midpoint +from pace.util.grid.gnomonic import get_lonlat_vect, get_unit_vector_direction # maximum windspeed amplitude - close to windspeed of zonal-mean time-mean diff --git a/fv3core/pace/fv3core/stencils/a2b_ord4.py b/fv3core/pace/fv3core/stencils/a2b_ord4.py index 9dba2001..95b6ab02 100644 --- a/fv3core/pace/fv3core/stencils/a2b_ord4.py +++ b/fv3core/pace/fv3core/stencils/a2b_ord4.py @@ -17,7 +17,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldI, FloatFieldIJ from pace.fv3core.stencils.basic_operations import copy_defn from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData # comact 4-pt cubic interpolation From 38b9536f15e9c2c8e679e4d5de5dae9851f05afa Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:09:18 -0500 Subject: [PATCH 38/69] restore c_sw.py --- fv3core/pace/fv3core/stencils/c_sw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fv3core/pace/fv3core/stencils/c_sw.py b/fv3core/pace/fv3core/stencils/c_sw.py index c5ce83e9..e74b9319 100644 --- a/fv3core/pace/fv3core/stencils/c_sw.py +++ b/fv3core/pace/fv3core/stencils/c_sw.py @@ -14,7 +14,7 @@ from pace.fv3core.stencils.d2a2c_vect import DGrid2AGrid2CGridVectors from pace.stencils import corners from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData def zero_delpc_ptc(delpc: FloatField, ptc: FloatField): From b9f966a80815dcc95237cea261fc809e38e10e35 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:10:02 -0500 Subject: [PATCH 39/69] d2a2c_vect.py --- fv3core/pace/fv3core/stencils/d2a2c_vect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fv3core/pace/fv3core/stencils/d2a2c_vect.py b/fv3core/pace/fv3core/stencils/d2a2c_vect.py index a01a7503..1b3e4d33 100644 --- a/fv3core/pace/fv3core/stencils/d2a2c_vect.py +++ b/fv3core/pace/fv3core/stencils/d2a2c_vect.py @@ -8,7 +8,7 @@ from pace.fv3core.stencils.a2b_ord4 import a1, a2, lagrange_x_func, lagrange_y_func from pace.stencils import corners from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData c1 = -2.0 / 14.0 From 72010c55eaaa1322ac716a6f3e7198eebf69c896 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:11:39 -0500 Subject: [PATCH 40/69] restore fv3core/stensils --- fv3core/pace/fv3core/stencils/d_sw.py | 2 +- fv3core/pace/fv3core/stencils/del2cubed.py | 2 +- fv3core/pace/fv3core/stencils/delnflux.py | 2 +- fv3core/pace/fv3core/stencils/divergence_damping.py | 2 +- fv3core/pace/fv3core/stencils/dyn_core.py | 2 +- fv3core/pace/fv3core/stencils/fv_dynamics.py | 2 +- fv3core/pace/fv3core/stencils/fvtp2d.py | 2 +- fv3core/pace/fv3core/stencils/fxadv.py | 2 +- fv3core/pace/fv3core/stencils/nh_p_grad.py | 2 +- fv3core/pace/fv3core/stencils/updatedzd.py | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fv3core/pace/fv3core/stencils/d_sw.py b/fv3core/pace/fv3core/stencils/d_sw.py index 301dca78..e08af776 100644 --- a/fv3core/pace/fv3core/stencils/d_sw.py +++ b/fv3core/pace/fv3core/stencils/d_sw.py @@ -24,7 +24,7 @@ from pace.fv3core.stencils.xtp_u import advect_u_along_x from pace.fv3core.stencils.ytp_v import advect_v_along_y from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData dcon_threshold = 1e-5 diff --git a/fv3core/pace/fv3core/stencils/del2cubed.py b/fv3core/pace/fv3core/stencils/del2cubed.py index d06b44c8..d4676eac 100644 --- a/fv3core/pace/fv3core/stencils/del2cubed.py +++ b/fv3core/pace/fv3core/stencils/del2cubed.py @@ -7,7 +7,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldIJ, cast_to_index3d from pace.fv3core.stencils.basic_operations import copy_defn from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import DampingCoefficients +from pace.util.grid import DampingCoefficients # diff --git a/fv3core/pace/fv3core/stencils/delnflux.py b/fv3core/pace/fv3core/stencils/delnflux.py index 9c76e695..898a8a7f 100644 --- a/fv3core/pace/fv3core/stencils/delnflux.py +++ b/fv3core/pace/fv3core/stencils/delnflux.py @@ -15,7 +15,7 @@ from pace.dsl.stencil import StencilFactory, get_stencils_with_varied_bounds from pace.dsl.typing import Float, FloatField, FloatFieldIJ, FloatFieldK from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import DampingCoefficients +from pace.util.grid import DampingCoefficients def calc_damp( diff --git a/fv3core/pace/fv3core/stencils/divergence_damping.py b/fv3core/pace/fv3core/stencils/divergence_damping.py index ba03dd86..a3e5a32b 100644 --- a/fv3core/pace/fv3core/stencils/divergence_damping.py +++ b/fv3core/pace/fv3core/stencils/divergence_damping.py @@ -21,7 +21,7 @@ ) from pace.fv3core.stencils.d2a2c_vect import contravariant from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData @gtscript.function diff --git a/fv3core/pace/fv3core/stencils/dyn_core.py b/fv3core/pace/fv3core/stencils/dyn_core.py index 6769a9b9..bef8f6f0 100644 --- a/fv3core/pace/fv3core/stencils/dyn_core.py +++ b/fv3core/pace/fv3core/stencils/dyn_core.py @@ -42,7 +42,7 @@ Z_DIM, Z_INTERFACE_DIM, ) -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData HUGE_R = 1.0e40 diff --git a/fv3core/pace/fv3core/stencils/fv_dynamics.py b/fv3core/pace/fv3core/stencils/fv_dynamics.py index ba7225e6..8e82f549 100644 --- a/fv3core/pace/fv3core/stencils/fv_dynamics.py +++ b/fv3core/pace/fv3core/stencils/fv_dynamics.py @@ -21,7 +21,7 @@ from pace.fv3core.stencils.remapping import LagrangianToEulerian from pace.stencils.c2l_ord import CubedToLatLon from pace.util import X_DIM, Y_DIM, Z_INTERFACE_DIM, Timer, constants -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData from pace.util.logging import pace_log from pace.util.mpi import MPI diff --git a/fv3core/pace/fv3core/stencils/fvtp2d.py b/fv3core/pace/fv3core/stencils/fvtp2d.py index 6e30bea3..3369bcab 100644 --- a/fv3core/pace/fv3core/stencils/fvtp2d.py +++ b/fv3core/pace/fv3core/stencils/fvtp2d.py @@ -12,7 +12,7 @@ from pace.fv3core.stencils.xppm import XPiecewiseParabolic from pace.fv3core.stencils.yppm import YPiecewiseParabolic from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData @gtscript.function diff --git a/fv3core/pace/fv3core/stencils/fxadv.py b/fv3core/pace/fv3core/stencils/fxadv.py index 6b854b2b..1527c898 100644 --- a/fv3core/pace/fv3core/stencils/fxadv.py +++ b/fv3core/pace/fv3core/stencils/fxadv.py @@ -11,7 +11,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.fv3core.stencils.d2a2c_vect import contravariant -from pace.util.grid.helper import GridData +from pace.util.grid import GridData def main_uc_vc_contra( diff --git a/fv3core/pace/fv3core/stencils/nh_p_grad.py b/fv3core/pace/fv3core/stencils/nh_p_grad.py index 4b56b847..5504ba2b 100644 --- a/fv3core/pace/fv3core/stencils/nh_p_grad.py +++ b/fv3core/pace/fv3core/stencils/nh_p_grad.py @@ -6,7 +6,7 @@ from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.fv3core.stencils.a2b_ord4 import AGrid2BGridFourthOrder from pace.util import X_DIM, Y_DIM, Z_INTERFACE_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData def set_k0_and_calc_wk( diff --git a/fv3core/pace/fv3core/stencils/updatedzd.py b/fv3core/pace/fv3core/stencils/updatedzd.py index dbc74667..92dd1c20 100644 --- a/fv3core/pace/fv3core/stencils/updatedzd.py +++ b/fv3core/pace/fv3core/stencils/updatedzd.py @@ -18,7 +18,7 @@ Z_DIM, Z_INTERFACE_DIM, ) -from pace.util.grid.helper import DampingCoefficients, GridData +from pace.util.grid import DampingCoefficients, GridData DZ_MIN = constants.DZ_MIN From 1abe71685d47bb3c0b3bdd59e2085954e4c4c2e8 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:14:49 -0500 Subject: [PATCH 41/69] restore translate_fvdynamics --- fv3core/pace/fv3core/testing/translate_fvdynamics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fv3core/pace/fv3core/testing/translate_fvdynamics.py b/fv3core/pace/fv3core/testing/translate_fvdynamics.py index 3561d36c..cdd773f7 100644 --- a/fv3core/pace/fv3core/testing/translate_fvdynamics.py +++ b/fv3core/pace/fv3core/testing/translate_fvdynamics.py @@ -12,7 +12,7 @@ from pace.fv3core.dycore_state import DycoreState from pace.stencils.testing import ParallelTranslateBaseSlicing from pace.stencils.testing.translate import TranslateFortranData2Py -from pace.util.grid.helper import GridData +from pace.util.grid import GridData class TranslateDycoreFortranData2Py(TranslateFortranData2Py): From af6d431be9b82d57c53f1ede1b6d70fc7b3a8cbc Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:15:50 -0500 Subject: [PATCH 42/69] restore physics/stencils --- physics/pace/physics/stencils/microphysics.py | 2 +- physics/pace/physics/stencils/physics.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/pace/physics/stencils/microphysics.py b/physics/pace/physics/stencils/microphysics.py index 5da2676a..064bc1c7 100644 --- a/physics/pace/physics/stencils/microphysics.py +++ b/physics/pace/physics/stencils/microphysics.py @@ -18,7 +18,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ, Int from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData from .._config import PhysicsConfig diff --git a/physics/pace/physics/stencils/physics.py b/physics/pace/physics/stencils/physics.py index cfc8f9f0..a4dfdb2f 100644 --- a/physics/pace/physics/stencils/physics.py +++ b/physics/pace/physics/stencils/physics.py @@ -22,7 +22,7 @@ from pace.physics.stencils.get_prs_fv3 import get_prs_fv3 from pace.physics.stencils.microphysics import Microphysics from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData from .._config import PhysicsConfig From 13e15299e656a4bed75dc3ab16fa99593562c65e Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 09:17:18 -0500 Subject: [PATCH 43/69] restore stencils --- stencils/pace/stencils/c2l_ord.py | 2 +- stencils/pace/stencils/fv_update_phys.py | 2 +- stencils/pace/stencils/testing/grid.py | 4 ++-- stencils/pace/stencils/update_atmos_state.py | 2 +- stencils/pace/stencils/update_dwind_phys.py | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/stencils/pace/stencils/c2l_ord.py b/stencils/pace/stencils/c2l_ord.py index ed0d5834..e4610b69 100644 --- a/stencils/pace/stencils/c2l_ord.py +++ b/stencils/pace/stencils/c2l_ord.py @@ -14,7 +14,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField, FloatFieldIJ from pace.util.constants import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM -from pace.util.grid.helper import GridData +from pace.util.grid import GridData A1 = 0.5625 diff --git a/stencils/pace/stencils/fv_update_phys.py b/stencils/pace/stencils/fv_update_phys.py index 2fe28b2e..fe027cd0 100644 --- a/stencils/pace/stencils/fv_update_phys.py +++ b/stencils/pace/stencils/fv_update_phys.py @@ -11,7 +11,7 @@ from pace.stencils.c2l_ord import CubedToLatLon from pace.stencils.update_dwind_phys import AGrid2DGridPhysics from pace.util import X_DIM, Y_DIM -from pace.util.grid.helper import DriverGridData, GridData +from pace.util.grid import DriverGridData, GridData # TODO: This is the same as moist_cv.py in fv3core, should move to integration dir diff --git a/stencils/pace/stencils/testing/grid.py b/stencils/pace/stencils/testing/grid.py index e8d7919d..4cf623b1 100644 --- a/stencils/pace/stencils/testing/grid.py +++ b/stencils/pace/stencils/testing/grid.py @@ -6,13 +6,13 @@ import pace.util from pace.dsl import gt4py_utils as utils from pace.dsl.stencil import GridIndexing -from pace.util.grid.generation import GridDefinitions -from pace.util.grid.helper import ( +from pace.util.grid import ( AngleGridData, ContravariantGridData, DampingCoefficients, DriverGridData, GridData, + GridDefinitions, HorizontalGridData, MetricTerms, VerticalGridData, diff --git a/stencils/pace/stencils/update_atmos_state.py b/stencils/pace/stencils/update_atmos_state.py index d9b777ad..789e40ea 100644 --- a/stencils/pace/stencils/update_atmos_state.py +++ b/stencils/pace/stencils/update_atmos_state.py @@ -9,7 +9,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import Float, FloatField from pace.stencils.fv_update_phys import ApplyPhysicsToDycore -from pace.util.grid.helper import DriverGridData, GridData +from pace.util.grid import DriverGridData, GridData # TODO: when this file is not importable from physics or fv3core, import diff --git a/stencils/pace/stencils/update_dwind_phys.py b/stencils/pace/stencils/update_dwind_phys.py index 5823a989..f5d3242d 100644 --- a/stencils/pace/stencils/update_dwind_phys.py +++ b/stencils/pace/stencils/update_dwind_phys.py @@ -5,7 +5,7 @@ from pace.dsl.stencil import StencilFactory from pace.dsl.typing import FloatField, FloatFieldI, FloatFieldIJ from pace.util import X_DIM, Y_DIM, Z_DIM -from pace.util.grid.helper import DriverGridData +from pace.util.grid import DriverGridData def set_winds_zero( From 57d99f520609c9458303372adf4c1c9dfb023c7d Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 11:49:39 -0500 Subject: [PATCH 44/69] remove circular dependency --- util/pace/util/grid/eta.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index ff459e68..75e53517 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -4,8 +4,6 @@ import numpy as np import xarray as xr -from pace.fv3core.initialization.init_utils import compute_eta - @dataclass class HybridPressureCoefficients: @@ -59,7 +57,7 @@ def set_hybrid_pressure_coefficients( raise ValueError("size of bk array is not equal to km=" + str(km)) # check that the eta values computed from ak and bk are monotonically increasing - eta, etav = compute_eta(ak, bk) + eta, etav = check_eta(ak, bk) (eta_sorted, etav_sorted) = (np.sort(eta), np.sort(etav)) for i in range(eta.size): @@ -77,3 +75,9 @@ def set_hybrid_pressure_coefficients( pressure_data = HybridPressureCoefficients(ks, ptop, ak, bk) return pressure_data + + +def check_eta(ak, bk): + from pace.fv3core.initialization.init_utils import compute_eta + + return compute_eta(ak, bk) From 461802d9347dc074add70a944ae5a841d9a89f29 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 11:50:10 -0500 Subject: [PATCH 45/69] use pytest parametrize --- tests/main/grid/test_eta.py | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 8af44cd0..dd227574 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -18,9 +18,10 @@ def set_answers(config_file): return data["ak"].values, data["bk"].values -def test_set_hybrid_pressure_coefficients_79_correct(): +@pytest.mark.parametrize("km", [79, 91]) +def test_set_hybrid_pressure_coefficients_correct(km): - config_file = "tests/main/grid/input/test_config_79.yaml" + config_file = "tests/main/grid/input/test_config_" + str(km) + ".yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) @@ -46,32 +47,6 @@ def test_set_hybrid_pressure_coefficients_79_correct(): driver.safety_checker.clear_all_checks() -def test_set_hybrid_pressure_coefficients_91_correct(): - - config_file = "tests/main/grid/input/test_config_91.yaml" - with open(config_file, "r") as f: - yaml_config = yaml.safe_load(f) - - driver_config = pace.driver.DriverConfig.from_dict(yaml_config) - driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) - driver = pace.driver.Driver(config=driver_config) - - p_results = driver.state.grid_data.p.data - ak_results = driver.state.grid_data.ak.data - bk_results = driver.state.grid_data.bk.data - ak_answers, bk_answers = set_answers(config_file) - - if ak_answers.size != ak_results.size: - raise ValueError("Unexpected size of bk") - if bk_answers.size != bk_results.size: - raise ValueError("Unexpected size of ak") - - if not np.array_equal(ak_answers, ak_results): - raise ValueError("Unexpected value of ak") - if not np.array_equal(bk_answers, bk_results): - raise ValueError("Unexpected value of bk") - - @pytest.mark.xfail def test_set_hybrid_pressure_coefficients_nofile(): From 16086a524bcb0df6e0cc688c1d2d4b4c9d5b00ee Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 11:53:08 -0500 Subject: [PATCH 46/69] cleanup generation.py --- util/pace/util/grid/generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index a0ba5d54..ff565a90 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -17,7 +17,7 @@ ) from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_INTERFACE_DIM from pace.util.constants import N_HALO_DEFAULT, PI, RADIUS -from pace.util.grid import eta # import set_hybrid_pressure_coefficients +from pace.util.grid import eta from .geometry import ( calc_unit_vector_south, From 2d920b718a25b565ae817b598242f52d111b35e8 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 11:55:40 -0500 Subject: [PATCH 47/69] yay fstrinngs --- util/pace/util/grid/eta.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 75e53517..4eb83eb3 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -41,9 +41,9 @@ def set_hybrid_pressure_coefficients( """ if eta_file == "None": - raise IOError("eta file not specified") + raise ValueError("eta file not specified") if not os.path.isfile(eta_file): - raise IOError("file " + eta_file + " does not exist") + raise ValueError("file " + eta_file + " does not exist") # read file into ak, bk arrays data = xr.open_dataset(eta_file) @@ -52,9 +52,9 @@ def set_hybrid_pressure_coefficients( # check size of ak and bk array is km+1 if ak.size - 1 != km: - raise ValueError("size of ak array is not equal to km=" + str(km)) + raise ValueError(f"size of ak array is not equal to km={km}") if bk.size - 1 != km: - raise ValueError("size of bk array is not equal to km=" + str(km)) + raise ValueError(f"size of bk array is not equal to km={km}") # check that the eta values computed from ak and bk are monotonically increasing eta, etav = check_eta(ak, bk) From 62dbdb9a8d0bc5bd5407a6a69ccc24702748da38 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 12:30:02 -0500 Subject: [PATCH 48/69] add eta_file to MetricTerm init --- driver/pace/driver/grid.py | 5 ++-- util/pace/util/grid/generation.py | 42 ++++++++++++++++++------------- util/pace/util/grid/helper.py | 12 +++------ 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/driver/pace/driver/grid.py b/driver/pace/driver/grid.py index 90e7cd23..06e0f480 100644 --- a/driver/pace/driver/grid.py +++ b/driver/pace/driver/grid.py @@ -111,6 +111,7 @@ def get_grid( dx_const=self.dx_const, dy_const=self.dy_const, deglat=self.deglat, + eta_file=self.eta_file, ) if self.stretch_factor != 1: # do horizontal grid transformation _transform_horizontal_grid( @@ -123,9 +124,7 @@ def get_grid( self.restart_path, quantity_factory=quantity_factory ) else: - vertical_data = VerticalGridData.new_from_metric_terms( - metric_terms, self.eta_file - ) + vertical_data = VerticalGridData.new_from_metric_terms(metric_terms) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) angle_data = AngleGridData.new_from_metric_terms(metric_terms) grid_data = GridData( diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index ff565a90..65210262 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -225,12 +225,14 @@ def __init__( dx_const: float = 1000.0, dy_const: float = 1000.0, deglat: float = 15.0, + eta_file: str = "None", ): self._grid_type = grid_type self._dx_const = dx_const self._dy_const = dy_const self._deglat = deglat self._halo = N_HALO_DEFAULT + self._eta_file = eta_file self._comm = communicator self._partitioner = self._comm.partitioner self._tile_partitioner = self._comm.tile.partitioner @@ -581,70 +583,74 @@ def dyc(self) -> util.Quantity: self._dx_center, self._dy_center = self._compute_dxdy_center() return self._dy_center - def ks(self, eta_file="None") -> util.Quantity: + @property + def ks(self) -> util.Quantity: """ number of levels where the vertical coordinate is purely pressure-based """ if self._ks is None: - if not eta_file == "None": + if not self._eta_file == "None": ( self._ks, self._ptop, self._ak, self._bk, - ) = self._set_hybrid_pressure_coefficients(eta_file) + ) = self._set_hybrid_pressure_coefficients() else: - raise IOError("eta file is not specified") + raise ValueError("eta file is not specified") return self._ks - def ak(self, eta_file="None") -> util.Quantity: + @property + def ak(self) -> util.Quantity: """ the ak coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._ak is None: - if not eta_file == "None": + if not self._eta_file == "None": ( self._ks, self._ptop, self._ak, self._bk, - ) = self._set_hybrid_pressure_coefficients(eta_file) + ) = self._set_hybrid_pressure_coefficients() else: - raise IOError("eta file is not specified") + raise ValueError("eta file is not specified") return self._ak - def bk(self, eta_file="None") -> util.Quantity: + @property + def bk(self) -> util.Quantity: """ the bk coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ if self._bk is None: - if not eta_file == "None": + if not self._eta_file == "None": ( self._ks, self._ptop, self._ak, self._bk, - ) = self._set_hybrid_pressure_coefficients(eta_file) + ) = self._set_hybrid_pressure_coefficients() else: - raise IOError("eta file is not specified") + raise ValueError("eta file is not specified") return self._bk - def ptop(self, eta_file="None") -> util.Quantity: + @property + def ptop(self) -> util.Quantity: """ the pressure of the top of atmosphere level """ if self._ptop is None: - if not eta_file == "None": + if not self._eta_file == "None": ( self._ks, self._ptop, self._ak, self._bk, - ) = self._set_hybrid_pressure_coefficients(eta_file) + ) = self._set_hybrid_pressure_coefficients() else: - raise IOError("eta file is not specified") + raise ValueError("eta file is not specified") return self._ptop @property @@ -2136,7 +2142,7 @@ def _compute_area_c_cartesian(self): area_cgrid_64.data[:, :] = self._dx_const * self._dy_const return quantity_cast_to_model_float(self.quantity_factory, area_cgrid_64) - def _set_hybrid_pressure_coefficients(self, eta_file="None"): + def _set_hybrid_pressure_coefficients(self): ks = self.quantity_factory.zeros( [], "", @@ -2158,7 +2164,7 @@ def _set_hybrid_pressure_coefficients(self, eta_file="None"): dtype=Float, ) pressure_coefficients = eta.set_hybrid_pressure_coefficients( - self._npz, eta_file + self._npz, self._eta_file ) ks = pressure_coefficients.ks ptop = pressure_coefficients.ptop diff --git a/util/pace/util/grid/helper.py b/util/pace/util/grid/helper.py index 321c4def..4149589f 100644 --- a/util/pace/util/grid/helper.py +++ b/util/pace/util/grid/helper.py @@ -143,12 +143,10 @@ def __post_init__(self): self._p_interface = None @classmethod - def new_from_metric_terms( - cls, metric_terms: MetricTerms, eta_file="None" - ) -> "VerticalGridData": + def new_from_metric_terms(cls, metric_terms: MetricTerms) -> "VerticalGridData": return cls( - ak=metric_terms.ak(eta_file), - bk=metric_terms.bk(eta_file), + ak=metric_terms.ak, + bk=metric_terms.bk, ) @classmethod @@ -325,9 +323,7 @@ def __init__( @classmethod def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file="None"): horizontal_data = HorizontalGridData.new_from_metric_terms(metric_terms) - vertical_data = VerticalGridData.new_from_metric_terms( - metric_terms, eta_file=eta_file - ) + vertical_data = VerticalGridData.new_from_metric_terms(metric_terms) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) angle_data = AngleGridData.new_from_metric_terms(metric_terms) return cls(horizontal_data, vertical_data, contravariant_data, angle_data) From 0335342ec95447870a3a6d9b1dce2f1e1bd45dee Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 12:34:53 -0500 Subject: [PATCH 49/69] remove eta_file argument in new_from_metric_terms and geos_wrapper --- fv3core/pace/fv3core/wrappers/geos_wrapper.py | 4 +--- util/pace/util/grid/helper.py | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fv3core/pace/fv3core/wrappers/geos_wrapper.py b/fv3core/pace/fv3core/wrappers/geos_wrapper.py index ccd72e32..0b7808de 100644 --- a/fv3core/pace/fv3core/wrappers/geos_wrapper.py +++ b/fv3core/pace/fv3core/wrappers/geos_wrapper.py @@ -127,9 +127,7 @@ def __init__( quantity_factory=quantity_factory, communicator=self.communicator ) - grid_data = pace.util.grid.GridData.new_from_metric_terms( - metric_terms, eta_file=namelist["grid_config"]["config"]["eta_file"] - ) + grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) stencil_config = pace.dsl.stencil.StencilConfig( compilation_config=pace.dsl.stencil.CompilationConfig( diff --git a/util/pace/util/grid/helper.py b/util/pace/util/grid/helper.py index 4149589f..6b3003d1 100644 --- a/util/pace/util/grid/helper.py +++ b/util/pace/util/grid/helper.py @@ -321,7 +321,7 @@ def __init__( self._fC_agrid = None @classmethod - def new_from_metric_terms(cls, metric_terms: MetricTerms, eta_file="None"): + def new_from_metric_terms(cls, metric_terms: MetricTerms): horizontal_data = HorizontalGridData.new_from_metric_terms(metric_terms) vertical_data = VerticalGridData.new_from_metric_terms(metric_terms) contravariant_data = ContravariantGridData.new_from_metric_terms(metric_terms) From 1f09546977604ee124de4e670a620bc5547bed5f Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 12:40:13 -0500 Subject: [PATCH 50/69] use pytest parametrize for the xfail tests --- tests/main/grid/test_eta.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index dd227574..5af9f13a 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -47,10 +47,17 @@ def test_set_hybrid_pressure_coefficients_correct(km): driver.safety_checker.clear_all_checks() +@pytest.mark.parametrize( + "cfile", + [ + "tests/main/grid/input/test_config_nofile.yaml", + "tests/main/grid/input/test_config_not_mono.yaml", + ], +) @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile(): +def test_set_hybrid_pressure_coefficients_nofile(cfile): - config_file = "tests/main/grid/input/test_config_nofile.yaml" + config_file = cfile with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) @@ -59,13 +66,13 @@ def test_set_hybrid_pressure_coefficients_nofile(): driver = pace.driver.Driver(config=driver_config) -@pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nonmonotonic(): - - config_file = "tests/main/grid/input/test_config_not_mono.yaml" - with open(config_file, "r") as f: - yaml_config = yaml.safe_load(f) - - driver_config = pace.driver.DriverConfig.from_dict(yaml_config) - driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) - driver = pace.driver.Driver(config=driver_config) +# @pytest.mark.xfail +# def test_set_hybrid_pressure_coefficients_nonmonotonic(): +# +# config_file = "tests/main/grid/input/test_config_not_mono.yaml" +# with open(config_file, "r") as f: +# yaml_config = yaml.safe_load(f) +# +# driver_config = pace.driver.DriverConfig.from_dict(yaml_config) +# driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) +# driver = pace.driver.Driver(config=driver_config) From d263bc2eae2a38a7c0554976a07f12f7c7f62f99 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 12:41:04 -0500 Subject: [PATCH 51/69] use pytest parametrize for the xfail tests --- tests/main/grid/test_eta.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 5af9f13a..5bb25c64 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -64,15 +64,3 @@ def test_set_hybrid_pressure_coefficients_nofile(cfile): driver_config = pace.driver.DriverConfig.from_dict(yaml_config) driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) - - -# @pytest.mark.xfail -# def test_set_hybrid_pressure_coefficients_nonmonotonic(): -# -# config_file = "tests/main/grid/input/test_config_not_mono.yaml" -# with open(config_file, "r") as f: -# yaml_config = yaml.safe_load(f) -# -# driver_config = pace.driver.DriverConfig.from_dict(yaml_config) -# driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) -# driver = pace.driver.Driver(config=driver_config) From cb57fbd7a8ba6ccfd8188a122a2ee175981ba815 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 13:14:25 -0500 Subject: [PATCH 52/69] fix geos_wrapper and grid --- fv3core/pace/fv3core/wrappers/geos_wrapper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/fv3core/pace/fv3core/wrappers/geos_wrapper.py b/fv3core/pace/fv3core/wrappers/geos_wrapper.py index 0b7808de..97b2b26c 100644 --- a/fv3core/pace/fv3core/wrappers/geos_wrapper.py +++ b/fv3core/pace/fv3core/wrappers/geos_wrapper.py @@ -126,6 +126,7 @@ def __init__( metric_terms = pace.util.grid.MetricTerms( quantity_factory=quantity_factory, communicator=self.communicator ) + metric_terms._eta_file = namelist["grid_config"]["config"]["eta_file"] grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) From b805d4415a536e644d43f4fb2758c1538b7a3708 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 13:14:47 -0500 Subject: [PATCH 53/69] fix tests --- tests/main/fv3core/test_dycore_call.py | 6 +++--- tests/main/physics/test_integration.py | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/main/fv3core/test_dycore_call.py b/tests/main/fv3core/test_dycore_call.py index 64fb230b..e753fb6a 100644 --- a/tests/main/fv3core/test_dycore_call.py +++ b/tests/main/fv3core/test_dycore_call.py @@ -97,13 +97,13 @@ def setup_dycore() -> Tuple[ quantity_factory = pace.util.QuantityFactory.from_backend( sizer=sizer, backend=backend ) + eta_file = "tests/main/input/eta79.nc" metric_terms = MetricTerms( quantity_factory=quantity_factory, communicator=communicator, + eta_file=eta_file, ) - grid_data = GridData.new_from_metric_terms( - metric_terms, eta_file="tests/main/input/eta79.nc" - ) + grid_data = GridData.new_from_metric_terms(metric_terms) # create an initial state from the Jablonowski & Williamson Baroclinic # test case perturbation. JRMS2006 diff --git a/tests/main/physics/test_integration.py b/tests/main/physics/test_integration.py index cfeac7fd..8d86f80b 100644 --- a/tests/main/physics/test_integration.py +++ b/tests/main/physics/test_integration.py @@ -64,10 +64,9 @@ def setup_physics(): metric_terms = pace.util.grid.MetricTerms( quantity_factory=quantity_factory, communicator=communicator, + eta_file="tests/main/input/eta79.nc", ) - grid_data = pace.util.grid.GridData.new_from_metric_terms( - metric_terms, eta_file="tests/main/input/eta79.nc" - ) + grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) physics = pace.physics.Physics( stencil_factory, quantity_factory, From 6ff18fbb4bb44643fb656b45751843fdccb10303 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Tue, 23 Jan 2024 13:24:47 -0500 Subject: [PATCH 54/69] last commit! --- driver/pace/driver/grid.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/driver/pace/driver/grid.py b/driver/pace/driver/grid.py index 06e0f480..d4e07d00 100644 --- a/driver/pace/driver/grid.py +++ b/driver/pace/driver/grid.py @@ -11,17 +11,19 @@ import pace.util.grid from pace.stencils.testing import TranslateGrid from pace.util import Communicator, QuantityFactory -from pace.util.grid.helper import ( - AngleGridData, - ContravariantGridData, +from pace.util.grid import ( DampingCoefficients, DriverGridData, GridData, - HorizontalGridData, MetricTerms, + direct_transform, +) +from pace.util.grid.helper import ( + AngleGridData, + ContravariantGridData, + HorizontalGridData, VerticalGridData, ) -from pace.util.grid.stretch_transformation import direct_transform from pace.util.logging import pace_log from pace.util.namelist import Namelist From d22719e88cadf74e0bfb2eb94b4e1f91469ecb66 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Wed, 24 Jan 2024 08:10:57 -0500 Subject: [PATCH 55/69] fstring is our friend --- tests/main/grid/test_eta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 5bb25c64..f6a788d0 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -21,7 +21,7 @@ def set_answers(config_file): @pytest.mark.parametrize("km", [79, 91]) def test_set_hybrid_pressure_coefficients_correct(km): - config_file = "tests/main/grid/input/test_config_" + str(km) + ".yaml" + config_file = f"tests/main/grid/input/test_config_{km}.yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) From bf469e4a486ed0aa9d4d9eadf4e8463733e9e259 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Wed, 24 Jan 2024 11:31:41 -0500 Subject: [PATCH 56/69] add test comments --- tests/main/grid/test_eta.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index f6a788d0..65ee3cd0 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -8,8 +8,24 @@ import pace.driver +""" +This test checks to ensure that ak and bk +values are read-in and stored properly. +In addition, this test checks to ensure that +the function set_hybrid_pressure_coefficients +fail as expected if the computed eta values +vary non-mononitically and if the eta_file +is not provided. +""" + + def set_answers(config_file): + """ + Read in the expected values of ak and bk + arrays from the input eta netcdf files. + """ + if "79" in config_file: eta_file = "tests/main/input/eta79.nc" if "91" in config_file: @@ -21,6 +37,12 @@ def set_answers(config_file): @pytest.mark.parametrize("km", [79, 91]) def test_set_hybrid_pressure_coefficients_correct(km): + """This test checks to see if the ak and bk arrays + are read-in correctly are stored as + expected. Both values of km=79 and km=91 are + tested. + """ + config_file = f"tests/main/grid/input/test_config_{km}.yaml" with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) @@ -55,7 +77,16 @@ def test_set_hybrid_pressure_coefficients_correct(km): ], ) @pytest.mark.xfail -def test_set_hybrid_pressure_coefficients_nofile(cfile): +def test_set_hybrid_pressure_coefficients_fail(cfile): + + """This test checks to see that the program + fails when (1) the eta_file is not specified in the yaml + configuration file; and (2), the computed eta values + increase non-monotonically. For the latter test, the eta_file + is specified in test_config_not_mono.yaml file and + the ak and bk values in the eta_file have been nonsensically changed + to result in erronenous eta values. + """ config_file = cfile with open(config_file, "r") as f: From 85fefdcd1a97d2b36c571cf3756ab26046f87f5d Mon Sep 17 00:00:00 2001 From: mlee03 Date: Wed, 24 Jan 2024 11:33:16 -0500 Subject: [PATCH 57/69] fix util/HISTORY.md --- util/HISTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/HISTORY.md b/util/HISTORY.md index 1af019cf..972d7167 100644 --- a/util/HISTORY.md +++ b/util/HISTORY.md @@ -14,7 +14,7 @@ latest - Added f32 support to halo exchange data transformation - Use one single logger, from logging.py - Removed hard-coded values of `ak` and `bk` arrays and added in the feature to read in `ak` and `bk` values - from an ASCII file to compute the `eta` and `eta_v` values. + from a NetCDF file to compute the `eta` and `eta_v` values. v0.10.0 ------- From f6084ba83f76f8f28b816d7067a4d109ccfa7ff6 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Wed, 24 Jan 2024 11:38:25 -0500 Subject: [PATCH 58/69] fix comments --- tests/main/grid/test_eta.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 65ee3cd0..0f81e477 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -23,7 +23,7 @@ def set_answers(config_file): """ Read in the expected values of ak and bk - arrays from the input eta netcdf files. + arrays from the input eta NetCDF files. """ if "79" in config_file: @@ -37,10 +37,12 @@ def set_answers(config_file): @pytest.mark.parametrize("km", [79, 91]) def test_set_hybrid_pressure_coefficients_correct(km): - """This test checks to see if the ak and bk arrays - are read-in correctly are stored as + """This test checks to see that the ak and bk arrays + are read-in correctly and are stored as expected. Both values of km=79 and km=91 are - tested. + tested and both tests are expected to pass + with the stored ak and bk values agreeing with the + values read-in directly from the NetCDF file. """ config_file = f"tests/main/grid/input/test_config_{km}.yaml" @@ -84,7 +86,7 @@ def test_set_hybrid_pressure_coefficients_fail(cfile): configuration file; and (2), the computed eta values increase non-monotonically. For the latter test, the eta_file is specified in test_config_not_mono.yaml file and - the ak and bk values in the eta_file have been nonsensically changed + the ak and bk values in the eta_file have been changed nonsensically to result in erronenous eta values. """ From b5ca33e6662c29cbbb71939ace32a06c30b63ea1 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Wed, 24 Jan 2024 12:06:14 -0500 Subject: [PATCH 59/69] remove __init__.py from tests/main/grid --- tests/main/grid/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/main/grid/__init__.py diff --git a/tests/main/grid/__init__.py b/tests/main/grid/__init__.py deleted file mode 100644 index e69de29b..00000000 From bde31a47017398235599b68e48319d599f8db4c7 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Thu, 25 Jan 2024 14:59:13 -0500 Subject: [PATCH 60/69] add jupyter notebooks to generate eta files --- .../notebooks/generate_eta_file_netcdf.ipynb | 148 ++++++++++++++++++ .../notebooks/generate_eta_file_xarray.ipynb | 140 +++++++++++++++++ 2 files changed, 288 insertions(+) create mode 100644 examples/notebooks/generate_eta_file_netcdf.ipynb create mode 100644 examples/notebooks/generate_eta_file_xarray.ipynb diff --git a/examples/notebooks/generate_eta_file_netcdf.ipynb b/examples/notebooks/generate_eta_file_netcdf.ipynb new file mode 100644 index 00000000..bf9623c7 --- /dev/null +++ b/examples/notebooks/generate_eta_file_netcdf.ipynb @@ -0,0 +1,148 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "2c056479", + "metadata": { + "lines_to_next_cell": 0 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8c96fbff", + "metadata": {}, + "outputs": [], + "source": [ + "import netCDF4 as nc\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6827b1b5", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "This notebook uses the python netCDF4 module\n", + "to create an eta_file containg\n", + "ak and bk coefficients for km=79\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45d4a704", + "metadata": {}, + "outputs": [], + "source": [ + "#create a Dataset instance\n", + "coefficients = nc.Dataset(\"eta79.nc\", \"w\", format=\"NETCDF4\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b964a014", + "metadata": {}, + "outputs": [], + "source": [ + "#Set dimensionsion\n", + "km = coefficients.createDimension(\"km\", 80)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d51c395f", + "metadata": {}, + "outputs": [], + "source": [ + "#Create ak and bk variables\n", + "ak = coefficients.createVariable(\"ak\", np.float64, (\"km\"))\n", + "bk = coefficients.createVariable(\"bk\", np.float64, (\"km\"))\n", + "ak.units=\"\"\n", + "bk.units=\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6723352e", + "metadata": {}, + "outputs": [], + "source": [ + "#Assign and write out values of ak\n", + "ak[:] = np.array(\n", + " [ 3.000000e+02, 6.467159e+02, 1.045222e+03, 1.469188e+03, 1.897829e+03,\n", + " 2.325385e+03, 2.754396e+03, 3.191294e+03, 3.648332e+03, 4.135675e+03,\n", + " 4.668282e+03, 5.247940e+03, 5.876271e+03, 6.554716e+03, 7.284521e+03,\n", + " 8.066738e+03, 8.902188e+03, 9.791482e+03, 1.073499e+04, 1.162625e+04,\n", + " 1.237212e+04, 1.299041e+04, 1.349629e+04, 1.390277e+04, 1.422098e+04,\n", + " 1.446058e+04, 1.462993e+04, 1.473633e+04, 1.478617e+04, 1.478511e+04,\n", + " 1.473812e+04, 1.464966e+04, 1.452370e+04, 1.436382e+04, 1.417324e+04,\n", + " 1.395491e+04, 1.371148e+04, 1.344540e+04, 1.315890e+04, 1.285407e+04,\n", + " 1.253280e+04, 1.219685e+04, 1.184788e+04, 1.148739e+04, 1.111682e+04,\n", + " 1.073748e+04, 1.035062e+04, 9.957395e+03, 9.558875e+03, 9.156069e+03,\n", + " 8.749922e+03, 8.341315e+03, 7.931065e+03, 7.519942e+03, 7.108648e+03,\n", + " 6.698281e+03, 6.290007e+03, 5.884984e+03, 5.484372e+03, 5.089319e+03,\n", + " 4.700960e+03, 4.320421e+03, 3.948807e+03, 3.587201e+03, 3.236666e+03,\n", + " 2.898237e+03, 2.572912e+03, 2.261667e+03, 1.965424e+03, 1.685079e+03,\n", + " 1.421479e+03, 1.175419e+03, 9.476516e+02, 7.388688e+02, 5.497130e+02,\n", + " 3.807626e+02, 2.325417e+02, 1.054810e+02, -8.381903e-04, 0.000000e+00] )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "195c9ef5", + "metadata": {}, + "outputs": [], + "source": [ + "#Assign and write out values of bk \n", + "bk[:] = np.array(\n", + " [ 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0.,\n", + " 0., 0.00106595, 0.00412866, 0.00900663, 0.01554263, 0.02359921,\n", + " 0.03305481, 0.0438012, 0.05574095, 0.06878554, 0.08285347, 0.09786981,\n", + " 0.1137643, 0.130471, 0.1479275, 0.1660746, 0.1848558, 0.2042166,\n", + " 0.2241053, 0.2444716, 0.2652672, 0.286445, 0.3079604, 0.3297701,\n", + " 0.351832, 0.3741062, 0.3965532, 0.4191364, 0.4418194, 0.4645682,\n", + " 0.48735, 0.5101338, 0.5328897, 0.5555894, 0.5782067, 0.6007158,\n", + " 0.6230936, 0.6452944, 0.6672683, 0.6889648, 0.7103333, 0.7313231,\n", + " 0.7518838, 0.7719651, 0.7915173, 0.8104913, 0.828839, 0.846513,\n", + " 0.8634676, 0.8796583, 0.8950421, 0.9095779, 0.9232264, 0.9359506,\n", + " 0.9477157, 0.9584892, 0.9682413, 0.9769447, 0.9845753, 0.9911126,\n", + " 0.9965372, 1. ] )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c0f3bd9d", + "metadata": {}, + "outputs": [], + "source": [ + "#Close netcdf file\n", + "coefficients.close()" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "executable": "/usr/bin/env python3", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/generate_eta_file_xarray.ipynb b/examples/notebooks/generate_eta_file_xarray.ipynb new file mode 100644 index 00000000..a47b09e6 --- /dev/null +++ b/examples/notebooks/generate_eta_file_xarray.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "6dc5fe4c", + "metadata": { + "lines_to_next_cell": 0 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "81be9a15", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import xarray as xr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c74c6c07", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "This notebook uses the python xarray module\n", + "to create an eta_file containg\n", + "ak and bk coefficients for km=79\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f72c5d5b", + "metadata": {}, + "outputs": [], + "source": [ + "#Assign ak data\n", + "ak=np.array(\n", + " [ 3.000000e+02, 6.467159e+02, 1.045222e+03, 1.469188e+03, 1.897829e+03,\n", + " 2.325385e+03, 2.754396e+03, 3.191294e+03, 3.648332e+03, 4.135675e+03,\n", + " 4.668282e+03, 5.247940e+03, 5.876271e+03, 6.554716e+03, 7.284521e+03,\n", + " 8.066738e+03, 8.902188e+03, 9.791482e+03, 1.073499e+04, 1.162625e+04,\n", + " 1.237212e+04, 1.299041e+04, 1.349629e+04, 1.390277e+04, 1.422098e+04,\n", + " 1.446058e+04, 1.462993e+04, 1.473633e+04, 1.478617e+04, 1.478511e+04,\n", + " 1.473812e+04, 1.464966e+04, 1.452370e+04, 1.436382e+04, 1.417324e+04,\n", + " 1.395491e+04, 1.371148e+04, 1.344540e+04, 1.315890e+04, 1.285407e+04,\n", + " 1.253280e+04, 1.219685e+04, 1.184788e+04, 1.148739e+04, 1.111682e+04,\n", + " 1.073748e+04, 1.035062e+04, 9.957395e+03, 9.558875e+03, 9.156069e+03,\n", + " 8.749922e+03, 8.341315e+03, 7.931065e+03, 7.519942e+03, 7.108648e+03,\n", + " 6.698281e+03, 6.290007e+03, 5.884984e+03, 5.484372e+03, 5.089319e+03,\n", + " 4.700960e+03, 4.320421e+03, 3.948807e+03, 3.587201e+03, 3.236666e+03,\n", + " 2.898237e+03, 2.572912e+03, 2.261667e+03, 1.965424e+03, 1.685079e+03,\n", + " 1.421479e+03, 1.175419e+03, 9.476516e+02, 7.388688e+02, 5.497130e+02,\n", + " 3.807626e+02, 2.325417e+02, 1.054810e+02, -8.381903e-04, 0.000000e+00] )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f5b85c7e", + "metadata": { + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "#Assign bk data\n", + "bk=np.array(\n", + " [ 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0.,\n", + " 0., 0.00106595, 0.00412866, 0.00900663, 0.01554263, 0.02359921,\n", + " 0.03305481, 0.0438012, 0.05574095, 0.06878554, 0.08285347, 0.09786981,\n", + " 0.1137643, 0.130471, 0.1479275, 0.1660746, 0.1848558, 0.2042166,\n", + " 0.2241053, 0.2444716, 0.2652672, 0.286445, 0.3079604, 0.3297701,\n", + " 0.351832, 0.3741062, 0.3965532, 0.4191364, 0.4418194, 0.4645682,\n", + " 0.48735, 0.5101338, 0.5328897, 0.5555894, 0.5782067, 0.6007158,\n", + " 0.6230936, 0.6452944, 0.6672683, 0.6889648, 0.7103333, 0.7313231,\n", + " 0.7518838, 0.7719651, 0.7915173, 0.8104913, 0.828839, 0.846513,\n", + " 0.8634676, 0.8796583, 0.8950421, 0.9095779, 0.9232264, 0.9359506,\n", + " 0.9477157, 0.9584892, 0.9682413, 0.9769447, 0.9845753, 0.9911126,\n", + " 0.9965372, 1. ] )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5450f7f", + "metadata": {}, + "outputs": [], + "source": [ + "#Create a Dataset instance\n", + "coefficients = xr.Dataset(\n", + " { \"ak\": ([\"km1\"], ak),\n", + " \"bk\": ([\"km1\"], bk) \n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a0e5487", + "metadata": {}, + "outputs": [], + "source": [ + "#Set attributes for each variable\n", + "coefficients[\"ak\"].attrs[\"units\"]=\"\"\n", + "coefficients[\"bk\"].attrs[\"units\"]=\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "612b0134", + "metadata": {}, + "outputs": [], + "source": [ + "#Write netcdf file\n", + "coefficients.to_netcdf(\"eta79.nc\")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "executable": "/usr/bin/env python3", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 0644ad3092964d61cfa7db86eb68477722c48bc0 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Fri, 26 Jan 2024 08:10:07 -0500 Subject: [PATCH 61/69] generate ak,bk,ptop on metricterm init --- fv3core/pace/fv3core/wrappers/geos_wrapper.py | 6 +- util/pace/util/grid/generation.py | 57 ++++--------------- 2 files changed, 13 insertions(+), 50 deletions(-) diff --git a/fv3core/pace/fv3core/wrappers/geos_wrapper.py b/fv3core/pace/fv3core/wrappers/geos_wrapper.py index 97b2b26c..9f8347f3 100644 --- a/fv3core/pace/fv3core/wrappers/geos_wrapper.py +++ b/fv3core/pace/fv3core/wrappers/geos_wrapper.py @@ -124,10 +124,10 @@ def __init__( # set up the metric terms and grid data metric_terms = pace.util.grid.MetricTerms( - quantity_factory=quantity_factory, communicator=self.communicator + quantity_factory=quantity_factory, + communicator=self.communicator, + eta_file=namelist["grid_config"]["config"]["eta_file"], ) - metric_terms._eta_file = namelist["grid_config"]["config"]["eta_file"] - grid_data = pace.util.grid.GridData.new_from_metric_terms(metric_terms) stencil_config = pace.dsl.stencil.StencilConfig( diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index 65210262..6181661f 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -232,7 +232,6 @@ def __init__( self._dy_const = dy_const self._deglat = deglat self._halo = N_HALO_DEFAULT - self._eta_file = eta_file self._comm = communicator self._partitioner = self._comm.partitioner self._tile_partitioner = self._comm.tile.partitioner @@ -284,10 +283,12 @@ def __init__( self._dy_center = None self._area = None self._area_c = None - self._ks = None - self._ak = None - self._bk = None - self._ptop = None + ( + self._ks, + self._ptop, + self._ak, + self._bk, + ) = self._set_hybrid_pressure_coefficients(eta_file) self._ec1 = None self._ec2 = None self._ew1 = None @@ -428,6 +429,7 @@ def from_tile_sizing( dx_const: float = 1000.0, dy_const: float = 1000.0, deglat: float = 15.0, + eta_file: str = "None", ) -> "MetricTerms": sizer = util.SubtileGridSizer.from_tile_params( nx_tile=npx - 1, @@ -449,6 +451,7 @@ def from_tile_sizing( dx_const=dx_const, dy_const=dy_const, deglat=deglat, + eta_file=eta_file, ) @property @@ -588,16 +591,6 @@ def ks(self) -> util.Quantity: """ number of levels where the vertical coordinate is purely pressure-based """ - if self._ks is None: - if not self._eta_file == "None": - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() - else: - raise ValueError("eta file is not specified") return self._ks @property @@ -606,16 +599,6 @@ def ak(self) -> util.Quantity: the ak coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ - if self._ak is None: - if not self._eta_file == "None": - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() - else: - raise ValueError("eta file is not specified") return self._ak @property @@ -624,16 +607,6 @@ def bk(self) -> util.Quantity: the bk coefficient used to calculate the pressure at a given k-level: pk = ak + (bk * ps) """ - if self._bk is None: - if not self._eta_file == "None": - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() - else: - raise ValueError("eta file is not specified") return self._bk @property @@ -641,16 +614,6 @@ def ptop(self) -> util.Quantity: """ the pressure of the top of atmosphere level """ - if self._ptop is None: - if not self._eta_file == "None": - ( - self._ks, - self._ptop, - self._ak, - self._bk, - ) = self._set_hybrid_pressure_coefficients() - else: - raise ValueError("eta file is not specified") return self._ptop @property @@ -2142,7 +2105,7 @@ def _compute_area_c_cartesian(self): area_cgrid_64.data[:, :] = self._dx_const * self._dy_const return quantity_cast_to_model_float(self.quantity_factory, area_cgrid_64) - def _set_hybrid_pressure_coefficients(self): + def _set_hybrid_pressure_coefficients(self, eta_file): ks = self.quantity_factory.zeros( [], "", @@ -2164,7 +2127,7 @@ def _set_hybrid_pressure_coefficients(self): dtype=Float, ) pressure_coefficients = eta.set_hybrid_pressure_coefficients( - self._npz, self._eta_file + self._npz, eta_file ) ks = pressure_coefficients.ks ptop = pressure_coefficients.ptop From 42fda955cb3d8983f86bc221d72e96743f3ad6cd Mon Sep 17 00:00:00 2001 From: mlee03 Date: Fri, 26 Jan 2024 08:10:40 -0500 Subject: [PATCH 62/69] fix tests --- tests/main/driver/test_restart_fortran.py | 4 +++- tests/main/fv3core/test_cartesian_grid.py | 3 ++- tests/main/test_grid_init.py | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/main/driver/test_restart_fortran.py b/tests/main/driver/test_restart_fortran.py index 5dc70d0a..d1accdaa 100644 --- a/tests/main/driver/test_restart_fortran.py +++ b/tests/main/driver/test_restart_fortran.py @@ -47,7 +47,9 @@ def test_state_from_fortran_restart(): damping_coefficients, driver_grid_data, grid_data, - ) = pace.driver.GeneratedGridConfig(restart_path=restart_dir).get_grid( + ) = pace.driver.GeneratedGridConfig( + restart_path=restart_dir, eta_file=restart_dir + "/fv_core.res.nc" + ).get_grid( quantity_factory, null_communicator ) diff --git a/tests/main/fv3core/test_cartesian_grid.py b/tests/main/fv3core/test_cartesian_grid.py index db2ebe2d..986f4eaf 100644 --- a/tests/main/fv3core/test_cartesian_grid.py +++ b/tests/main/fv3core/test_cartesian_grid.py @@ -8,7 +8,7 @@ @pytest.mark.parametrize("npx", [8]) @pytest.mark.parametrize("npy", [8]) -@pytest.mark.parametrize("npz", [1]) +@pytest.mark.parametrize("npz", [79]) @pytest.mark.parametrize("dx_const", [1e2, 1e3]) @pytest.mark.parametrize("dy_const", [2e2, 3e3]) @pytest.mark.parametrize("deglat", [0.0, 15.0]) @@ -35,6 +35,7 @@ def test_cartesian_grid_generation( dx_const=dx_const, dy_const=dy_const, deglat=deglat, + eta_file="tests/main/input/eta79.nc", ) assert np.all(grid_generator.lat_agrid.data == deglat * PI / 180.0) assert np.all(grid_generator.lon_agrid.data == 0.0) diff --git a/tests/main/test_grid_init.py b/tests/main/test_grid_init.py index 4c0e5e2b..55e00e81 100644 --- a/tests/main/test_grid_init.py +++ b/tests/main/test_grid_init.py @@ -32,18 +32,21 @@ def test_grid_init_not_decomposition_dependent(rank: int): mpi_54rank test suite. It tests only variables that are not dependent on halo updates for their values in the compute domain. """ - nx_tile, ny_tile, nz = 48, 48, 5 + nx_tile, ny_tile, nz = 48, 48, 79 + eta_file = "tests/main/input/eta79.nc" metric_terms_1by1 = MetricTerms( quantity_factory=get_quantity_factory( layout=(1, 1), nx_tile=nx_tile, ny_tile=ny_tile, nz=nz ), communicator=get_cube_comm(rank=0, layout=(1, 1)), + eta_file=eta_file, ) metric_terms_3by3 = MetricTerms( quantity_factory=get_quantity_factory( layout=(3, 3), nx_tile=nx_tile, ny_tile=ny_tile, nz=nz ), communicator=get_cube_comm(rank=rank, layout=(3, 3)), + eta_file=eta_file, ) partitioner = pace.util.TilePartitioner(layout=(3, 3)) assert allclose(metric_terms_1by1.grid, metric_terms_3by3.grid, partitioner, rank) From c2f2acf60c3109aaa3e657a4efd375f503afffa7 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Fri, 26 Jan 2024 08:22:42 -0500 Subject: [PATCH 63/69] exploit np.all in eta mod --- util/pace/util/grid/eta.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/util/pace/util/grid/eta.py b/util/pace/util/grid/eta.py index 4eb83eb3..52fe3552 100644 --- a/util/pace/util/grid/eta.py +++ b/util/pace/util/grid/eta.py @@ -59,12 +59,10 @@ def set_hybrid_pressure_coefficients( # check that the eta values computed from ak and bk are monotonically increasing eta, etav = check_eta(ak, bk) - (eta_sorted, etav_sorted) = (np.sort(eta), np.sort(etav)) - for i in range(eta.size): - if eta_sorted[i] != eta[i]: - raise ValueError("ETA values are not monotonically increasing") - if etav_sorted[i] != etav[i]: - raise ValueError("ETAV values are not monotonically increasing") + if not np.all(eta[:-1] <= eta[1:]): + raise ValueError("ETA values are not monotonically increasing") + if not np.all(etav[:-1] <= etav[1:]): + raise ValueError("ETAV values are not monotonically increasing") if 0.0 in bk: ks = 0 if km == 91 else np.where(bk == 0)[0][-1] From 7780c8f459b5e501b657100d869ab59c0c64b7be Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 29 Jan 2024 13:10:33 -0500 Subject: [PATCH 64/69] remove tests/main/grid/input --- tests/main/grid/input/test_config_79.yaml | 106 ------------------ tests/main/grid/input/test_config_91.yaml | 106 ------------------ tests/main/grid/input/test_config_nofile.yaml | 105 ----------------- .../main/grid/input/test_config_not_mono.yaml | 106 ------------------ tests/main/grid/test_eta.py | 31 +++-- 5 files changed, 21 insertions(+), 433 deletions(-) delete mode 100644 tests/main/grid/input/test_config_79.yaml delete mode 100644 tests/main/grid/input/test_config_91.yaml delete mode 100644 tests/main/grid/input/test_config_nofile.yaml delete mode 100644 tests/main/grid/input/test_config_not_mono.yaml diff --git a/tests/main/grid/input/test_config_79.yaml b/tests/main/grid/input/test_config_79.yaml deleted file mode 100644 index 25feb960..00000000 --- a/tests/main/grid/input/test_config_79.yaml +++ /dev/null @@ -1,106 +0,0 @@ -#modified version of baroclinic_c12_dp.yaml -stencil_config: - compilation_config: - backend: numpy - rebuild: false - validate_args: true - format_source: false - device_sync: false -grid_config: - type: generated - config: - grid_type: 4 - dx_const: 3000.0 - dy_const: 3000.0 - deglat: 10.0 - eta_file: 'tests/main/input/eta79.nc' -initialization: - type: analytic - config: - case: baroclinic -performance_config: - collect_performance: true - experiment_name: c12_baroclinic -nx_tile: 12 -nz: 79 -dt_atmos: 225 -minutes: 15 -layout: - - 1 - - 1 -diagnostics_config: - path: output - output_format: netcdf - names: - - u - - v - - ua - - va - - pt - - delp - - qvapor - - qliquid - - qice - - qrain - - qsnow - - qgraupel - z_select: - - level: 65 - names: - - pt -dycore_config: - a_imp: 1.0 - beta: 0. - consv_te: 0. - d2_bg: 0. - d2_bg_k1: 0.2 - d2_bg_k2: 0.1 - d4_bg: 0.15 - d_con: 1.0 - d_ext: 0.0 - dddmp: 0.5 - delt_max: 0.002 - do_sat_adj: true - do_vort_damp: true - fill: true - hord_dp: 6 - hord_mt: 6 - hord_tm: 6 - hord_tr: 8 - hord_vt: 6 - hydrostatic: false - k_split: 1 - ke_bg: 0. - kord_mt: 9 - kord_tm: -9 - kord_tr: 9 - kord_wz: 9 - n_split: 1 - nord: 3 - nwat: 6 - p_fac: 0.05 - rf_cutoff: 3000. - rf_fast: true - tau: 10. - vtdm4: 0.06 - z_tracer: true - do_qa: true - tau_i2s: 1000. - tau_g2v: 1200. - ql_gen: 0.001 - ql_mlt: 0.002 - qs_mlt: 0.000001 - qi_lim: 1.0 - dw_ocean: 0.1 - dw_land: 0.15 - icloud_f: 0 - tau_l2v: 300. - tau_v2l: 90. - fv_sg_adj: 0 - n_sponge: 48 - u_max: 355.0 - -physics_config: - hydrostatic: false - nwat: 6 - do_qa: true diff --git a/tests/main/grid/input/test_config_91.yaml b/tests/main/grid/input/test_config_91.yaml deleted file mode 100644 index d66f897c..00000000 --- a/tests/main/grid/input/test_config_91.yaml +++ /dev/null @@ -1,106 +0,0 @@ -#modified version of baroclinic_c12_dp.yaml -stencil_config: - compilation_config: - backend: numpy - rebuild: false - validate_args: true - format_source: false - device_sync: false -grid_config: - type: generated - config: - grid_type: 4 - dx_const: 3000.0 - dy_const: 3000.0 - deglat: 10.0 - eta_file: 'tests/main/input/eta91.nc' -initialization: - type: analytic - config: - case: baroclinic -performance_config: - collect_performance: true - experiment_name: c12_baroclinic -nx_tile: 12 -nz: 91 -dt_atmos: 225 -minutes: 15 -layout: - - 1 - - 1 -diagnostics_config: - path: output - output_format: netcdf - names: - - u - - v - - ua - - va - - pt - - delp - - qvapor - - qliquid - - qice - - qrain - - qsnow - - qgraupel - z_select: - - level: 65 - names: - - pt -dycore_config: - a_imp: 1.0 - beta: 0. - consv_te: 0. - d2_bg: 0. - d2_bg_k1: 0.2 - d2_bg_k2: 0.1 - d4_bg: 0.15 - d_con: 1.0 - d_ext: 0.0 - dddmp: 0.5 - delt_max: 0.002 - do_sat_adj: true - do_vort_damp: true - fill: true - hord_dp: 6 - hord_mt: 6 - hord_tm: 6 - hord_tr: 8 - hord_vt: 6 - hydrostatic: false - k_split: 1 - ke_bg: 0. - kord_mt: 9 - kord_tm: -9 - kord_tr: 9 - kord_wz: 9 - n_split: 1 - nord: 3 - nwat: 6 - p_fac: 0.05 - rf_cutoff: 3000. - rf_fast: true - tau: 10. - vtdm4: 0.06 - z_tracer: true - do_qa: true - tau_i2s: 1000. - tau_g2v: 1200. - ql_gen: 0.001 - ql_mlt: 0.002 - qs_mlt: 0.000001 - qi_lim: 1.0 - dw_ocean: 0.1 - dw_land: 0.15 - icloud_f: 0 - tau_l2v: 300. - tau_v2l: 90. - fv_sg_adj: 0 - n_sponge: 48 - u_max: 355.0 - -physics_config: - hydrostatic: false - nwat: 6 - do_qa: true diff --git a/tests/main/grid/input/test_config_nofile.yaml b/tests/main/grid/input/test_config_nofile.yaml deleted file mode 100644 index 94443f4d..00000000 --- a/tests/main/grid/input/test_config_nofile.yaml +++ /dev/null @@ -1,105 +0,0 @@ -#modified version of baroclinic_c12_dp.yaml -stencil_config: - compilation_config: - backend: numpy - rebuild: false - validate_args: true - format_source: false - device_sync: false -grid_config: - type: generated - config: - grid_type: 4 - dx_const: 3000.0 - dy_const: 3000.0 - deglat: 10.0 -initialization: - type: analytic - config: - case: baroclinic -performance_config: - collect_performance: true - experiment_name: c12_baroclinic -nx_tile: 12 -nz: 79 -dt_atmos: 225 -minutes: 15 -layout: - - 1 - - 1 -diagnostics_config: - path: output - output_format: netcdf - names: - - u - - v - - ua - - va - - pt - - delp - - qvapor - - qliquid - - qice - - qrain - - qsnow - - qgraupel - z_select: - - level: 65 - names: - - pt -dycore_config: - a_imp: 1.0 - beta: 0. - consv_te: 0. - d2_bg: 0. - d2_bg_k1: 0.2 - d2_bg_k2: 0.1 - d4_bg: 0.15 - d_con: 1.0 - d_ext: 0.0 - dddmp: 0.5 - delt_max: 0.002 - do_sat_adj: true - do_vort_damp: true - fill: true - hord_dp: 6 - hord_mt: 6 - hord_tm: 6 - hord_tr: 8 - hord_vt: 6 - hydrostatic: false - k_split: 1 - ke_bg: 0. - kord_mt: 9 - kord_tm: -9 - kord_tr: 9 - kord_wz: 9 - n_split: 1 - nord: 3 - nwat: 6 - p_fac: 0.05 - rf_cutoff: 3000. - rf_fast: true - tau: 10. - vtdm4: 0.06 - z_tracer: true - do_qa: true - tau_i2s: 1000. - tau_g2v: 1200. - ql_gen: 0.001 - ql_mlt: 0.002 - qs_mlt: 0.000001 - qi_lim: 1.0 - dw_ocean: 0.1 - dw_land: 0.15 - icloud_f: 0 - tau_l2v: 300. - tau_v2l: 90. - fv_sg_adj: 0 - n_sponge: 48 - u_max: 355.0 - -physics_config: - hydrostatic: false - nwat: 6 - do_qa: true diff --git a/tests/main/grid/input/test_config_not_mono.yaml b/tests/main/grid/input/test_config_not_mono.yaml deleted file mode 100644 index 7671fae6..00000000 --- a/tests/main/grid/input/test_config_not_mono.yaml +++ /dev/null @@ -1,106 +0,0 @@ -#modified version of baroclinic_c12_dp.yaml -stencil_config: - compilation_config: - backend: numpy - rebuild: false - validate_args: true - format_source: false - device_sync: false -grid_config: - type: generated - config: - grid_type: 4 - dx_const: 3000.0 - dy_const: 3000.0 - deglat: 10.0 - eta_file: 'test/main/input/eta_not_mono.nc' -initialization: - type: analytic - config: - case: baroclinic -performance_config: - collect_performance: true - experiment_name: c12_baroclinic -nx_tile: 12 -nz: 79 -dt_atmos: 225 -minutes: 15 -layout: - - 1 - - 1 -diagnostics_config: - path: output - output_format: netcdf - names: - - u - - v - - ua - - va - - pt - - delp - - qvapor - - qliquid - - qice - - qrain - - qsnow - - qgraupel - z_select: - - level: 65 - names: - - pt -dycore_config: - a_imp: 1.0 - beta: 0. - consv_te: 0. - d2_bg: 0. - d2_bg_k1: 0.2 - d2_bg_k2: 0.1 - d4_bg: 0.15 - d_con: 1.0 - d_ext: 0.0 - dddmp: 0.5 - delt_max: 0.002 - do_sat_adj: true - do_vort_damp: true - fill: true - hord_dp: 6 - hord_mt: 6 - hord_tm: 6 - hord_tr: 8 - hord_vt: 6 - hydrostatic: false - k_split: 1 - ke_bg: 0. - kord_mt: 9 - kord_tm: -9 - kord_tr: 9 - kord_wz: 9 - n_split: 1 - nord: 3 - nwat: 6 - p_fac: 0.05 - rf_cutoff: 3000. - rf_fast: true - tau: 10. - vtdm4: 0.06 - z_tracer: true - do_qa: true - tau_i2s: 1000. - tau_g2v: 1200. - ql_gen: 0.001 - ql_mlt: 0.002 - qs_mlt: 0.000001 - qi_lim: 1.0 - dw_ocean: 0.1 - dw_land: 0.15 - icloud_f: 0 - tau_l2v: 300. - tau_v2l: 90. - fv_sg_adj: 0 - n_sponge: 48 - u_max: 355.0 - -physics_config: - hydrostatic: false - nwat: 6 - do_qa: true diff --git a/tests/main/grid/test_eta.py b/tests/main/grid/test_eta.py index 0f81e477..b34e52aa 100755 --- a/tests/main/grid/test_eta.py +++ b/tests/main/grid/test_eta.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +import os + import numpy as np import pytest import xarray as xr @@ -19,17 +21,13 @@ """ -def set_answers(config_file): +def set_answers(eta_file): """ Read in the expected values of ak and bk arrays from the input eta NetCDF files. """ - if "79" in config_file: - eta_file = "tests/main/input/eta79.nc" - if "91" in config_file: - eta_file = "tests/main/input/eta91.nc" data = xr.open_dataset(eta_file) return data["ak"].values, data["bk"].values @@ -45,10 +43,17 @@ def test_set_hybrid_pressure_coefficients_correct(km): values read-in directly from the NetCDF file. """ - config_file = f"tests/main/grid/input/test_config_{km}.yaml" + dirname = os.path.dirname(os.path.abspath(__file__)) + config_file = os.path.join( + dirname, "../../../driver/examples/configs/baroclinic_c12.yaml" + ) + with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) + yaml_config["nz"] = km + yaml_config["grid_config"]["config"]["eta_file"] = f"tests/main/input/eta{km}.nc" + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) @@ -56,7 +61,7 @@ def test_set_hybrid_pressure_coefficients_correct(km): p_results = driver.state.grid_data.p.data ak_results = driver.state.grid_data.ak.data bk_results = driver.state.grid_data.bk.data - ak_answers, bk_answers = set_answers(config_file) + ak_answers, bk_answers = set_answers(f"tests/main/input/eta{km}.nc") if ak_answers.size != ak_results.size: raise ValueError("Unexpected size of bk") @@ -74,8 +79,8 @@ def test_set_hybrid_pressure_coefficients_correct(km): @pytest.mark.parametrize( "cfile", [ - "tests/main/grid/input/test_config_nofile.yaml", - "tests/main/grid/input/test_config_not_mono.yaml", + "file_is_not_here", + "tests/main/grid/input/eta_not_mono.nc", ], ) @pytest.mark.xfail @@ -90,10 +95,16 @@ def test_set_hybrid_pressure_coefficients_fail(cfile): to result in erronenous eta values. """ - config_file = cfile + dirname = os.path.dirname(os.path.abspath(__file__)) + config_file = os.path.join( + dirname, "../../../driver/examples/configs/baroclinic_c12.yaml" + ) + with open(config_file, "r") as f: yaml_config = yaml.safe_load(f) + yaml_config["grid_config"]["config"]["eta_file"] = cfile + driver_config = pace.driver.DriverConfig.from_dict(yaml_config) driver_config.comm_config = pace.driver.NullCommConfig(rank=0, total_ranks=6) driver = pace.driver.Driver(config=driver_config) From 870bc87b059a73a964bc34df4c4be2b6e98d6215 Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 29 Jan 2024 13:26:01 -0500 Subject: [PATCH 65/69] update ci --- .github/workflows/main_unit_tests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main_unit_tests.yml b/.github/workflows/main_unit_tests.yml index 5800baa6..f1b24240 100644 --- a/.github/workflows/main_unit_tests.yml +++ b/.github/workflows/main_unit_tests.yml @@ -22,6 +22,9 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements_dev.txt + - name: Clone datafiles + run: | + git clone -b store_files https://github.com/mlee03/pace.git tests/main/input - name: Run all main tests run: | pytest -x tests/main From 2ff869a2dd19fffb88ae36aa75fd5a7b3da79d5c Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 29 Jan 2024 13:26:46 -0500 Subject: [PATCH 66/69] test --- .github/workflows/main_unit_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main_unit_tests.yml b/.github/workflows/main_unit_tests.yml index f1b24240..97b443f9 100644 --- a/.github/workflows/main_unit_tests.yml +++ b/.github/workflows/main_unit_tests.yml @@ -1,5 +1,6 @@ name: "Main unit tests" on: + push: pull_request: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] From 4eb4fc25a52a66060a8bf2e6c90e7731ed0001ec Mon Sep 17 00:00:00 2001 From: mlee03 Date: Mon, 29 Jan 2024 13:30:54 -0500 Subject: [PATCH 67/69] remove input --- tests/main/input/eta79.nc | Bin 7424 -> 0 bytes tests/main/input/eta79_not_mono.nc | Bin 7424 -> 0 bytes tests/main/input/eta91.nc | Bin 7616 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/main/input/eta79.nc delete mode 100644 tests/main/input/eta79_not_mono.nc delete mode 100644 tests/main/input/eta91.nc diff --git a/tests/main/input/eta79.nc b/tests/main/input/eta79.nc deleted file mode 100644 index 0720e33766807b1975fc9a5b728009cb8fe0bb9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 zcmeHI2~?C-6n--Uh%g8$AQ;LRrGh{rpqbKpIIPMdGHMb!4$KfE%nS~rBw2z=rdAkr z6c;oV7ZNv+#RUarQ^)KeW}|fiO@cufNRf)l-uo9(+fL`?Id;z6GxOj7y}P`7zkA>P z*MFX;F_BQmL4z!M$kLs89_m~-Z3&HU>28ujQc#b$1`C>tjUwyf(tlA#mtU8 zIjlP1CMgVL2a}mSd2&oBJ^aQ?Qh0fD$zH!1vjkj8QX21Z5wir`xTIB#dm9^~!ZD*2 zGie6Ex}bY{DtxP#IUHNE%jIx5k&Kw-JX;d+;8D(i_9g(s%)zh~Sj&{kg=b+tgqZL+ zY_3z8$nBgc6CMw+k|#NT9Ayd2fH_eWhWSTFgQ0kj1Wa-a2n`R6hz^a65JwCB!vX<6 z2Im2Iz?3$K@DC59^bw;kN|dJx@J}L8$~3}&Ac0h_kSSB;Dy1N9iAJDQY5GM=C2F}O zE?MR&U}(~0Kmy`o|APRZ1SF1-Y2u{`J^^xtTncP(N3a;M1uzrei25UjGjTYCSpLr# zk`m#x2GDl9Xa-mWP5&ndzC8ZlAxJk$cADE78bk0%AF|l7oWW24ap?&m;A07V9^iI2 z9Yi{m=hlB=w+GWLpKVG5sixUOJpZO6{fR0M*y0AjSAuN-p-QEe%9Rq0EcNj=z!!$; zcKTjpW3uKu(S6D^_7bIBlS(xz5z@Ug7{C3IijI26J{>GRX0HGL2a6kP+{Z);LuRn^ z1vt=nWiXeIA4XqRYdkJ+t@>w0SZK5eIAUddslYJ&C!IlN+n<$+X(y^|sI2D_Ig!10 zoWH(zQP?FlD5%LLju6gNt5RfYjU0CfnP8seNc>+aQ(B49+o zh=36RBLYSQj0hMJFd|??z=(hm0V4v>Bm$Lcv~O9R>j~f0NcVYf^exc_l&c)Fs`B1O zwAO#&?V0=X(4DCAku`3+kP2^KSiJ}Fx#QMs?A(vmCx72pkWq*(X|>wIF-Op{w$WZ8 zQ;U$F#kJjCD~_Q_*g@dEQq;Atc1GEjb8F7KJpY+kV)jrTv}PQvMpZY0;L=n>Xv`YY|rK zX|>W)=WjoBk&v)YfU zYAL!I!VPVX50Ql9P*`mOQJwgj_66od~Jg%+TQIGfj&Q6AAR$J zS?25mJCO+~Ov!e-4@6s#%Z;Dj(fe*hj#zMTeh%8S!8(0n-Un!;{i5)@_G=J!Gx?ZD zCTco8Xq&e-4b>0u+d6x&0+H?d1uJvoSnD)i^go26}iV<>Xr+muIt3vcRqzVc2@CDioNhqcCLQtx9qxDwXu=UfgooP|}+y0T9H8hA~A z>RL=e9Xyyanp5L)0Zt#`x$3RMT9}xTko48`%W%qV_h6Twzkt0twTUBUH$dCnd24r+ zT!9Bm3;FkkUxm%>N%I%2{t|L(KOFUX_cb`+hu}hiL|n{SHbjYWTvK+wi#Ms@4aVEwCdpw}pSQ1v<186hBD#9(KQ< zoTs#Ig>SS5jOi+Fg`f46+B=Ebpqpz#>Uu*PRMa)j*JbJ9;>9B6F8g*^_49X^-rd;_ z6ML#%T}R)6pGY!AFXi8XifJWI!sj}mu6*9GA?rKfhPQnSBkp#D2mQ9=WhNnW+i&oscYHcgFJnE_tZztOkzmI2be*9CtE&AFC8 diff --git a/tests/main/input/eta79_not_mono.nc b/tests/main/input/eta79_not_mono.nc deleted file mode 100644 index 3449ab86fc71642aff7c59ade390b1f4590f9609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 zcmeHI3s96*6u!F)h_DDMAeh1$r9wa=pqbLWxIC4Iz-mRff)C3{0=%o1=V$?3fNMa&X#;_BMy@o146?CBVs}$Bg8R6|FA&7 zkHv8S9x$a1BK*SxDSgD~i<0DN0{oK*lroJlAV?sUD`d(vxk@RBU!oBxRhl8uQi)nF ziBFMv3K*I`0}zL}`1}!oPaG0Q$TSJkM4te;LM{b1xFT2#*aVn~FGoF$;XLdPA(sC$ zh9pHetYNg>4w?ZLLDR|5?vo;gA#>UJ z0vu?(GMVP%htbVyjmHJf)zGX63yl#0N34vS3XH*jQW<2n{aLD*a-!0PD*Dfo8`-|& z{B_?&;UlR*K}{}kgm9i(l`2zfy{}wr1aq+=ze?0V4uN z1dIq65ilZPM8JrE5dk9tMg)uq7!i0R5vW$9-OCzW5Bp{#-B$xKZK4e*UpZ=3^^Hwv zjsI&u&f8spu0>Tk)w%6JD!hFl2=T>YvM6Gi)M^ReR2i-?k9!KZH<82%gYS4la9wk-I zCs9sUROQK8hf2+BibL_n&BfpMfve`+-Y=ka$Iiwq%#O#lloTu8HAbN zoENmHFxAguAWuuJ-5RyXH7@srU8@#_v}V|@Z_%QY{gdOYPifJyPsTobrEL@1vU&4n z-9jzGYW*EnTI&97`_EAKY5eK)s~S!tZ%n1LX`WVkiqbcK;uK0Gl+j4VpVHJo$L-R9 zDxGq=4yfuWy`=Iw%Fn7_YN`7pr`J;cm#9xtai;D)fy%Gnx?p~_1})j>U~<#G203FO z_ROiK&a)XjhAzI*Ik8V%h0fvh?5sV4JW2`-!ET2UNe3sd5(SV%{9ca6$4Y04Q_7G6 zrzNVjl#0JUt^{o}?5+o%}dJ)cOh)n*W_4; zt~_OyHGl7RWI_^CwvDa>(H7)#`PaAgzMGIE7VKM?hd$b1oiVN8edJ`nDEzwpYJ`uO zanK_RwHzDqv9~rIH4gLJI)9`Bk?qD;V^OyDgPSmY?s1aeN138MI~=-}M!{t+O^2s- zrow@(uPqv>UI~w%czOBP7jj`vO=TLwkXPw%^JbqLyNug~1$Tm?bn@X zU$mLg1}{0zy(Q^wgZVEGUyOGB0N1xJXphcnhKDRyb=U&Qo4 z{j{Ig_U-L~@>gp;E)MpY~K1tRFOcn>7JMjk7{rNu5Gn7F10(GY37wM7Nn zm9apvv~^JfGR5K+w$_TJvd!O8kM2H)s>>#EwGjmx*vB_&NEm4uqcl(U*PtOUQSQY2; zq;%yY9%Ul*qOLs79P#t=`>7dn2q#llo)c|H-U;&ZL&N#h+?X5ti1_Nfmj#cj*hj?A z%`0J-_wb-hctXZ-JtGh*iyyd7hd*IHkLO9v@_9VoQdZ4LfhQI5L_Y~)R+A#J2#JeH zD`$Ey0$0%_%04C5eN{cc~ZK~rah4mi6~Qfa*R@mo+jt0fT=wyl2YPQ zl}Tx-Dy2LoIS#pHk^4XbC~8E7%9Q#P^J6zGhFbfQv9CU+*1cRwCK?A}oK)3DgW zmj5q@#o!(Pku-VYBCfxnDGV?ZRQYcV`c+zkQAcJ7)xkojSCaoCt$}Jk z(P4AQjzsp7Xj#aDknmuQwn)2Dzlv;5#yKlA%jZRhhJ=QNguSfzu#a?ld_2m)=ELZI z8U|Frkpq9Me)Nr8&tApCb6ZPwK>>0{b1CZSaq)5KajEh+6-_;YT!NymQ5)5TTH_f0 zhm9DCDE-4eN*)S(oNQen#C_42og&12#<=He^R|7+-T%*Jf;=sm-YFF&Ik=SJnhWQ-^Y?sQNjh+(_$^Dwmk#2Y=wv%%($N23du!M(~L317Ja z{;>FfYNKBP3}0!$4_-IG-`roxA=VW^;sZ%eQ_yR0ck4})OWZnGlGZ1QexU^P?y-=4 z=}lU1?<@nQ|EBCW6Dy#~Ioa0oOchuzw%Y=4z6&WHYb1#O0VsN0q=UK|i0?SGqb1M; z1w(r!FVxjRt9JpBd8HmU?%61PE2RPECRA8w-}wk?=C@kcpZGIGt~QwWUTFq(gI$$0 zc@Kz9{2brQpF;3LXJY=BpV880Zhs!rO^GyE(Z&6lkkZ$3*u zJIO5cI-4sj5M8sxlzG|$8R;`?)psm#ShG8)^qvK>G*Q<577HDRxRS9y5@4bIyQ|NF z53y9*c)1hwlS&A~{WFjTPphMPPt)s#zk7Q8U4oB5VYBzLFRRsG+-a~7HwJ_(;4Jcxo?aMqf^-lc*A zSXNn~ik1^Naf8s$n0**`rR_8=={|~weMhEW+jksW-kXG`4|m|i08#Da?oQnI-Rr9G zye>T4ky1NLb^#Z^|G=sbxP(g%so@9VT0l4Zk=POjNb@Vh>xV zb%y!x_^#r*1PAru^W!d Date: Mon, 29 Jan 2024 13:45:50 -0500 Subject: [PATCH 68/69] edit ci yaml --- .github/workflows/main_unit_tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_unit_tests.yml b/.github/workflows/main_unit_tests.yml index 97b443f9..3e4987b2 100644 --- a/.github/workflows/main_unit_tests.yml +++ b/.github/workflows/main_unit_tests.yml @@ -25,7 +25,8 @@ jobs: pip install -r requirements_dev.txt - name: Clone datafiles run: | - git clone -b store_files https://github.com/mlee03/pace.git tests/main/input + mkdir -p tests/main/input && cd tests/main/input + git clone -b store_files https://github.com/mlee03/pace.git tmp && mv tmp/*.nc . && rm -rf tmp - name: Run all main tests run: | pytest -x tests/main From f2bed7f91064984447e0a57d31f74c173b83dbf8 Mon Sep 17 00:00:00 2001 From: MiKyung Lee <58964324+mlee03@users.noreply.github.com> Date: Mon, 29 Jan 2024 14:06:53 -0500 Subject: [PATCH 69/69] remove push --- .github/workflows/main_unit_tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main_unit_tests.yml b/.github/workflows/main_unit_tests.yml index 3e4987b2..b8a1289b 100644 --- a/.github/workflows/main_unit_tests.yml +++ b/.github/workflows/main_unit_tests.yml @@ -1,6 +1,5 @@ name: "Main unit tests" on: - push: pull_request: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled]