Skip to content

Commit 62f55c3

Browse files
committed
Add check for monthly averages
1 parent f6d6892 commit 62f55c3

File tree

2 files changed

+57
-15
lines changed

2 files changed

+57
-15
lines changed

experiments/ClimaEarth/leaderboard/data_sources.jl

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,18 @@ includes unit conversion and shifting the dates.
7878
The variable should have only three dimensions: latitude, longitude, and time.
7979
"""
8080
function get_sim_var_dict(diagnostics_folder_path)
81-
# List of short names
82-
available_short_names = ClimaAnalysis.available_vars(ClimaAnalysis.SimDir(diagnostics_folder_path))
81+
available_short_names = get_short_names_monthly_averages(diagnostics_folder_path)
8382
sim_var_dict = Dict{String, Any}()
8483
# Dict for loading in simulation data
8584
"pr" in available_short_names && (
8685
sim_var_dict["pr"] =
8786
() -> begin
88-
sim_var = get(ClimaAnalysis.SimDir(diagnostics_folder_path), short_name = "pr")
87+
sim_var = get(
88+
ClimaAnalysis.SimDir(diagnostics_folder_path),
89+
short_name = "pr",
90+
reduction = "average",
91+
period = "1M",
92+
)
8993
sim_var = ClimaAnalysis.convert_units(
9094
sim_var,
9195
"mm/day",
@@ -101,7 +105,12 @@ function get_sim_var_dict(diagnostics_folder_path)
101105
short_name in available_short_names && (
102106
sim_var_dict[short_name] =
103107
() -> begin
104-
sim_var = get(ClimaAnalysis.SimDir(diagnostics_folder_path), short_name = short_name)
108+
sim_var = get(
109+
ClimaAnalysis.SimDir(diagnostics_folder_path),
110+
short_name = short_name,
111+
reduction = "average",
112+
period = "1M",
113+
)
105114
sim_var = ClimaAnalysis.shift_to_start_of_previous_month(sim_var)
106115
return sim_var
107116
end
@@ -224,13 +233,24 @@ function get_sim_var_in_pfull_dict(diagnostics_folder_path)
224233
available_short_names = ClimaAnalysis.available_vars(ClimaAnalysis.SimDir(diagnostics_folder_path))
225234
sim_var_pfull_dict = Dict{String, Any}()
226235

227-
short_names = ["ta", "hur", "hus"]
236+
short_names = get_short_names_monthly_averages(diagnostics_folder_path)
237+
available_short_names = intersect(short_names, Set(["ta", "hur", "hus"]))
228238
for short_name in short_names
229239
short_name in available_short_names && (
230240
sim_var_pfull_dict[short_name] =
231241
() -> begin
232-
sim_var = get(ClimaAnalysis.SimDir(diagnostics_folder_path), short_name = short_name)
233-
pfull_var = get(ClimaAnalysis.SimDir(diagnostics_folder_path), short_name = "pfull")
242+
sim_var = get(
243+
ClimaAnalysis.SimDir(diagnostics_folder_path),
244+
short_name = short_name,
245+
reduction = "average",
246+
period = "1M",
247+
)
248+
pfull_var = get(
249+
ClimaAnalysis.SimDir(diagnostics_folder_path),
250+
short_name = "pfull",
251+
reduction = "average",
252+
period = "1M",
253+
)
234254

235255
(ClimaAnalysis.units(sim_var) == "") &&
236256
(sim_var = ClimaAnalysis.set_units(sim_var, "unitless"))
@@ -360,3 +380,23 @@ function get_compare_vars_biases_heatmap_extrema_pfull()
360380
compare_vars_biases_heatmap_extrema = Dict("ta" => (-10.0, 10.0), "hur" => (-0.4, 0.4), "hus" => (-0.001, 0.001))
361381
return compare_vars_biases_heatmap_extrema
362382
end
383+
384+
"""
385+
get_short_names_of_monthly_averages(diagnostics_folder_path)
386+
387+
Get all the short names of the monthly averages.
388+
"""
389+
function get_short_names_monthly_averages(diagnostics_folder_path)
390+
available_short_names = Set{String}()
391+
simdir = ClimaAnalysis.SimDir(diagnostics_folder_path)
392+
for short_name in ClimaAnalysis.available_vars(simdir)
393+
for reduction in ClimaAnalysis.available_reductions(simdir, short_name = short_name)
394+
for period in ClimaAnalysis.available_periods(simdir, short_name = short_name, reduction = reduction)
395+
if reduction == "average" && period == "1M"
396+
push!(available_short_names, short_name)
397+
end
398+
end
399+
end
400+
end
401+
return available_short_names
402+
end

experiments/ClimaEarth/user_io/postprocessing.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,16 @@ function postprocess_sim(cs, postprocessing_vars)
3434
# If we have enough data (in time, but also enough variables), plot the leaderboard.
3535
# We need pressure to compute the leaderboard.
3636
simdir = CAN.SimDir(atmos_output_dir)
37-
pressure_in_output = "pfull" in CAN.available_vars(simdir)
38-
times = CAN.times(get(CAN.SimDir(atmos_output_dir), first(CAN.available_vars(simdir))))
39-
t_end = times[end]
40-
if t_end > 84600 * 31 * 3 # 3 months for spin up
41-
leaderboard_base_path = artifact_dir
42-
compute_leaderboard(leaderboard_base_path, atmos_output_dir, 3)
43-
test_rmse_thresholds(atmos_output_dir, 3)
44-
pressure_in_output && compute_pfull_leaderboard(leaderboard_base_path, atmos_output_dir, 6)
37+
if !isempty(simdir)
38+
pressure_in_output = "pfull" in CAN.available_vars(simdir)
39+
times = CAN.times(get(simdir, first(CAN.available_vars(simdir))))
40+
t_end = times[end]
41+
if t_end > 84600 * 31 * 3 # 3 months for spin up
42+
leaderboard_base_path = artifact_dir
43+
compute_leaderboard(leaderboard_base_path, atmos_output_dir, 3)
44+
test_rmse_thresholds(atmos_output_dir, 3)
45+
pressure_in_output && compute_pfull_leaderboard(leaderboard_base_path, atmos_output_dir, 6)
46+
end
4547
end
4648

4749
# Perform conservation checks if they exist

0 commit comments

Comments
 (0)