From df5d7b62139c61e2967720f7652743abcbbcc893 Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Mon, 24 Feb 2025 15:21:45 -0800 Subject: [PATCH 1/6] Add more get_fields to ClimaAtmosSimulation Add diffuse_fraction, SW_d, LW_d, and cos of the zenith_angle to get_field on AtmosModelSimulation in Interfacer.jl. Add get_field methods for the above values in ClimaAtmosSimulation Remove safe_div and use anonymous func Only calculate on first level for diffuse_frac Add update_field for emissivity in AtmosModelSim Add emissivity to update_field in the Interfacer, and add a method definition for it in climaatmos.jl All 16 bands are set to the same values. Clamp diffuse_fraction to [0,1] Remove :co2 from atmos update_field :co2 is removed from the default AtmosModelSimulation update_field. The method definition is also removed for ClimaAtmosSimulation. Add atmos get_field for :co2 Add a default get_field for :co2 with AtmosModelSimulation, and a method definition for ClimaAtmosSimulation. Note that this returns a scalar. Add new fields to interfacer_tests Revert to returning zero when dividing by zero In get_field(::ClimaAtmosSimulation, ::Val{:diffuse_fraction} --- .../components/atmosphere/climaatmos.jl | 46 +++++++++++++++---- src/Interfacer.jl | 7 ++- test/field_exchanger_tests.jl | 1 - test/interfacer_tests.jl | 7 ++- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl index 5d81414c93..ed61f78ed7 100644 --- a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl +++ b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl @@ -171,12 +171,45 @@ moisture_flux(::Union{CA.EquilMoistModel, CA.NonEquilMoistModel}, integrator) = ρq_tot(::Union{CA.EquilMoistModel, CA.NonEquilMoistModel}, integrator) = integrator.u.c.ρq_tot # extensions required by the Interfacer +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:cos_zenith_angle}) = CC.Fields.array2field( + sim.integrator.p.radiation.rrtmgp_model.cos_zenith, + CC.Fields.level(axes(sim.integrator.u.c), 1), +) +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:co2}) = + sim.integrator.p.radiation.rrtmgp_model.volume_mixing_ratio_co2[] +function Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:diffuse_fraction}) + radiation_model = sim.integrator.p.radiation.rrtmgp_model + # only take the first level + total_flux_dn = radiation_model.face_sw_flux_dn[1, :] + lowest_face_space = CC.Spaces.level(axes(sim.integrator.u.f), CC.Utilities.half) + if radiation_model.radiation_mode isa CA.RRTMGPInterface.GrayRadiation + diffuse_fraction = zero(total_flux_dn) + else + direct_flux_dn = radiation_model.face_sw_direct_flux_dn[1, :] + FT = eltype(total_flux_dn) + diffuse_fraction = + clamp.( + ((x, y) -> y > zero(y) ? x / y : zero(y)).(total_flux_dn .- direct_flux_dn, total_flux_dn), + zero(FT), + one(FT), + ) + end + return CC.Fields.array2field(diffuse_fraction, lowest_face_space) +end Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:liquid_precipitation}) = surface_rain_flux(sim.integrator.p.atmos.moisture_model, sim.integrator) +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:LW_d}) = CC.Fields.level( + CC.Fields.array2field(sim.integrator.p.radiation.rrtmgp_model.face_lw_flux_dn, axes(sim.integrator.u.f)), + CC.Utilities.half, +) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:radiative_energy_flux_sfc}) = surface_radiation_flux(sim.integrator.p.atmos.radiation_mode, sim.integrator) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:snow_precipitation}) = surface_snow_flux(sim.integrator.p.atmos.moisture_model, sim.integrator) +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:SW_d}) = CC.Fields.level( + CC.Fields.array2field(sim.integrator.p.radiation.rrtmgp_model.face_sw_flux_dn, axes(sim.integrator.u.f)), + CC.Utilities.half, +) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:turbulent_energy_flux}) = CC.Geometry.WVector.(sim.integrator.p.precomputed.sfc_conditions.ρ_flux_h_tot) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:turbulent_moisture_flux}) = @@ -201,15 +234,12 @@ function Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:uv_int}) return @. StaticArrays.SVector(uₕ_int.components.data.:1, uₕ_int.components.data.:2) end -function Interfacer.update_field!(atmos_sim::ClimaAtmosSimulation, ::Val{:co2}, field) - if atmos_sim.integrator.p.atmos.radiation_mode isa CA.RRTMGPI.GrayRadiation - @warn("Gray radiation model initialized, skipping CO2 update", maxlog = 1) - return - else - atmos_sim.integrator.p.radiation.rrtmgp_model.volume_mixing_ratio_co2 .= Statistics.mean(parent(field)) - end -end # extensions required by the Interfacer +function Interfacer.update_field!(sim::ClimaAtmosSimulation, ::Val{:emissivity}, field) + # sets all 16 bands (rows) to the same values + sim.integrator.p.radiation.rrtmgp_model.surface_emissivity .= + reshape(CC.Fields.field2array(field), 1, length(parent(field))) +end function Interfacer.update_field!(sim::ClimaAtmosSimulation, ::Val{:surface_direct_albedo}, field) sim.integrator.p.radiation.rrtmgp_model.direct_sw_surface_albedo .= reshape(CC.Fields.field2array(field), 1, length(parent(field))) diff --git a/src/Interfacer.jl b/src/Interfacer.jl index 3c37c23bcd..5582a159f8 100644 --- a/src/Interfacer.jl +++ b/src/Interfacer.jl @@ -155,12 +155,17 @@ an atmosphere component model. get_field( sim::AtmosModelSimulation, val::Union{ + Val{:cos_zenith_angle}, + Val{:co2}, + Val{:diffuse_fraction}, Val{:height_int}, Val{:height_sfc}, Val{:liquid_precipitation}, + Val{:LW_d}, Val{:radiative_energy_flux_sfc}, Val{:radiative_energy_flux_toa}, Val{:snow_precipitation}, + Val{:SW_d}, Val{:turblent_energy_flux}, Val{:turbulent_moisture_flux}, Val{:thermo_state_int}, @@ -214,7 +219,7 @@ If it isn't extended, the field won't be updated and a warning will be raised. update_field!( sim::AtmosModelSimulation, val::Union{ - Val{:co2}, + Val{:emissivity}, Val{:surface_direct_albedo}, Val{:surface_diffuse_albedo}, Val{:surface_temperature}, diff --git a/test/field_exchanger_tests.jl b/test/field_exchanger_tests.jl index abae5fe5e7..5557bf8b1b 100644 --- a/test/field_exchanger_tests.jl +++ b/test/field_exchanger_tests.jl @@ -93,7 +93,6 @@ end function Interfacer.update_field!(sim::TestAtmosSimulation, ::Val{:roughness_momentum}, field) parent(sim.cache.roughness_momentum) .= parent(field) end -Interfacer.update_field!(sim::TestAtmosSimulation, ::Val{:co2}, field) = nothing Interfacer.update_field!(sim::TestAtmosSimulation, ::Val{:surface_temperature}, field) = nothing Interfacer.update_field!(sim::TestAtmosSimulation, ::Val{:roughness_buoyancy}, field) = nothing Interfacer.update_field!(sim::TestAtmosSimulation, ::Val{:beta}, field) = nothing diff --git a/test/interfacer_tests.jl b/test/interfacer_tests.jl index 977c5e7b37..c1516f9fc8 100644 --- a/test/interfacer_tests.jl +++ b/test/interfacer_tests.jl @@ -155,12 +155,17 @@ end # Test that get_field gives correct warnings for unextended fields for value in ( + :cos_zenith_angle, + :co2, + :diffuse_fraction, :height_int, :height_sfc, :liquid_precipitation, + :LW_d, :radiative_energy_flux_sfc, :radiative_energy_flux_toa, :snow_precipitation, + :SW_d, :turbulent_energy_flux, :turbulent_moisture_flux, :thermo_state_int, @@ -209,7 +214,7 @@ end sim = DummySimulation4(space) # Test that update_field! gives correct warnings for unextended fields - for value in (:co2, :surface_direct_albedo, :surface_diffuse_albedo, :surface_temperature, :turbulent_fluxes) + for value in (:emissivity, :surface_direct_albedo, :surface_diffuse_albedo, :surface_temperature, :turbulent_fluxes) val = Val(value) @test_logs ( :warn, From 2a485327ee884fdfe723bf5cc606cf03c0c8da29 Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Thu, 27 Feb 2025 18:25:10 -0800 Subject: [PATCH 2/6] Add air pressure, air temp, and humidity get_field Add them to the the generic get_field for AtmosModelSimulations and specific methods for ClimaAtmosSimulations --- .../ClimaEarth/components/atmosphere/climaatmos.jl | 9 +++++++++ src/Interfacer.jl | 3 +++ test/interfacer_tests.jl | 3 +++ 3 files changed, 15 insertions(+) diff --git a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl index ed61f78ed7..e2d69693dd 100644 --- a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl +++ b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl @@ -171,6 +171,13 @@ moisture_flux(::Union{CA.EquilMoistModel, CA.NonEquilMoistModel}, integrator) = ρq_tot(::Union{CA.EquilMoistModel, CA.NonEquilMoistModel}, integrator) = integrator.u.c.ρq_tot # extensions required by the Interfacer +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:air_pressure}) = + CC.Fields.level(sim.integrator.p.precomputed.ᶜp, 1) +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:air_temperature}) = + TD.air_temperature.( + sim.integrator.p.params.thermodynamics_params, + CC.Fields.level(sim.integrator.p.precomputed.ᶜts, 1), + ) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:cos_zenith_angle}) = CC.Fields.array2field( sim.integrator.p.radiation.rrtmgp_model.cos_zenith, CC.Fields.level(axes(sim.integrator.u.c), 1), @@ -202,6 +209,8 @@ Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:LW_d}) = CC.Fields.level( CC.Fields.array2field(sim.integrator.p.radiation.rrtmgp_model.face_lw_flux_dn, axes(sim.integrator.u.f)), CC.Utilities.half, ) +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:humidity}) = + CC.Fields.level(sim.integrator.u.c.ρq_tot ./ sim.integrator.u.c.ρ, 1) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:radiative_energy_flux_sfc}) = surface_radiation_flux(sim.integrator.p.atmos.radiation_mode, sim.integrator) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:snow_precipitation}) = diff --git a/src/Interfacer.jl b/src/Interfacer.jl index 5582a159f8..164028cde4 100644 --- a/src/Interfacer.jl +++ b/src/Interfacer.jl @@ -155,11 +155,14 @@ an atmosphere component model. get_field( sim::AtmosModelSimulation, val::Union{ + Val{:air_pressure}, + Val{:air_temperature}, Val{:cos_zenith_angle}, Val{:co2}, Val{:diffuse_fraction}, Val{:height_int}, Val{:height_sfc}, + Val{:humidity}, Val{:liquid_precipitation}, Val{:LW_d}, Val{:radiative_energy_flux_sfc}, diff --git a/test/interfacer_tests.jl b/test/interfacer_tests.jl index c1516f9fc8..c1cea0bf4a 100644 --- a/test/interfacer_tests.jl +++ b/test/interfacer_tests.jl @@ -155,11 +155,14 @@ end # Test that get_field gives correct warnings for unextended fields for value in ( + :air_pressure, + :air_temperature, :cos_zenith_angle, :co2, :diffuse_fraction, :height_int, :height_sfc, + :humidity, :liquid_precipitation, :LW_d, :radiative_energy_flux_sfc, From 97874c1d357358e28e52f9abfe2ad818e36e899a Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Thu, 27 Feb 2025 18:27:17 -0800 Subject: [PATCH 3/6] Update Interfacer.md with atmos get_field changes --- docs/src/interfacer.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/src/interfacer.md b/docs/src/interfacer.md index 22268baad8..d2d23e8888 100644 --- a/docs/src/interfacer.md +++ b/docs/src/interfacer.md @@ -113,7 +113,7 @@ following properties: | Coupler name | Description | Units | |-------------------|-------------|-------| -| `co2` | global mean co2 | ppm | +| `emissivity` | surface emissivity | | | `surface_direct_albedo` | bulk direct surface albedo over the whole surface space | | | `surface_diffuse_albedo` | bulk diffuse surface albedo over the whole surface space | | | `surface_temperature` | temperature over the combined surface space | K | @@ -123,6 +123,31 @@ following properties: A function to return the air density of the atmosphere simulation extrapolated to the surface, with units of [kg m^-3]. + +### AtmosModelSimulation - required functions to run with the full ClimaLand model + +Coupling with full `ClimaLand` model requires the following functions, in addition +to the functions required for coupling with a general `SurfaceModelSimulation`. + +- `get_field(::AtmosModelSimulation. ::Val{property})`: +This getter function must be extended +for the following properties: + +| Coupler name | Description | Units | +|-------------------|-------------|-------| +| `air_pressure` | air pressure at the bottom of the atmosphere | Pa | +| `air_temperature` | air temperature at the bottom of the atmosphere | K | +| `cos_zenith` | cosine of the zenith angle | | +| `co2` | global mean co2 | ppm | +| `diffuse_fraction` | fraction of downwards shortwave flux that is direct | | +| `humidity` | humidity at the bottom of the atmosphere| kg kg^-1 | +| `LW_d` | downwards longwave flux | W m^-2 | +| `SW_d` | downwards shortwave flux | W m^-2 | + +Note that `air_temperature`, `air_pressure`, `cos_zenith_angle`, `co2`, `diffuse_fraction`, `LW_d` and +`SW_d` will not be present in a `ClimaAtmosSimulation` if the model is setup with no radiation. +Because of this, a `ClimaAtmosSimulation` must have radiation if running with the full `ClimaLand` model. + ### SurfaceModelSimulation - required functions Analogously to the `AtmosModelSimulation`, a `SurfaceModelSimulation` requires additional functions to those required for a general `ComponentModelSimulation`. From 0077d3c66668b79417a3c53071d3362f00835ae5 Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Fri, 28 Feb 2025 09:27:39 -0800 Subject: [PATCH 4/6] Change `cos_zenith_angle` to `cos_zenith` It is refered to as `cos_zenith` by atmos and `cos\thetas` by land. This unifies it with one of the models. [skip ci] --- docs/src/interfacer.md | 2 +- experiments/ClimaEarth/components/atmosphere/climaatmos.jl | 2 +- src/Interfacer.jl | 2 +- test/interfacer_tests.jl | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/interfacer.md b/docs/src/interfacer.md index d2d23e8888..88b23bd42c 100644 --- a/docs/src/interfacer.md +++ b/docs/src/interfacer.md @@ -144,7 +144,7 @@ for the following properties: | `LW_d` | downwards longwave flux | W m^-2 | | `SW_d` | downwards shortwave flux | W m^-2 | -Note that `air_temperature`, `air_pressure`, `cos_zenith_angle`, `co2`, `diffuse_fraction`, `LW_d` and +Note that `air_temperature`, `air_pressure`, `cos_zenith`, `co2`, `diffuse_fraction`, `LW_d` and `SW_d` will not be present in a `ClimaAtmosSimulation` if the model is setup with no radiation. Because of this, a `ClimaAtmosSimulation` must have radiation if running with the full `ClimaLand` model. diff --git a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl index e2d69693dd..1e641b19ae 100644 --- a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl +++ b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl @@ -178,7 +178,7 @@ Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:air_temperature}) = sim.integrator.p.params.thermodynamics_params, CC.Fields.level(sim.integrator.p.precomputed.ᶜts, 1), ) -Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:cos_zenith_angle}) = CC.Fields.array2field( +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:cos_zenith}) = CC.Fields.array2field( sim.integrator.p.radiation.rrtmgp_model.cos_zenith, CC.Fields.level(axes(sim.integrator.u.c), 1), ) diff --git a/src/Interfacer.jl b/src/Interfacer.jl index 164028cde4..812c4d5930 100644 --- a/src/Interfacer.jl +++ b/src/Interfacer.jl @@ -157,7 +157,7 @@ get_field( val::Union{ Val{:air_pressure}, Val{:air_temperature}, - Val{:cos_zenith_angle}, + Val{:cos_zenith}, Val{:co2}, Val{:diffuse_fraction}, Val{:height_int}, diff --git a/test/interfacer_tests.jl b/test/interfacer_tests.jl index c1cea0bf4a..af258249ab 100644 --- a/test/interfacer_tests.jl +++ b/test/interfacer_tests.jl @@ -157,7 +157,7 @@ end for value in ( :air_pressure, :air_temperature, - :cos_zenith_angle, + :cos_zenith, :co2, :diffuse_fraction, :height_int, From 97044ba6dae2efa2f2956986721adf94dca6a595 Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Fri, 28 Feb 2025 14:15:46 -0800 Subject: [PATCH 5/6] Change humidity to specific_humidity for atmos --- docs/src/interfacer.md | 6 +++--- experiments/ClimaEarth/components/atmosphere/climaatmos.jl | 2 +- src/Interfacer.jl | 2 +- test/interfacer_tests.jl | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/interfacer.md b/docs/src/interfacer.md index 88b23bd42c..13a90b8dfc 100644 --- a/docs/src/interfacer.md +++ b/docs/src/interfacer.md @@ -135,12 +135,12 @@ for the following properties: | Coupler name | Description | Units | |-------------------|-------------|-------| -| `air_pressure` | air pressure at the bottom of the atmosphere | Pa | -| `air_temperature` | air temperature at the bottom of the atmosphere | K | +| `air_pressure` | air pressure at the bottom cell centers of the atmosphere | Pa | +| `air_temperature` | air temperature at the bottom cell centers of the atmosphere | K | | `cos_zenith` | cosine of the zenith angle | | | `co2` | global mean co2 | ppm | | `diffuse_fraction` | fraction of downwards shortwave flux that is direct | | -| `humidity` | humidity at the bottom of the atmosphere| kg kg^-1 | +| `specific_humidity` | specific humidity at the bottom cell centers of the atmosphere| kg kg^-1 | | `LW_d` | downwards longwave flux | W m^-2 | | `SW_d` | downwards shortwave flux | W m^-2 | diff --git a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl index 1e641b19ae..2d5017db71 100644 --- a/experiments/ClimaEarth/components/atmosphere/climaatmos.jl +++ b/experiments/ClimaEarth/components/atmosphere/climaatmos.jl @@ -209,7 +209,7 @@ Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:LW_d}) = CC.Fields.level( CC.Fields.array2field(sim.integrator.p.radiation.rrtmgp_model.face_lw_flux_dn, axes(sim.integrator.u.f)), CC.Utilities.half, ) -Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:humidity}) = +Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:specific_humidity}) = CC.Fields.level(sim.integrator.u.c.ρq_tot ./ sim.integrator.u.c.ρ, 1) Interfacer.get_field(sim::ClimaAtmosSimulation, ::Val{:radiative_energy_flux_sfc}) = surface_radiation_flux(sim.integrator.p.atmos.radiation_mode, sim.integrator) diff --git a/src/Interfacer.jl b/src/Interfacer.jl index 812c4d5930..7f2fcf5498 100644 --- a/src/Interfacer.jl +++ b/src/Interfacer.jl @@ -162,7 +162,7 @@ get_field( Val{:diffuse_fraction}, Val{:height_int}, Val{:height_sfc}, - Val{:humidity}, + Val{:specific_humidity}, Val{:liquid_precipitation}, Val{:LW_d}, Val{:radiative_energy_flux_sfc}, diff --git a/test/interfacer_tests.jl b/test/interfacer_tests.jl index af258249ab..fdea3b9f0a 100644 --- a/test/interfacer_tests.jl +++ b/test/interfacer_tests.jl @@ -162,7 +162,7 @@ end :diffuse_fraction, :height_int, :height_sfc, - :humidity, + :specific_humidity, :liquid_precipitation, :LW_d, :radiative_energy_flux_sfc, From c8329ff965bf092b8907f2c69c56dafe1d0f3666 Mon Sep 17 00:00:00 2001 From: imreddyTeja Date: Wed, 5 Mar 2025 08:41:12 -0800 Subject: [PATCH 6/6] Remove not always required fields default get_field remove from interfacer tests --- src/Interfacer.jl | 8 -------- test/interfacer_tests.jl | 8 -------- 2 files changed, 16 deletions(-) diff --git a/src/Interfacer.jl b/src/Interfacer.jl index 7f2fcf5498..d63f42c39e 100644 --- a/src/Interfacer.jl +++ b/src/Interfacer.jl @@ -155,20 +155,12 @@ an atmosphere component model. get_field( sim::AtmosModelSimulation, val::Union{ - Val{:air_pressure}, - Val{:air_temperature}, - Val{:cos_zenith}, - Val{:co2}, - Val{:diffuse_fraction}, Val{:height_int}, Val{:height_sfc}, - Val{:specific_humidity}, Val{:liquid_precipitation}, - Val{:LW_d}, Val{:radiative_energy_flux_sfc}, Val{:radiative_energy_flux_toa}, Val{:snow_precipitation}, - Val{:SW_d}, Val{:turblent_energy_flux}, Val{:turbulent_moisture_flux}, Val{:thermo_state_int}, diff --git a/test/interfacer_tests.jl b/test/interfacer_tests.jl index fdea3b9f0a..ec24e03b64 100644 --- a/test/interfacer_tests.jl +++ b/test/interfacer_tests.jl @@ -155,20 +155,12 @@ end # Test that get_field gives correct warnings for unextended fields for value in ( - :air_pressure, - :air_temperature, - :cos_zenith, - :co2, - :diffuse_fraction, :height_int, :height_sfc, - :specific_humidity, :liquid_precipitation, - :LW_d, :radiative_energy_flux_sfc, :radiative_energy_flux_toa, :snow_precipitation, - :SW_d, :turbulent_energy_flux, :turbulent_moisture_flux, :thermo_state_int,