Skip to content

Commit b3fce30

Browse files
authored
Merge pull request #1280 from CliMA/kp/close
Close NetCDf files after opening them
2 parents a6ed624 + cef81cd commit b3fce30

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

experiments/standalone/Snow/process_snowmip.jl

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,36 @@ obs_filename = join(["obs_", site_data_stem])
2929

3030

3131
# Meteorological data
32-
met_data = NCDataset(joinpath(path, met_filename))
33-
timestamp = met_data["time"][:]
34-
year = Dates.year.(timestamp)
35-
# convert from milliseconds to seconds
36-
mask = (year .== 2009) .| (year .== 2010) .| (year .== 2011)
37-
seconds = Dates.value.(timestamp[mask] .- timestamp[mask][1]) / 1000
38-
39-
LWdown = met_data["LWdown"][:][mask]
40-
SWdown = met_data["SWdown"][:][mask]
41-
Psurf = met_data["Psurf"][:][mask]
42-
q_air = met_data["Qair"][:][mask]
43-
Tair = met_data["Tair"][:][mask]
44-
u = met_data["Wind"][:][mask]
45-
# convert mass flux into volume flux of liquid water
46-
# additionally, our convention is that a negative flux is downwards
47-
rainf = -met_data["Rainf"][:][mask] ./ 1000.0 # convert to dS/dt
48-
snowf = -met_data["Snowf"][:][mask] ./ 1000.0 # convert to dS/dt
32+
timestamp, mask, seconds, LWdown, SWdown, Psurf, q_air, Tair, u, rainf, snowf =
33+
NCDataset(joinpath(path, met_filename)) do met_data
34+
timestamp = met_data["time"][:]
35+
year = Dates.year.(timestamp)
36+
# convert from milliseconds to seconds
37+
mask = (year .== 2009) .| (year .== 2010) .| (year .== 2011)
38+
seconds = Dates.value.(timestamp[mask] .- timestamp[mask][1]) / 1000
4939

40+
LWdown = met_data["LWdown"][:][mask]
41+
SWdown = met_data["SWdown"][:][mask]
42+
Psurf = met_data["Psurf"][:][mask]
43+
q_air = met_data["Qair"][:][mask]
44+
Tair = met_data["Tair"][:][mask]
45+
u = met_data["Wind"][:][mask]
46+
# convert mass flux into volume flux of liquid water
47+
# additionally, our convention is that a negative flux is downwards
48+
rainf = -met_data["Rainf"][:][mask] ./ 1000.0 # convert to dS/dt
49+
snowf = -met_data["Snowf"][:][mask] ./ 1000.0 # convert to dS/dt
50+
return timestamp,
51+
mask,
52+
seconds,
53+
LWdown,
54+
SWdown,
55+
Psurf,
56+
q_air,
57+
Tair,
58+
u,
59+
rainf,
60+
snowf
61+
end
5062
# Required parameters for forcing
5163
earth_param_set = LP.LandParameters(FT)
5264
thermo_params = LP.thermodynamic_parameters(earth_param_set)
@@ -97,19 +109,23 @@ atmos = PrescribedAtmosphere(
97109
)
98110
forcing = (; atmos, radiation)
99111
# Snow data
100-
snow_data = NCDataset(joinpath(path, obs_filename))
112+
albedo, z, mass, ts = NCDataset(joinpath(path, obs_filename)) do snow_data
113+
albedo = snow_data["albs"][:][mask]
114+
z = snow_data["snd_man"][:][mask]
115+
mass = snow_data["snw_man"][:][mask]
116+
ts = snow_data["ts"][:][mask]
117+
return albedo, z, mass, ts
118+
end
119+
101120

102-
albedo = snow_data["albs"][:][mask]
103-
z = snow_data["snd_man"][:][mask]
104-
mass = snow_data["snw_man"][:][mask]
105121

106122
mass_data_avail = .!(typeof.(mass) .<: Missing)
107123
# Although snow mass data is present, other data may be missing
108124
# We replace Missing with NaN, here, so that we can plot the data
109125
# with gaps
110126
fill_missing(x, FT) = typeof(x) <: Missing ? FT(NaN) : x
111127

112-
T_snow = fill_missing.(snow_data["ts"][:][mask][mass_data_avail], FT)
128+
T_snow = fill_missing.(ts[mass_data_avail], FT)
113129
ρ_snow = fill_missing.(mass[mass_data_avail] ./ z[mass_data_avail], FT)
114130
depths = fill_missing.(z[mass_data_avail], FT)
115131
SWE = depths .* ρ_snow ./ 1000.0

0 commit comments

Comments
 (0)