Skip to content

Commit

Permalink
Merge #523
Browse files Browse the repository at this point in the history
523: Make more variables ClimaCore fields r=charleskawczynski a=charleskawczynski



Co-authored-by: Charles Kawczynski <kawczynski.charles@gmail.com>
  • Loading branch information
bors[bot] and charleskawczynski committed Nov 5, 2021
2 parents 1114df3 + a159779 commit c75eb60
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 44 deletions.
5 changes: 5 additions & 0 deletions integration_tests/utils/main.jl
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ cent_aux_vars_up(FT) = (;
θ_liq_ice = FT(0),
θ_liq_ice_tendency_precip_formation = FT(0),
qt_tendency_precip_formation = FT(0),
entr_sc = FT(0),
detr_sc = FT(0),
frac_turb_entr = FT(0),
entr_turb_dyn = FT(0),
detr_turb_dyn = FT(0),
)
cent_aux_vars_edmf(FT, n_up) = (;
turbconv = (;
Expand Down
29 changes: 15 additions & 14 deletions src/Turbulence_PrognosticTKE.jl
Original file line number Diff line number Diff line change
Expand Up @@ -473,8 +473,10 @@ function compute_updraft_tendencies(edmf::EDMF_PrognosticTKE, grid, state, gm::G
au_lim = edmf.max_area

parent(tendencies_up) .= 0
entr_turb_dyn = edmf.entr_sc .+ edmf.frac_turb_entr
detr_turb_dyn = edmf.detr_sc .+ edmf.frac_turb_entr
@inbounds for i in 1:(up.n_updrafts)
aux_up[i].entr_turb_dyn .= aux_up[i].entr_sc .+ aux_up[i].frac_turb_entr
aux_up[i].detr_turb_dyn .= aux_up[i].detr_sc .+ aux_up[i].frac_turb_entr
end

# Solve for updraft area fraction
@inbounds for k in real_center_indices(grid)
Expand All @@ -484,8 +486,8 @@ function compute_updraft_tendencies(edmf::EDMF_PrognosticTKE, grid, state, gm::G
m_k = (ρ0_c[k] * aux_up[i].area[k] * w_up_c)

adv = upwind_advection_area(ρ0_c, aux_up[i].area, aux_up_f[i].w, grid, k)
entr_term = m_k * entr_turb_dyn[i, k]
detr_term = m_k * detr_turb_dyn[i, k]
entr_term = m_k * aux_up[i].entr_turb_dyn[k]
detr_term = m_k * aux_up[i].detr_turb_dyn[k]
tendencies_up[i].ρarea[k] = (ρ0_c[k] * adv + entr_term - detr_term)

adv = upwind_advection_scalar(ρ0_c, aux_up[i].area, aux_up_f[i].w, aux_up[i].θ_liq_ice, grid, k)
Expand All @@ -510,8 +512,8 @@ function compute_updraft_tendencies(edmf::EDMF_PrognosticTKE, grid, state, gm::G
a_k = interpc2f(aux_up[i].area, grid, k; a_up_bcs...)
# We know that, since W = 0 at z = 0, these BCs should
# not matter in the end:
entr_w = interpc2f(entr_turb_dyn, grid, k, i; bottom = SetValue(0), top = SetValue(0))
detr_w = interpc2f(detr_turb_dyn, grid, k, i; bottom = SetValue(0), top = SetValue(0))
entr_w = interpc2f(aux_up[i].entr_turb_dyn, grid, k; bottom = SetValue(0), top = SetValue(0))
detr_w = interpc2f(aux_up[i].detr_turb_dyn, grid, k; bottom = SetValue(0), top = SetValue(0))
B_k = interpc2f(aux_up[i].buoy, grid, k; bottom = SetValue(0), top = SetValue(0))

adv = upwind_advection_velocity(ρ0_f, aux_up[i].area, aux_up_f[i].w, grid, k; a_up_bcs)
Expand Down Expand Up @@ -732,15 +734,15 @@ function compute_covariance_entr(
gmvvar1 = is_tke ? interpf2c(GmvVar1, grid, k) : GmvVar1[k]
gmvvar2 = is_tke ? interpf2c(GmvVar2, grid, k) : GmvVar2[k]

eps_turb = edmf.frac_turb_entr[i, k]
eps_turb = aux_up[i].frac_turb_entr[k]

w_u = interpf2c(aux_up_f[i].w, grid, k)
dynamic_entr =
tke_factor *
ρ0_c[k] *
a_up *
abs(w_u) *
edmf.detr_sc[i, k] *
aux_up[i].detr_sc[k] *
(updvar1 - envvar1) *
(updvar2 - envvar2)
turbulent_entr =
Expand All @@ -752,7 +754,7 @@ function compute_covariance_entr(
((envvar1 - gmvvar1) * (updvar2 - envvar2) + (envvar2 - gmvvar2) * (updvar1 - envvar1))
aux_covar.entr_gain[k] += dynamic_entr + turbulent_entr
aux_covar.detr_loss[k] +=
tke_factor * ρ0_c[k] * a_up * abs(w_u) * (edmf.entr_sc[i, k] + eps_turb) * covar[k]
tke_factor * ρ0_c[k] * a_up * abs(w_u) * (aux_up[i].entr_sc[k] + eps_turb) * covar[k]
end
end
end
Expand All @@ -774,7 +776,7 @@ function compute_covariance_detr(edmf::EDMF_PrognosticTKE, grid, state, covar_sy
aux_covar.detr_loss[k] = 0.0
@inbounds for i in 1:(up.n_updrafts)
w_up_c = interpf2c(aux_up_f[i].w, grid, k)
aux_covar.detr_loss[k] += aux_up[i].area[k] * abs(w_up_c) * edmf.entr_sc[i, k]
aux_covar.detr_loss[k] += aux_up[i].area[k] * abs(w_up_c) * aux_up[i].entr_sc[k]
end
aux_covar.detr_loss[k] *= ρ0_c[k] * covar[k]
end
Expand Down Expand Up @@ -844,9 +846,7 @@ function compute_en_tendencies!(edmf, grid::Grid, state, param_set, TS, covar_sy

mixing_length = aux_tc.mixing_length
minimum_area = edmf.minimum_area
frac_turb_entr = edmf.frac_turb_entr
pressure_plume_spacing = edmf.pressure_plume_spacing
entr_sc = edmf.entr_sc

ρaew_en_ϕ = center_aux_turbconv(state).ρaew_en_ϕ
FT = eltype(grid)
Expand All @@ -862,10 +862,11 @@ function compute_en_tendencies!(edmf, grid::Grid, state, param_set, TS, covar_sy
@inbounds for k in real_center_indices(grid)
D_env = sum(1:n_updrafts) do i
if aux_up[i].area[k] > minimum_area
turb_entr = frac_turb_entr[i, k]
turb_entr = aux_up[i].frac_turb_entr[k]
entr_sc = aux_up[i].entr_sc[k]
R_up = pressure_plume_spacing[i]
w_up_c = interpf2c(aux_up_f[i].w, grid, k)
D_env_i = ρ0_c[k] * aux_up[i].area[k] * w_up_c * (entr_sc[i, k] + turb_entr)
D_env_i = ρ0_c[k] * aux_up[i].area[k] * w_up_c * (entr_sc + turb_entr)
else
D_env_i = FT(0)
end
Expand Down
6 changes: 3 additions & 3 deletions src/diagnostics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -282,10 +282,10 @@ function compute_diagnostics!(edmf, gm, grid, state, Case, TS)
if a_up_bulk[k] > 0.0
@inbounds for i in 1:(edmf.n_updrafts)
diag_tc.massflux[k] += interpf2c(edmf.m, grid, k, i)
diag_tc.entr_sc[k] += aux_up[i].area[k] * edmf.entr_sc[i, k] / a_up_bulk[k]
diag_tc.detr_sc[k] += aux_up[i].area[k] * edmf.detr_sc[i, k] / a_up_bulk[k]
diag_tc.entr_sc[k] += aux_up[i].area[k] * aux_up[i].entr_sc[k] / a_up_bulk[k]
diag_tc.detr_sc[k] += aux_up[i].area[k] * aux_up[i].detr_sc[k] / a_up_bulk[k]
diag_tc.asp_ratio[k] += aux_up[i].area[k] * edmf.asp_ratio[i, k] / a_up_bulk[k]
diag_tc.frac_turb_entr[k] += aux_up[i].area[k] * edmf.frac_turb_entr[i, k] / a_up_bulk[k]
diag_tc.frac_turb_entr[k] += aux_up[i].area[k] * aux_up[i].frac_turb_entr[k] / a_up_bulk[k]
diag_tc.horiz_K_eddy[k] += aux_up[i].area[k] * edmf.horiz_K_eddy[i, k] / a_up_bulk[k]
diag_tc.sorting_function[k] += aux_up[i].area[k] * edmf.sorting_function[i, k] / a_up_bulk[k]
diag_tc.b_mix[k] += aux_up[i].area[k] * edmf.b_mix[i, k] / a_up_bulk[k]
Expand Down
18 changes: 1 addition & 17 deletions src/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -251,9 +251,6 @@ function GridMeanVariables(namelist, grid::Grid, param_set::PS) where {PS}
return GridMeanVariables(; param_set, lwp, iwp, cloud_base, cloud_top, cloud_cover, EnvThermo_scheme)
end


struct UpdraftThermodynamics end

Base.@kwdef mutable struct EnvironmentVariables
cloud_base::Float64 = 0
cloud_top::Float64 = 0
Expand Down Expand Up @@ -486,12 +483,9 @@ mutable struct EDMF_PrognosticTKE{A1, A2}
UpdVar::UpdraftVariables
EnvVar::EnvironmentVariables
EnvThermo::EnvironmentThermodynamics
entr_sc::A2
press::A2
detr_sc::A2
sorting_function::A2
b_mix::A2
frac_turb_entr::A2
nh_pressure::A2
nh_pressure_b::A2
nh_pressure_adv::A2
Expand Down Expand Up @@ -589,19 +583,12 @@ mutable struct EDMF_PrognosticTKE{A1, A2}
# Create the class for environment thermodynamics
EnvThermo = EnvironmentThermodynamics(namelist, grid)

# Entrainment rates
entr_sc = center_field(grid, n_updrafts)
# Pressure
press = center_field(grid, n_updrafts)

# Detrainment rates
detr_sc = center_field(grid, n_updrafts)

sorting_function = center_field(grid, n_updrafts)
b_mix = center_field(grid, n_updrafts)

# turbulent entrainment
frac_turb_entr = center_field(grid, n_updrafts)

# Pressure term in updraft vertical momentum equation
nh_pressure = face_field(grid, n_updrafts)
nh_pressure_b = face_field(grid, n_updrafts)
Expand Down Expand Up @@ -709,12 +696,9 @@ mutable struct EDMF_PrognosticTKE{A1, A2}
UpdVar,
EnvVar,
EnvThermo,
entr_sc,
press,
detr_sc,
sorting_function,
b_mix,
frac_turb_entr,
nh_pressure,
nh_pressure_b,
nh_pressure_adv,
Expand Down
20 changes: 10 additions & 10 deletions src/update_aux.jl
Original file line number Diff line number Diff line change
Expand Up @@ -271,21 +271,21 @@ function update_aux!(edmf, gm, grid, state, Case, param_set, TS)
)

er = entr_detr(param_set, εδ_model)
edmf.entr_sc[i, k] = er.ε_dyn
edmf.detr_sc[i, k] = er.δ_dyn
aux_up[i].entr_sc[k] = er.ε_dyn
aux_up[i].detr_sc[k] = er.δ_dyn
# stochastic closure
sde_model = edmf.sde_model
stoch_ε = stochastic_closure(param_set, sde_model, Entrainment())
stoch_δ = stochastic_closure(param_set, sde_model, Detrainment())
edmf.entr_sc[i, k] *= stoch_ε
edmf.detr_sc[i, k] *= stoch_δ
aux_up[i].entr_sc[k] *= stoch_ε
aux_up[i].detr_sc[k] *= stoch_δ

edmf.frac_turb_entr[i, k] = er.ε_turb
aux_up[i].frac_turb_entr[k] = er.ε_turb
edmf.horiz_K_eddy[i, k] = er.K_ε
else
edmf.entr_sc[i, k] = 0.0
edmf.detr_sc[i, k] = 0.0
edmf.frac_turb_entr[i, k] = 0.0
aux_up[i].entr_sc[k] = 0.0
aux_up[i].detr_sc[k] = 0.0
aux_up[i].frac_turb_entr[k] = 0.0
edmf.horiz_K_eddy[i, k] = 0.0
end
end
Expand Down Expand Up @@ -451,8 +451,8 @@ function update_aux!(edmf, gm, grid, state, Case, param_set, TS)
wc_en = wc_en,
wc_up = Tuple(wc_up),
a_up = ntuple(i -> aux_up[i].area[k], up.n_updrafts),
ε_turb = ntuple(i -> edmf.frac_turb_entr[i, k], up.n_updrafts),
δ_dyn = ntuple(i -> edmf.detr_sc[i, k], up.n_updrafts),
ε_turb = ntuple(i -> aux_up[i].frac_turb_entr[k], up.n_updrafts),
δ_dyn = ntuple(i -> aux_up[i].detr_sc[k], up.n_updrafts),
N_up = up.n_updrafts,
)

Expand Down

0 comments on commit c75eb60

Please sign in to comment.