Skip to content

Commit 47f00d3

Browse files
committed
Adding int2real function and new save functions for split
1 parent 100d25e commit 47f00d3

File tree

2 files changed

+115
-1
lines changed

2 files changed

+115
-1
lines changed

src/backend.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,28 @@ function ncoffsetscale(data::AbstractArray{<:Real})
2323

2424
end
2525

26+
function int2real!(
27+
oarray :: AbstractArray{FT},
28+
iarray :: AbstractArray{Int16};
29+
scale :: Real,
30+
offset :: Real,
31+
fvalue :: Int16,
32+
mvalue :: Int16
33+
) where FT <: Real
34+
35+
for ii = 1 : length(iarray)
36+
37+
if (iarray[ii] == fvalue) || (iarray[ii] == mvalue)
38+
oarray[ii] = FT(NaN)
39+
else; oarray[ii] = iarray[ii] * scale + offset
40+
end
41+
42+
end
43+
44+
return
45+
46+
end
47+
2648
function real2int16!(
2749
oarray :: AbstractArray{Int16},
2850
iarray :: AbstractArray{<:Real},

src/downloads/split.jl

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,101 @@ function split(
2525

2626
p = pvec[ip]
2727
evarii = PressureVariable(evar.varID,hPa=p)
28-
save(dataflt,dt,e5ds,evarii,ereg,lsd)
28+
save(dataflt,dt,e5ds,evarii,ereg,lsd,sc,of)
2929
end
3030

3131
close(ds)
3232

33+
end
34+
35+
function save(
36+
data :: AbstractArray{<:Real,3},
37+
dt :: Date,
38+
e5ds :: ERA5Hourly,
39+
evar :: ERA5Variable,
40+
ereg :: ERA5Region,
41+
lsd :: LandSea,
42+
scale :: Real,
43+
offset :: Real
44+
)
45+
46+
@info "$(modulelog()) - Saving raw $(e5ds.lname) $(evar.vname) data in $(ereg.geo.name) (Horizontal Resolution: $(ereg.gres)) for $(year(dt)) $(Dates.monthname(dt)) ..."
47+
48+
ds,fnc = save_createds(e5ds,evar,ereg,dt)
49+
50+
nhr = 24 * daysinmonth(dt)
51+
52+
ds.dim["longitude"] = length(lsd.lon)
53+
ds.dim["latitude"] = length(lsd.lat)
54+
ds.dim["time"] = nhr
55+
56+
nclon,nclat = save_definelonlat!(ds)
57+
58+
nctime = defVar(ds,"time",Int32,("time",),attrib = Dict(
59+
"units" => "hours since $(dt) 00:00:00.0",
60+
"long_name" => "time",
61+
"calendar" => "gregorian",
62+
))
63+
64+
ncvar = save_definevar!(ds,evar,scale,offset)
65+
66+
nclon[:] = lsd.lon
67+
nclat[:] = lsd.lat
68+
nctime[:] = collect(1:nhr) .- 1
69+
70+
if iszero(sum(isnan.(data)))
71+
ncvar[:] = data
72+
else; ncvar.var[:] = real2int16(data,scale,offset)
73+
end
74+
75+
close(ds)
76+
77+
@info "$(modulelog()) - Raw $(uppercase(e5ds.lname)) $(evar.vname) in $(ereg.geo.name) (Horizontal Resolution: $(ereg.gres)) for $(year(dt)) $(Dates.monthname(dt)) has been saved into $(fnc)."
78+
79+
end
80+
81+
function save(
82+
data :: AbstractArray{<:Real,3},
83+
dt :: Date,
84+
e5ds :: ERA5Monthly,
85+
evar :: ERA5Variable,
86+
ereg :: ERA5Region,
87+
lsd :: LandSea,
88+
scale :: Real,
89+
offset :: Real
90+
)
91+
92+
@info "$(modulelog()) - Saving raw $(e5ds.lname) $(evar.vname) data in $(ereg.geo.name) (Horizontal Resolution: $(ereg.gres)) for $(year(dt)) ..."
93+
94+
ds,fnc = save_createds(e5ds,evar,ereg,dt)
95+
96+
nt = 12; if e5ds.hours; nt = nt * 24 end
97+
98+
ds.dim["longitude"] = length(lsd.lon)
99+
ds.dim["latitude"] = length(lsd.lat)
100+
ds.dim["time"] = nt
101+
102+
nclon,nclat = save_definelonlat!(ds)
103+
104+
nctime = defVar(ds,"time",Int32,("time",),attrib = Dict(
105+
"units" => "hours since $(dt) 00:00:00.0",
106+
"long_name" => "time",
107+
"calendar" => "gregorian",
108+
))
109+
110+
ncvar = save_definevar!(ds,evar,scale,offset)
111+
112+
nclon[:] = lsd.lon
113+
nclat[:] = lsd.lat
114+
nctime[:] = save_definetimes(e5ds,dt)
115+
116+
if iszero(sum(isnan.(data)))
117+
ncvar[:] = data
118+
else; ncvar.var[:] = real2int16(data,scale,offset)
119+
end
120+
121+
close(ds)
122+
123+
@info "$(modulelog()) - Raw $(uppercase(e5ds.lname)) $(evar.vname) in $(ereg.geo.name) (Horizontal Resolution: $(ereg.gres)) for $(year(dt)) has been saved into $(fnc)."
124+
33125
end

0 commit comments

Comments
 (0)