orog_mask_tools 1.14.0
Loading...
Searching...
No Matches
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="/scratch3/NCEPDEV/global/role.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