55 subroutine calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
59 real(dp),
intent(in) :: dxi, deta, dzeta_c, dzeta_t
61 integer(i4b) :: i, j, kc, kt
62 real(dp) :: dxi_inv, deta_inv
63 real(dp),
dimension(0:JMAX,0:IMAX) :: fact_x, fact_y
64 real(dp),
dimension(0:KCMAX) :: fact_z_c
66 real(dp) :: H_c_inv, H_t_inv
67 real(dp),
dimension(0:KCMAX) :: lxy_c, lyx_c, lxz_c, lzx_c, lyz_c, lzy_c
68 real(dp),
dimension(0:KTMAX) :: lxy_t, lyx_t, lxz_t, lzx_t, lyz_t, lzy_t
69 real(dp),
dimension(0:KCMAX) :: shear_c_squared
70 real(dp),
dimension(0:KTMAX) :: shear_t_squared
71 real(dp) :: abs_v_ssa_inv, nx, ny
72 real(dp) :: shear_x_help, shear_y_help
73 real(dp) :: lambda_shear_help
78 deta_inv = 1.0_dp/deta
85 fact_z_c(kc) = (
ea-1.0_dp)/(
aa*
eaz_c(kc)*dzeta_c)
87 fact_z_c(kc) = 1.0_dp/dzeta_c
91 fact_z_t = 1.0_dp/dzeta_t
116 if ((
maske(j,i) == 0).or.(
maske(j,i) == 3))
then 119 h_c_inv = 1.0_dp/(abs(
h_c(j,i))+
epsi)
126 lxy_c(kc) = ( (
vx_c(kc,j+1,i)+
vx_c(kc,j+1,i-1)) &
127 - (
vx_c(kc,j-1,i)+
vx_c(kc,j-1,i-1)) ) &
130 lyx_c(kc) = ( (
vy_c(kc,j,i+1)+
vy_c(kc,j-1,i+1)) &
131 - (
vy_c(kc,j,i-1)+
vy_c(kc,j-1,i-1)) ) &
134 lzx_c(kc) = (
vz_m(j,i+1)-
vz_m(j,i-1))*0.5_dp*fact_x(j,i)
135 lzy_c(kc) = (
vz_m(j+1,i)-
vz_m(j-1,i))*0.5_dp*fact_y(j,i)
137 lxz_c(kc) = ( (
vx_c(kc+1,j,i)+
vx_c(kc+1,j,i-1)) &
138 - (
vx_c(kc ,j,i)+
vx_c(kc ,j,i-1)) ) &
139 *0.5_dp*fact_z_c(kc)*h_c_inv
141 lyz_c(kc) = ( (
vy_c(kc+1,j,i)+
vy_c(kc+1,j-1,i)) &
142 - (
vy_c(kc ,j,i)+
vy_c(kc ,j-1,i)) ) &
143 *0.5_dp*fact_z_c(kc)*h_c_inv
152 lxy_c(kc) = ( (
vx_c(kc,j+1,i)+
vx_c(kc,j+1,i-1)) &
153 - (
vx_c(kc,j-1,i)+
vx_c(kc,j-1,i-1)) ) &
156 lyx_c(kc) = ( (
vy_c(kc,j,i+1)+
vy_c(kc,j-1,i+1)) &
157 - (
vy_c(kc,j,i-1)+
vy_c(kc,j-1,i-1)) ) &
160 lzx_c(kc) = ( (
vz_c(kc,j,i+1)+
vz_c(kc-1,j,i+1)) &
161 - (
vz_c(kc,j,i-1)+
vz_c(kc-1,j,i-1)) ) &
164 lzy_c(kc) = ( (
vz_c(kc,j+1,i)+
vz_c(kc-1,j+1,i)) &
165 - (
vz_c(kc,j-1,i)+
vz_c(kc-1,j-1,i)) ) &
168 lxz_c(kc) = ( (
vx_c(kc+1,j,i)+
vx_c(kc+1,j,i-1)) &
169 - (
vx_c(kc-1,j,i)+
vx_c(kc-1,j,i-1)) ) &
170 *0.25_dp*fact_z_c(kc)*h_c_inv
172 lyz_c(kc) = ( (
vy_c(kc+1,j,i)+
vy_c(kc+1,j-1,i)) &
173 - (
vy_c(kc-1,j,i)+
vy_c(kc-1,j-1,i)) ) &
174 *0.25_dp*fact_z_c(kc)*h_c_inv
183 lxy_c(kc) = ( (
vx_c(kc,j+1,i)+
vx_c(kc,j+1,i-1)) &
184 - (
vx_c(kc,j-1,i)+
vx_c(kc,j-1,i-1)) ) &
187 lyx_c(kc) = ( (
vy_c(kc,j,i+1)+
vy_c(kc,j-1,i+1)) &
188 - (
vy_c(kc,j,i-1)+
vy_c(kc,j-1,i-1)) ) &
191 lzx_c(kc) = (
vz_s(j,i+1)-
vz_s(j,i-1))*0.5_dp*fact_x(j,i)
192 lzy_c(kc) = (
vz_s(j+1,i)-
vz_s(j-1,i))*0.5_dp*fact_y(j,i)
194 lxz_c(kc) = ( (
vx_c(kc ,j,i)+
vx_c(kc ,j,i-1)) &
195 - (
vx_c(kc-1,j,i)+
vx_c(kc-1,j,i-1)) ) &
196 *0.5_dp*fact_z_c(kc)*h_c_inv
198 lyz_c(kc) = ( (
vy_c(kc ,j,i)+
vy_c(kc ,j-1,i)) &
199 - (
vy_c(kc-1,j,i)+
vy_c(kc-1,j-1,i)) ) &
200 *0.5_dp*fact_z_c(kc)*h_c_inv
204 dxy_c(:,j,i) = 0.5_dp*(lxy_c+lyx_c)
205 dxz_c(:,j,i) = 0.5_dp*(lxz_c+lzx_c)
206 dyz_c(:,j,i) = 0.5_dp*(lyz_c+lzy_c)
210 shear_c_squared(kc) =
dxz_c(kc,j,i)*
dxz_c(kc,j,i) &
217 + shear_c_squared(kc) )
225 if ((
n_cts(j,i) == -1).or.(
n_cts(j,i) == 0))
then 238 h_t_inv = 1.0_dp/(abs(
h_t(j,i))+
epsi)
245 lxy_t(kt) = ( (
vx_t(kt,j+1,i)+
vx_t(kt,j+1,i-1)) &
246 - (
vx_t(kt,j-1,i)+
vx_t(kt,j-1,i-1)) ) &
249 lyx_t(kt) = ( (
vy_t(kt,j,i+1)+
vy_t(kt,j-1,i+1)) &
250 - (
vy_t(kt,j,i-1)+
vy_t(kt,j-1,i-1)) ) &
253 lzx_t(kt) = (
vz_b(j,i+1)-
vz_b(j,i-1))*0.5_dp*fact_x(j,i)
254 lzy_t(kt) = (
vz_b(j+1,i)-
vz_b(j-1,i))*0.5_dp*fact_y(j,i)
256 lxz_t(kt) = ( (
vx_t(kt+1,j,i)+
vx_t(kt+1,j,i-1)) &
257 - (
vx_t(kt ,j,i)+
vx_t(kt ,j,i-1)) ) &
258 *0.5_dp*fact_z_t*h_t_inv
260 lyz_t(kt) = ( (
vy_t(kt+1,j,i)+
vy_t(kt+1,j-1,i)) &
261 - (
vy_t(kt ,j,i)+
vy_t(kt ,j-1,i)) ) &
262 *0.5_dp*fact_z_t*h_t_inv
271 lxy_t(kt) = ( (
vx_t(kt,j+1,i)+
vx_t(kt,j+1,i-1)) &
272 - (
vx_t(kt,j-1,i)+
vx_t(kt,j-1,i-1)) ) &
275 lyx_t(kt) = ( (
vy_t(kt,j,i+1)+
vy_t(kt,j-1,i+1)) &
276 - (
vy_t(kt,j,i-1)+
vy_t(kt,j-1,i-1)) ) &
279 lzx_t(kt) = ( (
vz_t(kt,j,i+1)+
vz_t(kt-1,j,i+1)) &
280 - (
vz_t(kt,j,i-1)+
vz_t(kt-1,j,i-1)) ) &
283 lzy_t(kt) = ( (
vz_t(kt,j+1,i)+
vz_t(kt-1,j+1,i)) &
284 - (
vz_t(kt,j-1,i)+
vz_t(kt-1,j-1,i)) ) &
287 lxz_t(kt) = ( (
vx_t(kt+1,j,i)+
vx_t(kt+1,j,i-1)) &
288 - (
vx_t(kt-1,j,i)+
vx_t(kt-1,j,i-1)) ) &
289 *0.25_dp*fact_z_t*h_t_inv
291 lyz_t(kt) = ( (
vy_t(kt+1,j,i)+
vy_t(kt+1,j-1,i)) &
292 - (
vy_t(kt-1,j,i)+
vy_t(kt-1,j-1,i)) ) &
293 *0.25_dp*fact_z_t*h_t_inv
302 lxy_t(kt) = ( (
vx_t(kt,j+1,i)+
vx_t(kt,j+1,i-1)) &
303 - (
vx_t(kt,j-1,i)+
vx_t(kt,j-1,i-1)) ) &
306 lyx_t(kt) = ( (
vy_t(kt,j,i+1)+
vy_t(kt,j-1,i+1)) &
307 - (
vy_t(kt,j,i-1)+
vy_t(kt,j-1,i-1)) ) &
310 lzx_t(kt) = (
vz_m(j,i+1)-
vz_m(j,i-1))*0.5_dp*fact_x(j,i)
311 lzy_t(kt) = (
vz_m(j+1,i)-
vz_m(j-1,i))*0.5_dp*fact_y(j,i)
313 lxz_t(kt) = ( (
vx_t(kt ,j,i)+
vx_t(kt ,j,i-1)) &
314 - (
vx_t(kt-1,j,i)+
vx_t(kt-1,j,i-1)) ) &
315 *0.5_dp*fact_z_t*h_t_inv
317 lyz_t(kt) = ( (
vy_t(kt ,j,i)+
vy_t(kt ,j-1,i)) &
318 - (
vy_t(kt-1,j,i)+
vy_t(kt-1,j-1,i)) ) &
319 *0.5_dp*fact_z_t*h_t_inv
323 dxy_t(:,j,i) = 0.5_dp*(lxy_t+lyx_t)
324 dxz_t(:,j,i) = 0.5_dp*(lxz_t+lzx_t)
325 dyz_t(:,j,i) = 0.5_dp*(lyz_t+lzy_t)
329 shear_t_squared(kt) =
dxz_t(kt,j,i)*
dxz_t(kt,j,i) &
336 + shear_t_squared(kt) )
344 #elif (CALCMOD==0 || CALCMOD==2 || CALCMOD==3 || CALCMOD==-1) 355 stop
' >>> calc_dxyz: Parameter CALCMOD must be -1, 0, 1, 2 or 3!' 360 if (
maske(j,i) == 3)
then 362 abs_v_ssa_inv = 1.0_dp / &
363 sqrt( 0.25_dp*(
vx_m(j,i)+
vx_m(j,i-1))**2 &
364 +0.25_dp*(
vy_m(j,i)+
vy_m(j-1,i))**2 )
366 nx = -0.5_dp*(
vy_m(j,i)+
vy_m(j-1,i)) * abs_v_ssa_inv
367 ny = 0.5_dp*(
vx_m(j,i)+
vx_m(j,i-1)) * abs_v_ssa_inv
369 shear_x_help =
dxx_c(kcmax,j,i)*nx &
370 +
dxy_c(kcmax,j,i)*ny &
371 -
dxx_c(kcmax,j,i)*nx**3 &
372 - 2.0_dp*
dxy_c(kcmax,j,i)*nx**2*ny &
373 -
dyy_c(kcmax,j,i)*nx*ny**2
377 shear_y_help =
dxy_c(kcmax,j,i)*nx &
378 +
dyy_c(kcmax,j,i)*ny &
379 -
dxx_c(kcmax,j,i)*nx**2*ny &
380 - 2.0_dp*
dxy_c(kcmax,j,i)*nx*ny**2 &
381 -
dyy_c(kcmax,j,i)*ny**3
385 lambda_shear_help = sqrt(shear_x_help**2 + shear_y_help**2) &
400 dxx_c(:,j,i) = 0.0_dp
401 dyy_c(:,j,i) = 0.0_dp
402 dxy_c(:,j,i) = 0.0_dp
403 dxz_c(:,j,i) = 0.0_dp
404 dyz_c(:,j,i) = 0.0_dp
408 dxx_t(:,j,i) = 0.0_dp
409 dyy_t(:,j,i) = 0.0_dp
410 dxy_t(:,j,i) = 0.0_dp
411 dxz_t(:,j,i) = 0.0_dp
412 dyz_t(:,j,i) = 0.0_dp
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) vx_c
vx_c(kc,j,i): Velocity in x-direction in the upper (kc) ice domain (at (i+1/2,j,kc)) ...
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) de_c
de_c(kc,j,i): Full effective strain rate in the upper (kc) ice domain
integer(i2b), dimension(0:jmax, 0:imax) n_cts
n_cts(j,i): Mask for thermal conditions. -1: cold ice base, 0: temperate ice base with cold ice above...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) lambda_shear_t
lambda_shear_t(kt,j,i): Shear fraction in the lower (kt) ice domain
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) dxy_t
dxy_t(kt,j,i): Strain rate dxy in the lower (kt) ice domain
real(dp), parameter epsi
epsi: Very small number
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) de_t
de_t(kt,j,i): Full effective strain rate in the lower (kt) ice domain
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) dyy_t
dyy_t(kt,j,i): Strain rate dyy in the lower (kt) ice domain
real(dp), dimension(0:jmax, 0:imax) vz_m
vz_m(j,i): Velocity in z-direction at the position z=zm (interface between the upper (kc) and the low...
real(dp), dimension(0:kcmax) eaz_c
eaz_c(kc): Abbreviation for exp(aa*zeta(kc))
real(dp), dimension(0:jmax, 0:imax) vx_m
vx_m(j,i): Mean (depth-averaged) velocity in x-direction, at (i+1/2,j)
real(dp), dimension(0:jmax, 0:imax) vz_b
vz_b(j,i): Velocity in z-direction at the ice base, at (i,j)
real(dp), dimension(0:jmax, 0:imax) vz_s
vz_s(j,i): Velocity in z-direction at the ice surface, at (i,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:kcmax, 0:jmax, 0:imax) dyz_c
dyz_c(kc,j,i): Strain rate dyz in the upper (kc) ice domain
integer(i2b), dimension(0:jmax, 0:imax) maske
maske(j,i): Ice-land-ocean mask. 0: grounded ice, 1: ice-free land, 2: ocean, 3: floating ice ...
Computation of all components of the strain-rate tensor, the full effective strain rate and the shear...
real(dp), dimension(0:jmax, 0:imax) de_ssa
de_ssa(j,i): Effective strain rate of the SSA, at (i,j)
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) vz_t
vz_t(kt,j,i): Velocity in z-direction in the lower (kt) ice domain (at (i,j,kt+1/2)) ...
real(dp), dimension(0:jmax, 0:imax) vy_m
vy_m(j,i): Mean (depth-averaged) velocity in y-direction, at (i,j+1/2)
Declarations of global variables for SICOPOLIS (for the ANT domain).
real(dp) ea
ea: Abbreviation for exp(aa)
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) lambda_shear_c
lambda_shear_c(kc,j,i): Shear fraction in the upper (kc) ice domain
logical flag_aa_nonzero
flag_aa_nonzero: Flag for the exponential stretch parameter aa. .true.: aa greater than zero (non-equ...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) dyz_t
dyz_t(kt,j,i): Strain rate dyz in the lower (kt) ice domain
real(dp) aa
aa: Exponential stretch parameter of the non-equidistant vertical grid in the upper (kc) ice domain ...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) dxz_t
dxz_t(kt,j,i): Strain rate dxz in the lower (kt) ice domain
Declarations of kind types for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) h_c
H_c(j,i): Thickness of ice in the upper (kc) domain (thickness of the cold-ice layer for POLY...
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) dxx_c
dxx_c(kc,j,i): Strain rate dxx in the upper (kc) ice domain
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) dxx_t
dxx_t(kt,j,i): Strain rate dxx in the lower (kt) ice domain
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) vz_c
vz_c(kc,j,i): Velocity in z-direction in the upper (kc) ice domain (at (i,j,kc+1/2)) ...
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) dyy_c
dyy_c(kc,j,i): Strain rate dyy in the upper (kc) ice domain
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) dxz_c
dxz_c(kc,j,i): Strain rate dxz in the upper (kc) ice domain
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) dxy_c
dxy_c(kc,j,i): Strain rate dxy in the upper (kc) ice domain
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) vy_t
vy_t(kt,j,i): Velocity in y-direction in the lower (kt) ice domain (at (i,j+1/2,kt)) ...
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:kcmax, 0:jmax, 0:imax) vy_c
vy_c(kc,j,i): Velocity in y-direction in the upper (kc) ice domain (at (i,j+1/2,kc)) ...
subroutine, public calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
Main subroutine of calc_dxyz_m: Computation of all components of the strain-rate tensor, the full effective strain rate and the shear fraction.
real(dp), dimension(0:jmax, 0:imax) h_t
H_t(j,i): Thickness of ice in the lower (kt) domain (thickness of the temperate layer for POLY...
Declarations of global variables for SICOPOLIS.
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) vx_t
vx_t(kt,j,i): Velocity in x-direction in the lower (kt) ice domain (at (i+1/2,j,kt)) ...