7 !! Definition of the initial surface and bedrock topography
8 !! (including gradients) and of the horizontal grid spacings dxi, deta.
9 !! For initial topography from previous simulation (read in NetCDF format).
13 !! Copyright 2009-2013 Ralf Greve
17 !! This file is part of SICOPOLIS.
19 !! SICOPOLIS is free software: you can redistribute it and/or modify
20 !! it under the terms of the GNU General Public License as published by
21 !! the Free Software Foundation, either version 3 of the License, or
22 !! (at your option) any later version.
24 !! SICOPOLIS is distributed in the hope that it will be useful,
25 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
26 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 !! GNU General Public License for more details.
29 !! You should have received a copy of the GNU General Public License
30 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
32 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
35 !> Definition of the initial surface and bedrock topography
36 !! (including gradients) and of the horizontal grid spacings dxi, deta.
37 !! For initial topography from previous simulation (read in NetCDF format).
38 !<------------------------------------------------------------------------------
47 character (len=100),
intent (in) :: anfdatname
48 real(dp),
intent (out) :: dxi, deta, z_sl
50 integer(i4b) :: i, j, kc, kt, kr, n
52 real(sp) :: time_conv, dummy_conv, z_sl_conv, &
53 h_r_conv, xi_conv(0:imax), eta_conv(0:jmax), &
54 sigma_level_c_conv(0:kcmax), sigma_level_t_conv(0:ktmax), &
55 sigma_level_r_conv(0:krmax), &
56 lambda_conv(0:jmax,0:imax), phi_conv(0:jmax,0:imax), &
57 temp_s_conv(0:jmax,0:imax), as_perp_conv(0:jmax,0:imax), &
58 zs_conv(0:jmax,0:imax), zm_conv(0:jmax,0:imax), &
59 zb_conv(0:jmax,0:imax), zl_conv(0:jmax,0:imax), &
60 h_c_conv(0:jmax,0:imax), h_t_conv(0:jmax,0:imax), &
61 h_conv(0:jmax,0:imax), &
62 q_bm_conv(0:jmax,0:imax), q_tld_conv(0:jmax,0:imax), &
63 am_perp_conv(0:jmax,0:imax), &
64 qx_conv(0:jmax,0:imax), qy_conv(0:jmax,0:imax), &
65 temp_r_conv(0:krmax,0:jmax,0:imax), &
66 vx_c_conv(0:kcmax,0:jmax,0:imax), &
67 vy_c_conv(0:kcmax,0:jmax,0:imax), &
68 vz_c_conv(0:kcmax,0:jmax,0:imax), &
69 vx_t_conv(0:ktmax,0:jmax,0:imax), &
70 vy_t_conv(0:ktmax,0:jmax,0:imax), &
71 vz_t_conv(0:ktmax,0:jmax,0:imax), &
72 temp_c_conv(0:kcmax,0:jmax,0:imax), &
73 age_c_conv(0:kcmax,0:jmax,0:imax), &
74 omega_t_conv(0:ktmax,0:jmax,0:imax), &
75 age_t_conv(0:ktmax,0:jmax,0:imax), &
76 dzs_dtau_conv(0:jmax,0:imax), dzm_dtau_conv(0:jmax,0:imax), &
77 dzb_dtau_conv(0:jmax,0:imax), dzl_dtau_conv(0:jmax,0:imax), &
78 dh_c_dtau_conv(0:jmax,0:imax), dh_t_dtau_conv(0:jmax,0:imax), &
79 dh_dtau_conv(0:jmax,0:imax), &
80 vx_b_g_conv(0:jmax,0:imax), vy_b_g_conv(0:jmax,0:imax), &
81 vz_b_conv(0:jmax,0:imax), &
82 vx_s_g_conv(0:jmax,0:imax), vy_s_g_conv(0:jmax,0:imax), &
83 vz_s_conv(0:jmax,0:imax), &
84 temp_b_conv(0:jmax,0:imax), temph_b_conv(0:jmax,0:imax), &
85 p_b_w_conv(0:jmax,0:imax), h_w_conv(0:jmax,0:imax), &
86 q_gl_g_conv(0:jmax,0:imax)
89 integer(i4b) :: ncid, ncv
95 call
check( nf90_open(anfdatpath//
'/'//trim(anfdatname), nf90_nowrite, ncid) )
97 call
check( nf90_inq_varid(ncid,
'time', ncv) )
98 call
check( nf90_get_var(ncid, ncv, time_conv) )
100 if ( nf90_inq_varid(ncid,
'delta_ts', ncv) == nf90_noerr )
then
101 call
check( nf90_get_var(ncid, ncv, dummy_conv) )
102 else if ( nf90_inq_varid(ncid,
'glac_index', ncv) == nf90_noerr )
then
103 call
check( nf90_get_var(ncid, ncv, dummy_conv) )
108 call
check( nf90_inq_varid(ncid,
'z_sl', ncv) )
109 call
check( nf90_get_var(ncid, ncv, z_sl_conv) )
111 call
check( nf90_inq_varid(ncid,
'xi', ncv) )
112 call
check( nf90_get_var(ncid, ncv, xi_conv) )
114 call
check( nf90_inq_varid(ncid,
'eta', ncv) )
115 call
check( nf90_get_var(ncid, ncv, eta_conv) )
117 call
check( nf90_inq_varid(ncid,
'sigma_level_c', ncv) )
118 call
check( nf90_get_var(ncid, ncv, sigma_level_c_conv) )
120 call
check( nf90_inq_varid(ncid,
'sigma_level_t', ncv) )
121 call
check( nf90_get_var(ncid, ncv, sigma_level_t_conv) )
123 call
check( nf90_inq_varid(ncid,
'sigma_level_r', ncv) )
124 call
check( nf90_get_var(ncid, ncv, sigma_level_r_conv) )
126 call
check( nf90_inq_varid(ncid,
'lambda', ncv) )
127 call
check( nf90_get_var(ncid, ncv, lambda_conv) )
129 call
check( nf90_inq_varid(ncid,
'phi', ncv) )
130 call
check( nf90_get_var(ncid, ncv, phi_conv) )
132 call
check( nf90_inq_varid(ncid,
'temp_s', ncv) )
133 call
check( nf90_get_var(ncid, ncv, temp_s_conv) )
135 call
check( nf90_inq_varid(ncid,
'as_perp', ncv) )
136 call
check( nf90_get_var(ncid, ncv, as_perp_conv) )
138 call
check( nf90_inq_varid(ncid,
'maske', ncv) )
139 call
check( nf90_get_var(ncid, ncv, maske) )
141 call
check( nf90_inq_varid(ncid,
'n_cts', ncv) )
142 call
check( nf90_get_var(ncid, ncv, n_cts) )
144 call
check( nf90_inq_varid(ncid,
'zs', ncv) )
145 call
check( nf90_get_var(ncid, ncv, zs_conv) )
147 call
check( nf90_inq_varid(ncid,
'zm', ncv) )
148 call
check( nf90_get_var(ncid, ncv, zm_conv) )
150 call
check( nf90_inq_varid(ncid,
'zb', ncv) )
151 call
check( nf90_get_var(ncid, ncv, zb_conv) )
153 call
check( nf90_inq_varid(ncid,
'zl', ncv) )
154 call
check( nf90_get_var(ncid, ncv, zl_conv) )
156 call
check( nf90_inq_varid(ncid,
'H_c', ncv) )
157 call
check( nf90_get_var(ncid, ncv, h_c_conv) )
159 call
check( nf90_inq_varid(ncid,
'H_t', ncv) )
160 call
check( nf90_get_var(ncid, ncv, h_t_conv) )
162 call
check( nf90_inq_varid(ncid,
'H', ncv) )
163 call
check( nf90_get_var(ncid, ncv, h_conv) )
165 call
check( nf90_inq_varid(ncid,
'H_R', ncv) )
166 call
check( nf90_get_var(ncid, ncv, h_r_conv) )
168 call
check( nf90_inq_varid(ncid,
'vx_c', ncv) )
169 call
check( nf90_get_var(ncid, ncv, vx_c_conv) )
171 call
check( nf90_inq_varid(ncid,
'vy_c', ncv) )
172 call
check( nf90_get_var(ncid, ncv, vy_c_conv) )
174 call
check( nf90_inq_varid(ncid,
'vz_c', ncv) )
175 call
check( nf90_get_var(ncid, ncv, vz_c_conv) )
177 call
check( nf90_inq_varid(ncid,
'vx_t', ncv) )
178 call
check( nf90_get_var(ncid, ncv, vx_t_conv) )
180 call
check( nf90_inq_varid(ncid,
'vy_t', ncv) )
181 call
check( nf90_get_var(ncid, ncv, vy_t_conv) )
183 call
check( nf90_inq_varid(ncid,
'vz_t', ncv) )
184 call
check( nf90_get_var(ncid, ncv, vz_t_conv) )
186 call
check( nf90_inq_varid(ncid,
'temp_c', ncv) )
187 call
check( nf90_get_var(ncid, ncv, temp_c_conv) )
189 call
check( nf90_inq_varid(ncid,
'omega_t', ncv) )
190 call
check( nf90_get_var(ncid, ncv, omega_t_conv) )
192 call
check( nf90_inq_varid(ncid,
'temp_r', ncv) )
193 call
check( nf90_get_var(ncid, ncv, temp_r_conv) )
195 call
check( nf90_inq_varid(ncid,
'Q_bm', ncv) )
196 call
check( nf90_get_var(ncid, ncv, q_bm_conv) )
198 call
check( nf90_inq_varid(ncid,
'Q_tld', ncv) )
199 call
check( nf90_get_var(ncid, ncv, q_tld_conv) )
201 call
check( nf90_inq_varid(ncid,
'am_perp', ncv) )
202 call
check( nf90_get_var(ncid, ncv, am_perp_conv) )
204 call
check( nf90_inq_varid(ncid,
'qx', ncv) )
205 call
check( nf90_get_var(ncid, ncv, qx_conv) )
207 call
check( nf90_inq_varid(ncid,
'qy', ncv) )
208 call
check( nf90_get_var(ncid, ncv, qy_conv) )
210 call
check( nf90_inq_varid(ncid,
'age_c', ncv) )
211 call
check( nf90_get_var(ncid, ncv, age_c_conv) )
213 call
check( nf90_inq_varid(ncid,
'age_t', ncv) )
214 call
check( nf90_get_var(ncid, ncv, age_t_conv) )
216 call
check( nf90_inq_varid(ncid,
'dzs_dtau', ncv) )
217 call
check( nf90_get_var(ncid, ncv, dzs_dtau_conv) )
219 call
check( nf90_inq_varid(ncid,
'dzm_dtau', ncv) )
220 call
check( nf90_get_var(ncid, ncv, dzm_dtau_conv) )
222 call
check( nf90_inq_varid(ncid,
'dzb_dtau', ncv) )
223 call
check( nf90_get_var(ncid, ncv, dzb_dtau_conv) )
225 call
check( nf90_inq_varid(ncid,
'dzl_dtau', ncv) )
226 call
check( nf90_get_var(ncid, ncv, dzl_dtau_conv) )
228 call
check( nf90_inq_varid(ncid,
'dH_c_dtau', ncv) )
229 call
check( nf90_get_var(ncid, ncv, dh_c_dtau_conv) )
231 call
check( nf90_inq_varid(ncid,
'dH_t_dtau', ncv) )
232 call
check( nf90_get_var(ncid, ncv, dh_t_dtau_conv) )
234 call
check( nf90_inq_varid(ncid,
'dH_dtau', ncv) )
235 call
check( nf90_get_var(ncid, ncv, dh_dtau_conv) )
237 if ( nf90_inq_varid(ncid,
'vx_b_g', ncv) == nf90_noerr )
then
238 call
check( nf90_get_var(ncid, ncv, vx_b_g_conv) )
243 if ( nf90_inq_varid(ncid,
'vy_b_g', ncv) == nf90_noerr )
then
244 call
check( nf90_get_var(ncid, ncv, vy_b_g_conv) )
249 if ( nf90_inq_varid(ncid,
'vz_b', ncv) == nf90_noerr )
then
250 call
check( nf90_get_var(ncid, ncv, vz_b_conv) )
255 if ( nf90_inq_varid(ncid,
'vx_s_g', ncv) == nf90_noerr )
then
256 call
check( nf90_get_var(ncid, ncv, vx_s_g_conv) )
261 if ( nf90_inq_varid(ncid,
'vy_s_g', ncv) == nf90_noerr )
then
262 call
check( nf90_get_var(ncid, ncv, vy_s_g_conv) )
267 if ( nf90_inq_varid(ncid,
'vz_s', ncv) == nf90_noerr )
then
268 call
check( nf90_get_var(ncid, ncv, vz_s_conv) )
273 if ( nf90_inq_varid(ncid,
'temp_b', ncv) == nf90_noerr )
then
274 call
check( nf90_get_var(ncid, ncv, temp_b_conv) )
279 if ( nf90_inq_varid(ncid,
'temph_b', ncv) == nf90_noerr )
then
280 call
check( nf90_get_var(ncid, ncv, temph_b_conv) )
285 if ( nf90_inq_varid(ncid,
'p_b_w', ncv) == nf90_noerr )
then
286 call
check( nf90_get_var(ncid, ncv, p_b_w_conv) )
291 if ( nf90_inq_varid(ncid,
'H_w', ncv) == nf90_noerr )
then
292 call
check( nf90_get_var(ncid, ncv, h_w_conv) )
297 if ( nf90_inq_varid(ncid,
'q_gl_g', ncv) == nf90_noerr )
then
298 call
check( nf90_get_var(ncid, ncv, q_gl_g_conv) )
306 write(6,
'(/1x,a)')
'topography3_nc: End-of-file condition while reading *.nc.'
307 write(6,
'(1x,a)')
' Some variables will be undefined.'
311 call
check( nf90_close(ncid) )
315 z_sl =
real(z_sl_conv,dp)
317 h_r =
real(h_r_conv,dp)
322 xi(i) =
real(xi_conv(i),dp)
323 eta(j) =
real(eta_conv(j),dp)
324 zs(j,i) =
real(zs_conv(j,i),dp)
325 zm(j,i) =
real(zm_conv(j,i),dp)
326 zb(j,i) =
real(zb_conv(j,i),dp)
327 zl(j,i) =
real(zl_conv(j,i),dp)
328 h_c(j,i) =
real(H_c_conv(j,i),dp)
329 h_t(j,i) =
real(H_t_conv(j,i),dp)
330 q_bm(j,i) =
real(Q_bm_conv(j,i),dp)
331 q_tld(j,i) =
real(Q_tld_conv(j,i),dp)
332 am_perp(j,i) =
real(am_perp_conv(j,i),dp)
333 qx(j,i) =
real(qx_conv(j,i),dp)
334 qy(j,i) =
real(qy_conv(j,i),dp)
335 dzs_dtau(j,i) =
real(dzs_dtau_conv(j,i),dp)
336 dzm_dtau(j,i) =
real(dzm_dtau_conv(j,i),dp)
337 dzb_dtau(j,i) =
real(dzb_dtau_conv(j,i),dp)
338 dzl_dtau(j,i) =
real(dzl_dtau_conv(j,i),dp)
339 dh_c_dtau(j,i) =
real(dH_c_dtau_conv(j,i),dp)
340 dh_t_dtau(j,i) =
real(dH_t_dtau_conv(j,i),dp)
341 vx_b_g(j,i) =
real(vx_b_g_conv(j,i),dp)
342 vy_b_g(j,i) =
real(vy_b_g_conv(j,i),dp)
343 vz_b(j,i) =
real(vz_b_conv(j,i),dp)
344 vx_s_g(j,i) =
real(vx_s_g_conv(j,i),dp)
345 vy_s_g(j,i) =
real(vy_s_g_conv(j,i),dp)
346 vz_s(j,i) =
real(vz_s_conv(j,i),dp)
347 temp_b(j,i) =
real(temp_b_conv(j,i),dp)
348 temph_b(j,i) =
real(temph_b_conv(j,i),dp)
349 p_b_w(j,i) =
real(p_b_w_conv(j,i),dp)
350 h_w(j,i) =
real(H_w_conv(j,i),dp)
351 q_gl_g(j,i) =
real(q_gl_g_conv(j,i),dp)
354 temp_r(kr,j,i) =
real(temp_r_conv(kr,j,i),dp)
358 vx_t(kt,j,i) =
real(vx_t_conv(kt,j,i),dp)
359 vy_t(kt,j,i) =
real(vy_t_conv(kt,j,i),dp)
360 vz_t(kt,j,i) =
real(vz_t_conv(kt,j,i),dp)
361 omega_t(kt,j,i) =
real(omega_t_conv(kt,j,i),dp)
362 age_t(kt,j,i) =
real(age_t_conv(kt,j,i),dp)
366 vx_c(kc,j,i) =
real(vx_c_conv(kc,j,i),dp)
367 vy_c(kc,j,i) =
real(vy_c_conv(kc,j,i),dp)
368 vz_c(kc,j,i) =
real(vz_c_conv(kc,j,i),dp)
369 temp_c(kc,j,i) =
real(temp_c_conv(kc,j,i),dp)
370 age_c(kc,j,i) =
real(age_c_conv(kc,j,i),dp)
378 open(23, iostat=ios, &
379 file=inpath//
'/tibet/'//zl0_file, &
380 recl=16384, status=
'old')
382 if (ios /= 0) stop
' topography3_nc: Error when opening the zl0 file!'
384 do n=1, 6;
read(23,
'(a)') ch_dummy;
end do
387 read(23,*) (zl0(j,i), i=0,imax)
390 close(23, status=
'keep')
394 dxi = dlambda *pi_180
399 call
geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
417 area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
424 !> NetCDF error capturing.
425 !<------------------------------------------------------------------------------
427 integer(i4b),
intent (in) :: status
428 if(status /= nf90_noerr)
then
429 write(6,
'(a)') trim(nf90_strerror(status))
430 stop
' topography3_nc: Stopped due to netcdf error!'