7 !! Computation of the shear stresses txz, tyz, the effective shear stress
8 !! sigma, the depth-averaged fluidity flui_ave_sia, the horizontal
9 !! velocity vx, vy and the horizontal volume flux qx, qy in the shallow ice
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 !> Computation of the shear stresses txz, tyz, the effective shear stress
37 !! sigma, the depth-averaged fluidity flui_ave_sia, the horizontal
38 !! velocity vx, vy and the horizontal volume flux qx, qy in the shallow ice
40 !<------------------------------------------------------------------------------
48 real(dp),
intent(in) :: dzeta_c, dzeta_t
50 integer(i4b) :: i, j, kc, kt
51 real(dp) :: avxy3(0:kcmax), aqxy1(0:kcmax)
52 real(dp) :: ctxyz1(0:kcmax,0:jmax,0:imax), &
53 ctxyz2(0:ktmax,0:jmax,0:imax)
54 real(dp) :: flui_t(0:ktmax), flui_c(0:kcmax)
55 real(dp) :: cflui0(0:ktmax), cflui1(0:kcmax)
56 real(dp) :: cvxy2(0:ktmax), cvxy3(0:kcmax)
57 real(dp) :: cqxy0(0:ktmax), cqxy1(0:kcmax)
64 avxy3(kc) = deform*eaz_c(kc)/(ea-1.0_dp)*dzeta_c
65 aqxy1(kc) = deform/(ea-1.0_dp)*eaz_c(kc)*dzeta_c
75 if (maske(j,i) == 0)
then
78 ctxyz1(kc,j,i) = rho*g*h_c(j,i)*(1.0_dp-eaz_c_quotient(kc))
81 if (n_cts(j,i) == 1)
then
84 ctxyz2(kt,j,i) = rho*g*h_t(j,i)*(1.0_dp-zeta_t(kt))
90 ctxyz2(kt,j,i) = 0.0_dp
98 ctxyz1(kc,j,i) = 0.0_dp
102 ctxyz2(kt,j,i) = 0.0_dp
116 txz_c(kc,j,i) = -0.5_dp*(ctxyz1(kc,j,i)+ctxyz1(kc,j,i+1)) &
121 txz_t(kt,j,i) = txz_c(0,j,i) &
122 -0.5_dp*(ctxyz2(kt,j,i)+ctxyz2(kt,j,i+1)) &
135 tyz_c(kc,j,i) = -0.5_dp*(ctxyz1(kc,j,i)+ctxyz1(kc,j+1,i)) &
140 tyz_t(kt,j,i) = tyz_c(0,j,i) &
141 -0.5_dp*(ctxyz2(kt,j,i)+ctxyz2(kt,j+1,i)) &
154 sigma_c(kc,j,i) = ctxyz1(kc,j,i) &
155 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
159 sigma_t(kt,j,i) = sigma_c(0,j,i) &
161 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
173 if (maske(j,i) == 0)
then
178 flui_t(kt) = 2.0_dp &
181 *
creep(sigma_t(kt,j,i))
182 cflui0(kt) = h_t(j,i)*flui_t(kt)*dzeta_t
186 flui_c(kc) = 2.0_dp &
188 *
ratefac(temp_c(kc,j,i), temp_c_m(kc,j,i)) &
189 *
creep(sigma_c(kc,j,i))
190 cflui1(kc) = aqxy1(kc)*h_c(j,i)*flui_c(kc)
195 flui_ave_sia(j,i) = 0.0_dp
197 if (n_cts(j,i) == 1)
then
200 flui_ave_sia(j,i) = flui_ave_sia(j,i)+0.5_dp*(cflui0(kt+1)+cflui0(kt))
206 flui_ave_sia(j,i) = flui_ave_sia(j,i)+0.5_dp*(cflui1(kc+1)+cflui1(kc))
209 flui_ave_sia(j,i) = flui_ave_sia(j,i)/(h_c(j,i)+h_t(j,i))
213 flui_ave_sia(j,i) = 0.0_dp
226 if (maske(j,i) == 0)
then
231 cvxy2(kt) = 2.0_dp*h_t(j,i) &
234 *
creep(sigma_t(kt,j,i)) &
235 *(ctxyz1(0,j,i)+ctxyz2(kt,j,i)) &
240 cvxy3(kc) = 2.0_dp*avxy3(kc)*h_c(j,i) &
242 *
ratefac(temp_c(kc,j,i), temp_c_m(kc,j,i)) &
243 *
creep(sigma_c(kc,j,i)) &
249 if (n_cts(j,i) == -1)
then
252 d_help_t(kt,j,i) = d_help_b(j,i)
255 d_help_c(0,j,i) = d_help_t(ktmax,j,i)
258 d_help_c(kc+1,j,i) = d_help_c(kc,j,i) &
259 +0.5_dp*(cvxy3(kc+1)+cvxy3(kc))
262 else if (n_cts(j,i) == 0)
then
265 d_help_t(kt,j,i) = d_help_b(j,i)
268 d_help_c(0,j,i) = d_help_t(ktmax,j,i)
271 d_help_c(kc+1,j,i) = d_help_c(kc,j,i) &
272 +0.5_dp*(cvxy3(kc+1)+cvxy3(kc))
277 d_help_t(0,j,i) = d_help_b(j,i)
280 d_help_t(kt+1,j,i) = d_help_t(kt,j,i) &
281 +0.5_dp*(cvxy2(kt+1)+cvxy2(kt))
284 d_help_c(0,j,i) = d_help_t(ktmax,j,i)
287 d_help_c(kc+1,j,i) = d_help_c(kc,j,i) &
288 +0.5_dp*(cvxy3(kc+1)+cvxy3(kc))
296 d_help_t(kt,j,i) = 0.0_dp
300 d_help_c(kc,j,i) = 0.0_dp
314 vx_t(kt,j,i) = -0.5_dp*(d_help_t(kt,j,i)+d_help_t(kt,j,i+1)) &
319 vx_c(kc,j,i) = -0.5_dp*(d_help_c(kc,j,i)+d_help_c(kc,j,i+1)) &
332 vy_t(kt,j,i) = -0.5_dp*(d_help_t(kt,j,i)+d_help_t(kt,j+1,i)) &
337 vy_c(kc,j,i) = -0.5_dp*(d_help_c(kc,j,i)+d_help_c(kc,j+1,i)) &
349 vx_s_g(j,i) = -d_help_c(kcmax,j,i)*dzs_dxi_g(j,i)
350 vy_s_g(j,i) = -d_help_c(kcmax,j,i)*dzs_deta_g(j,i)
357 vh_max = vh_max/year_sec
361 vx_s_g(j,i) = max(vx_s_g(j,i), -vh_max)
362 vx_s_g(j,i) = min(vx_s_g(j,i), vh_max)
363 vy_s_g(j,i) = max(vy_s_g(j,i), -vh_max)
364 vy_s_g(j,i) = min(vy_s_g(j,i), vh_max)
366 vx_t(kt,j,i) = max(vx_t(kt,j,i), -vh_max)
367 vx_t(kt,j,i) = min(vx_t(kt,j,i), vh_max)
368 vy_t(kt,j,i) = max(vy_t(kt,j,i), -vh_max)
369 vy_t(kt,j,i) = min(vy_t(kt,j,i), vh_max)
372 vx_c(kc,j,i) = max(vx_c(kc,j,i), -vh_max)
373 vx_c(kc,j,i) = min(vx_c(kc,j,i), vh_max)
374 vy_c(kc,j,i) = max(vy_c(kc,j,i), -vh_max)
375 vy_c(kc,j,i) = min(vy_c(kc,j,i), vh_max)
386 if (maske(j,i) == 0)
then
391 cqxy0(kt) = h_t(j,i)*d_help_t(kt,j,i)*dzeta_t
395 cqxy1(kc) = aqxy1(kc)*h_c(j,i)*d_help_c(kc,j,i)
402 if (n_cts(j,i) == 1)
then
405 h_diff(j,i) = h_diff(j,i)+0.5_dp*(cqxy0(kt+1)+cqxy0(kt))
411 h_diff(j,i) = h_diff(j,i)+0.5_dp*(cqxy1(kc+1)+cqxy1(kc))
416 if (h_diff(j,i) < hd_min) h_diff(j,i) = 0.0_dp
417 if (h_diff(j,i) > hd_max) h_diff(j,i) = hd_max
434 qx(j,i) = -0.5_dp*(h_diff(j,i)+h_diff(j,i+1))*dzs_dxi(j,i)
436 if ( (maske(j,i)==0).or.(maske(j,i+1)==0) )
then
439 vx_m(j,i) = qx(j,i) / ( 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j,i+1)+h_t(j,i+1)) )
451 qy(j,i) = -0.5_dp*(h_diff(j,i)+h_diff(j+1,i))*dzs_deta(j,i)
453 if ( (maske(j,i)==0).or.(maske(j+1,i)==0) )
then
456 vy_m(j,i) = qy(j,i) / ( 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j+1,i)+h_t(j+1,i)) )