Skip to content

Commit f07953b

Browse files
Merge pull request #4058 from CliMA/as/amd-method
Anisotropic Minimum Dissipation method (LES)
2 parents 176099c + 0e851bc commit f07953b

File tree

12 files changed

+469
-4
lines changed

12 files changed

+469
-4
lines changed

.buildkite/pipeline.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,14 @@ steps:
195195
--config_file $CONFIG_PATH/plane_density_current_test.yml
196196
--job_id plane_density_current_test
197197
artifact_paths: "plane_density_current_test/output_active/*"
198+
199+
- label: ":computer: Density current experiment (AMD)"
200+
command: >
201+
julia --color=yes --project=.buildkite .buildkite/ci_driver.jl
202+
--config_file $CONFIG_PATH/plane_density_current_test_amd.yml
203+
--job_id plane_density_current_test_amd
204+
soft_fail: true
205+
artifact_paths: "plane_density_current_test_amd/output_active/*"
198206

199207
- group: "Analytic Tests"
200208
steps:
@@ -348,6 +356,18 @@ steps:
348356
artifact_paths: "baroclinic_wave_equil/output_active/*"
349357
agents:
350358
slurm_constraint: icelake|cascadelake|skylake|epyc
359+
360+
- label: ":computer: no lim baroclinic wave equilmoist (AMD)"
361+
command: >
362+
julia --color=yes --project=.buildkite .buildkite/ci_driver.jl
363+
--config_file $COMMON_CONFIG_PATH/numerics_sphere_he6ze10.yml
364+
--config_file $CONFIG_PATH/baroclinic_wave_equil_amd.yml
365+
--job_id baroclinic_wave_equil_amd
366+
367+
artifact_paths: "baroclinic_wave_equil_amd/output_active/*"
368+
soft_fail: true
369+
agents:
370+
slurm_constraint: icelake|cascadelake|skylake|epyc
351371

352372
- label: ":computer: held suarez"
353373
key: held_suarez

config/default_configs/default_config.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ vert_diff:
163163
hyperdiff:
164164
help: "Hyperdiffusion. Use `CAM_SE` for sensible default values and ClimaHyperdiffusion for user control. [`CAM_SE` (default), `ClimaHyperdiffusion` (or `true`), `none` (or `false`)]"
165165
value: "CAM_SE"
166+
amd_les:
167+
help: "AMD LES closure [`true`, `false` (default)]"
168+
value: false
169+
c_amd:
170+
help: "Model coefficient for AMD-LES closure (TODO: Move to parameters.toml)"
171+
value: 0.29
166172
smagorinsky_lilly:
167173
help: "Smagorinsky-Lilly diffusive closure [`false` (default), `true`]"
168174
value: false
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
precip_model: "0M"
2+
dt_save_state_to_disk: "2days"
3+
reproducibility_test: true
4+
initial_condition: "MoistBaroclinicWave"
5+
dt: "300secs"
6+
amd_les: true
7+
t_end: "10days"
8+
moist: "equil"
9+
disable_surface_flux_tendency: true
10+
diagnostics:
11+
- short_name: [pfull, wa, va, rv, hus, ke]
12+
period: 1days
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
dt_save_state_to_disk: "3600secs"
2+
initial_condition: "DryDensityCurrentProfile"
3+
x_max: 51200.0
4+
z_elem: 90
5+
dt: "0.3secs"
6+
t_end: "900.0secs"
7+
discrete_hydrostatic_balance: true
8+
amd_les: true
9+
z_stretch: false
10+
x_elem: 80
11+
config: "plane"
12+
z_max: 6400.0
13+
disable_surface_flux_tendency: true
14+
output_default_diagnostics: false
15+
diagnostics:
16+
- short_name: thetaa
17+
period: 900secs

post_processing/ci_plots.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,10 @@ function make_plots(
804804
end
805805

806806
function make_plots(
807-
::Val{:plane_density_current_test},
807+
::Union{
808+
Val{:plane_density_current_test},
809+
Val{:plane_density_current_test_amd},
810+
},
808811
output_paths::Vector{<:AbstractString},
809812
)
810813
simdirs = SimDir.(output_paths)
@@ -887,7 +890,9 @@ function make_plots(
887890
end
888891

889892
MoistBaroWavePlots =
890-
Union{Val{:baroclinic_wave_equil}, Val{:baroclinic_wave_equil_deepatmos}}
893+
Union{Val{:baroclinic_wave_equil},
894+
Val{:baroclinic_wave_equil_amd},
895+
Val{:baroclinic_wave_equil_deepatmos}}
891896

892897
function make_plots(
893898
::MoistBaroWavePlots,

src/ClimaAtmos.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ include(
128128
"smagorinsky_lilly.jl",
129129
),
130130
)
131+
include(
132+
joinpath(
133+
"parameterized_tendencies",
134+
"les_sgs_models",
135+
"anisotropic_minimum_dissipation.jl",
136+
),
137+
)
131138
include(joinpath("prognostic_equations", "advection.jl"))
132139

133140
include(joinpath("cache", "temporary_quantities.jl"))

src/cache/precomputed_quantities.jl

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,18 @@ function precomputed_quantities(Y, atmos)
257257
else
258258
(;)
259259
end
260+
amd_les_quantities =
261+
if atmos.amd_les isa AnisotropicMinimumDissipation
262+
uvw_vec = UVW(FT(0), FT(0), FT(0))
263+
(;
264+
ᶜτ_amd = similar(Y.c, typeof(uvw_vec * uvw_vec')),
265+
ᶠτ_amd = similar(Y.f, typeof(uvw_vec * uvw_vec')),
266+
ᶜD_amd = similar(Y.c, FT),
267+
ᶠD_amd = similar(Y.f, FT),
268+
)
269+
else
270+
(;)
271+
end
260272

261273
return (;
262274
implicit_precomputed_quantities(Y, atmos)...,
@@ -270,7 +282,7 @@ function precomputed_quantities(Y, atmos)
270282
surface_precip_fluxes...,
271283
cloud_diagnostics_tuple,
272284
smagorinsky_lilly_quantities...,
273-
)
285+
amd_les_quantities...)
274286
end
275287

276288
# Interpolates the third contravariant component of Y.c.uₕ to cell faces.
@@ -600,6 +612,10 @@ NVTX.@annotate function set_explicit_precomputed_quantities_part2!(Y, p, t)
600612
set_smagorinsky_lilly_precomputed_quantities!(Y, p)
601613
end
602614

615+
if p.atmos.amd_les isa AnisotropicMinimumDissipation
616+
set_amd_precomputed_quantities!(Y, p)
617+
end
618+
603619
return nothing
604620
end
605621

0 commit comments

Comments
 (0)