39 subroutine calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
47 integer(i4b),
intent(in) :: ii((imax+1)*(jmax+1)), jj((imax+1)*(jmax+1))
48 integer(i4b),
intent(in) :: nn(0:jmax,0:imax)
49 real(dp),
intent(in) :: z_sl, dxi, deta, dzeta_c, dzeta_t
51 integer(i4b) :: i, j, kc, kt, m
52 real(dp),
dimension(0:JMAX,0:IMAX) :: vx_m_sia, vy_m_sia
53 real(dp),
dimension(0:JMAX,0:IMAX) :: vx_m_prev, vy_m_prev
54 real(dp) :: dxi_inv, deta_inv
56 real(dp) :: ratio_sl_threshold, ratio_help, weigh_ssa_sia
57 real(dp) :: qx_gl_g, qy_gl_g
59 integer(i4b),
parameter :: iter_ssa = 2
60 real(dp),
parameter :: rel = 0.7_dp
64 flag_grounding_line_1 = .false.
65 flag_grounding_line_2 = .false.
67 flag_calving_front_1 = .false.
68 flag_calving_front_2 = .false.
73 if ( (maske(j,i)==0_i2b) &
75 ( (maske(j,i+1)==3_i2b) &
76 .or.(maske(j,i-1)==3_i2b) &
77 .or.(maske(j+1,i)==3_i2b) &
78 .or.(maske(j-1,i)==3_i2b) ) &
80 flag_grounding_line_1(j,i) = .true.
82 if ( (maske(j,i)==3_i2b) &
84 ( (maske(j,i+1)==0_i2b) &
85 .or.(maske(j,i-1)==0_i2b) &
86 .or.(maske(j+1,i)==0_i2b) &
87 .or.(maske(j-1,i)==0_i2b) ) &
89 flag_grounding_line_2(j,i) = .true.
91 if ( (maske(j,i)==3_i2b) &
93 ( (maske(j,i+1)==2_i2b) &
94 .or.(maske(j,i-1)==2_i2b) &
95 .or.(maske(j+1,i)==2_i2b) &
96 .or.(maske(j-1,i)==2_i2b) ) &
98 flag_calving_front_1(j,i) = .true.
100 if ( (maske(j,i)==2_i2b) &
102 ( (maske(j,i+1)==3_i2b) &
103 .or.(maske(j,i-1)==3_i2b) &
104 .or.(maske(j+1,i)==3_i2b) &
105 .or.(maske(j-1,i)==3_i2b) ) &
107 flag_calving_front_2(j,i) = .true.
115 if ( (maske(j,i)==2_i2b) &
116 .and. (maske(j+1,i)==3_i2b) &
118 flag_calving_front_2(j,i) = .true.
121 if ( (maske(j,i)==2_i2b) &
122 .and. (maske(j-1,i)==3_i2b) &
124 flag_calving_front_2(j,i) = .true.
131 if ( (maske(j,i)==2_i2b) &
132 .and. (maske(j,i+1)==3_i2b) &
134 flag_calving_front_2(j,i) = .true.
137 if ( (maske(j,i)==2_i2b) &
138 .and. (maske(j,i-1)==3_i2b) &
140 flag_calving_front_2(j,i) = .true.
157 vis_int_g(j,i) = 1.0e+15_dp*(h_c(j,i)+h_t(j,i))
187 vx_m(j,i) = rel*vx_m(j,i) + (1.0_dp-rel)*vx_m_prev(j,i)
188 vy_m(j,i) = rel*vy_m(j,i) + (1.0_dp-rel)*vy_m_prev(j,i)
201 vh_max = vh_max/year_sec
205 vx_m(j,i) = max(vx_m(j,i), -vh_max)
206 vx_m(j,i) = min(vx_m(j,i), vh_max)
207 vy_m(j,i) = max(vy_m(j,i), -vh_max)
208 vy_m(j,i) = min(vy_m(j,i), vh_max)
214 #if (DYNAMICS==0 || DYNAMICS==1)
216 ratio_sl_threshold = 1.11e+11_dp
221 #if ( defined(RATIO_SL_THRESH) )
222 ratio_sl_threshold = ratio_sl_thresh
224 ratio_sl_threshold = 0.5_dp
227 ratio_help = 1.0_dp/(1.0_dp-ratio_sl_threshold)
230 stop
' calc_vxy_ssa: DYNAMICS must be either 0, 1 or 2!'
238 if (flag_shelfy_stream_x(j,i))
then
241 weigh_ssa_sia = (ratio_sl_x(j,i)-ratio_sl_threshold)*ratio_help
244 vx_t(kt,j,i) = weigh_ssa_sia*vx_m(j,i) &
245 + (1.0_dp-weigh_ssa_sia)*vx_t(kt,j,i)
249 vx_c(kc,j,i) = weigh_ssa_sia*vx_m(j,i) &
250 + (1.0_dp-weigh_ssa_sia)*vx_c(kc,j,i)
253 vx_b(j,i) = vx_t(0,j,i)
255 vx_m(j,i) = weigh_ssa_sia*vx_m(j,i) &
256 + (1.0_dp-weigh_ssa_sia)*vx_m_sia(j,i)
258 qx(j,i) = vx_m(j,i) * 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j,i+1)+h_t(j,i+1))
260 else if ( (maske(j,i)==3_i2b).or.(maske(j,i+1)==3_i2b) )
then
263 vx_t(kt,j,i) = vx_m(j,i)
267 vx_c(kc,j,i) = vx_m(j,i)
270 vx_b(j,i) = vx_m(j,i)
272 qx(j,i) = vx_m(j,i) * 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j,i+1)+h_t(j,i+1))
284 if (flag_shelfy_stream_y(j,i))
then
287 weigh_ssa_sia = (ratio_sl_y(j,i)-ratio_sl_threshold)*ratio_help
290 vy_t(kt,j,i) = weigh_ssa_sia*vy_m(j,i) &
291 + (1.0_dp-weigh_ssa_sia)*vy_t(kt,j,i)
295 vy_c(kc,j,i) = weigh_ssa_sia*vy_m(j,i) &
296 + (1.0_dp-weigh_ssa_sia)*vy_c(kc,j,i)
299 vy_b(j,i) = vy_t(0,j,i)
301 vy_m(j,i) = weigh_ssa_sia*vy_m(j,i) &
302 + (1.0_dp-weigh_ssa_sia)*vy_m_sia(j,i)
304 qy(j,i) = vy_m(j,i) * 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j+1,i)+h_t(j+1,i))
306 else if ( (maske(j,i)==3_i2b).or.(maske(j+1,i)==3_i2b) )
then
309 vy_t(kt,j,i) = vy_m(j,i)
313 vy_c(kc,j,i) = vy_m(j,i)
316 vy_b(j,i) = vy_m(j,i)
318 qy(j,i) = vy_m(j,i) * 0.5_dp*(h_c(j,i)+h_t(j,i)+h_c(j+1,i)+h_t(j+1,i))
331 if (flag_shelfy_stream(j,i))
then
333 vx_s_g(j,i) = 0.5_dp*(vx_c(kcmax,j,i-1)+vx_c(kcmax,j,i))
334 vx_b_g(j,i) = 0.5_dp*(vx_b( j,i-1)+vx_b( j,i))
336 vy_s_g(j,i) = 0.5_dp*(vy_c(kcmax,j-1,i)+vy_c(kcmax,j,i))
337 vy_b_g(j,i) = 0.5_dp*(vy_b( j-1,i)+vy_b( j,i))
339 else if (maske(j,i)==3_i2b)
then
341 vx_s_g(j,i) = 0.5_dp*(vx_m(j,i-1)+vx_m(j,i))
342 vx_b_g(j,i) = vx_s_g(j,i)
344 vy_s_g(j,i) = 0.5_dp*(vy_m(j-1,i)+vy_m(j,i))
345 vy_b_g(j,i) = vy_s_g(j,i)
357 if ( flag_grounding_line_1(j,i) )
then
359 qx_gl_g = 0.5_dp*(qx(j,i)+qx(j,i-1))
360 qy_gl_g = 0.5_dp*(qy(j,i)+qy(j-1,i))
362 q_gl_g(j,i) = sqrt(qx_gl_g*qx_gl_g+qy_gl_g*qy_gl_g)
subroutine calc_vxy_ssa_matrix(z_sl, dxi, deta, ii, jj, nn, m)
Solution of the system of linear equations for the horizontal velocities vx_m, vy_m in the shallow sh...
subroutine calc_vis_ssa(dxi, deta, dzeta_c, dzeta_t)
Computation of the depth-integrated viscosity vis_int_g in the shallow shelf approximation.
Declarations of kind types for SICOPOLIS.
subroutine calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy and the flux across ...
Declarations of global variables for SICOPOLIS (for the ANT domain).
Declarations of global variables for SICOPOLIS.