Skip to content

Commit 0d421aa

Browse files
authored
improve diagnostics interface; reduce fluxnet sim time (#1244)
1 parent 04effc8 commit 0d421aa

File tree

2 files changed

+96
-98
lines changed

2 files changed

+96
-98
lines changed

experiments/integrated/fluxnet/run_fluxnet.jl

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -254,15 +254,33 @@ jac_kwargs =
254254
outdir = joinpath(pkgdir(ClimaLand), "experiments/integrated/fluxnet/out")
255255
output_dir = ClimaUtilities.OutputPathGenerator.generate_output_path(outdir)
256256

257-
d_writer = ClimaDiagnostics.Writers.DictWriter()
257+
output_writer = ClimaDiagnostics.Writers.DictWriter()
258258

259259
ref_time = DateTime(2010)
260260

261+
short_names_1D = [
262+
"sif",
263+
"ra",
264+
"gs",
265+
"gpp",
266+
"ct",
267+
"swu",
268+
"lwu",
269+
"er",
270+
"et",
271+
"msf",
272+
"shf",
273+
"lhf",
274+
"rn",
275+
"swe",
276+
]
277+
short_names_2D = ["swc", "tsoil", "si"]
278+
output_vars = [short_names_1D..., short_names_2D...]
261279
diags = ClimaLand.default_diagnostics(
262280
land,
263281
ref_time;
264-
output_writer = d_writer,
265-
output_vars = :long,
282+
output_writer,
283+
output_vars,
266284
average_period = :hourly,
267285
)
268286

@@ -291,33 +309,9 @@ prob = SciMLBase.ODEProblem(
291309
p,
292310
);
293311

294-
sol = SciMLBase.solve(prob, ode_algo; dt = dt, callback = cb);
312+
@time sol = SciMLBase.solve(prob, ode_algo; dt = dt, callback = cb);
295313

296314
ClimaLand.Diagnostics.close_output_writers(diags)
297-
298-
# Extract model output from the saved diagnostics
299-
short_names_1D = [
300-
"sif", # SIF
301-
"ra", # AR
302-
"gs", # g_stomata
303-
"gpp", # GPP
304-
"ct", # canopy_T
305-
"swu", # SW_u
306-
"lwu", # LW_u
307-
"er", # ER
308-
"et", # ET
309-
"msf", # β
310-
"shf", # SHF
311-
"lhf", # LHF
312-
"rn", # Rn
313-
"swe",
314-
]
315-
short_names_2D = [
316-
"swc", # swc_sfc or swc_5 or swc_10
317-
"tsoil", # soil_T_sfc or soil_T_5 or soil_T_10
318-
"si", # si_sfc or si_5 or si_10
319-
]
320-
321315
hourly_diag_name = short_names_1D .* "_1h_average"
322316
hourly_diag_name_2D = short_names_2D .* "_1h_average"
323317

@@ -326,13 +320,13 @@ hourly_diag_name_2D = short_names_2D .* "_1h_average"
326320
# whereas diagnostic_as_vectors()[1] is a vector or time associated with that variable.
327321
# We index to only extract the period post-spinup.
328322
SIF, AR, g_stomata, GPP, canopy_T, SW_u, LW_u, ER, ET, β, SHF, LHF, Rn, SWE = [
329-
ClimaLand.Diagnostics.diagnostic_as_vectors(d_writer, diag_name)[2][(N_spinup_days * 24):end]
323+
ClimaLand.Diagnostics.diagnostic_as_vectors(output_writer, diag_name)[2][(N_spinup_days * 24):end]
330324
for diag_name in hourly_diag_name
331325
]
332326

333327
swc, soil_T, si = [
334328
ClimaLand.Diagnostics.diagnostic_as_vectors(
335-
d_writer,
329+
output_writer,
336330
diag_name;
337331
layer = nelements, #surface layer
338332
)[2][(N_spinup_days * 24):end] for diag_name in hourly_diag_name_2D

src/diagnostics/default_diagnostics.jl

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -273,75 +273,75 @@ function default_diagnostics(
273273
) where {FT}
274274

275275
define_diagnostics!(land_model)
276-
276+
possible_diags = [
277+
"swa",
278+
"sif",
279+
"ra",
280+
"gs",
281+
"trans",
282+
"clhf",
283+
"cshf",
284+
"lwp",
285+
# "fa", # return a Tuple
286+
"far",
287+
"lai",
288+
"msf",
289+
"rai",
290+
"sai",
291+
"gpp",
292+
"an",
293+
"rd",
294+
"nir",
295+
"anir",
296+
"rnir",
297+
"tnir",
298+
"par",
299+
"apar",
300+
"rpar",
301+
"tpar",
302+
"lwn",
303+
"swn",
304+
"soc",
305+
"airp",
306+
"rain",
307+
"lwd",
308+
"swd",
309+
"snow",
310+
"qsfc",
311+
"infil",
312+
"shc",
313+
"stc",
314+
"swp",
315+
"soilrn",
316+
"tsoil",
317+
"soillhf",
318+
"soilshf",
319+
"hr",
320+
"scd",
321+
"scms",
322+
"ct",
323+
"sco2",
324+
"swc",
325+
# "pwc", # return a Tuple
326+
"si",
327+
"sie",
328+
"swu",
329+
"lwu",
330+
"er",
331+
"et",
332+
"sr",
333+
"swe",
334+
"snd",
335+
"rn",
336+
"lhf",
337+
"shf",
338+
"iwc",
339+
"snowc",
340+
"tair",
341+
"precip",
342+
]
277343
if output_vars == :long
278-
snowyland_diagnostics = [
279-
"swa",
280-
"sif",
281-
"ra",
282-
"gs",
283-
"trans",
284-
"clhf",
285-
"cshf",
286-
"lwp",
287-
# "fa", # return a Tuple
288-
"far",
289-
"lai",
290-
"msf",
291-
"rai",
292-
"sai",
293-
"gpp",
294-
"an",
295-
"rd",
296-
"nir",
297-
"anir",
298-
"rnir",
299-
"tnir",
300-
"par",
301-
"apar",
302-
"rpar",
303-
"tpar",
304-
"lwn",
305-
"swn",
306-
"soc",
307-
"airp",
308-
"rain",
309-
"lwd",
310-
"swd",
311-
"snow",
312-
"qsfc",
313-
"infil",
314-
"shc",
315-
"stc",
316-
"swp",
317-
"soilrn",
318-
"tsoil",
319-
"soillhf",
320-
"soilshf",
321-
"hr",
322-
"scd",
323-
"scms",
324-
"ct",
325-
"sco2",
326-
"swc",
327-
# "pwc", # return a Tuple
328-
"si",
329-
"sie",
330-
"swu",
331-
"lwu",
332-
"er",
333-
"et",
334-
"sr",
335-
"swe",
336-
"snd",
337-
"rn",
338-
"lhf",
339-
"shf",
340-
"iwc",
341-
"snowc",
342-
"tair",
343-
"precip",
344-
]
344+
snowyland_diagnostics = possible_diags
345345
elseif output_vars == :short
346346
snowyland_diagnostics = [
347347
"gpp",
@@ -368,6 +368,10 @@ function default_diagnostics(
368368
"tair",
369369
"precip",
370370
]
371+
else
372+
@assert typeof(output_vars) <: Vector{String}
373+
@assert all([var possible_diags for var in output_vars])
374+
snowyland_diagnostics = output_vars
371375
end
372376

373377
if average_period == :hourly

0 commit comments

Comments
 (0)