diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 8513bfee76..7a63cbf037 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -153,10 +153,6 @@ steps: command: "julia --color=yes --project=integration_tests integration_tests/3dBomex.jl" artifact_paths: "integration_tests/output/3dBomex/*" - - label: ":earth_americas: 3D sphere bariclinic wave" - command: "julia --color=yes --project=integration_tests integration_tests/baroclinic_wave.jl" - artifact_paths: "integration_tests/output/baroclinic_wave/*" - - group: "Performance monitoring" steps: diff --git a/driver/Cases.jl b/driver/Cases.jl index 7c348412f4..7fc22de98d 100644 --- a/driver/Cases.jl +++ b/driver/Cases.jl @@ -565,7 +565,7 @@ ForcingBase(case::TRMM_LBA, param_set::APS; kwargs...) = function surface_ref_state(::TRMM_LBA, param_set::APS, namelist) molmass_ratio = CPP.molmass_ratio(param_set) Pg = 991.3 * 100 #Pressure at ground - Tg = 296.85 # surface values for reference state (RS) which outputs p rho0 alpha0 + Tg = 296.85 # surface values for reference state (RS) which outputs p, ρ pvg = TD.saturation_vapor_pressure(param_set, Tg, TD.Liquid()) qtg = (1 / molmass_ratio) * pvg / (Pg - pvg) #Total water mixing ratio at surface return TD.PhaseEquil_pTq(param_set, Pg, Tg, qtg) @@ -647,7 +647,7 @@ ForcingBase(case::ARM_SGP, param_set::APS; kwargs...) = function surface_ref_state(::ARM_SGP, param_set::APS, namelist) Pg = 970.0 * 100 #Pressure at ground - Tg = 299.0 # surface values for reference state (RS) which outputs p rho0 alpha0 + Tg = 299.0 # surface values for reference state (RS) which outputs p, ρ qtg = 15.2 / 1000 #Total water mixing ratio at surface return TD.PhaseEquil_pTq(param_set, Pg, Tg, qtg) end @@ -731,7 +731,7 @@ ForcingBase(case::GATE_III, param_set::APS; kwargs...) = ForcingBase(get_forcing function surface_ref_state(::GATE_III, param_set::APS, namelist) Pg = 1013.0 * 100 #Pressure at ground - Tg = 299.184 # surface values for reference state (RS) which outputs p rho0 alpha0 + Tg = 299.184 # surface values for reference state (RS) which outputs p, ρ qtg = 16.5 / 1000 #Total water mixing ratio at surface return TD.PhaseEquil_pTq(param_set, Pg, Tg, qtg) end @@ -1028,7 +1028,7 @@ end function surface_ref_state(::SP, param_set::APS, namelist) Pg = 1.0e5 #Pressure at ground Tg = 300.0 #Temperature at ground - qtg = 1.0e-4 #Total water mixing ratio at TC. if set to 0, alpha0, rho0, p are NaN. + qtg = 1.0e-4 #Total water mixing ratio at TC. if set to 0, p, ρ are NaN. return TD.PhaseEquil_pTq(param_set, Pg, Tg, qtg) end diff --git a/integration_tests/baroclinic_wave.jl b/integration_tests/baroclinic_wave.jl deleted file mode 100644 index a1722870d3..0000000000 --- a/integration_tests/baroclinic_wave.jl +++ /dev/null @@ -1,413 +0,0 @@ -using Test -using LinearAlgebra - - -include(joinpath(@__DIR__, "..", "driver", "parameter_set.jl")) - -import TurbulenceConvection -const TC = TurbulenceConvection - -import ClimaCore -const CC = ClimaCore -const CCG = CC.Geometry -const CCO = CC.Operators - -import UnPack - -import OrdinaryDiffEq -const ODE = OrdinaryDiffEq - -import Logging -import TerminalLoggers -Logging.global_logger(TerminalLoggers.TerminalLogger()) - -# This experiment tests -# 1) hydrostatic and geostrophic balance; -# 2) linear instability. -# - "baroclinic_wave": the defaul simulation, following https://rmets.onlinelibrary.wiley.com/doi/full/10.1002/qj.2241. - -# Parameters -const R = 6.371229e6 # radius -const grav = 9.80616 # gravitational constant -const Ω = 7.29212e-5 # Earth rotation (radians / sec) -const R_d = 287.0 # R dry (gas constant / mol mass dry air) -const κ = 2 / 7 # kappa -const γ = 1.4 # heat capacity ratio -const cp_d = R_d / κ # heat capacity at constant pressure -const cv_d = cp_d - R_d # heat capacity at constant volume -const p_0 = 1.0e5 # reference pressure -const k = 3 -const T_e = 310 # temperature at the equator -const T_p = 240 # temperature at the pole -const T_0 = 0.5 * (T_e + T_p) -const T_tri = 273.16 # triple point temperature -const Γ = 0.005 -const A = 1 / Γ -const B = (T_0 - T_p) / T_0 / T_p -const C = 0.5 * (k + 2) * (T_e - T_p) / T_e / T_p -const b = 2 -const H = R_d * T_0 / grav -const z_t = 15.0e3 -const λ_c = 20.0 -const ϕ_c = 40.0 -const d_0 = R / 6 -const V_p = 1.0 - -τ_z_1(z) = exp(Γ * z / T_0) -τ_z_2(z) = 1 - 2 * (z / b / H)^2 -τ_z_3(z) = exp(-(z / b / H)^2) -τ_1(z) = 1 / T_0 * τ_z_1(z) + B * τ_z_2(z) * τ_z_3(z) -τ_2(z) = C * τ_z_2(z) * τ_z_3(z) -τ_int_1(z) = A * (τ_z_1(z) - 1) + B * z * τ_z_3(z) -τ_int_2(z) = C * z * τ_z_3(z) -F_z(z) = (1 - 3 * (z / z_t)^2 + 2 * (z / z_t)^3) * (z ≤ z_t) -I_T(ϕ) = cosd(ϕ)^k - k / (k + 2) * (cosd(ϕ))^(k + 2) -T(ϕ, z) = (τ_1(z) - τ_2(z) * I_T(ϕ))^(-1) -p(ϕ, z) = p_0 * exp(-grav / R_d * (τ_int_1(z) - τ_int_2(z) * I_T(ϕ))) -r(λ, ϕ) = R * acos(sind(ϕ_c) * sind(ϕ) + cosd(ϕ_c) * cosd(ϕ) * cosd(λ - λ_c)) -U(ϕ, z) = grav * k / R * τ_int_2(z) * T(ϕ, z) * (cosd(ϕ)^(k - 1) - cosd(ϕ)^(k + 1)) -u(ϕ, z) = -Ω * R * cosd(ϕ) + sqrt((Ω * R * cosd(ϕ))^2 + R * cosd(ϕ) * U(ϕ, z)) -v(ϕ, z) = 0.0 -c3(λ, ϕ) = cos(π * r(λ, ϕ) / 2 / d_0)^3 -s1(λ, ϕ) = sin(π * r(λ, ϕ) / 2 / d_0) -cond(λ, ϕ) = (0 < r(λ, ϕ) < d_0) * (r(λ, ϕ) != R * pi) -δu(λ, ϕ, z) = - -16 * V_p / 3 / sqrt(3) * - F_z(z) * - c3(λ, ϕ) * - s1(λ, ϕ) * - (-sind(ϕ_c) * cosd(ϕ) + cosd(ϕ_c) * sind(ϕ) * cosd(λ - λ_c)) / sin(r(λ, ϕ) / R) * cond(λ, ϕ) -δv(λ, ϕ, z) = - 16 * V_p / 3 / sqrt(3) * F_z(z) * c3(λ, ϕ) * s1(λ, ϕ) * cosd(ϕ_c) * sind(λ - λ_c) / sin(r(λ, ϕ) / R) * cond(λ, ϕ) -const κ₄ = 1.0e17 # m^4/s -uu(λ, ϕ, z) = u(ϕ, z) + δu(λ, ϕ, z) -uv(λ, ϕ, z) = v(ϕ, z) + δv(λ, ϕ, z) - -# set up function space -function sphere_3D(::Type{FT}; R = 6.37122e6, helem = 4, npoly = 4, namelist) where {FT} - zelem = namelist["grid"]["nz"] - Δz = namelist["grid"]["dz"] - zlim = (0, zelem * Δz) - vertdomain = - CC.Domains.IntervalDomain(CCG.ZPoint{FT}(zlim[1]), CCG.ZPoint{FT}(zlim[2]); boundary_names = (:bottom, :top)) - vertmesh = CC.Meshes.IntervalMesh(vertdomain, nelems = zelem) - grid = TC.Grid(vertmesh) - vert_center_space = CC.Spaces.CenterFiniteDifferenceSpace(vertmesh) - - horzdomain = CC.Domains.SphereDomain(R) - horzmesh = CC.Meshes.EquiangularCubedSphere(horzdomain, helem) - horztopology = CC.Topologies.Topology2D(horzmesh) - quad = CC.Spaces.Quadratures.GLL{npoly + 1}() - horzspace = CC.Spaces.SpectralElementSpace2D(horztopology, quad) - - hv_center_space = CC.Spaces.ExtrudedFiniteDifferenceSpace(horzspace, vert_center_space) - hv_face_space = CC.Spaces.FaceExtrudedFiniteDifferenceSpace(hv_center_space) - return (hv_center_space, hv_face_space, grid) -end - -Φ(z) = grav * z - -function pressure(ρ, e, normuvw, z) - I = e - Φ(z) - normuvw^2 / 2 - T = I / cv_d + T_tri - return ρ * R_d * T -end - -# set up 3D domain - spherical shell -include(joinpath(@__DIR__, "..", "driver", "generate_namelist.jl")) -import .NameList -namelist = NameList.default_namelist("Bomex") -hv_center_space, hv_face_space, grid = sphere_3D(Float64; R, helem = 4, npoly = 4, namelist) - -# initial conditions -coords = CC.Fields.coordinate_field(hv_center_space) -local_geometries = CC.Fields.local_geometry_field(hv_center_space) -face_coords = CC.Fields.coordinate_field(hv_face_space) - -function initial_condition(ϕ, λ, z, edmf_vars) - ρ = p(ϕ, z) / R_d / T(ϕ, z) - e = cv_d * (T(ϕ, z) - T_tri) + Φ(z) + (uu(λ, ϕ, z)^2 + uv(λ, ϕ, z)^2) / 2 - ρe = ρ * e - - return (; ρ = ρ, ρe = ρe, edmf_vars...) -end - -function initial_condition_velocity(local_geometry) - coord = local_geometry.coordinates - ϕ = coord.lat - λ = coord.long - z = coord.z - return CCG.transform(CCG.Covariant12Axis(), CCG.UVVector(uu(λ, ϕ, z), uv(λ, ϕ, z)), local_geometry) -end -# Coriolis -const f = @. CCG.Contravariant3Vector(CCG.WVector(2 * Ω * sind(coords.lat))) -const If2c = CCO.InterpolateF2C() -const Ic2f = CCO.InterpolateC2F(bottom = CCO.Extrapolate(), top = CCO.Extrapolate()) - -init_state(edmf, args...) = init_state(eltype(edmf), edmf, args...) -function init_state(::Type{FT}, edmf, grid, coords, face_coords, local_geometries) where {FT} - - Yc = map(coords) do coord - edmf_vars = cent_prognostic_vars(FT, coord, edmf) - initial_condition(coord.lat, coord.long, coord.z, edmf_vars) - end - uₕ = map(local_geometries) do local_geom - initial_condition_velocity(local_geom) - end - w = map(_ -> CCG.Covariant3Vector(0.0), face_coords) - - cspace = TC.center_space(grid) - fspace = TC.face_space(grid) - clocal_geometry = CC.Fields.local_geometry_field(cspace) - flocal_geometry = CC.Fields.local_geometry_field(fspace) - cent_prog_fields() = TC.FieldFromNamedTuple(cspace, cent_prognostic_vars(FT, clocal_geometry, edmf)) - face_prog_fields() = TC.FieldFromNamedTuple(fspace, face_prognostic_vars(FT, flocal_geometry, edmf)) - Y = CC.Fields.FieldVector(Yc = Yc, uₕ = uₕ, w = w, cent = cent_prog_fields(), face = face_prog_fields()) - return Y -end - -include(joinpath(@__DIR__, "..", "driver", "Cases.jl")) -import .Cases - -function get_aux(edmf, grid) - FT = eltype(grid) - cspace = TC.center_space(grid) - fspace = TC.face_space(grid) - aux_cent_fields = TC.FieldFromNamedTuple(cspace, cent_aux_vars(FT, edmf)) - aux_face_fields = TC.FieldFromNamedTuple(fspace, face_aux_vars(FT, edmf)) - aux = CC.Fields.FieldVector(cent = aux_cent_fields, face = aux_face_fields) - return aux -end - -function get_edmf_cache(grid, namelist) - param_set = create_parameter_set(namelist) - Ri_bulk_crit = namelist["turbulence"]["EDMF_PrognosticTKE"]["Ri_crit"] - case_type = Cases.get_case(namelist) - Fo = TC.ForcingBase(case_type, param_set) - Rad = TC.RadiationBase(case_type) - surf_ref_state = Cases.surface_ref_state(case_type, param_set, namelist) - surf_params = Cases.surface_params(case_type, surf_ref_state, param_set; Ri_bulk_crit) - inversion_type = Cases.inversion_type(case_type) - case = Cases.CasesBase(case_type; inversion_type, surf_params, Fo, Rad) - precip_name = TC.parse_namelist( - namelist, - "microphysics", - "precipitation_model"; - default = "None", - valid_options = ["None", "cutoff", "clima_1m"], - ) - precip_model = if precip_name == "None" - TC.NoPrecipitation() - elseif precip_name == "cutoff" - TC.Clima0M() - elseif precip_name == "clima_1m" - TC.Clima1M() - else - error("Invalid precip_name $(precip_name)") - end - edmf = TC.EDMFModel(namelist, precip_model) - return (; edmf, case, grid, param_set, aux = get_aux(edmf, grid)) -end - -function get_gm_cache(Y, coords) - cuvw = CCG.Covariant123Vector.(Y.uₕ) - cω³ = CCO.Curl().(Y.uₕ) - fω¹² = CCO.Curl().(Y.w) - fu¹² = CCG.Contravariant12Vector.(CCG.Covariant123Vector.(Ic2f.(Y.uₕ))) - fu³ = CCG.Contravariant3Vector.(CCG.Covariant123Vector.(Y.w)) - cp = @. pressure(Y.Yc.ρ, Y.Yc.ρe / Y.Yc.ρ, norm(cuvw), coords.z) - cE = @. (norm(cuvw)^2) / 2 + Φ(coords.z) - return (; cuvw, cω³, fω¹², fu¹², fu³, cp, cE, coords) -end - -function ∑tendencies_bw!(tendencies::FV, prog::FV, cache, t::Real) where {FV <: CC.Fields.FieldVector} - UnPack.@unpack edmf_cache, Δt = cache - UnPack.@unpack edmf, grid, param_set, aux, case = edmf_cache - - state = TC.State(prog, aux, tendencies) - - surf = get_surface(case.surf_params, grid, state, t, param_set) - force = case.Fo - radiation = case.Rad - - TC.affect_filter!(edmf, grid, state, param_set, surf, case.casename, t) - - # Update aux / pre-tendencies filters. TODO: combine these into a function that minimizes traversals - # Some of these methods should probably live in `compute_tendencies`, when written, but we'll - # treat them as auxiliary variables for now, until we disentangle the tendency computations. - Cases.update_forcing(case, grid, state, t, param_set) - Cases.update_radiation(case.Rad, grid, state, t, param_set) - - TC.update_aux!(edmf, grid, state, surf, param_set, t, Δt) - - tends_face = tendencies.face - tends_cent = tendencies.cent - parent(tends_face) .= 0 - parent(tends_cent) .= 0 - # compute tendencies - TC.compute_turbconv_tendencies!(edmf, grid, state, param_set, surf, Δt) - ∑tendencies_gm!(tendencies, prog, cache, t) - - return nothing -end -function ∑tendencies_gm!(dY, Y, cache, t) - UnPack.@unpack cuvw, cω³, fω¹², fu¹², fu³, cp, cE, coords = cache - cρ = Y.Yc.ρ # scalar on centers - fw = Y.w # Covariant3Vector on faces - cuₕ = Y.uₕ # Covariant12Vector on centers - cρe = Y.Yc.ρe # scalar on centers - - dρ = dY.Yc.ρ - dw = dY.w - duₕ = dY.uₕ - dρe = dY.Yc.ρe - z = coords.z - - # 0) update w at the bottom - # fw = -g^31 cuₕ/ g^33 - - hdiv = CCO.Divergence() - hwdiv = CCO.WeakDivergence() - hgrad = CCO.Gradient() - hwgrad = CCO.WeakGradient() - hcurl = CCO.Curl() - hwcurl = CCO.WeakCurl() - - @. dρ = 0 * cρ - - ### HYPERVISCOSITY - # 1) compute hyperviscosity coefficients - - @. dρe = hwdiv(hgrad(cρe / cρ)) - χe = dρe - @. duₕ = hwgrad(hdiv(cuₕ)) - CCG.Covariant12Vector(hwcurl(CCG.Covariant3Vector(hcurl(cuₕ)))) - χuₕ = duₕ - - CC.Spaces.weighted_dss!(dρe) - CC.Spaces.weighted_dss!(duₕ) - - @. dρe = -κ₄ * hwdiv(cρ * hgrad(χe)) - @. duₕ = -κ₄ * (hwgrad(hdiv(χuₕ)) - CCG.Covariant12Vector(hwcurl(CCG.Covariant3Vector(hcurl(χuₕ))))) - - # 1) Mass conservation - @. cuvw = CCG.Covariant123Vector(cuₕ) + CCG.Covariant123Vector(If2c(fw)) - - @. dw = fw * 0 - - # 1.a) horizontal divergence - @. dρ -= hdiv(cρ * (cuvw)) - - # 1.b) vertical divergence - vdivf2c = CCO.DivergenceF2C( - top = CCO.SetValue(CCG.Contravariant3Vector(0.0)), - bottom = CCO.SetValue(CCG.Contravariant3Vector(0.0)), - ) - # we want the total u³ at the boundary to be zero: we can either constrain - # both to be zero, or allow one to be non-zero and set the other to be its - # negation - - # explicit part - @. dρ -= vdivf2c(Ic2f(cρ * cuₕ)) - # implicit part - @. dρ -= vdivf2c(Ic2f(cρ) * fw) - - # 2) Momentum equation - - # curl term - # effectively a homogeneous Dirichlet condition on u₁ at the boundary - vcurlc2f = CCO.CurlC2F( - bottom = CCO.SetCurl(CCG.Contravariant12Vector(0.0, 0.0)), - top = CCO.SetCurl(CCG.Contravariant12Vector(0.0, 0.0)), - ) - @. cω³ = hcurl(cuₕ) # Contravariant3Vector - @. fω¹² = hcurl(fw) # Contravariant12Vector - @. fω¹² += vcurlc2f(cuₕ) # Contravariant12Vector - - # cross product - # convert to contravariant - # these will need to be modified with topography - @. fu¹² = CCG.Contravariant12Vector(CCG.Covariant123Vector(Ic2f(cuₕ))) # Contravariant12Vector in 3D - @. fu³ = CCG.Contravariant3Vector(CCG.Covariant123Vector(fw)) - @. dw -= fω¹² × fu¹² # Covariant3Vector on faces - @. duₕ -= If2c(fω¹² × fu³) - - # Needed for 3D: - @. duₕ -= (f + cω³) × CCG.Contravariant12Vector(CCG.Covariant123Vector(cuₕ)) - - @. cp = pressure(cρ, cρe / cρ, norm(cuvw), z) - - @. duₕ -= hgrad(cp) / cρ - vgradc2f = CCO.GradientC2F( - bottom = CCO.SetGradient(CCG.Covariant3Vector(0.0)), - top = CCO.SetGradient(CCG.Covariant3Vector(0.0)), - ) - @. dw -= vgradc2f(cp) / Ic2f(cρ) - - @. cE = (norm(cuvw)^2) / 2 + Φ(z) - @. duₕ -= hgrad(cE) - @. dw -= vgradc2f(cE) - - # 3) total energy - - @. dρe -= hdiv(cuvw * (cρe + cp)) - @. dρe -= vdivf2c(fw * Ic2f(cρe + cp)) - @. dρe -= vdivf2c(Ic2f(cuₕ * (cρe + cp))) - - CC.Spaces.weighted_dss!(dY.Yc) - CC.Spaces.weighted_dss!(dY.uₕ) - CC.Spaces.weighted_dss!(dY.w) - - return dY -end - -include(joinpath(@__DIR__, "..", "driver", "dycore.jl")) -include(joinpath(@__DIR__, "..", "driver", "Surface.jl")) - -edmf_cache = get_edmf_cache(grid, namelist) -Y = init_state(edmf_cache.edmf, grid, coords, face_coords, local_geometries) -# Solve the ODE -gm_cache = get_gm_cache(Y, coords) - -dt = 5 -cache = (; gm_cache..., edmf_cache, Δt = dt) -time_end = 10.0 -prob = ODE.ODEProblem(∑tendencies_bw!, Y, (0.0, time_end), cache) - -integrator = ODE.init( - prob, - ODE.SSPRK33(), - dt = dt, - saveat = 200 * dt, - progress = true, - adaptive = false, - progress_message = (dt, u, p, t) -> t, -) - -if haskey(ENV, "CI_PERF_SKIP_RUN") # for performance analysis - throw(:exit_profile) -end - -sol = @timev ODE.solve!(integrator) - -# # The latest ClimaCore has compat issues with ClimaCorePlots -# # so we've temporarily remove our dependence on ClimaCorePlots -# # so that we can update the latest ClimaCore version. - -# import ClimaCorePlots, Plots -# ENV["GKSwstype"] = "nul" -# # visualization artifacts - -# @info "Solution L₂ norm at time t = 0: ", norm(Y.Yc.ρe) -# @info "Solution L₂ norm at time t = $(time_end): ", norm(sol.u[end].Yc.ρe) - -# anim = Plots.@animate for sol1 in sol.u -# uₕ = sol1.uₕ -# uₕ_phy = CCG.transform.(Ref(CCG.UVAxis()), uₕ) -# v = uₕ_phy.components.data.:2 -# Plots.plot(v, level = 3, clim = (-6, 6)) -# end - -# dir = "baroclinic_wave" -# path = joinpath(@__DIR__, "output", dir) -# mkpath(path) -# Plots.mp4(anim, joinpath(path, "v.mp4"), fps = 5) diff --git a/post_processing/mse_tables.jl b/post_processing/mse_tables.jl index 8ced0e5c52..09b30364c5 100644 --- a/post_processing/mse_tables.jl +++ b/post_processing/mse_tables.jl @@ -5,182 +5,182 @@ all_best_mse = OrderedCollections.OrderedDict() # all_best_mse["ARM_SGP"] = OrderedCollections.OrderedDict() -all_best_mse["ARM_SGP"]["qt_mean"] = 0.2521234075111047 -all_best_mse["ARM_SGP"]["updraft_area"] = 327.08864677891694 -all_best_mse["ARM_SGP"]["updraft_w"] = 153.60643978772632 -all_best_mse["ARM_SGP"]["updraft_qt"] = 30.63670615757075 -all_best_mse["ARM_SGP"]["updraft_thetal"] = 172.0125157915087 +all_best_mse["ARM_SGP"]["qt_mean"] = 0.2521234151375062 +all_best_mse["ARM_SGP"]["updraft_area"] = 327.08864676538116 +all_best_mse["ARM_SGP"]["updraft_w"] = 153.60644490005336 +all_best_mse["ARM_SGP"]["updraft_qt"] = 30.63670608026404 +all_best_mse["ARM_SGP"]["updraft_thetal"] = 172.01251579142894 all_best_mse["ARM_SGP"]["u_mean"] = 1.3235797273549681e-5 -all_best_mse["ARM_SGP"]["tke_mean"] = 1101.5753414987716 -all_best_mse["ARM_SGP"]["temperature_mean"] = 0.00012552650044046315 -all_best_mse["ARM_SGP"]["ql_mean"] = 211.9333773104895 +all_best_mse["ARM_SGP"]["tke_mean"] = 1101.575341290362 +all_best_mse["ARM_SGP"]["temperature_mean"] = 0.00012552650010396978 +all_best_mse["ARM_SGP"]["ql_mean"] = 211.93337253648957 all_best_mse["ARM_SGP"]["qi_mean"] = "NA" -all_best_mse["ARM_SGP"]["thetal_mean"] = 0.00011819973689302238 -all_best_mse["ARM_SGP"]["Hvar_mean"] = 2195.6037821937093 -all_best_mse["ARM_SGP"]["QTvar_mean"] = 1309.9233327883517 +all_best_mse["ARM_SGP"]["thetal_mean"] = 0.00011819973647039193 +all_best_mse["ARM_SGP"]["Hvar_mean"] = 2195.6201522931256 +all_best_mse["ARM_SGP"]["QTvar_mean"] = 1309.931007883647 # all_best_mse["Bomex"] = OrderedCollections.OrderedDict() -all_best_mse["Bomex"]["qt_mean"] = 0.10178076257542494 -all_best_mse["Bomex"]["updraft_area"] = 127.61793250808256 -all_best_mse["Bomex"]["updraft_w"] = 17.947263820879698 -all_best_mse["Bomex"]["updraft_qt"] = 7.132188703920948 -all_best_mse["Bomex"]["updraft_thetal"] = 69.79490167272438 -all_best_mse["Bomex"]["v_mean"] = 62.767660503421865 -all_best_mse["Bomex"]["u_mean"] = 0.25600294047426886 -all_best_mse["Bomex"]["tke_mean"] = 72.73304427841286 -all_best_mse["Bomex"]["temperature_mean"] = 4.158889742893274e-5 -all_best_mse["Bomex"]["ql_mean"] = 9.385139174268497 +all_best_mse["Bomex"]["qt_mean"] = 0.029862021777328135 +all_best_mse["Bomex"]["updraft_area"] = 124.4374746480278 +all_best_mse["Bomex"]["updraft_w"] = 12.060049126984064 +all_best_mse["Bomex"]["updraft_qt"] = 5.65797943531402 +all_best_mse["Bomex"]["updraft_thetal"] = 20.93014488835274 +all_best_mse["Bomex"]["v_mean"] = 29.32475858969748 +all_best_mse["Bomex"]["u_mean"] = 0.17292807590325557 +all_best_mse["Bomex"]["tke_mean"] = 59.92701626468501 +all_best_mse["Bomex"]["temperature_mean"] = 1.9410474728332947e-5 +all_best_mse["Bomex"]["ql_mean"] = 2.970928330206328 all_best_mse["Bomex"]["qi_mean"] = "NA" -all_best_mse["Bomex"]["thetal_mean"] = 4.215083961811883e-5 -all_best_mse["Bomex"]["Hvar_mean"] = 2574.2571663224408 -all_best_mse["Bomex"]["QTvar_mean"] = 918.4100774052899 +all_best_mse["Bomex"]["thetal_mean"] = 1.4189438923765168e-5 +all_best_mse["Bomex"]["Hvar_mean"] = 59.89923599520433 +all_best_mse["Bomex"]["QTvar_mean"] = 21.88804309742394 # all_best_mse["DryBubble"] = OrderedCollections.OrderedDict() -all_best_mse["DryBubble"]["updraft_area"] = 2.15111668772059e-22 -all_best_mse["DryBubble"]["updraft_w"] = 6.700778035066527e-22 -all_best_mse["DryBubble"]["updraft_thetal"] = 5.597000941990776e-29 -all_best_mse["DryBubble"]["u_mean"] = 6.339213832488136e-22 -all_best_mse["DryBubble"]["tke_mean"] = 5.951184326624882e-22 -all_best_mse["DryBubble"]["temperature_mean"] = 2.1690026983354042e-29 -all_best_mse["DryBubble"]["thetal_mean"] = 2.1681633083031133e-29 -all_best_mse["DryBubble"]["Hvar_mean"] = 1.7445289662960883e-21 +all_best_mse["DryBubble"]["updraft_area"] = 1.8868758686558362e-22 +all_best_mse["DryBubble"]["updraft_w"] = 8.03826701999901e-22 +all_best_mse["DryBubble"]["updraft_thetal"] = 5.318251222730423e-29 +all_best_mse["DryBubble"]["u_mean"] = 2.7072625790928257e-21 +all_best_mse["DryBubble"]["tke_mean"] = 1.0152784228781806e-21 +all_best_mse["DryBubble"]["temperature_mean"] = 1.9514588075231292e-29 +all_best_mse["DryBubble"]["thetal_mean"] = 1.3784349509741648e-29 +all_best_mse["DryBubble"]["Hvar_mean"] = 1.287385151761912e-21 # all_best_mse["DYCOMS_RF01"] = OrderedCollections.OrderedDict() -all_best_mse["DYCOMS_RF01"]["qt_mean"] = 0.018639850553854188 -all_best_mse["DYCOMS_RF01"]["ql_mean"] = 5.3343483702028145 -all_best_mse["DYCOMS_RF01"]["updraft_area"] = 29.951759526804484 -all_best_mse["DYCOMS_RF01"]["updraft_w"] = 4.289896238855623 -all_best_mse["DYCOMS_RF01"]["updraft_qt"] = 2.141605193888237 -all_best_mse["DYCOMS_RF01"]["updraft_thetal"] = 46.18824291535536 -all_best_mse["DYCOMS_RF01"]["v_mean"] = 0.0027609455255945695 -all_best_mse["DYCOMS_RF01"]["u_mean"] = 0.08875426568437153 -all_best_mse["DYCOMS_RF01"]["tke_mean"] = 21.125128725885098 -all_best_mse["DYCOMS_RF01"]["temperature_mean"] = 7.135752046133808e-5 -all_best_mse["DYCOMS_RF01"]["thetal_mean"] = 7.174107117755792e-5 -all_best_mse["DYCOMS_RF01"]["Hvar_mean"] = 1287.4864356667742 -all_best_mse["DYCOMS_RF01"]["QTvar_mean"] = 513.0844941712962 +all_best_mse["DYCOMS_RF01"]["qt_mean"] = 0.018639933430779777 +all_best_mse["DYCOMS_RF01"]["ql_mean"] = 5.334566062625586 +all_best_mse["DYCOMS_RF01"]["updraft_area"] = 29.95179703088047 +all_best_mse["DYCOMS_RF01"]["updraft_w"] = 4.289899088761302 +all_best_mse["DYCOMS_RF01"]["updraft_qt"] = 2.141607789809973 +all_best_mse["DYCOMS_RF01"]["updraft_thetal"] = 46.188242922404484 +all_best_mse["DYCOMS_RF01"]["v_mean"] = 0.0027609048314120445 +all_best_mse["DYCOMS_RF01"]["u_mean"] = 0.08875414330146213 +all_best_mse["DYCOMS_RF01"]["tke_mean"] = 21.124943747027338 +all_best_mse["DYCOMS_RF01"]["temperature_mean"] = 7.135714470964393e-5 +all_best_mse["DYCOMS_RF01"]["thetal_mean"] = 7.174069491523632e-5 +all_best_mse["DYCOMS_RF01"]["Hvar_mean"] = 1287.4864740380342 +all_best_mse["DYCOMS_RF01"]["QTvar_mean"] = 513.0844806409915 # all_best_mse["DYCOMS_RF02"] = OrderedCollections.OrderedDict() -all_best_mse["DYCOMS_RF02"]["qt_mean"] = 0.06464355295106711 -all_best_mse["DYCOMS_RF02"]["ql_mean"] = 3.6499743731380554 -all_best_mse["DYCOMS_RF02"]["qr_mean"] = 7.627111527506284 -all_best_mse["DYCOMS_RF02"]["updraft_area"] = 27.753115447091403 -all_best_mse["DYCOMS_RF02"]["updraft_w"] = 6.710130415020492 -all_best_mse["DYCOMS_RF02"]["updraft_qt"] = 5.062597048091387 -all_best_mse["DYCOMS_RF02"]["updraft_thetal"] = 40.54966454414522 -all_best_mse["DYCOMS_RF02"]["v_mean"] = 42.870288545493935 -all_best_mse["DYCOMS_RF02"]["u_mean"] = 20.17393420753407 -all_best_mse["DYCOMS_RF02"]["tke_mean"] = 21.409525076941335 -all_best_mse["DYCOMS_RF02"]["temperature_mean"] = 2.735325975217763e-5 -all_best_mse["DYCOMS_RF02"]["thetal_mean"] = 3.0094035826352356e-5 -all_best_mse["DYCOMS_RF02"]["Hvar_mean"] = 1465.0320663302696 -all_best_mse["DYCOMS_RF02"]["QTvar_mean"] = 514.6532269648812 +all_best_mse["DYCOMS_RF02"]["qt_mean"] = 0.06464355324743704 +all_best_mse["DYCOMS_RF02"]["ql_mean"] = 3.649974401217585 +all_best_mse["DYCOMS_RF02"]["qr_mean"] = 7.6271118150093065 +all_best_mse["DYCOMS_RF02"]["updraft_area"] = 27.753115487782903 +all_best_mse["DYCOMS_RF02"]["updraft_w"] = 6.710130525850158 +all_best_mse["DYCOMS_RF02"]["updraft_qt"] = 5.0625970497522275 +all_best_mse["DYCOMS_RF02"]["updraft_thetal"] = 40.549664544151085 +all_best_mse["DYCOMS_RF02"]["v_mean"] = 42.870288538109754 +all_best_mse["DYCOMS_RF02"]["u_mean"] = 20.17393420658208 +all_best_mse["DYCOMS_RF02"]["tke_mean"] = 21.409525048284575 +all_best_mse["DYCOMS_RF02"]["temperature_mean"] = 2.7353259967934458e-5 +all_best_mse["DYCOMS_RF02"]["thetal_mean"] = 3.009403591053178e-5 +all_best_mse["DYCOMS_RF02"]["Hvar_mean"] = 1465.0320663327811 +all_best_mse["DYCOMS_RF02"]["QTvar_mean"] = 514.653226995155 # all_best_mse["GABLS"] = OrderedCollections.OrderedDict() all_best_mse["GABLS"]["updraft_thetal"] = 0.0 -all_best_mse["GABLS"]["v_mean"] = 1.2389167052398989e-30 +all_best_mse["GABLS"]["v_mean"] = 1.2389165526931998e-30 all_best_mse["GABLS"]["u_mean"] = 1.735310521433882e-32 -all_best_mse["GABLS"]["tke_mean"] = 1.3423807154076705e-30 +all_best_mse["GABLS"]["tke_mean"] = 1.3423807154074417e-30 all_best_mse["GABLS"]["temperature_mean"] = 0.0 all_best_mse["GABLS"]["thetal_mean"] = 0.0 -all_best_mse["GABLS"]["Hvar_mean"] = 1.8577798100604492e-30 +all_best_mse["GABLS"]["Hvar_mean"] = 1.857573961661239e-30 # all_best_mse["GATE_III"] = OrderedCollections.OrderedDict() -all_best_mse["GATE_III"]["qt_mean"] = 2.751763072097516e-17 -all_best_mse["GATE_III"]["updraft_area"] = 1.0067003077503561e-12 -all_best_mse["GATE_III"]["updraft_w"] = 1.9866903035375464e-15 -all_best_mse["GATE_III"]["updraft_qt"] = 9.943454893675091e-17 -all_best_mse["GATE_III"]["updraft_thetal"] = 3.976136212397589e-20 -all_best_mse["GATE_III"]["u_mean"] = 1.7786046247604032e-19 -all_best_mse["GATE_III"]["tke_mean"] = 5.4637034538767e-15 -all_best_mse["GATE_III"]["temperature_mean"] = 3.4386468585602514e-20 -all_best_mse["GATE_III"]["ql_mean"] = 4.2061041281769915e-14 -all_best_mse["GATE_III"]["qi_mean"] = 8.712528060056637e-17 -all_best_mse["GATE_III"]["qr_mean"] = 5.040280688212245e-13 -all_best_mse["GATE_III"]["qs_mean"] = 5.8900642113111296e-15 -all_best_mse["GATE_III"]["thetal_mean"] = 1.8476177043943748e-20 -all_best_mse["GATE_III"]["Hvar_mean"] = 5.833665028073461e-14 -all_best_mse["GATE_III"]["QTvar_mean"] = 3.666722357065889e-13 +all_best_mse["GATE_III"]["qt_mean"] = 3.014277474867634e-16 +all_best_mse["GATE_III"]["updraft_area"] = 1.1253246655431564e-11 +all_best_mse["GATE_III"]["updraft_w"] = 1.9487118831294562e-14 +all_best_mse["GATE_III"]["updraft_qt"] = 2.230160680670979e-16 +all_best_mse["GATE_III"]["updraft_thetal"] = 5.411051140073406e-19 +all_best_mse["GATE_III"]["u_mean"] = 1.746776715939859e-18 +all_best_mse["GATE_III"]["tke_mean"] = 2.2067260004431243e-15 +all_best_mse["GATE_III"]["temperature_mean"] = 5.591331696450916e-19 +all_best_mse["GATE_III"]["ql_mean"] = 1.873345898184791e-13 +all_best_mse["GATE_III"]["qi_mean"] = 6.354265932615595e-17 +all_best_mse["GATE_III"]["qr_mean"] = 5.299542121227325e-12 +all_best_mse["GATE_III"]["qs_mean"] = 4.898284583069764e-14 +all_best_mse["GATE_III"]["thetal_mean"] = 3.0588913651700388e-19 +all_best_mse["GATE_III"]["Hvar_mean"] = 4.114722666257766e-14 +all_best_mse["GATE_III"]["QTvar_mean"] = 1.7233402926254475e-12 # all_best_mse["life_cycle_Tan2018"] = OrderedCollections.OrderedDict() -all_best_mse["life_cycle_Tan2018"]["qt_mean"] = 1.1930778350948134e-12 -all_best_mse["life_cycle_Tan2018"]["ql_mean"] = 4.856320550271249e-11 -all_best_mse["life_cycle_Tan2018"]["updraft_area"] = 4.700330857032967e-12 -all_best_mse["life_cycle_Tan2018"]["updraft_w"] = 3.4780115808939696e-10 -all_best_mse["life_cycle_Tan2018"]["updraft_qt"] = 3.4866062424258736e-13 -all_best_mse["life_cycle_Tan2018"]["updraft_thetal"] = 1.9017271421464622e-16 -all_best_mse["life_cycle_Tan2018"]["v_mean"] = 8.440183468620281e-13 -all_best_mse["life_cycle_Tan2018"]["u_mean"] = 1.6361855585013259e-15 -all_best_mse["life_cycle_Tan2018"]["tke_mean"] = 1.3261257800624283e-12 -all_best_mse["life_cycle_Tan2018"]["temperature_mean"] = 5.746895768249593e-16 -all_best_mse["life_cycle_Tan2018"]["thetal_mean"] = 5.810925162561764e-16 -all_best_mse["life_cycle_Tan2018"]["Hvar_mean"] = 0.000215944180887789 -all_best_mse["life_cycle_Tan2018"]["QTvar_mean"] = 0.0001195316954772662 +all_best_mse["life_cycle_Tan2018"]["qt_mean"] = 1.1882499692883095e-6 +all_best_mse["life_cycle_Tan2018"]["ql_mean"] = 0.0023452730980281673 +all_best_mse["life_cycle_Tan2018"]["updraft_area"] = 0.0005815686348367982 +all_best_mse["life_cycle_Tan2018"]["updraft_w"] = 0.0008199589201687151 +all_best_mse["life_cycle_Tan2018"]["updraft_qt"] = 0.0005255788935356413 +all_best_mse["life_cycle_Tan2018"]["updraft_thetal"] = 3.024541418498564e-7 +all_best_mse["life_cycle_Tan2018"]["v_mean"] = 1.7665923350882435e-5 +all_best_mse["life_cycle_Tan2018"]["u_mean"] = 5.042443328446725e-8 +all_best_mse["life_cycle_Tan2018"]["tke_mean"] = 5.74141900039723e-5 +all_best_mse["life_cycle_Tan2018"]["temperature_mean"] = 5.768060410772945e-10 +all_best_mse["life_cycle_Tan2018"]["thetal_mean"] = 5.692815552156728e-10 +all_best_mse["life_cycle_Tan2018"]["Hvar_mean"] = 55.57118312521745 +all_best_mse["life_cycle_Tan2018"]["QTvar_mean"] = 30.651261631568822 # all_best_mse["Nieuwstadt"] = OrderedCollections.OrderedDict() -all_best_mse["Nieuwstadt"]["updraft_area"] = 99.9551894840857 -all_best_mse["Nieuwstadt"]["updraft_w"] = 14.234210108109906 +all_best_mse["Nieuwstadt"]["updraft_area"] = 99.95518948417036 +all_best_mse["Nieuwstadt"]["updraft_w"] = 14.234210108108666 all_best_mse["Nieuwstadt"]["updraft_thetal"] = 117.6059354414369 -all_best_mse["Nieuwstadt"]["u_mean"] = 13.553312452894726 -all_best_mse["Nieuwstadt"]["tke_mean"] = 283.4527933602413 -all_best_mse["Nieuwstadt"]["temperature_mean"] = 1.1069166228374412e-5 -all_best_mse["Nieuwstadt"]["thetal_mean"] = 1.1163599173134842e-5 -all_best_mse["Nieuwstadt"]["Hvar_mean"] = 719.3878132527256 +all_best_mse["Nieuwstadt"]["u_mean"] = 13.553312452894682 +all_best_mse["Nieuwstadt"]["tke_mean"] = 283.45279336077976 +all_best_mse["Nieuwstadt"]["temperature_mean"] = 1.1069166228395703e-5 +all_best_mse["Nieuwstadt"]["thetal_mean"] = 1.1163599173153909e-5 +all_best_mse["Nieuwstadt"]["Hvar_mean"] = 719.387813253075 # all_best_mse["Rico"] = OrderedCollections.OrderedDict() -all_best_mse["Rico"]["qt_mean"] = 0.8685256836011042 -all_best_mse["Rico"]["updraft_area"] = 478.56505133327573 -all_best_mse["Rico"]["updraft_w"] = 75.16164491943583 -all_best_mse["Rico"]["updraft_qt"] = 16.275399293359392 -all_best_mse["Rico"]["updraft_thetal"] = 133.87297518151618 -all_best_mse["Rico"]["v_mean"] = 0.5582957429052721 -all_best_mse["Rico"]["u_mean"] = 0.3770143595330914 -all_best_mse["Rico"]["tke_mean"] = 144.47757062599226 -all_best_mse["Rico"]["temperature_mean"] = 0.0005399337245447159 -all_best_mse["Rico"]["ql_mean"] = 81.64732868600886 +all_best_mse["Rico"]["qt_mean"] = 0.8732617812127805 +all_best_mse["Rico"]["updraft_area"] = 478.6103900655811 +all_best_mse["Rico"]["updraft_w"] = 75.0403670264857 +all_best_mse["Rico"]["updraft_qt"] = 16.277480831993625 +all_best_mse["Rico"]["updraft_thetal"] = 133.87298592651348 +all_best_mse["Rico"]["v_mean"] = 0.5566971415416723 +all_best_mse["Rico"]["u_mean"] = 0.37707238163166606 +all_best_mse["Rico"]["tke_mean"] = 144.6261226338786 +all_best_mse["Rico"]["temperature_mean"] = 0.0005406092778061022 +all_best_mse["Rico"]["ql_mean"] = 81.78345675815379 all_best_mse["Rico"]["qi_mean"] = "NA" -all_best_mse["Rico"]["qr_mean"] = 751.8177494026789 -all_best_mse["Rico"]["thetal_mean"] = 0.0005275671713452303 -all_best_mse["Rico"]["Hvar_mean"] = 40691.28380130209 -all_best_mse["Rico"]["QTvar_mean"] = 9017.926388319349 +all_best_mse["Rico"]["qr_mean"] = 751.7749016991701 +all_best_mse["Rico"]["thetal_mean"] = 0.0005282588047823552 +all_best_mse["Rico"]["Hvar_mean"] = 41772.53419410204 +all_best_mse["Rico"]["QTvar_mean"] = 9689.617792098537 # all_best_mse["Soares"] = OrderedCollections.OrderedDict() -all_best_mse["Soares"]["qt_mean"] = 0.1427328325093554 -all_best_mse["Soares"]["updraft_area"] = 97.54831238810962 -all_best_mse["Soares"]["updraft_w"] = 13.105743423491914 -all_best_mse["Soares"]["updraft_qt"] = 23.64110329423007 +all_best_mse["Soares"]["qt_mean"] = 0.1427328325123903 +all_best_mse["Soares"]["updraft_area"] = 97.54831238309664 +all_best_mse["Soares"]["updraft_w"] = 13.105743423554053 +all_best_mse["Soares"]["updraft_qt"] = 23.64110329423397 all_best_mse["Soares"]["updraft_thetal"] = 65.72138701636423 -all_best_mse["Soares"]["u_mean"] = 93.8955870406489 -all_best_mse["Soares"]["tke_mean"] = 216.4518468904579 -all_best_mse["Soares"]["temperature_mean"] = 1.2381752395697475e-5 -all_best_mse["Soares"]["thetal_mean"] = 1.2064931346715829e-5 -all_best_mse["Soares"]["Hvar_mean"] = 680.9440520288703 +all_best_mse["Soares"]["u_mean"] = 93.89558704063909 +all_best_mse["Soares"]["tke_mean"] = 216.45184688981107 +all_best_mse["Soares"]["temperature_mean"] = 1.2381752395765417e-5 +all_best_mse["Soares"]["thetal_mean"] = 1.206493134678075e-5 +all_best_mse["Soares"]["Hvar_mean"] = 680.944052028659 # all_best_mse["TRMM_LBA"] = OrderedCollections.OrderedDict() -all_best_mse["TRMM_LBA"]["qt_mean"] = 2.0998380118612485 -all_best_mse["TRMM_LBA"]["updraft_area"] = 1268.3808323837927 -all_best_mse["TRMM_LBA"]["updraft_w"] = 15532.477432102563 -all_best_mse["TRMM_LBA"]["updraft_qt"] = 285.1069426549674 -all_best_mse["TRMM_LBA"]["updraft_thetal"] = 490.09262932405204 -all_best_mse["TRMM_LBA"]["v_mean"] = 67.45554062489389 -all_best_mse["TRMM_LBA"]["u_mean"] = 27.22776649937904 -all_best_mse["TRMM_LBA"]["tke_mean"] = 135664.71363635483 -all_best_mse["TRMM_LBA"]["temperature_mean"] = 0.0006728449387071617 -all_best_mse["TRMM_LBA"]["ql_mean"] = 235473.98702879949 +all_best_mse["TRMM_LBA"]["qt_mean"] = 2.0998380118645743 +all_best_mse["TRMM_LBA"]["updraft_area"] = 1268.38083109634 +all_best_mse["TRMM_LBA"]["updraft_w"] = 15532.47743794566 +all_best_mse["TRMM_LBA"]["updraft_qt"] = 285.106942667409 +all_best_mse["TRMM_LBA"]["updraft_thetal"] = 490.0926293239174 +all_best_mse["TRMM_LBA"]["v_mean"] = 67.45554061935081 +all_best_mse["TRMM_LBA"]["u_mean"] = 27.227766500062224 +all_best_mse["TRMM_LBA"]["tke_mean"] = 135664.71364864224 +all_best_mse["TRMM_LBA"]["temperature_mean"] = 0.0006728449387002054 +all_best_mse["TRMM_LBA"]["ql_mean"] = 235473.9870620743 all_best_mse["TRMM_LBA"]["qi_mean"] = "NA" all_best_mse["TRMM_LBA"]["qr_mean"] = "NA" all_best_mse["TRMM_LBA"]["qs_mean"] = "NA" -all_best_mse["TRMM_LBA"]["thetal_mean"] = 0.00414023790425752 -all_best_mse["TRMM_LBA"]["Hvar_mean"] = 430415.1998350132 -all_best_mse["TRMM_LBA"]["QTvar_mean"] = 6659.921911008241 +all_best_mse["TRMM_LBA"]["thetal_mean"] = 0.004140237903002215 +all_best_mse["TRMM_LBA"]["Hvar_mean"] = 430415.19992669823 +all_best_mse["TRMM_LBA"]["QTvar_mean"] = 6659.921911738702 # all_best_mse["LES_driven_SCM"] = OrderedCollections.OrderedDict() -all_best_mse["LES_driven_SCM"]["qt_mean"] = 3.5656791615746664 -all_best_mse["LES_driven_SCM"]["v_mean"] = 1.378605161974001 -all_best_mse["LES_driven_SCM"]["u_mean"] = 0.47643793378470234 -all_best_mse["LES_driven_SCM"]["temperature_mean"] = 0.0012830981258744414 -all_best_mse["LES_driven_SCM"]["ql_mean"] = 51738.51124851987 -all_best_mse["LES_driven_SCM"]["thetal_mean"] = 0.0015164180471682785 +all_best_mse["LES_driven_SCM"]["qt_mean"] = 3.5656551128069336 +all_best_mse["LES_driven_SCM"]["v_mean"] = 1.3786065803844898 +all_best_mse["LES_driven_SCM"]["u_mean"] = 0.47643802037799565 +all_best_mse["LES_driven_SCM"]["temperature_mean"] = 0.001283074413616987 +all_best_mse["LES_driven_SCM"]["ql_mean"] = 51725.39021346529 +all_best_mse["LES_driven_SCM"]["thetal_mean"] = 0.0015164076617609533 # ################################# ################################# diff --git a/src/closures/buoyancy_gradients.jl b/src/closures/buoyancy_gradients.jl index b262071b82..fba87bc2f8 100644 --- a/src/closures/buoyancy_gradients.jl +++ b/src/closures/buoyancy_gradients.jl @@ -22,7 +22,7 @@ function buoyancy_gradients( phase_part = TD.PhasePartition(0.0, 0.0, 0.0) # assuming R_d = R_m Π = TD.exner_given_pressure(param_set, bg_model.p, phase_part) - ∂b∂θv = g * (R_d / bg_model.alpha0 / bg_model.p) * Π + ∂b∂θv = g * (R_d * bg_model.ρ / bg_model.p) * Π if bg_model.en_cld_frac > 0.0 ts_sat = thermo_state_pθq(param_set, bg_model.p, bg_model.θ_liq_ice_sat, bg_model.qt_sat) diff --git a/src/types.jl b/src/types.jl index 995112c4e4..fe0fc3b9da 100644 --- a/src/types.jl +++ b/src/types.jl @@ -123,8 +123,8 @@ Base.@kwdef struct EnvBuoyGrad{FT, EBC <: AbstractEnvBuoyGradClosure} p::FT "cloud fraction" en_cld_frac::FT - "specific volume" - alpha0::FT + "density" + ρ::FT end function EnvBuoyGrad(::EBG; t_sat::FT, bg_kwargs...) where {FT <: Real, EBG <: AbstractEnvBuoyGradClosure} return EnvBuoyGrad{FT, EBG}(; t_sat, bg_kwargs...) diff --git a/src/update_aux.jl b/src/update_aux.jl index 48e498dc66..3b54c9c750 100644 --- a/src/update_aux.jl +++ b/src/update_aux.jl @@ -393,7 +393,7 @@ function update_aux!(edmf::EDMFModel, grid::Grid, state::State, surf::SurfaceBas ∂θl∂z_sat = ∂θl∂z[k], p = p_c[k], en_cld_frac = aux_en.cloud_fraction[k], - alpha0 = 1 / ρ_c[k], + ρ = ρ_c[k], ) bg_model = EnvBuoyGrad(edmf.bg_closure; bg_kwargs...) @@ -410,7 +410,7 @@ function update_aux!(edmf::EDMFModel, grid::Grid, state::State, surf::SurfaceBas ∂θl∂z_sat = ∂θl∂z_sat[k], p = p_c[k], en_cld_frac = aux_en.cloud_fraction[k], - alpha0 = 1 / ρ_c[k], + ρ = ρ_c[k], ) bg_model = EnvBuoyGrad(edmf.bg_closure; bg_kwargs...) else