Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cleanup #9

Merged
merged 1 commit into from Jul 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
154 changes: 32 additions & 122 deletions integration_tests/utils/Cases.jl
Expand Up @@ -166,20 +166,10 @@ function initialize_profiles(self::CasesBase{SoaresCase},
set_bcs(GMV.U, Gr)
set_bcs(GMV.QT, Gr)

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = theta[k]
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = theta[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = theta[k]
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = theta[k]
end

set_bcs(GMV.H, Gr)
Expand Down Expand Up @@ -260,22 +250,11 @@ function initialize_profiles(self::CasesBase{Nieuwstadt}, Gr::Grid, GMV::GridMea
set_bcs(GMV.U, Gr)
set_bcs(GMV.QT, Gr)

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = theta[k]
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = theta[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = theta[k]
GMV.T.values[k] = theta[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = theta[k]
end

set_bcs(GMV.H, Gr)
set_bcs(GMV.T, Gr)
satadjust(GMV)
Expand Down Expand Up @@ -383,22 +362,11 @@ function initialize_profiles(self::CasesBase{BomexCase}, Gr::Grid, GMV::GridMean
end
end

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end

set_bcs(GMV.U, Gr)
set_bcs(GMV.QT, Gr)
set_bcs(GMV.H, Gr)
Expand Down Expand Up @@ -526,20 +494,10 @@ function initialize_profiles(self::CasesBase{life_cycle_Tan2018}, Gr::Grid, GMV:
end


if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
end

set_bcs(GMV.U, Gr)
Expand Down Expand Up @@ -660,20 +618,10 @@ function initialize_profiles(self::CasesBase{Rico}, Gr::Grid, GMV::GridMeanVaria
end
end

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end

set_bcs(GMV.U, Gr)
Expand Down Expand Up @@ -838,13 +786,8 @@ function initialize_profiles(self::CasesBase{TRMM_LBA}, Gr::Grid, GMV::GridMeanV
qv_star = PV_star*epsi/(p1[k]- PV_star + epsi*PV_star*RH[k]/100.0) # eq. 37 in pressel et al and the def of RH
qv = GMV.QT.values[k] - GMV.QL.values[k]
GMV.QT.values[k] = qv_star*RH[k]/100.0
if GMV.H.name == "s"
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0)
elseif GMV.H.name == "thetal"
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
end
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))

GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
Expand Down Expand Up @@ -1100,13 +1043,8 @@ function initialize_profiles(self::CasesBase{ARM_SGP}, Gr::Grid, GMV::GridMeanVa
GMV.U.values[k] = 10.0
GMV.QT.values[k] = qt[k]
GMV.T.values[k] = Theta[k]*exner_c(Ref.p0_half[k])
if GMV.H.name == "s"
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0)
elseif GMV.H.name == "thetal"
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
end
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))

GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
Expand Down Expand Up @@ -1242,13 +1180,8 @@ function initialize_profiles(self::CasesBase{GATE_III}, Gr::Grid, GMV::GridMeanV
GMV.T.values[k] = T[k]
GMV.U.values[k] = U[k]

if GMV.H.name == "s"
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0)
elseif GMV.H.name == "thetal"
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
end
GMV.H.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))

GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], 0.0, 0.0, latent_heat(GMV.T.values[k]))
Expand Down Expand Up @@ -1427,11 +1360,8 @@ function initialize_profiles(self::CasesBase{DYCOMS_RF01}, Gr::Grid, GMV::GridMe
# (calculated based on T and ql profiles.
# Here we use Rd, cp and L constants as defined in TurbulenceConvection)
GMV.THL.values[k] = t_to_thetali_c(Ref.p0_half[k], GMV.T.values[k], GMV.QT.values[k], GMV.QL.values[k], qi)
if GMV.H.name == "thetal"
GMV.H.values[k] = t_to_thetali_c(Ref.p0_half[k], GMV.T.values[k], GMV.QT.values[k], GMV.QL.values[k], qi)
elseif GMV.H.name == "s"
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k], GMV.T.values[k], GMV.QT.values[k], GMV.QL.values[k], qi)
end
GMV.H.values[k] = t_to_thetali_c(Ref.p0_half[k], GMV.T.values[k], GMV.QT.values[k], GMV.QL.values[k], qi)


# buoyancy profile
qv = GMV.QT.values[k] - qi - GMV.QL.values[k]
Expand Down Expand Up @@ -1560,20 +1490,10 @@ function initialize_profiles(self::CasesBase{GABLS}, Gr::Grid, GMV::GridMeanVari
GMV.QT.values[k] = 0.0
end

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k]) # No water content
GMV.THL.values[k] = thetal[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k]) # No water content
GMV.THL.values[k] = thetal[k]
end

set_bcs(GMV.U, Gr)
Expand Down Expand Up @@ -1663,20 +1583,10 @@ function initialize_profiles(self::CasesBase{SP}, Gr::Grid, GMV::GridMeanVariabl
GMV.QT.values[k] = 0.0
end

if GMV.H.name == "thetal"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end
elseif GMV.H.name == "s"
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.H.values[k] = t_to_entropy_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi)
GMV.THL.values[k] = thetali_c(Ref.p0_half[k],GMV.T.values[k],
GMV.QT.values[k], ql, qi, latent_heat(GMV.T.values[k]))
end
@inbounds for k in xrange(Gr.gw,Gr.nzg-Gr.gw)
GMV.H.values[k] = thetal[k]
GMV.T.values[k] = thetal[k] * exner_c(Ref.p0_half[k])
GMV.THL.values[k] = thetal[k]
end

set_bcs(GMV.U, Gr)
Expand Down
1 change: 0 additions & 1 deletion integration_tests/utils/generate_namelist.jl
Expand Up @@ -25,7 +25,6 @@ function default_namelist(case_name)
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["updraft_number"] = 1
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["entrainment"] = "moisture_deficit"
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["extrapolate_buoyancy"] = true
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["use_steady_updrafts"] = false
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["use_local_micro"] = true
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["use_constant_plume_spacing"] = false
namelist_defaults["turbulence"]["EDMF_PrognosticTKE"]["use_similarity_diffusivity"] = false
Expand Down
37 changes: 6 additions & 31 deletions src/EDMF_Environment.jl
Expand Up @@ -34,25 +34,15 @@ function EnvironmentVariables(namelist, Gr::Grid)
QT = EnvironmentVariable( nz, "half", "scalar", "qt","kg/kg" )
QL = EnvironmentVariable( nz, "half", "scalar", "ql","kg/kg" )
RH = EnvironmentVariable( nz, "half", "scalar", "RH","%" )

if namelist["thermodynamics"]["thermal_variable"] == "entropy"
H = EnvironmentVariable( nz, "half", "scalar", "s","J/kg/K" )
elseif namelist["thermodynamics"]["thermal_variable"] == "thetal"
H = EnvironmentVariable( nz, "half", "scalar", "thetal","K" )
end

H = EnvironmentVariable( nz, "half", "scalar", "thetal","K" )
THL = EnvironmentVariable(nz, "half", "scalar", "thetal", "K")
T = EnvironmentVariable( nz, "half", "scalar", "temperature","K" )
B = EnvironmentVariable( nz, "half", "scalar", "buoyancy","m^2/s^3" )
Area = EnvironmentVariable(nz, "half", "scalar", "env_area", "-")
cloud_fraction = EnvironmentVariable(nz, "half", "scalar", "env_cloud_fraction", "-")

# TODO - the flag setting is repeated from Variables.pyx logic
if namelist["turbulence"]["scheme"] == "EDMF_PrognosticTKE"
calc_tke = true
else
calc_tke = false
end
calc_tke = true
calc_tke = try
namelist["turbulence"]["EDMF_PrognosticTKE"]["calculate_tke"]
catch
Expand All @@ -79,13 +69,8 @@ function EnvironmentVariables(namelist, Gr::Grid)

if calc_scalar_var
QTvar = EnvironmentVariable_2m( nz, "half", "scalar", "qt_var","kg^2/kg^2" )
if namelist["thermodynamics"]["thermal_variable"] == "entropy"
Hvar = EnvironmentVariable_2m(nz, "half", "scalar", "s_var", "(J/kg/K)^2")
HQTcov = EnvironmentVariable_2m(nz, "half", "scalar", "s_qt_covar", "(J/kg/K)(kg/kg)" )
elseif namelist["thermodynamics"]["thermal_variable"] == "thetal"
Hvar = EnvironmentVariable_2m(nz, "half", "scalar", "thetal_var", "K^2")
HQTcov = EnvironmentVariable_2m(nz, "half", "scalar", "thetal_qt_covar", "K(kg/kg)" )
end
Hvar = EnvironmentVariable_2m(nz, "half", "scalar", "thetal_var", "K^2")
HQTcov = EnvironmentVariable_2m(nz, "half", "scalar", "thetal_qt_covar", "K(kg/kg)" )
end

if EnvThermo_scheme == "quadrature"
Expand Down Expand Up @@ -121,12 +106,7 @@ function initialize_io(self::EnvironmentVariables, Stats::NetCDFIO_Stats)
add_profile(Stats, "env_area")
add_profile(Stats, "env_temperature")
add_profile(Stats, "env_RH")

if self.H.name == "s"
add_profile(Stats, "env_s")
else
add_profile(Stats, "env_thetal")
end
add_profile(Stats, "env_thetal")

if self.calc_tke
add_profile(Stats, "env_tke")
Expand Down Expand Up @@ -156,12 +136,7 @@ function io(self::EnvironmentVariables, Stats::NetCDFIO_Stats, Ref::ReferenceSta
write_profile(Stats, "env_area", self.Area.values[cinterior])
write_profile(Stats, "env_temperature", self.T.values[cinterior])
write_profile(Stats, "env_RH", self.RH.values[cinterior])

if self.H.name == "s"
write_profile(Stats, "env_s", self.H.values[cinterior])
else
write_profile(Stats, "env_thetal", self.H.values[cinterior])
end
write_profile(Stats, "env_thetal", self.H.values[cinterior])

if self.calc_tke
write_profile(Stats, "env_tke", self.TKE.values[cinterior])
Expand Down
7 changes: 1 addition & 6 deletions src/Forcing.jl
Expand Up @@ -5,12 +5,7 @@ function initialize(self::ForcingBase, GMV::GridMeanVariables, ::ForcingBaseType
self.dqtdt = pyzeros(self.Gr.nzg)
self.ug = pyzeros(self.Gr.nzg)
self.vg = pyzeros(self.Gr.nzg)

if GMV.H.name == "s"
self.convert_forcing_prog_fp = convert_forcing_entropy
elseif GMV.H.name == "thetal"
self.convert_forcing_prog_fp = convert_forcing_thetal
end
self.convert_forcing_prog_fp = convert_forcing_thetal
return
end

Expand Down