12 subroutine read_grid_dims(pth1, atmres, ocnres, tile, lon, lat)
18 character(len=*),
intent(in) :: pth1
19 character(len=*),
intent(in) :: atmres
20 character(len=*),
intent(in) :: ocnres
22 integer,
intent(in) :: tile
23 integer,
intent(out) :: lon, lat
25 character(len=250) :: flnm
27 integer :: ncid, ndims, nvars, natts
28 integer :: latid, lonid
30 write(flnm,
'(5a,i1,a)') trim(pth1),trim(atmres),
'.',trim(ocnres),
'.tile',tile,
'.nc' 32 print*,
'- READ GRID DIMESIONS FROM: ',trim(flnm)
34 call handle_err (nf90_open(flnm, nf90_nowrite, ncid))
35 call handle_err (nf90_inquire(ncid, ndimensions=ndims, nvariables=nvars, nattributes=natts))
36 call handle_err (nf90_inquire(ncid, ndimensions=ndims, nvariables=nvars, nattributes=natts))
37 call handle_err (nf90_inq_dimid(ncid,
'grid_xt', latid))
38 call handle_err (nf90_inq_dimid(ncid,
'grid_yt', lonid))
39 call handle_err (nf90_inquire_dimension(ncid, latid, len=lat))
40 call handle_err (nf90_inquire_dimension(ncid, lonid, len=lon))
41 call handle_err (nf90_close(ncid))
43 print*,
'- DIMENSIONS ARE: ',lon, lat
45 end subroutine read_grid_dims
59 subroutine read_ocean_frac(pth1,atmres,ocnres,tile,lon,lat,ocn_frac)
65 character(len=*),
intent(in) :: pth1
66 character(len=*),
intent(in) :: atmres
67 character(len=*),
intent(in) :: ocnres
69 integer,
intent(in) :: lat
70 integer,
intent(in) :: lon
71 integer,
intent(in) :: tile
73 real,
intent(out) :: ocn_frac(lon,lat)
75 character(len=300) :: flnm
77 integer :: ncid, v1id, start(2), count(2)
79 write(flnm,
'(5a,i1,a)') trim(pth1),trim(atmres),
'.',trim(ocnres),
'.tile',tile,
'.nc' 81 print*,
'-READ OCEAN FRACTION FROM: ',trim(flnm)
84 count(1:2) = (/lon,lat/)
86 call handle_err (nf90_open(flnm, nf90_nowrite, ncid))
90 call handle_err (nf90_inq_varid(ncid,
'land_frac', v1id))
91 call handle_err (nf90_get_var(ncid, v1id, ocn_frac, start=start, count=count))
92 call handle_err (nf90_close(ncid))
94 end subroutine read_ocean_frac
109 subroutine read_lake_mask(pth2,atmres,tile,lon,lat,lake_frac, &
116 character(len=*),
intent(in) :: pth2, atmres
118 integer,
intent(in) :: tile, lon, lat
120 real,
intent(out) :: lake_frac(lon,lat)
121 real,
intent(out) :: lake_depth(lon,lat)
122 real,
intent(out) :: lat2d(lon,lat)
124 character(len=250) :: flnm
126 integer :: ncid, ndims, nvars, natts
127 integer :: v2id, v3id, vlat
128 integer :: start(2), count(2)
130 write(flnm,
'(4a,i1,a)') trim(pth2),
'oro.',trim(atmres),
'.tile',tile,
'.nc' 131 print *,
'- READ LAKE DEPTH, FRACTION AND LATITUDE FROM: ',trim(flnm)
132 call handle_err (nf90_open(flnm, nf90_nowrite, ncid))
133 call handle_err (nf90_inquire(ncid, ndimensions=ndims, nvariables=nvars, nattributes=natts))
134 call handle_err (nf90_inq_varid(ncid,
'lake_frac', v2id))
135 call handle_err (nf90_inq_varid(ncid,
'lake_depth',v3id))
136 call handle_err (nf90_inq_varid(ncid,
'geolat' ,vlat))
138 count(1:2) = (/lon,lat/)
139 call handle_err (nf90_get_var(ncid, v2id, lake_frac, start=start, count=count))
140 call handle_err (nf90_get_var(ncid, v3id, lake_depth,start=start, count=count))
141 call handle_err (nf90_get_var(ncid, vlat, lat2d, start=start, count=count))
142 call handle_err (nf90_close(ncid))
144 end subroutine read_lake_mask
162 subroutine write_data(atmres,ocnres,pth3,tile,lon,lat,land_frac, &
163 lake_frac,lake_depth,slmsk)
169 character(len=*),
intent(in) :: atmres, ocnres, pth3
171 integer,
intent(in) :: tile, lon, lat
173 real,
intent(in) :: land_frac(lon,lat), lake_frac(lon,lat)
174 real,
intent(in) :: lake_depth(lon,lat), slmsk(lon,lat)
176 character(len=250) :: flnm
178 integer :: ncid4, dims(2), v1id, v2id, v3id, v4id
180 write(flnm,
'(4a,i1,a)') trim(atmres),
'.',trim(ocnres),
'.tile',tile,
'.nc' 181 print *,
'- OUTPUT DATA TO FILE: ',trim(flnm)
182 call handle_err (nf90_create(path=trim(pth3)//trim(flnm), &
183 cmode=or(nf90_clobber, nf90_64bit_offset), ncid=ncid4))
185 call handle_err (nf90_def_dim(ncid4,
'lon', lon, dims(1)))
186 call handle_err (nf90_def_dim(ncid4,
'lat', lat, dims(2)))
187 call handle_err (nf90_def_var(ncid4,
'land_frac', nf90_float, dims(1:2), v1id))
188 call handle_err (nf90_def_var(ncid4,
'lake_frac', nf90_float, dims(1:2), v2id))
189 call handle_err (nf90_def_var(ncid4,
'lake_depth',nf90_float, dims(1:2), v3id))
190 call handle_err (nf90_def_var(ncid4,
'slmsk', nf90_float, dims(1:2), v4id))
192 call handle_err (nf90_enddef(ncid4))
194 call handle_err (nf90_put_var(ncid4, v1id,land_frac))
195 call handle_err (nf90_put_var(ncid4, v2id,lake_frac))
196 call handle_err (nf90_put_var(ncid4, v3id,lake_depth))
197 call handle_err (nf90_put_var(ncid4, v4id,slmsk))
198 call handle_err (nf90_close(ncid4))
200 end subroutine write_data