7 !! Calculation of topography gradients on the staggered grid and on the grid
8 !! points (the latter by fourth-order discretization).
9 !! Length rescaling with the corresponding components of the metric tensor is
14 !! Copyright 2009-2013 Ralf Greve
18 !! This file is part of SICOPOLIS.
20 !! SICOPOLIS is free software: you can redistribute it and/or modify
21 !! it under the terms of the GNU General Public License as published by
22 !! the Free Software Foundation, either version 3 of the License, or
23 !! (at your option) any later version.
25 !! SICOPOLIS is distributed in the hope that it will be useful,
26 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
27 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 !! GNU General Public License for more details.
30 !! You should have received a copy of the GNU General Public License
31 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
33 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
36 !> Calculation of topography gradients on the staggered grid and on the grid
37 !! points (the latter by fourth-order discretization).
38 !! Length rescaling with the corresponding components of the metric tensor is
40 !<------------------------------------------------------------------------------
48 integer(i4b) :: n_switch
49 real(dp) :: dxi, deta, dxi_inv, deta_inv, dxi12_inv, deta12_inv
50 real(dp) :: zs_help(0:jmax,0:imax), zm_help(0:jmax,0:imax), &
51 zb_help(0:jmax,0:imax)
54 deta_inv = 1.0_dp/deta
56 dxi12_inv = 1.0_dp/(12.0_dp*dxi)
57 deta12_inv = 1.0_dp/(12.0_dp*deta)
61 if (n_switch.eq.1)
then
65 zs_help(j,i) = zs(j,i)
66 zm_help(j,i) = zm(j,i)
67 zb_help(j,i) = zb(j,i)
71 else if (n_switch.eq.2)
then
75 zs_help(j,i) = zs_neu(j,i)
76 zm_help(j,i) = zm_neu(j,i)
77 zb_help(j,i) = zb_neu(j,i)
82 stop
' topograd_2: Wrong value for n_switch!'
91 dzs_dxi(j,i) = (zs_help(j,i+1)-zs_help(j,i))*dxi_inv &
93 dzm_dxi(j,i) = (zm_help(j,i+1)-zm_help(j,i))*dxi_inv &
95 dzb_dxi(j,i) = (zb_help(j,i+1)-zb_help(j,i))*dxi_inv &
97 dh_c_dxi(j,i) = dzs_dxi(j,i)-dzm_dxi(j,i)
98 dh_t_dxi(j,i) = dzm_dxi(j,i)-dzb_dxi(j,i)
106 dzs_deta(j,i) = (zs_help(j+1,i)-zs_help(j,i))*deta_inv &
108 dzm_deta(j,i) = (zm_help(j+1,i)-zm_help(j,i))*deta_inv &
110 dzb_deta(j,i) = (zb_help(j+1,i)-zb_help(j,i))*deta_inv &
112 dh_c_deta(j,i) = dzs_deta(j,i)-dzm_deta(j,i)
113 dh_t_deta(j,i) = dzm_deta(j,i)-dzb_deta(j,i)
124 = ( -zs_help(j,i+2) + 8.0_dp*zs_help(j,i+1) &
125 -8.0_dp*zs_help(j,i-1) + zs_help(j,i-2) ) &
129 = ( -zm_help(j,i+2) + 8.0_dp*zm_help(j,i+1) &
130 -8.0_dp*zm_help(j,i-1) + zm_help(j,i-2) ) &
134 = ( -zb_help(j,i+2) + 8.0_dp*zb_help(j,i+1) &
135 -8.0_dp*zb_help(j,i-1) + zb_help(j,i-2) ) &
138 dh_c_dxi_g(j,i) = dzs_dxi_g(j,i)-dzm_dxi_g(j,i)
139 dh_t_dxi_g(j,i) = dzm_dxi_g(j,i)-dzb_dxi_g(j,i)
145 dzs_dxi_g(j,0) = (zs_help(j,1)-zs_help(j,0))*dxi_inv &
147 dzm_dxi_g(j,0) = (zm_help(j,1)-zm_help(j,0))*dxi_inv &
149 dzb_dxi_g(j,0) = (zb_help(j,1)-zb_help(j,0))*dxi_inv &
151 dh_c_dxi_g(j,0) = dzs_dxi_g(j,0)-dzm_dxi_g(j,0)
152 dh_t_dxi_g(j,0) = dzm_dxi_g(j,0)-dzb_dxi_g(j,0)
154 dzs_dxi_g(j,1) = (zs_help(j,2)-zs_help(j,0)) &
157 dzm_dxi_g(j,1) = (zm_help(j,2)-zm_help(j,0)) &
160 dzb_dxi_g(j,1) = (zb_help(j,2)-zb_help(j,0)) &
163 dh_c_dxi_g(j,1) = dzs_dxi_g(j,1)-dzm_dxi_g(j,1)
164 dh_t_dxi_g(j,1) = dzm_dxi_g(j,1)-dzb_dxi_g(j,1)
166 dzs_dxi_g(j,imax-1) = (zs_help(j,imax)-zs_help(j,imax-2)) &
168 *insq_g11_g(j,imax-1)
169 dzm_dxi_g(j,imax-1) = (zm_help(j,imax)-zm_help(j,imax-2)) &
171 *insq_g11_g(j,imax-1)
172 dzb_dxi_g(j,imax-1) = (zb_help(j,imax)-zb_help(j,imax-2)) &
174 *insq_g11_g(j,imax-1)
175 dh_c_dxi_g(j,imax-1) = dzs_dxi_g(j,imax-1) &
177 dh_t_dxi_g(j,imax-1) = dzm_dxi_g(j,imax-1) &
180 dzs_dxi_g(j,imax) = (zs_help(j,imax)-zs_help(j,imax-1)) &
183 dzm_dxi_g(j,imax) = (zm_help(j,imax)-zm_help(j,imax-1)) &
186 dzb_dxi_g(j,imax) = (zb_help(j,imax)-zb_help(j,imax-1)) &
189 dh_c_dxi_g(j,imax) = dzs_dxi_g(j,imax)-dzm_dxi_g(j,imax)
190 dh_t_dxi_g(j,imax) = dzm_dxi_g(j,imax)-dzb_dxi_g(j,imax)
199 = ( -zs_help(j+2,i) + 8.0_dp*zs_help(j+1,i) &
200 -8.0_dp*zs_help(j-1,i) + zs_help(j-2,i) ) &
204 = ( -zm_help(j+2,i) + 8.0_dp*zm_help(j+1,i) &
205 -8.0_dp*zm_help(j-1,i) + zm_help(j-2,i) ) &
209 = ( -zb_help(j+2,i) + 8.0_dp*zb_help(j+1,i) &
210 -8.0_dp*zb_help(j-1,i) + zb_help(j-2,i) ) &
213 dh_c_deta_g(j,i) = dzs_deta_g(j,i)-dzm_deta_g(j,i)
214 dh_t_deta_g(j,i) = dzm_deta_g(j,i)-dzb_deta_g(j,i)
220 dzs_deta_g(0,i) = (zs_help(1,i)-zs_help(0,i))*deta_inv &
222 dzm_deta_g(0,i) = (zm_help(1,i)-zm_help(0,i))*deta_inv &
224 dzb_deta_g(0,i) = (zb_help(1,i)-zb_help(0,i))*deta_inv &
226 dh_c_deta_g(0,i) = dzs_deta_g(0,i)-dzm_deta_g(0,i)
227 dh_t_deta_g(0,i) = dzm_deta_g(0,i)-dzb_deta_g(0,i)
229 dzs_deta_g(1,i) = (zs_help(2,i)-zs_help(0,i)) &
232 dzm_deta_g(1,i) = (zm_help(2,i)-zm_help(0,i)) &
235 dzb_deta_g(1,i) = (zb_help(2,i)-zb_help(0,i)) &
238 dh_c_deta_g(1,i) = dzs_deta_g(1,i)-dzm_deta_g(1,i)
239 dh_t_deta_g(1,i) = dzm_deta_g(1,i)-dzb_deta_g(1,i)
241 dzs_deta_g(jmax-1,i) = (zs_help(jmax,i)-zs_help(jmax-2,i)) &
243 *insq_g22_g(jmax-1,i)
244 dzm_deta_g(jmax-1,i) = (zm_help(jmax,i)-zm_help(jmax-2,i)) &
246 *insq_g22_g(jmax-1,i)
247 dzb_deta_g(jmax-1,i) = (zb_help(jmax,i)-zb_help(jmax-2,i)) &
249 *insq_g22_g(jmax-1,i)
250 dh_c_deta_g(jmax-1,i) = dzs_deta_g(jmax-1,i) &
251 -dzm_deta_g(jmax-1,i)
252 dh_t_deta_g(jmax-1,i) = dzm_deta_g(jmax-1,i) &
253 -dzb_deta_g(jmax-1,i)
255 dzs_deta_g(jmax,i) = (zs_help(jmax,i)-zs_help(jmax-1,i)) &
258 dzm_deta_g(jmax,i) = (zm_help(jmax,i)-zm_help(jmax-1,i)) &
261 dzb_deta_g(jmax,i) = (zb_help(jmax,i)-zb_help(jmax-1,i)) &
264 dh_c_deta_g(jmax,i) = dzs_deta_g(jmax,i)-dzm_deta_g(jmax,i)
265 dh_t_deta_g(jmax,i) = dzm_deta_g(jmax,i)-dzb_deta_g(jmax,i)