59 integer(i4b),
intent(in) :: n_switch
60 real(dp),
intent(in) :: dxi, deta
63 real(dp) :: dxi_inv, deta_inv
64 real(dp),
dimension(0:JMAX,0:IMAX) :: zs_aux, zm_aux, zb_aux
67 deta_inv = 1.0_dp/deta
71 if (n_switch == 1)
then 75 else if (n_switch == 2)
then 80 stop
' >>> topograd_1: Wrong value for n_switch!' 89 dzs_dxi(j,i) = (zs_aux(j,i+1)-zs_aux(j,i))*dxi_inv &
91 dzm_dxi(j,i) = (zm_aux(j,i+1)-zm_aux(j,i))*dxi_inv &
93 dzb_dxi(j,i) = (zb_aux(j,i+1)-zb_aux(j,i))*dxi_inv &
104 dzs_deta(j,i) = (zs_aux(j+1,i)-zs_aux(j,i))*deta_inv &
106 dzm_deta(j,i) = (zm_aux(j+1,i)-zm_aux(j,i))*deta_inv &
108 dzb_deta(j,i) = (zb_aux(j+1,i)-zb_aux(j,i))*deta_inv &
121 dzs_dxi_g(j,i) = (zs_aux(j,i+1)-zs_aux(j,i-1))*0.5_dp*dxi_inv &
123 dzm_dxi_g(j,i) = (zm_aux(j,i+1)-zm_aux(j,i-1))*0.5_dp*dxi_inv &
125 dzb_dxi_g(j,i) = (zb_aux(j,i+1)-zb_aux(j,i-1))*0.5_dp*dxi_inv &
133 dzs_dxi_g(j,0) = (zs_aux(j,1)-zs_aux(j,0))*dxi_inv &
135 dzm_dxi_g(j,0) = (zm_aux(j,1)-zm_aux(j,0))*dxi_inv &
137 dzb_dxi_g(j,0) = (zb_aux(j,1)-zb_aux(j,0))*dxi_inv &
141 dzs_dxi_g(j,imax) = (zs_aux(j,imax)-zs_aux(j,imax-1)) &
144 dzm_dxi_g(j,imax) = (zm_aux(j,imax)-zm_aux(j,imax-1)) &
147 dzb_dxi_g(j,imax) = (zb_aux(j,imax)-zb_aux(j,imax-1)) &
158 dzs_deta_g(j,i) = (zs_aux(j+1,i)-zs_aux(j-1,i)) &
161 dzm_deta_g(j,i) = (zm_aux(j+1,i)-zm_aux(j-1,i)) &
164 dzb_deta_g(j,i) = (zb_aux(j+1,i)-zb_aux(j-1,i)) &
173 dzs_deta_g(0,i) = (zs_aux(1,i)-zs_aux(0,i))*deta_inv &
175 dzm_deta_g(0,i) = (zm_aux(1,i)-zm_aux(0,i))*deta_inv &
177 dzb_deta_g(0,i) = (zb_aux(1,i)-zb_aux(0,i))*deta_inv &
181 dzs_deta_g(jmax,i) = (zs_aux(jmax,i)-zs_aux(jmax-1,i)) &
184 dzm_deta_g(jmax,i) = (zm_aux(jmax,i)-zm_aux(jmax-1,i)) &
187 dzb_deta_g(jmax,i) = (zb_aux(jmax,i)-zb_aux(jmax-1,i)) &
204 integer(i4b),
intent(in) :: n_switch
205 real(dp),
intent(in) :: dxi, deta
208 real(dp) :: dxi_inv, deta_inv, dxi12_inv, deta12_inv
209 real(dp),
dimension(0:JMAX,0:IMAX) :: zs_aux, zm_aux, zb_aux
212 deta_inv = 1.0_dp/deta
214 dxi12_inv = 1.0_dp/(12.0_dp*dxi)
215 deta12_inv = 1.0_dp/(12.0_dp*deta)
219 if (n_switch == 1)
then 223 else if (n_switch == 2)
then 228 stop
' >>> topograd_2: Wrong value for n_switch!' 237 dzs_dxi(j,i) = (zs_aux(j,i+1)-zs_aux(j,i))*dxi_inv &
239 dzm_dxi(j,i) = (zm_aux(j,i+1)-zm_aux(j,i))*dxi_inv &
241 dzb_dxi(j,i) = (zb_aux(j,i+1)-zb_aux(j,i))*dxi_inv &
252 dzs_deta(j,i) = (zs_aux(j+1,i)-zs_aux(j,i))*deta_inv &
254 dzm_deta(j,i) = (zm_aux(j+1,i)-zm_aux(j,i))*deta_inv &
256 dzb_deta(j,i) = (zb_aux(j+1,i)-zb_aux(j,i))*deta_inv &
270 = ( -zs_aux(j,i+2) + 8.0_dp*zs_aux(j,i+1) &
271 -8.0_dp*zs_aux(j,i-1) + zs_aux(j,i-2) ) &
275 = ( -zm_aux(j,i+2) + 8.0_dp*zm_aux(j,i+1) &
276 -8.0_dp*zm_aux(j,i-1) + zm_aux(j,i-2) ) &
280 = ( -zb_aux(j,i+2) + 8.0_dp*zb_aux(j,i+1) &
281 -8.0_dp*zb_aux(j,i-1) + zb_aux(j,i-2) ) &
291 dzs_dxi_g(j,0) = (zs_aux(j,1)-zs_aux(j,0))*dxi_inv &
293 dzm_dxi_g(j,0) = (zm_aux(j,1)-zm_aux(j,0))*dxi_inv &
295 dzb_dxi_g(j,0) = (zb_aux(j,1)-zb_aux(j,0))*dxi_inv &
300 dzs_dxi_g(j,1) = (zs_aux(j,2)-zs_aux(j,0)) &
303 dzm_dxi_g(j,1) = (zm_aux(j,2)-zm_aux(j,0)) &
306 dzb_dxi_g(j,1) = (zb_aux(j,2)-zb_aux(j,0)) &
312 dzs_dxi_g(j,imax-1) = (zs_aux(j,imax)-zs_aux(j,imax-2)) &
315 dzm_dxi_g(j,imax-1) = (zm_aux(j,imax)-zm_aux(j,imax-2)) &
318 dzb_dxi_g(j,imax-1) = (zb_aux(j,imax)-zb_aux(j,imax-2)) &
326 dzs_dxi_g(j,imax) = (zs_aux(j,imax)-zs_aux(j,imax-1)) &
329 dzm_dxi_g(j,imax) = (zm_aux(j,imax)-zm_aux(j,imax-1)) &
332 dzb_dxi_g(j,imax) = (zb_aux(j,imax)-zb_aux(j,imax-1)) &
345 = ( -zs_aux(j+2,i) + 8.0_dp*zs_aux(j+1,i) &
346 -8.0_dp*zs_aux(j-1,i) + zs_aux(j-2,i) ) &
350 = ( -zm_aux(j+2,i) + 8.0_dp*zm_aux(j+1,i) &
351 -8.0_dp*zm_aux(j-1,i) + zm_aux(j-2,i) ) &
355 = ( -zb_aux(j+2,i) + 8.0_dp*zb_aux(j+1,i) &
356 -8.0_dp*zb_aux(j-1,i) + zb_aux(j-2,i) ) &
366 dzs_deta_g(0,i) = (zs_aux(1,i)-zs_aux(0,i))*deta_inv &
368 dzm_deta_g(0,i) = (zm_aux(1,i)-zm_aux(0,i))*deta_inv &
370 dzb_deta_g(0,i) = (zb_aux(1,i)-zb_aux(0,i))*deta_inv &
387 dzs_deta_g(jmax-1,i) = (zs_aux(jmax,i)-zs_aux(jmax-2,i)) &
390 dzm_deta_g(jmax-1,i) = (zm_aux(jmax,i)-zm_aux(jmax-2,i)) &
393 dzb_deta_g(jmax-1,i) = (zb_aux(jmax,i)-zb_aux(jmax-2,i)) &
401 dzs_deta_g(jmax,i) = (zs_aux(jmax,i)-zs_aux(jmax-1,i)) &
404 dzm_deta_g(jmax,i) = (zm_aux(jmax,i)-zm_aux(jmax-1,i)) &
407 dzb_deta_g(jmax,i) = (zb_aux(jmax,i)-zb_aux(jmax-1,i)) &
real(dp), dimension(0:jmax, 0:imax) insq_g22_sgy
insq_g22_sgy(j,i): Inverse square root of g22, at (i,j+1/2)
real(dp), dimension(0:jmax, 0:imax) dh_c_deta
dH_c_deta(j,i): Derivative of H_c by eta (at i,j+1/2)
real(dp), dimension(0:jmax, 0:imax) insq_g11_sgx
insq_g11_sgx(j,i): Inverse square root of g11, at (i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) insq_g22_g
insq_g22_g(j,i): Inverse square root of g22 on grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dh_c_dxi_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dh_c_dxi
dH_c_dxi(j,i): Derivative of H_c by xi (at i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) dzs_deta_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dzm_deta
dzm_deta(j,i): Derivative of zm by eta (at i,j+1/2)
subroutine topograd_1(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by secon...
real(dp), dimension(0:jmax, 0:imax) dzs_dxi
dzs_dxi(j,i): Derivative of zs by xi (at i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) dzb_dxi
dzb_dxi(j,i): Derivative of zb by xi (at i+1/2,j)
Declarations of global variables for SICOPOLIS (for the ANT domain).
real(dp), dimension(0:jmax, 0:imax) dh_t_deta
dH_t_deta(j,i): Derivative of H_t by eta (at i,j+1/2)
Declarations of kind types for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) zs
zs(j,i): Coordinate z of the surface topography
real(dp), dimension(0:jmax, 0:imax) dh_c_deta_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
subroutine topograd_2(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by fourt...
real(dp), dimension(0:jmax, 0:imax) dzb_deta_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) zs_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) dzs_deta
dzs_deta(j,i): Derivative of zs by eta (at i,j+1/2)
real(dp), dimension(0:jmax, 0:imax) zm
zm(j,i): Coordinate z of the bottom of the upper (kc) ice domain = top of the lower (kt) ice domain (...
real(dp), dimension(0:jmax, 0:imax) dzb_deta
dzb_deta(j,i): Derivative of zb by eta (at i,j+1/2)
real(dp), dimension(0:jmax, 0:imax) dh_t_deta_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dh_t_dxi_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dzm_dxi_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dzm_dxi
dzm_dxi(j,i): Derivative of zm by xi (at i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) dzs_dxi_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
Calculation of topography gradients on the staggered grid and on the grid points (including length re...
real(dp), dimension(0:jmax, 0:imax) dzm_deta_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) insq_g11_g
insq_g11_g(j,i): Inverse square root of g11 on grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) zb_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) zm_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) dh_t_dxi
dH_t_dxi(j,i): Derivative of H_t by xi (at i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) zb
zb(j,i): Coordinate z of the ice base
Declarations of global variables for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) dzb_dxi_g
(.)_g(j,i): Staggered-grid quantity (.) interpolated to grid point (i,j)