7 !! Computation of the vertical velocity vz in the shallow ice approximation.
11 !! Copyright 2009-2013 Ralf Greve
15 !! This file is part of SICOPOLIS.
17 !! SICOPOLIS is free software: you can redistribute it and/or modify
18 !! it under the terms of the GNU General Public License as published by
19 !! the Free Software Foundation, either version 3 of the License, or
20 !! (at your option) any later version.
22 !! SICOPOLIS is distributed in the hope that it will be useful,
23 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
24 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 !! GNU General Public License for more details.
27 !! You should have received a copy of the GNU General Public License
28 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
30 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33 !> Computation of the vertical velocity vz in the shallow ice approximation.
34 !<------------------------------------------------------------------------------
41 integer(i4b) :: i, j, kc, kt
42 real(dp) :: dxi, deta, dzeta_c, dzeta_t
43 real(dp) :: vz_m(0:jmax,0:imax)
44 real(dp) :: avz3(0:kcmax)
45 real(dp) :: cvz00, cvz0(0:ktmax), cvz1(0:ktmax), cvz2(0:ktmax), &
46 cvz3(0:kcmax), cvz4(0:kcmax), cvz5(0:kcmax)
47 real(dp) :: dxi_inv, deta_inv
52 deta_inv = 1.0_dp/deta
55 avz3(kc) = deform*eaz_c(kc)/(ea-1.0_dp)*dzeta_c
61 if (maske(j,i) == 0)
then
65 cvz00 = 0.5_dp*(vx_t(0,j,i)+vx_t(0,j,i-1))*dzb_dxi_g(j,i) &
66 +0.5_dp*(vy_t(0,j,i)+vy_t(0,j-1,i))*dzb_deta_g(j,i) &
67 +dzb_dtau(j,i)-q_b_tot(j,i)
70 cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
71 *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
72 -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
73 +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
74 -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
76 cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
77 *(vx_t(kt+1,j,i)+vx_t(kt+1,j,i-1) &
78 -vx_t(kt,j,i) -vx_t(kt,j,i-1))*0.5_dp
79 cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
80 *(vy_t(kt+1,j,i)+vy_t(kt+1,j-1,i) &
81 -vy_t(kt,j,i) -vy_t(kt,j-1,i))*0.5_dp
84 cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
85 *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
86 -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
87 +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
88 -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
90 cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
91 *(vx_t(kt+1,j,i)+vx_t(kt+1,j,i-1) &
92 -vx_t(kt-1,j,i)-vx_t(kt-1,j,i-1))*0.25_dp
93 cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
94 *(vy_t(kt+1,j,i)+vy_t(kt+1,j-1,i) &
95 -vy_t(kt-1,j,i)-vy_t(kt-1,j-1,i))*0.25_dp
99 cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
100 *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
101 -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
102 +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
103 -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
105 cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
106 *(vx_t(kt,j,i) +vx_t(kt,j,i-1) &
107 -vx_t(kt-1,j,i)-vx_t(kt-1,j,i-1))*0.5_dp
108 cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
109 *(vy_t(kt,j,i) +vy_t(kt,j-1,i) &
110 -vy_t(kt-1,j,i)-vy_t(kt-1,j-1,i))*0.5_dp
113 cvz3(kc) = avz3(kc)*h_c(j,i) &
114 *insq_g11_g(j,i)*insq_g22_g(j,i) &
115 *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
116 -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
117 +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
118 -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
119 cvz4(kc) = (dzm_dxi_g(j,i) &
120 +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
121 *(vx_c(kc+1,j,i)+vx_c(kc+1,j,i-1) &
122 -vx_c(kc,j,i) -vx_c(kc,j,i-1))*0.5_dp
123 cvz5(kc) = (dzm_deta_g(j,i) &
124 +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
125 *(vy_c(kc+1,j,i)+vy_c(kc+1,j-1,i) &
126 -vy_c(kc,j,i) -vy_c(kc,j-1,i))*0.5_dp
129 cvz3(kc) = avz3(kc)*h_c(j,i) &
130 *insq_g11_g(j,i)*insq_g22_g(j,i) &
131 *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
132 -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
133 +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
134 -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
135 cvz4(kc) = (dzm_dxi_g(j,i) &
136 +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
137 *(vx_c(kc+1,j,i)+vx_c(kc+1,j,i-1) &
138 -vx_c(kc-1,j,i)-vx_c(kc-1,j,i-1))*0.25_dp
139 cvz5(kc) = (dzm_deta_g(j,i) &
140 +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
141 *(vy_c(kc+1,j,i)+vy_c(kc+1,j-1,i) &
142 -vy_c(kc-1,j,i)-vy_c(kc-1,j-1,i))*0.25_dp
146 cvz3(kc) = avz3(kc)*h_c(j,i) &
147 *insq_g11_g(j,i)*insq_g22_g(j,i) &
148 *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
149 -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
150 +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
151 -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
152 cvz4(kc) = (dzm_dxi_g(j,i) &
153 +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
154 *(vx_c(kc,j,i) +vx_c(kc,j,i-1) &
155 -vx_c(kc-1,j,i)-vx_c(kc-1,j,i-1))*0.5_dp
156 cvz5(kc) = (dzm_deta_g(j,i) &
157 +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
158 *(vy_c(kc,j,i) +vy_c(kc,j-1,i) &
159 -vy_c(kc-1,j,i)-vy_c(kc-1,j-1,i))*0.5_dp
167 if ((n_cts(j,i) == -1).or.(n_cts(j,i) == 0))
then
171 vz_t(kt,j,i) = vz_b(j,i)
174 vz_m(j,i) = vz_b(j,i)
176 vz_c(0,j,i) = vz_m(j,i) &
177 +0.5_dp*(-cvz3(0)+cvz4(0)+cvz5(0))
180 vz_c(kc,j,i) = vz_c(kc-1,j,i) &
181 -cvz3(kc)+cvz4(kc)+cvz5(kc)
186 vz_t(0,j,i) = vz_b(j,i) &
187 +0.5_dp*(-cvz0(0)+cvz1(0)+cvz2(0))
190 vz_t(kt,j,i) = vz_t(kt-1,j,i) &
191 -cvz0(kt)+cvz1(kt)+cvz2(kt)
194 vz_m(j,i) = vz_t(ktmax-1,j,i) &
195 +0.5_dp*(-cvz0(ktmax)+cvz1(ktmax)+cvz2(ktmax))
197 vz_c(0,j,i) = vz_m(j,i) &
198 +0.5_dp*(-cvz3(0)+cvz4(0)+cvz5(0))
201 vz_c(kc,j,i) = vz_c(kc-1,j,i) &
202 -cvz3(kc)+cvz4(kc)+cvz5(kc)
211 vz_s(j,i) = vz_c(kc-1,j,i) &
212 +0.5_dp*(-cvz3(kc)+cvz4(kc)+cvz5(kc))
219 vz_t(kt,j,i) = 0.0_dp
223 vz_c(kc,j,i) = 0.0_dp