Skip to content

Commit

Permalink
Clean up, document LES driven forcing.
Browse files Browse the repository at this point in the history
  • Loading branch information
ilopezgp committed Nov 3, 2021
1 parent 04dadf6 commit 075bdd7
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 23 deletions.
10 changes: 0 additions & 10 deletions integration_tests/utils/Cases.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1592,8 +1592,6 @@ function CasesBase(case::LES_driven_SCM, namelist, grid::Grid, param_set, Sur, F
Fo.apply_coriolis = false
Fo.coriolis_param = 0.376e-4 # s^{-1}
Fo.apply_subsidence = true
Fo.apply_coriolis = false
Fo.apply_subsidence = true
Fo.nudge_tau = namelist["forcing"]["nudging_timescale"]
return TC.CasesBase(case; inversion_option, Sur, Fo, Rad, LESDat)
end
Expand All @@ -1620,14 +1618,6 @@ function initialize_profiles(self::CasesBase{LES_driven_SCM}, grid::Grid, gm, st
NC.Dataset(self.LESDat.les_filename, "r") do data
imin = self.LESDat.imin
imax = self.LESDat.imax
t = data.group["profiles"]["t"][:]
# define time interval
t_interval_from_end_s = 6 * 3600
t_from_end_s = Array(t) .- t[end]
# find inds within time interval
time_interval_bool = findall(>(-t_interval_from_end_s), t_from_end_s)
imin = time_interval_bool[1]
imax = time_interval_bool[end]

zc_les = Array(TC.get_nc_data(data, "zc"))
parent(prog_gm.θ_liq_ice) .=
Expand Down
6 changes: 3 additions & 3 deletions src/Forcing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ function initialize(self::ForcingBase{ForcingLES}, grid, LESDat::LESData)

zc_les = Array(get_nc_data(data, "zc"))

self.dtdt_hadv = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_hadv", imin, imax))
self.dtdt_nudge = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_nudge", imin, imax))
self.dtdt_fluc = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_fluc", imin, imax))
self.dTdt_hadv = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_hadv", imin, imax))
self.dTdt_nudge = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_nudge", imin, imax))
self.dTdt_fluc = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dtdt_fluc", imin, imax))
self.dqtdt_hadv = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dqtdt_hadv", imin, imax))
self.dqtdt_nudge = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dqtdt_nudge", imin, imax))
self.dqtdt_fluc = pyinterp(grid.zc, zc_les, mean_nc_data(data, "profiles", "dqtdt_fluc", imin, imax))
Expand Down
6 changes: 3 additions & 3 deletions src/Turbulence_PrognosticTKE.jl
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ function compute_gm_tendencies!(edmf::EDMF_PrognosticTKE, grid, state, Case, gm,
end

if force_type(Case.Fo) <: ForcingLES
H_horz_adv = Case.Fo.dtdt_hadv[k] / Π
H_nudge = Case.Fo.dtdt_nudge[k] / Π
H_fluc = Case.Fo.dtdt_fluc[k] / Π
H_horz_adv = Case.Fo.dTdt_hadv[k] / Π
H_nudge = Case.Fo.dTdt_nudge[k] / Π
H_fluc = Case.Fo.dTdt_fluc[k] / Π

gm_U_nudge_k = (Case.Fo.u_nudge[k] - prog_gm.u[k]) / Case.Fo.nudge_tau
gm_V_nudge_k = (Case.Fo.v_nudge[k] - prog_gm.v[k]) / Case.Fo.nudge_tau
Expand Down
39 changes: 32 additions & 7 deletions src/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ end
"""
MoistureDeficitEntr
My entrainment detrainment model
Entrainment detrainment model from Cohen et al (2020)
$(DocStringExtensions.FIELDS)
"""
Expand Down Expand Up @@ -417,24 +417,49 @@ Base.@kwdef mutable struct LESData
les_filename::String = nothing
end

"""
ForcingBase
LES-driven forcing
$(DocStringExtensions.FIELDS)
"""
Base.@kwdef mutable struct ForcingBase{T}
"Large-scale subsidence"
subsidence::AbstractArray{Float64, 1} = zeros(1)
dTdt::AbstractArray{Float64, 1} = zeros(1) # horizontal advection temperature tendency
dqtdt::AbstractArray{Float64, 1} = zeros(1) # horizontal advection moisture tendency
dtdt_hadv::AbstractArray{Float64, 1} = zeros(1)
dtdt_nudge::AbstractArray{Float64, 1} = zeros(1)
dtdt_fluc::AbstractArray{Float64, 1} = zeros(1)
"Large-scale temperature tendency"
dTdt::AbstractArray{Float64, 1} = zeros(1)
"Large-scale moisture tendency"
dqtdt::AbstractArray{Float64, 1} = zeros(1)
"Horizontal advection of temperature"
dTdt_hadv::AbstractArray{Float64, 1} = zeros(1)
"Temperature tendency due to relaxation to large-scale"
dTdt_nudge::AbstractArray{Float64, 1} = zeros(1)
"Vertical turbulent advection of temperature"
dTdt_fluc::AbstractArray{Float64, 1} = zeros(1)
"Horizontal advection of moisture"
dqtdt_hadv::AbstractArray{Float64, 1} = zeros(1)
"Moisture tendency due to relaxation to large-scale"
dqtdt_nudge::AbstractArray{Float64, 1} = zeros(1)
"Vertical turbulent advection of moisture"
dqtdt_fluc::AbstractArray{Float64, 1} = zeros(1)
"Reference u profile for relaxation tendency"
u_nudge::AbstractArray{Float64, 1} = zeros(1)
"Reference v profile for relaxation tendency"
v_nudge::AbstractArray{Float64, 1} = zeros(1)
"Boolean specifying whether Coriolis forcing is applied"
apply_coriolis::Bool = false
"Boolean specifying whether subsidence forcing is applied"
apply_subsidence::Bool = false
"Coriolis parameter"
coriolis_param::Float64 = 0
"Geostrophic u velocity"
ug::AbstractArray{Float64, 1} = zeros(1)
"Geostrophic v velocity"
vg::AbstractArray{Float64, 1} = zeros(1)
nudge_tau::Float64 = 0.0 # default is set to a value that will break
"Momentum relaxation timescale"
nudge_tau::Float64 = 0.0
"Conversion function from forcing to prognostic"
convert_forcing_prog_fp::Function = x -> x
end

Expand Down

0 comments on commit 075bdd7

Please sign in to comment.