ocean_merge  1.13.0
All Files Functions Pages
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