SICOPOLIS V3.2
 All Classes Files Functions Variables Macros
calc_vz_sia.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : c a l c _ v z _ s i a
4 !
5 !> @file
6 !!
7 !! Computation of the vertical velocity vz in the shallow ice approximation.
8 !!
9 !! @section Copyright
10 !!
11 !! Copyright 2009-2016 Ralf Greve
12 !!
13 !! @section License
14 !!
15 !! This file is part of SICOPOLIS.
16 !!
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.
21 !!
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.
26 !!
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/>.
29 !<
30 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31 
32 !-------------------------------------------------------------------------------
33 !> Computation of the vertical velocity vz in the shallow ice approximation.
34 !<------------------------------------------------------------------------------
35 subroutine calc_vz_sia(dxi, deta, dzeta_c, dzeta_t)
36 
37 use sico_types
39 use sico_vars
40 
41 implicit none
42 
43 real(dp), intent(in) :: dxi, deta, dzeta_c, dzeta_t
44 
45 integer(i4b) :: i, j, kc, kt
46 real(dp) :: avz3(0:kcmax)
47 real(dp) :: cvz00, cvz0(0:ktmax), cvz1(0:ktmax), cvz2(0:ktmax), &
48  cvz3(0:kcmax), cvz4(0:kcmax), cvz5(0:kcmax)
49 real(dp) :: dxi_inv, deta_inv
50 
51 !-------- Term abbreviations --------
52 
53 dxi_inv = 1.0_dp/dxi
54 deta_inv = 1.0_dp/deta
55 
56 do kc=0, kcmax
57  if (flag_aa_nonzero) then
58  avz3(kc) = aa*eaz_c(kc)/(ea-1.0_dp)*dzeta_c
59  else
60  avz3(kc) = dzeta_c
61  end if
62 end do
63 
64 do i=1, imax-1
65 do j=1, jmax-1
66 
67  if (maske(j,i) == 0) then ! glaciated land
68 
69 !-------- Abbreviations --------
70 
71  cvz00 = 0.5_dp*(vx_t(0,j,i)+vx_t(0,j,i-1))*dzb_dxi_g(j,i) &
72  +0.5_dp*(vy_t(0,j,i)+vy_t(0,j-1,i))*dzb_deta_g(j,i) &
73  +dzb_dtau(j,i)-q_b_tot(j,i)
74 
75  kt=0
76  cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
77  *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
78  -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
79  +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
80  -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
81  *dzeta_t
82  cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
83  *(vx_t(kt+1,j,i)+vx_t(kt+1,j,i-1) &
84  -vx_t(kt,j,i) -vx_t(kt,j,i-1))*0.5_dp
85  cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
86  *(vy_t(kt+1,j,i)+vy_t(kt+1,j-1,i) &
87  -vy_t(kt,j,i) -vy_t(kt,j-1,i))*0.5_dp
88 
89  do kt=1, ktmax-1
90  cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
91  *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
92  -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
93  +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
94  -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
95  *dzeta_t
96  cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
97  *(vx_t(kt+1,j,i)+vx_t(kt+1,j,i-1) &
98  -vx_t(kt-1,j,i)-vx_t(kt-1,j,i-1))*0.25_dp
99  cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
100  *(vy_t(kt+1,j,i)+vy_t(kt+1,j-1,i) &
101  -vy_t(kt-1,j,i)-vy_t(kt-1,j-1,i))*0.25_dp
102  end do
103 
104  kt=ktmax
105  cvz0(kt) = h_t(j,i)*insq_g11_g(j,i)*insq_g22_g(j,i) &
106  *( (vx_t(kt,j,i)*sq_g22_sgx(j,i) &
107  -vx_t(kt,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
108  +(vy_t(kt,j,i)*sq_g11_sgy(j,i) &
109  -vy_t(kt,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv ) &
110  *dzeta_t
111  cvz1(kt) = (dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
112  *(vx_t(kt,j,i) +vx_t(kt,j,i-1) &
113  -vx_t(kt-1,j,i)-vx_t(kt-1,j,i-1))*0.5_dp
114  cvz2(kt) = (dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
115  *(vy_t(kt,j,i) +vy_t(kt,j-1,i) &
116  -vy_t(kt-1,j,i)-vy_t(kt-1,j-1,i))*0.5_dp
117 
118  kc=0
119  cvz3(kc) = avz3(kc)*h_c(j,i) &
120  *insq_g11_g(j,i)*insq_g22_g(j,i) &
121  *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
122  -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
123  +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
124  -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
125  cvz4(kc) = (dzm_dxi_g(j,i) &
126  +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
127  *(vx_c(kc+1,j,i)+vx_c(kc+1,j,i-1) &
128  -vx_c(kc,j,i) -vx_c(kc,j,i-1))*0.5_dp
129  cvz5(kc) = (dzm_deta_g(j,i) &
130  +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
131  *(vy_c(kc+1,j,i)+vy_c(kc+1,j-1,i) &
132  -vy_c(kc,j,i) -vy_c(kc,j-1,i))*0.5_dp
133 
134  do kc=1, kcmax-1
135  cvz3(kc) = avz3(kc)*h_c(j,i) &
136  *insq_g11_g(j,i)*insq_g22_g(j,i) &
137  *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
138  -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
139  +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
140  -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
141  cvz4(kc) = (dzm_dxi_g(j,i) &
142  +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
143  *(vx_c(kc+1,j,i)+vx_c(kc+1,j,i-1) &
144  -vx_c(kc-1,j,i)-vx_c(kc-1,j,i-1))*0.25_dp
145  cvz5(kc) = (dzm_deta_g(j,i) &
146  +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
147  *(vy_c(kc+1,j,i)+vy_c(kc+1,j-1,i) &
148  -vy_c(kc-1,j,i)-vy_c(kc-1,j-1,i))*0.25_dp
149  end do
150 
151  kc=kcmax
152  cvz3(kc) = avz3(kc)*h_c(j,i) &
153  *insq_g11_g(j,i)*insq_g22_g(j,i) &
154  *( (vx_c(kc,j,i)*sq_g22_sgx(j,i) &
155  -vx_c(kc,j,i-1)*sq_g22_sgx(j,i-1))*dxi_inv &
156  +(vy_c(kc,j,i)*sq_g11_sgy(j,i) &
157  -vy_c(kc,j-1,i)*sq_g11_sgy(j-1,i))*deta_inv )
158  cvz4(kc) = (dzm_dxi_g(j,i) &
159  +eaz_c_quotient(kc)*dh_c_dxi_g(j,i)) &
160  *(vx_c(kc,j,i) +vx_c(kc,j,i-1) &
161  -vx_c(kc-1,j,i)-vx_c(kc-1,j,i-1))*0.5_dp
162  cvz5(kc) = (dzm_deta_g(j,i) &
163  +eaz_c_quotient(kc)*dh_c_deta_g(j,i)) &
164  *(vy_c(kc,j,i) +vy_c(kc,j-1,i) &
165  -vy_c(kc-1,j,i)-vy_c(kc-1,j-1,i))*0.5_dp
166 
167 !-------- Computation of vz_b --------
168 
169  vz_b(j,i) = cvz00
170 
171 !-------- Computation of vz --------
172 
173  if ((n_cts(j,i) == -1).or.(n_cts(j,i) == 0)) then
174  ! cold ice base, temperate ice base
175 
176  do kt=0, ktmax-1
177  vz_t(kt,j,i) = vz_b(j,i)
178  end do
179 
180  vz_m(j,i) = vz_b(j,i)
181 
182  vz_c(0,j,i) = vz_m(j,i) &
183  +0.5_dp*(-cvz3(0)+cvz4(0)+cvz5(0))
184 
185  do kc=1, kcmax-1
186  vz_c(kc,j,i) = vz_c(kc-1,j,i) &
187  -cvz3(kc)+cvz4(kc)+cvz5(kc)
188  end do
189 
190  else ! n_cts(j,i) == 1, temperate ice layer
191 
192  vz_t(0,j,i) = vz_b(j,i) &
193  +0.5_dp*(-cvz0(0)+cvz1(0)+cvz2(0))
194 
195  do kt=1, ktmax-1
196  vz_t(kt,j,i) = vz_t(kt-1,j,i) &
197  -cvz0(kt)+cvz1(kt)+cvz2(kt)
198  end do
199 
200  vz_m(j,i) = vz_t(ktmax-1,j,i) &
201  +0.5_dp*(-cvz0(ktmax)+cvz1(ktmax)+cvz2(ktmax))
202 
203  vz_c(0,j,i) = vz_m(j,i) &
204  +0.5_dp*(-cvz3(0)+cvz4(0)+cvz5(0))
205 
206  do kc=1, kcmax-1
207  vz_c(kc,j,i) = vz_c(kc-1,j,i) &
208  -cvz3(kc)+cvz4(kc)+cvz5(kc)
209  end do
210 
211  end if
212 
213 !-------- Computation of vz_s --------
214 
215  kc=kcmax
216 
217  vz_s(j,i) = vz_c(kc-1,j,i) &
218  +0.5_dp*(-cvz3(kc)+cvz4(kc)+cvz5(kc))
219 
220  else ! maske(j,i) == (1 or 2)
221 
222  vz_b(j,i) = 0.0_dp
223 
224  do kt=0, ktmax-1
225  vz_t(kt,j,i) = 0.0_dp
226  end do
227 
228  vz_m(j,i) = 0.0_dp
229 
230  do kc=0, kcmax-1
231  vz_c(kc,j,i) = 0.0_dp
232  end do
233 
234  vz_s(j,i) = 0.0_dp
235 
236  end if
237 
238 end do
239 end do
240 
241 end subroutine calc_vz_sia
242 !
Declarations of kind types for SICOPOLIS.
Definition: sico_types.F90:35
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars.F90:35
Declarations of global variables for SICOPOLIS.
subroutine calc_vz_sia(dxi, deta, dzeta_c, dzeta_t)
Computation of the vertical velocity vz in the shallow ice approximation.
Definition: calc_vz_sia.F90:35