orog_mask_tools  1.13.0
 All Data Structures Files Functions Variables Pages
topo.f90
1  program topo_netcdf
2 
3 ! Convert the gmted20120 data to netcdf.
4 
5  use netcdf
6 
7  implicit none
8 
9  integer*4, parameter :: idim=43200
10  integer*4, parameter :: jdim=21600
11  integer*4, parameter :: idim_p1=43201
12  integer*4, parameter :: jdim_p1=21601
13 
14  character(len=150) :: filenetcdf, fileraw
15 
16  integer :: i, istat, ncid, status, dim_i, dim_j
17  integer :: dim_ip1, dim_jp1
18  integer :: id_lon, id_lat, id_data
19  integer :: id_lat_corner, id_lon_corner
20 
21  integer(kind=2), allocatable :: topo(:,:)
22 
23  real(kind=8), allocatable :: lats(:), lons(:)
24  real(kind=8), allocatable :: lats_corner(:), lons_corner(:)
25  real(kind=8) :: lat11, lon11, dx, dy
26 
27  dx = 1.0_8/120.0_8
28  dy = -(1.0_8/120.0_8)
29 
30  lat11 = 90.0_8 + dy*0.5_8
31  lon11 = -180.0_8 + dx*0.5_8
32 
33  allocate(lons(idim),lats(jdim),topo(idim,jdim))
34  allocate(lons_corner(idim_p1),lats_corner(jdim_p1))
35 
36  do i = 1, idim
37  lons(i) = real((i-1),8) * dx + lon11
38  print*,'lon ',i,lons(i)
39  enddo
40 
41  do i = 1, jdim
42  lats(i) = real((i-1),8) * dy + lat11
43  print*,'lat ',i,lats(i)
44  enddo
45 
46  lat11 = 90.0_8
47  lon11 = -180.0_8
48 
49  do i = 1, idim_p1
50  lons_corner(i) = real((i-1),8) * dx + lon11
51  print*,'lon_corner ',i,lons_corner(i)
52  enddo
53 
54  do i = 1, jdim_p1
55  lats_corner(i) = real((i-1),8) * dy + lat11
56  print*,'lat_corner ',i,lats_corner(i)
57  enddo
58 
59  fileraw="/scratch1/NCEPDEV/global/glopara/fix/raw/orog/gmted2010.30sec.int"
60 
61  open(11, file=trim(fileraw), access='direct', recl=idim*jdim*2)
62  read(11, rec=1, iostat=istat) topo
63  if (istat /= 0) stop 99
64  close(11)
65 
66  print*,'topo ', maxval(topo),minval(topo)
67 
68  filenetcdf="./topography.gmted2010.30s.nc"
69 
70  print*,"- CREATE FILE: ", trim(filenetcdf)
71  status=nf90_create(filenetcdf, ior(nf90_netcdf4,nf90_classic_model), ncid)
72  if (status /= nf90_noerr) stop 1
73 
74  status=nf90_def_dim(ncid, 'idim', idim, dim_i)
75  if (status /= nf90_noerr) stop 3
76 
77  status=nf90_def_dim(ncid, 'jdim', jdim, dim_j)
78  if (status /= nf90_noerr) stop 2
79 
80  status=nf90_def_dim(ncid, 'idim_p1', (idim+1), dim_ip1)
81  if (status /= nf90_noerr) stop 4
82 
83  status=nf90_def_dim(ncid, 'jdim_p1', (jdim+1), dim_jp1)
84  if (status /= nf90_noerr) stop 5
85 
86  status=nf90_put_att(ncid, nf90_global, 'source', 'USGS GMTED2010 TOPOGRAPHY DATA')
87  if (status /= nf90_noerr) stop 6
88 
89  status=nf90_put_att(ncid, nf90_global, 'projection', 'regular lat/lon')
90  if (status /= nf90_noerr) stop 67
91 
92  status=nf90_def_var(ncid, 'lat', nf90_double, dim_j, id_lat)
93  if (status /= nf90_noerr) stop 17
94 
95  status=nf90_put_att(ncid, id_lat, 'long_name', 'grid cell center latitude')
96  if (status /= nf90_noerr) stop 10
97 
98  status=nf90_put_att(ncid, id_lat, 'units', 'degrees')
99  if (status /= nf90_noerr) stop 85
100 
101  status=nf90_def_var(ncid, 'lat_corner', nf90_double, dim_jp1, id_lat_corner)
102  if (status /= nf90_noerr) stop 37
103 
104  status=nf90_put_att(ncid, id_lat_corner, 'long_name', 'grid cell corner latitude')
105  if (status /= nf90_noerr) stop 38
106 
107  status=nf90_put_att(ncid, id_lat_corner, 'units', 'degrees')
108  if (status /= nf90_noerr) stop 86
109 
110  status=nf90_def_var(ncid, 'lon', nf90_double, dim_i, id_lon)
111  if (status /= nf90_noerr) stop 16
112 
113  status=nf90_put_att(ncid, id_lon, 'long_name', 'grid cell center longitude')
114  if (status /= nf90_noerr) stop 10
115 
116  status=nf90_put_att(ncid, id_lon, 'units', 'degrees')
117  if (status /= nf90_noerr) stop 87
118 
119  status=nf90_def_var(ncid, 'lon_corner', nf90_double, dim_ip1, id_lon_corner)
120  if (status /= nf90_noerr) stop 16
121 
122  status=nf90_put_att(ncid, id_lon_corner, 'long_name', 'grid cell corner longitude')
123  if (status /= nf90_noerr) stop 40
124 
125  status=nf90_put_att(ncid, id_lon_corner, 'units', 'degrees')
126  if (status /= nf90_noerr) stop 88
127 
128  status=nf90_def_var(ncid, 'topo', nf90_short, (/dim_i,dim_j/), id_data)
129  if (status /= nf90_noerr) stop 20
130 
131  status=nf90_put_att(ncid, id_data, 'long_name', 'topography')
132  if (status /= nf90_noerr) stop 65
133 
134  status=nf90_put_att(ncid, id_data, 'units', 'meters')
135  if (status /= nf90_noerr) stop 55
136 
137  status=nf90_enddef(ncid)
138  if (status /= nf90_noerr) stop 22
139 
140  status=nf90_put_var(ncid, id_lon, lons)
141  if (status /= nf90_noerr) stop 19
142 
143  status=nf90_put_var(ncid, id_lon_corner, lons_corner)
144  if (status /= nf90_noerr) stop 59
145 
146  status=nf90_put_var(ncid, id_lat, lats)
147  if (status /= nf90_noerr) stop 20
148 
149  status=nf90_put_var(ncid, id_lat_corner, lats_corner)
150  if (status /= nf90_noerr) stop 57
151 
152  status=nf90_put_var(ncid, id_data, topo)
153  if (status /= nf90_noerr) stop 24
154 
155  status=nf90_close(ncid)
156 
157  end program topo_netcdf