From 4cd497f80b4928ed3a94726862c1102214d65dd2 Mon Sep 17 00:00:00 2001 From: Noah D Brenowitz Date: Fri, 5 Jun 2020 15:51:28 -0700 Subject: [PATCH] Redefine fine-res budget for new ShiELD (#383) The new simulation had different physics options and therefore different diagnostics outputs. Relevant changes included: - no gfdl microphysics output. Now microphysics is in the physics tendency, and the fv_sat_adj dynamical core phase changes - New formulation of pressure velocity "omega" resolving this error: https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere/issues/40. The correct pressure velocity and corresponding eddy flux are now named "vulcan_omega" and "eddy_flux_vulcan_omega_sphum" for example. Changes introduced by this commit: - Adjust hardcoded budget terms to accomodate the changes above. The team suggested that I not overgeneralize this code since won't have a new dataset anytime soon. - Update test schema to reflect the new training data - Add unit and long_name information to the outputs - Simplify the variable renaming logic. Previously "_coarse" was automatically stripped from all the names of the diagnostic output, which made it tricky to know infer what variables were available at a particular step of the pipeline. Now most of the renaming is concentrated into one function. - Adjust `FineResolutionSources` to reflect this schema change. [VCMML-310] Closes #347 [VCMML-310]: https://vulcan.atlassian.net/browse/VCMML-310 --- fv3net/regression/loaders/_transform.py | 2 +- tests/loaders/test__transform.py | 62 ++++++------ workflows/fine_res_budget/budget/budgets.py | 97 +++++++++++++++---- workflows/fine_res_budget/budget/data.py | 23 ++--- workflows/fine_res_budget/budget/pipeline.py | 23 ++--- workflows/fine_res_budget/tests/diag.json | 2 +- .../tests/regenerate_schema.py | 4 +- workflows/fine_res_budget/tests/restart.json | 2 +- .../tests/test_fine_res_budget.py | 19 ++-- 9 files changed, 141 insertions(+), 93 deletions(-) diff --git a/fv3net/regression/loaders/_transform.py b/fv3net/regression/loaders/_transform.py index 8fd20b037a..06cc98f0bb 100644 --- a/fv3net/regression/loaders/_transform.py +++ b/fv3net/regression/loaders/_transform.py @@ -105,7 +105,7 @@ def _derived_budget_ds( variable_prefixes: Mapping[str, str] = None, apparent_source_terms: Sequence[str] = ( "physics", - "microphysics", + "saturation_adjustment", "convergence", ), ) -> xr.Dataset: diff --git a/tests/loaders/test__transform.py b/tests/loaders/test__transform.py index 8d97ce958e..d27a2effed 100644 --- a/tests/loaders/test__transform.py +++ b/tests/loaders/test__transform.py @@ -95,41 +95,35 @@ def test_shuffled_dask(): shuffled(dataset, "sample", np.random.RandomState(1)) -air_temperature = xr.DataArray([270.0], [(["x"], [1.0])], ["x"], attrs={"units": "K"}) -air_temperature_physics = xr.DataArray( - [0.1], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} -) -air_temperature_microphysics = xr.DataArray( - [0.2], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} -) -air_temperature_convergence = xr.DataArray( - [-0.1], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} -) -specific_humidity = xr.DataArray( - [1.0e-3], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg"} -) -specific_humidity_physics = xr.DataArray( - [1.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} -) -specific_humidity_microphysics = xr.DataArray( - [2.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} -) -specific_humidity_convergence = xr.DataArray( - [-1.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} -) budget_ds = xr.Dataset( - { - "air_temperature": air_temperature, - "air_temperature_physics": air_temperature_physics, - "air_temperature_microphysics": air_temperature_microphysics, - "air_temperature_convergence": air_temperature_convergence, - "specific_humidity": specific_humidity, - "specific_humidity_physics": specific_humidity_physics, - "specific_humidity_microphysics": specific_humidity_microphysics, - "specific_humidity_convergence": specific_humidity_convergence, - } + dict( + air_temperature=xr.DataArray( + [270.0], [(["x"], [1.0])], ["x"], attrs={"units": "K"} + ), + air_temperature_physics=xr.DataArray( + [0.1], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} + ), + air_temperature_saturation_adjustment=xr.DataArray( + [0.2], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} + ), + air_temperature_convergence=xr.DataArray( + [-0.1], [(["x"], [1.0])], ["x"], attrs={"units": "K/s"} + ), + specific_humidity=xr.DataArray( + [1.0e-3], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg"} + ), + specific_humidity_physics=xr.DataArray( + [1.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} + ), + specific_humidity_saturation_adjustment=xr.DataArray( + [2.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} + ), + specific_humidity_convergence=xr.DataArray( + [-1.0e-6], [(["x"], [1.0])], ["x"], attrs={"units": "kg/kg/s"} + ), + ) ) -apparent_source_terms = ["physics", "microphysics", "convergence"] +apparent_source_terms = ["physics", "saturation_adjustment", "convergence"] @pytest.mark.parametrize( @@ -159,7 +153,7 @@ def test_shuffled_dask(): budget_ds, "air_temperature", "dQ1", - ["physics", "microphysics"], + ["physics", "saturation_adjustment"], budget_ds.assign( { "dQ1": xr.DataArray( diff --git a/workflows/fine_res_budget/budget/budgets.py b/workflows/fine_res_budget/budget/budgets.py index 3e311eafdf..5236e4bf1e 100644 --- a/workflows/fine_res_budget/budget/budgets.py +++ b/workflows/fine_res_budget/budget/budgets.py @@ -111,7 +111,7 @@ def compute_recoarsened_budget_field( field_fine: xr.DataArray, unresolved_flux: xr.DataArray, storage: xr.DataArray, - microphysics: xr.DataArray, + saturation_adjustment: xr.DataArray, physics: xr.DataArray, nudging: xr.DataArray = None, factor: int = 8, @@ -122,7 +122,7 @@ def compute_recoarsened_budget_field( Returns: xr.Dataset with keys: storage, eddy, field, resolved, convergence, - microphysics, physics, nudging + saturation_adjustment, physics, nudging Note: Need to pass in coarsened omega and delp to save computational cost @@ -131,7 +131,7 @@ def compute_recoarsened_budget_field( storage_name = "storage" unresolved_flux_name = "eddy" - field_name = "field" + field_place_holder_name = "field" resolved_flux_name = "resolved" convergence_name = "convergence" @@ -139,14 +139,14 @@ def compute_recoarsened_budget_field( # Make iterator of all the variables to average def variables_to_average(): - yield microphysics.rename("microphysics") + yield saturation_adjustment.rename("saturation_adjustment") yield physics.rename("physics") if nudging is not None: yield nudging.rename("nudging") yield unresolved_flux.rename(unresolved_flux_name) yield (field_fine * omega_fine).rename(resolved_flux_name) yield storage.rename(storage_name) - yield field_fine.rename(field_name) + yield field_fine.rename(field_place_holder_name) def averaged_variables(): for array in variables_to_average(): @@ -160,7 +160,7 @@ def averaged_variables(): averaged[unresolved_flux_name], averaged[resolved_flux_name], omega_coarse, - averaged[field_name], + averaged[field_place_holder_name], ) convergence = grid.vertical_convergence(eddy_flux, delp_coarse).rename( @@ -170,7 +170,53 @@ def averaged_variables(): return xr.merge([convergence, averaged]) -def rename_recoarsened_budget(budget: xr.Dataset, field_name: str): +def add_budget_metadata(budget: xr.Dataset, units: str, field_name: str): + tendency_units = units + "/s" + budget.convergence.attrs.update( + {"long_name": f"eddy flux convergence of {field_name}", "units": tendency_units} + ) + + budget.saturation_adjustment.attrs.update( + { + "long_name": ( + f"tendency of {field_name} due to dynamical core " + "saturation adjustment" + ), + "units": tendency_units, + } + ) + + budget.physics.attrs.update( + { + "long_name": f"tendency of {field_name} due to physics", + "description": "sum of microphysics and any other parameterized process", + "units": tendency_units, + } + ) + + if "nudging" in budget: + budget.nudging.attrs.update( + { + "long_name": f"tendency of {field_name} due to SHiELD nudging", + "units": tendency_units, + } + ) + + budget.storage.attrs.update( + { + "long_name": f"storage of {field_name}", + "description": ( + f"partial time derivative of {field_name} for fixed x, y, " + "and output model level. Sum of all the budget tendencies." + ), + "units": tendency_units, + } + ) + + budget.field.attrs.update({"units": units}) + + +def rename_recoarsened_budget(budget: xr.Dataset, field_name: str) -> str: rename = {} rename["field"] = field_name for variable in budget: @@ -219,10 +265,10 @@ def compute_recoarsened_budget(merged: xr.Dataset, dt=15 * 60, factor=8): middle = merged.sel(step="middle") - omega_fine = middle.omega - area = middle.area + omega_fine = middle.vulcan_omega_coarse + area = middle.area_coarse delp_fine = middle.delp - delp_coarse = grid.weighted_block_average(delp_fine, middle.area, factor=factor) + delp_coarse = grid.weighted_block_average(delp_fine, area, factor=factor) omega_coarse = grid.pressure_level_average( delp_fine, delp_coarse, area, omega_fine, factor=factor ) @@ -235,12 +281,12 @@ def compute_recoarsened_budget(merged: xr.Dataset, dt=15 * 60, factor=8): omega_coarse, middle["T"], storage=storage(merged["T"], dt), - unresolved_flux=middle["eddy_flux_omega_temp"], - microphysics=middle["t_dt_gfdlmp"], - nudging=middle["t_dt_nudge"], - physics=middle["t_dt_phys"], + unresolved_flux=middle["eddy_flux_vulcan_omega_temp"], + saturation_adjustment=middle["t_dt_fv_sat_adj_coarse"], + nudging=middle["t_dt_nudge_coarse"], + physics=middle["t_dt_phys_coarse"], factor=factor, - ).pipe(rename_recoarsened_budget, "air_temperature") + ) q_budget_coarse = compute_recoarsened_budget_field( area, @@ -250,10 +296,23 @@ def compute_recoarsened_budget(merged: xr.Dataset, dt=15 * 60, factor=8): omega_coarse, middle["sphum"], storage=storage(merged["sphum"], dt), - unresolved_flux=middle["eddy_flux_omega_sphum"], - microphysics=middle["qv_dt_gfdlmp"], - physics=middle["qv_dt_phys"], + unresolved_flux=middle["eddy_flux_vulcan_omega_sphum"], + saturation_adjustment=middle["qv_dt_fv_sat_adj_coarse"], + physics=middle["qv_dt_phys_coarse"], factor=factor, - ).pipe(rename_recoarsened_budget, "specific_humidity") + ) + + # metadata adjustments + add_budget_metadata(t_budget_coarse, "K", "air_temperature") + t_budget_coarse = rename_recoarsened_budget(t_budget_coarse, "air_temperature") + + add_budget_metadata(q_budget_coarse, "kg/kg", "specific_humidity") + q_budget_coarse = rename_recoarsened_budget(q_budget_coarse, "specific_humidity") + + omega_coarse = omega_coarse.assign_attrs( + {"long_name": "Lagrangian derivative of hydrostatic pressure", "units": "Pa/s"} + ).rename("omega") + + delp_coarse = delp_coarse.rename("delp") return xr.merge([t_budget_coarse, q_budget_coarse, omega_coarse, delp_coarse]) diff --git a/workflows/fine_res_budget/budget/data.py b/workflows/fine_res_budget/budget/data.py index a3285bf3cf..5cffb49e33 100644 --- a/workflows/fine_res_budget/budget/data.py +++ b/workflows/fine_res_budget/budget/data.py @@ -21,15 +21,6 @@ GRID_VARIABLES = ["grid_x", "grid_y", "grid_xt", "grid_yt", "pfull", "tile"] -def remove_coarse_name(ds): - name_dict = {} - for variable in ds: - suffix = "_coarse" - if variable.endswith(suffix): - name_dict[variable] = variable[: -len(suffix)] - return ds.rename(name_dict) - - def rename_dims(ds): name_dict = {} for variable in ds.dims: @@ -41,7 +32,12 @@ def rename_dims(ds): def rename_latlon(ds): return ds.rename( - {"grid_lat": "latb", "grid_lon": "lonb", "grid_lont": "lon", "grid_latt": "lat"} + { + "grid_lat_coarse": "latb", + "grid_lon_coarse": "lonb", + "grid_lont_coarse": "lon", + "grid_latt_coarse": "lat", + } ) @@ -66,12 +62,7 @@ def standardize_restart_metadata(restarts): def standardize_diagnostic_metadata(ds): times = np.vectorize(round_time)(ds.time) - return ( - ds.assign(time=times) - .pipe(remove_coarse_name) - .pipe(rename_dims) - .pipe(rename_latlon) - ) + return ds.assign(time=times).pipe(rename_dims).pipe(rename_latlon) def shift(restarts, dt=datetime.timedelta(seconds=30, minutes=7)): diff --git a/workflows/fine_res_budget/budget/pipeline.py b/workflows/fine_res_budget/budget/pipeline.py index 45eb29bbd6..7029c49a2e 100644 --- a/workflows/fine_res_budget/budget/pipeline.py +++ b/workflows/fine_res_budget/budget/pipeline.py @@ -26,19 +26,20 @@ PHYSICS_VARIABLES = [ - "omega", - "t_dt_gfdlmp", - "t_dt_nudge", - "t_dt_phys", - "qv_dt_gfdlmp", - "qv_dt_phys", - "eddy_flux_omega_sphum", - "eddy_flux_omega_temp", - "omega", + # from ShiELD diagnostics + "t_dt_fv_sat_adj_coarse", + "t_dt_nudge_coarse", + "t_dt_phys_coarse", + "qv_dt_fv_sat_adj_coarse", + "qv_dt_phys_coarse", + "eddy_flux_vulcan_omega_sphum", + "eddy_flux_vulcan_omega_temp", + "vulcan_omega_coarse", + "area_coarse", + # from restarts "delp", "sphum", "T", - "area", ] Dims = Sequence[Hashable] @@ -99,7 +100,7 @@ def load(ds: xr.Dataset) -> xr.Dataset: def yield_time_physics_time_slices(merged: xr.Dataset) -> Iterable[Mapping[str, slice]]: # grab a physics variable - omega = merged["omega"] + omega = merged["vulcan_omega_coarse"] chunks = omega.chunks[omega.get_axis_num("time")] time_slices = chunks_1d_to_slices(chunks) diff --git a/workflows/fine_res_budget/tests/diag.json b/workflows/fine_res_budget/tests/diag.json index e8299d2836..0cd6799c63 100644 --- a/workflows/fine_res_budget/tests/diag.json +++ b/workflows/fine_res_budget/tests/diag.json @@ -1 +1 @@ -{"version": "v2alpha", "schema": {"coords": [{"name": "grid_x_coarse", "dims": ["grid_x_coarse"], "value": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0, 136.0, 137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 149.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 164.0, 165.0, 166.0, 167.0, 168.0, 169.0, 170.0, 171.0, 172.0, 173.0, 174.0, 175.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 182.0, 183.0, 184.0, 185.0, 186.0, 187.0, 188.0, 189.0, 190.0, 191.0, 192.0, 193.0, 194.0, 195.0, 196.0, 197.0, 198.0, 199.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 208.0, 209.0, 210.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 223.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 254.0, 255.0, 256.0, 257.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 312.0, 313.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0, 321.0, 322.0, 323.0, 324.0, 325.0, 326.0, 327.0, 328.0, 329.0, 330.0, 331.0, 332.0, 333.0, 334.0, 335.0, 336.0, 337.0, 338.0, 339.0, 340.0, 341.0, 342.0, 343.0, 344.0, 345.0, 346.0, 347.0, 348.0, 349.0, 350.0, 351.0, 352.0, 353.0, 354.0, 355.0, 356.0, 357.0, 358.0, 359.0, 360.0, 361.0, 362.0, 363.0, 364.0, 365.0, 366.0, 367.0, 368.0, 369.0, 370.0, 371.0, 372.0, 373.0, 374.0, 375.0, 376.0, 377.0, 378.0, 379.0, 380.0, 381.0, 382.0, 383.0, 384.0, 385.0], "attrs": {"cartesian_axis": "X", "long_name": "Corner longitude", "units": "degrees_E"}}, {"name": "grid_xt_coarse", "dims": ["grid_xt_coarse"], "value": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0, 136.0, 137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 149.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 164.0, 165.0, 166.0, 167.0, 168.0, 169.0, 170.0, 171.0, 172.0, 173.0, 174.0, 175.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 182.0, 183.0, 184.0, 185.0, 186.0, 187.0, 188.0, 189.0, 190.0, 191.0, 192.0, 193.0, 194.0, 195.0, 196.0, 197.0, 198.0, 199.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 208.0, 209.0, 210.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 223.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 254.0, 255.0, 256.0, 257.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 312.0, 313.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0, 321.0, 322.0, 323.0, 324.0, 325.0, 326.0, 327.0, 328.0, 329.0, 330.0, 331.0, 332.0, 333.0, 334.0, 335.0, 336.0, 337.0, 338.0, 339.0, 340.0, 341.0, 342.0, 343.0, 344.0, 345.0, 346.0, 347.0, 348.0, 349.0, 350.0, 351.0, 352.0, 353.0, 354.0, 355.0, 356.0, 357.0, 358.0, 359.0, 360.0, 361.0, 362.0, 363.0, 364.0, 365.0, 366.0, 367.0, 368.0, 369.0, 370.0, 371.0, 372.0, 373.0, 374.0, 375.0, 376.0, 377.0, 378.0, 379.0, 380.0, 381.0, 382.0, 383.0, 384.0], "attrs": {"cartesian_axis": "X", "long_name": "T-cell longitude", "units": "degrees_E"}}, {"name": "grid_y_coarse", "dims": ["grid_y_coarse"], "value": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0, 136.0, 137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 149.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 164.0, 165.0, 166.0, 167.0, 168.0, 169.0, 170.0, 171.0, 172.0, 173.0, 174.0, 175.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 182.0, 183.0, 184.0, 185.0, 186.0, 187.0, 188.0, 189.0, 190.0, 191.0, 192.0, 193.0, 194.0, 195.0, 196.0, 197.0, 198.0, 199.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 208.0, 209.0, 210.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 223.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 254.0, 255.0, 256.0, 257.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 312.0, 313.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0, 321.0, 322.0, 323.0, 324.0, 325.0, 326.0, 327.0, 328.0, 329.0, 330.0, 331.0, 332.0, 333.0, 334.0, 335.0, 336.0, 337.0, 338.0, 339.0, 340.0, 341.0, 342.0, 343.0, 344.0, 345.0, 346.0, 347.0, 348.0, 349.0, 350.0, 351.0, 352.0, 353.0, 354.0, 355.0, 356.0, 357.0, 358.0, 359.0, 360.0, 361.0, 362.0, 363.0, 364.0, 365.0, 366.0, 367.0, 368.0, 369.0, 370.0, 371.0, 372.0, 373.0, 374.0, 375.0, 376.0, 377.0, 378.0, 379.0, 380.0, 381.0, 382.0, 383.0, 384.0, 385.0], "attrs": {"cartesian_axis": "Y", "long_name": "Corner latitude", "units": "degrees_N"}}, {"name": "grid_yt_coarse", "dims": ["grid_yt_coarse"], "value": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 132.0, 133.0, 134.0, 135.0, 136.0, 137.0, 138.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 149.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 164.0, 165.0, 166.0, 167.0, 168.0, 169.0, 170.0, 171.0, 172.0, 173.0, 174.0, 175.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 182.0, 183.0, 184.0, 185.0, 186.0, 187.0, 188.0, 189.0, 190.0, 191.0, 192.0, 193.0, 194.0, 195.0, 196.0, 197.0, 198.0, 199.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 208.0, 209.0, 210.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 223.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 254.0, 255.0, 256.0, 257.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 312.0, 313.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0, 321.0, 322.0, 323.0, 324.0, 325.0, 326.0, 327.0, 328.0, 329.0, 330.0, 331.0, 332.0, 333.0, 334.0, 335.0, 336.0, 337.0, 338.0, 339.0, 340.0, 341.0, 342.0, 343.0, 344.0, 345.0, 346.0, 347.0, 348.0, 349.0, 350.0, 351.0, 352.0, 353.0, 354.0, 355.0, 356.0, 357.0, 358.0, 359.0, 360.0, 361.0, 362.0, 363.0, 364.0, 365.0, 366.0, 367.0, 368.0, 369.0, 370.0, 371.0, 372.0, 373.0, 374.0, 375.0, 376.0, 377.0, 378.0, 379.0, 380.0, 381.0, 382.0, 383.0, 384.0], "attrs": {"cartesian_axis": "Y", "long_name": "T-cell latitude", "units": "degrees_N"}}, {"name": "nv", "dims": ["nv"], "value": [1.0, 2.0], "attrs": {"cartesian_axis": "N", "long_name": "vertex number", "units": "none"}}, {"name": "pfull", "dims": ["pfull"], "value": [4.513797760009766, 8.300871849060059, 12.45199203491211, 16.743741989135742, 21.043724060058594, 25.338401794433594, 29.674856185913086, 34.14716339111328, 38.8691291809082, 43.96601867675781, 49.524600982666016, 55.561832427978516, 62.09315490722656, 69.13201904296875, 76.6898422241211, 84.77604675292969, 93.39774322509766, 102.56007385253906, 112.26520538330078, 122.5139389038086, 133.30374145507812, 144.63076782226562, 156.48789978027344, 168.8668975830078, 181.75669860839844, 195.14442443847656, 209.01512145996094, 223.3527069091797, 238.13926696777344, 253.35498046875, 268.9787292480469, 284.9892272949219, 301.36309814453125, 318.0757751464844, 335.1037292480469, 352.4205322265625, 370.0025634765625, 387.82196044921875, 405.85321044921875, 424.07086181640625, 442.4497985839844, 460.96282958984375, 479.5855712890625, 498.29193115234375, 517.0590209960938, 535.8635864257812, 554.6806640625, 573.4886474609375, 592.2669677734375, 610.9929809570312, 629.6495361328125, 648.21484375, 666.672607421875, 685.006591796875, 703.18896484375, 721.1845703125, 738.9545288085938, 756.4624633789062, 773.6666870117188, 790.5257568359375, 807.0040283203125, 823.0641479492188, 838.66357421875, 853.7616577148438, 868.3317260742188, 882.330322265625, 895.7164306640625, 908.469970703125, 920.5462646484375, 931.9229125976562, 942.5590209960938, 952.4390869140625, 961.5247802734375, 969.80859375, 977.23828125, 983.82421875, 989.5399780273438, 994.33740234375, 998.2764282226562], "attrs": {"cartesian_axis": "Z", "edges": "phalf", "long_name": "ref full pressure level", "positive": "down", "units": "mb"}}, {"name": "tile", "dims": ["tile"], "value": [0, 1, 2, 3, 4, 5], "attrs": {}}, {"name": "time", "dims": ["time"], "value": [1.3005046639591455e-05, 900.0000000065484, 1799.9999460087565, 2699.9998920109647, 3600.0000000065484, 4500.000107000233, 5400.000214013562, 6300.000000006548, 7199.999784997635, 8100.000214013562, 9000.000000006548, 9899.999784997635, 10799.999570008367, 11700.000000006548, 12600.00042900283, 13499.999570008367, 14400.000000006548, 15300.00042900283, 16199.999570008367, 17100.00000000655, 18000.00042900283, 18899.999570008367, 19800.00000000655, 20700.00042900283, 21600.00085799911, 22500.00000000655, 23399.999141012086, 24300.00085799911, 25200.00000000655, 26099.999141012086, 27000.00085799911, 27900.00000000655, 28799.999141012086, 29700.00085799911, 30600.00000000655, 31499.999141012086, 32400.00085799911, 33300.00000000655, 34199.999141012086, 35100.00085799911, 36000.00000000655, 36899.999141012086, 37800.00085799911, 38700.00000000655, 39599.999141012086, 40500.00085799911, 41400.00000000655, 42299.999141012086, 43199.99828299988, 44100.00000000655, 45000.00171601132, 45899.99828299988, 46800.00000000655, 47700.00171601132, 48599.99828299988, 49500.00000000655, 50400.00171601132, 51299.99828299988, 52200.00000000655, 53100.00171601132, 53999.99828299988, 54900.00000000655, 55800.00171601132, 56699.99828299988, 57600.00000000655, 58500.00171601132, 59399.99828299988, 60300.00000000655, 61200.00171601132, 62099.99828299988, 63000.00000000655, 63900.00171601132, 64799.99828299988, 65700.00000000655, 66600.00171601132, 67499.99828299988, 68400.00000000655, 69300.00171601132, 70199.99828299988, 71100.00000000655, 72000.00171601132, 72899.99828299988, 73800.00000000655, 74700.00171601132, 75599.99828299988, 76500.00000000655, 77400.00171601132, 78299.99828299988, 79200.00000000655, 80100.00171601132, 80999.99828299988, 81900.00000000655, 82800.00171601132, 83699.99828299988, 84600.00000000655, 85500.00171601132, 86400.00343299835, 87300.00000000655, 88199.99656601285, 89100.00343299835, 90000.00000000655, 90899.99656601285, 91800.00343299835, 92700.00000000655, 93599.99656601285, 94500.00343299835, 95400.00000000655, 96299.99656601285, 97200.00343299835, 98100.00000000655, 98999.99656601285, 99900.00343299835, 100800.00000000655, 101699.99656601285, 102600.00343299835, 103500.00000000655, 104399.99656601285, 105300.00343299835, 106200.00000000655, 107099.99656601285, 108000.00343299835, 108900.00000000655, 109799.99656601285, 110700.00343299835, 111600.00000000655, 112499.99656601285, 113400.00343299835, 114300.00000000655, 115199.99656601285, 116100.00343299835, 117000.00000000655, 117899.99656601285, 118800.00343299835, 119700.00000000655, 120599.99656601285, 121500.00343299835, 122400.00000000655, 123299.99656601285, 124200.00343299835, 125100.00000000655, 125999.99656601285, 126900.00343299835, 127800.00000000655, 128699.99656601285, 129599.99313300141, 130500.00000000655, 131400.0068660098, 132299.9931330014, 133200.00000000655, 134100.0068660098, 134999.9931330014, 135900.00000000655, 136800.0068660098, 137699.9931330014, 138600.00000000655, 139500.0068660098, 140399.9931330014, 141300.00000000655, 142200.0068660098, 143099.9931330014, 144000.00000000655, 144900.0068660098, 145799.9931330014, 146700.00000000655, 147600.0068660098, 148499.9931330014, 149400.00000000655, 150300.0068660098, 151199.9931330014, 152100.00000000655, 153000.0068660098, 153899.9931330014, 154800.00000000655, 155700.0068660098, 156599.9931330014, 157500.00000000655, 158400.0068660098, 159299.9931330014, 160200.00000000655, 161100.0068660098, 161999.9931330014, 162900.00000000655, 163800.0068660098, 164699.9931330014, 165600.00000000655, 166500.0068660098, 167399.9931330014, 168300.00000000655, 169200.0068660098, 170099.9931330014, 171000.00000000655, 171900.0068660098, 172799.9931330014, 173700.00000000655, 174600.0068660098, 175499.9931330014, 176400.00000000655, 177300.0068660098, 178199.9931330014, 179100.00000000655, 180000.0068660098, 180899.9931330014, 181800.00000000655, 182700.0068660098, 183599.9931330014, 184500.00000000655, 185400.0068660098, 186299.9931330014, 187200.00000000655, 188100.0068660098, 188999.9931330014, 189900.00000000655, 190800.0068660098, 191699.9931330014, 192600.00000000655, 193500.0068660098, 194399.9931330014, 195300.00000000655, 196200.0068660098, 197099.9931330014, 198000.00000000655, 198900.0068660098, 199799.9931330014, 200700.00000000655, 201600.0068660098, 202499.9931330014, 203400.00000000655, 204300.0068660098, 205199.9931330014, 206100.00000000655, 207000.0068660098, 207899.9931330014, 208800.00000000655, 209700.0068660098, 210599.9931330014, 211500.00000000655, 212400.0068660098, 213299.9931330014, 214200.00000000655, 215100.0068660098, 215999.9931330014, 216900.00000000655, 217800.0068660098, 218699.9931330014, 219600.00000000655, 220500.0068660098, 221399.9931330014, 222300.00000000655, 223200.0068660098, 224099.9931330014, 225000.00000000655, 225900.0068660098, 226799.9931330014, 227700.00000000655, 228600.0068660098, 229499.9931330014, 230400.00000000655, 231300.0068660098, 232199.9931330014, 233100.00000000655, 234000.0068660098, 234899.9931330014, 235800.00000000655, 236700.0068660098, 237599.9931330014, 238500.00000000655, 239400.0068660098, 240299.9931330014, 241200.00000000655, 242100.0068660098, 242999.9931330014, 243900.00000000655, 244800.0068660098, 245699.9931330014, 246600.00000000655, 247500.0068660098, 248399.9931330014, 249300.00000000655, 250200.0068660098, 251099.9931330014, 252000.00000000655, 252900.0068660098, 253799.9931330014, 254700.00000000655, 255600.0068660098, 256499.9931330014, 257400.00000000655, 258300.0068660098, 259199.9931330014, 260100.00000000655, 261000.0068660098, 261899.9931330014, 262800.0000000065, 263700.0068660098, 264599.9931330014, 265500.0000000065, 266400.0068660098, 267299.9931330014, 268200.0000000065, 269100.0068660098, 269999.9931330014, 270900.0000000065, 271800.0068660098, 272699.9931330014, 273600.0000000065, 274500.0068660098, 275399.9931330014, 276300.0000000065, 277200.0068660098, 278099.9931330014, 279000.0000000065, 279900.0068660098, 280799.9931330014, 281700.0000000065, 282600.0068660098, 283499.9931330014, 284400.0000000065, 285300.0068660098, 286199.9931330014, 287100.0000000065, 288000.0068660098, 288899.9931330014, 289800.0000000065, 290700.0068660098, 291599.9931330014, 292500.0000000065, 293400.0068660098, 294299.9931330014, 295200.0000000065, 296100.0068660098, 296999.9931330014, 297900.0000000065, 298800.0068660098, 299699.9931330014, 300600.0000000065, 301500.0068660098, 302399.9931330014, 303300.0000000065, 304200.0068660098, 305099.9931330014, 306000.0000000065, 306900.0068660098, 307799.9931330014, 308700.0000000065, 309600.0068660098, 310499.9931330014, 311400.0000000065, 312300.0068660098, 313199.9931330014, 314100.0000000065, 315000.0068660098, 315899.9931330014, 316800.0000000065, 317700.0068660098, 318599.9931330014, 319500.0000000065, 320400.0068660098, 321299.9931330014, 322200.0000000065, 323100.0068660098, 323999.9931330014, 324900.0000000065, 325800.0068660098, 326699.9931330014, 327600.0000000065, 328500.0068660098, 329399.9931330014, 330300.0000000065, 331200.0068660098, 332099.9931330014, 333000.0000000065, 333900.0068660098, 334799.9931330014, 335700.0000000065, 336600.0068660098, 337499.9931330014, 338400.0000000065, 339300.0068660098, 340199.9931330014, 341100.0000000065, 342000.0068660098, 342899.9931330014, 343800.0000000065, 344700.0068660098, 345600.01373201306, 346500.0000000065, 347399.98626699817, 348300.01373201306, 349200.0000000065, 350099.98626699817, 351000.01373201306, 351900.0000000065, 352799.98626699817, 353700.01373201306, 354600.0000000065, 355499.98626699817, 356400.01373201306, 357300.0000000065, 358199.98626699817, 359100.01373201306, 360000.0000000065, 360899.98626699817, 361800.01373201306, 362700.0000000065, 363599.98626699817, 364500.01373201306, 365400.0000000065, 366299.98626699817, 367200.01373201306, 368100.0000000065, 368999.98626699817, 369900.01373201306, 370800.0000000065, 371699.98626699817, 372600.01373201306, 373500.0000000065, 374399.98626699817, 375300.01373201306, 376200.0000000065, 377099.98626699817, 378000.01373201306, 378900.0000000065, 379799.98626699817, 380700.01373201306, 381600.0000000065, 382499.98626699817, 383400.01373201306, 384300.0000000065, 385199.98626699817, 386100.01373201306, 387000.0000000065, 387899.98626699817, 388800.01373201306, 389700.0000000065, 390599.98626699817, 391500.01373201306, 392400.0000000065, 393299.98626699817, 394200.01373201306, 395100.0000000065, 395999.98626699817, 396900.01373201306, 397800.0000000065, 398699.98626699817, 399600.01373201306, 400500.0000000065, 401399.98626699817, 402300.01373201306, 403200.0000000065, 404099.98626699817, 405000.01373201306, 405900.0000000065, 406799.98626699817, 407700.01373201306, 408600.0000000065, 409499.98626699817, 410400.01373201306, 411300.0000000065, 412199.98626699817, 413100.01373201306, 414000.0000000065, 414899.98626699817, 415800.01373201306, 416700.0000000065, 417599.98626699817, 418500.01373201306, 419400.0000000065, 420299.98626699817, 421200.01373201306, 422100.0000000065, 422999.98626699817, 423900.01373201306, 424800.0000000065, 425699.98626699817, 426600.01373201306, 427500.0000000065, 428399.98626699817, 429300.01373201306, 430200.0000000065, 431099.98626699817], "attrs": {"bounds": "time_bnds", "calendar": "julian", "calendar_type": "JULIAN", "cartesian_axis": "T", "long_name": "time", "units": "seconds since 2016-08-01 00:07:30.000013"}}], "variables": [{"name": "HGTsfc_coarse", "dims": ["tile", "grid_yt_coarse", "grid_xt_coarse"], "array": {"shape": [6, 384, 384], "dtype": "