ocean_merge 1.14.0
Loading...
Searching...
No Matches
read_write.F90
1
12 subroutine read_grid_dims(pth1, atmres, ocnres, tile, lon, lat)
13
14 use netcdf
15
16 implicit none
17
18 character(len=*), intent(in) :: pth1
19 character(len=*), intent(in) :: atmres
20 character(len=*), intent(in) :: ocnres
21
22 integer, intent(in) :: tile
23 integer, intent(out) :: lon, lat
24
25 character(len=250) :: flnm
26
27 integer :: ncid, ndims, nvars, natts
28 integer :: latid, lonid
29
30 write(flnm,'(5a,i1,a)') trim(pth1),trim(atmres),'.',trim(ocnres),'.tile',tile,'.nc'
31
32 print*,'- READ GRID DIMESIONS FROM: ',trim(flnm)
33
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)) ! RM: lon is no longer in this file; try grid_xt
38 call handle_err (nf90_inq_dimid(ncid, 'grid_yt', lonid)) ! RM: lat is no longer in this file; try grid_yt
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))
42
43 print*,'- DIMENSIONS ARE: ',lon, lat
44
45 end subroutine read_grid_dims
46
59 subroutine read_ocean_frac(pth1,atmres,ocnres,tile,lon,lat,ocn_frac)
60
61 use netcdf
62
63 implicit none
64
65 character(len=*), intent(in) :: pth1
66 character(len=*), intent(in) :: atmres
67 character(len=*), intent(in) :: ocnres
68
69 integer, intent(in) :: lat
70 integer, intent(in) :: lon
71 integer, intent(in) :: tile
72
73 real, intent(out) :: ocn_frac(lon,lat)
74
75 character(len=300) :: flnm
76
77 integer :: ncid, v1id, start(2), count(2)
78
79 write(flnm,'(5a,i1,a)') trim(pth1),trim(atmres),'.',trim(ocnres),'.tile',tile,'.nc'
80
81 print*,'-READ OCEAN FRACTION FROM: ',trim(flnm)
82
83 start(1:2) = (/1,1/)
84 count(1:2) = (/lon,lat/)
85
86 call handle_err (nf90_open(flnm, nf90_nowrite, ncid))
87
88! The file record is named 'land_frac', but the data is ocean fraction.
89
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))
93
94 end subroutine read_ocean_frac
95
109 subroutine read_lake_mask(pth2,atmres,tile,lon,lat,lake_frac, &
110 lake_depth,lat2d)
111
112 use netcdf
113
114 implicit none
115
116 character(len=*), intent(in) :: pth2, atmres
117
118 integer, intent(in) :: tile, lon, lat
119
120 real, intent(out) :: lake_frac(lon,lat)
121 real, intent(out) :: lake_depth(lon,lat)
122 real, intent(out) :: lat2d(lon,lat)
123
124 character(len=250) :: flnm
125
126 integer :: ncid, ndims, nvars, natts
127 integer :: v2id, v3id, vlat
128 integer :: start(2), count(2)
129
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))
137 start(1:2) = (/1,1/)
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))
143
144 end subroutine read_lake_mask
162 subroutine write_data(atmres,ocnres,pth3,tile,lon,lat,land_frac, &
163 lake_frac,lake_depth,slmsk)
164
165 use netcdf
166
167 implicit none
168
169 character(len=*), intent(in) :: atmres, ocnres, pth3
170
171 integer, intent(in) :: tile, lon, lat
172
173 real, intent(in) :: land_frac(lon,lat), lake_frac(lon,lat)
174 real, intent(in) :: lake_depth(lon,lat), slmsk(lon,lat)
175
176 character(len=250) :: flnm
177
178 integer :: ncid4, dims(2), v1id, v2id, v3id, v4id
179
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)) ! netcdf3
184
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))
191
192 call handle_err (nf90_enddef(ncid4))
193
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))
199
200 end subroutine write_data