45 real(dp),
intent(in) :: time, z_sl
48 integer(i4b) :: r_smw_1, s_smw_1, r_smw_2, s_smw_2
49 real(dp),
dimension(0:JMAX,0:IMAX) :: gamma_slide_inv
50 real(dp) :: gamma_slide_inv_1, gamma_slide_inv_2
51 real(dp) :: smw_coeff_1, smw_coeff_2
52 real(dp),
dimension(0:JMAX,0:IMAX) :: p_b, p_b_red, tau_b
53 real(dp) :: cvxy1, cvxy1a, ctau1, ctau1a
56 real(dp) :: year_sec_inv
57 logical,
dimension(0:JMAX,0:IMAX) :: sub_melt_flag
61 year_sec_inv = 1.0_dp/year_sec
63 #if (defined(ANT) && (!defined(SEDI_SLIDE) || SEDI_SLIDE==1))
67 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
71 c_slide(j,i) = c_slide*year_sec_inv
72 p_weert(j,i) = p_weert
73 q_weert(j,i) = q_weert
74 gamma_slide_inv(j,i) = gamma_slide_inv_1
75 sub_melt_flag(j,i) = (gamma_slide >= eps)
79 #elif (defined(ANT) && SEDI_SLIDE==2)
83 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
84 gamma_slide_inv_2 = 1.0_dp/max(gamma_slide_sedi, eps)
89 if (maske_sedi(j,i) /= 7)
then
91 #if (defined(TRANS_LENGTH_SL))
92 c_slide(j,i) = ( (1.0_dp-r_mask_sedi(j,i))*c_slide &
93 +r_mask_sedi(j,i) *c_slide_sedi ) &
96 c_slide(j,i) = c_slide*year_sec_inv
99 p_weert(j,i) = p_weert
100 q_weert(j,i) = q_weert
101 gamma_slide_inv(j,i) = gamma_slide_inv_1
102 sub_melt_flag(j,i) = (gamma_slide >= eps)
106 #if (defined(TRANS_LENGTH_SL))
107 c_slide(j,i) = ( (1.0_dp-r_mask_sedi(j,i))*c_slide &
108 +r_mask_sedi(j,i) *c_slide_sedi ) &
111 c_slide(j,i) = c_slide_sedi*year_sec_inv
114 p_weert(j,i) = p_weert_sedi
115 q_weert(j,i) = q_weert_sedi
116 gamma_slide_inv(j,i) = gamma_slide_inv_2
117 sub_melt_flag(j,i) = (gamma_slide_sedi >= eps)
124 #elif (defined(GRL) && ICE_STREAM==1 \
125 || defined(asf) && ice_stream==1)
130 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
134 smw_coeff_1 = smw_coeff*year_sec**s_smw_1
138 c_slide(j,i) = c_slide*year_sec_inv &
139 *(1.0_dp+smw_coeff_1*runoff(j,i)**s_smw_1 &
140 /max((h_c(j,i)+h_t(j,i))**r_smw_1, eps))
141 p_weert(j,i) = p_weert
142 q_weert(j,i) = q_weert
143 gamma_slide_inv(j,i) = gamma_slide_inv_1
144 sub_melt_flag(j,i) = (gamma_slide >= eps)
148 #elif (defined(GRL) && ICE_STREAM==2 \
149 || defined(asf) && ice_stream==2)
153 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
154 gamma_slide_inv_2 = 1.0_dp/max(gamma_slide_sedi, eps)
158 smw_coeff_1 = smw_coeff *year_sec**s_smw_1
161 smw_coeff_2 = smw_coeff_sedi*year_sec**s_smw_2
166 if (maske_sedi(j,i) /= 7)
then
167 c_slide(j,i) = c_slide*year_sec_inv &
168 *(1.0_dp+smw_coeff_1*runoff(j,i)**s_smw_1 &
169 /max((h_c(j,i)+h_t(j,i))**r_smw_1, eps))
170 p_weert(j,i) = p_weert
171 q_weert(j,i) = q_weert
172 gamma_slide_inv(j,i) = gamma_slide_inv_1
173 sub_melt_flag(j,i) = (gamma_slide >= eps)
175 c_slide(j,i) = c_slide_sedi*year_sec_inv &
176 *(1.0_dp+smw_coeff_2*runoff(j,i)**s_smw_2 &
177 /max((h_c(j,i)+h_t(j,i))**r_smw_2, eps))
178 p_weert(j,i) = p_weert_sedi
179 q_weert(j,i) = q_weert_sedi
180 gamma_slide_inv(j,i) = gamma_slide_inv_2
181 sub_melt_flag(j,i) = (gamma_slide_sedi >= eps)
187 #elif (defined(XYZ) && defined(HEINO))
191 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
192 gamma_slide_inv_2 = 1.0_dp/max(gamma_slide_sedi, eps)
197 if (maske_sedi(j,i) /= 7)
then
198 c_slide(j,i) = c_slide*year_sec_inv
199 p_weert(j,i) = p_weert
200 q_weert(j,i) = q_weert
201 gamma_slide_inv(j,i) = gamma_slide_inv_1
202 sub_melt_flag(j,i) = (gamma_slide >= eps)
204 c_slide(j,i) = c_slide_sedi*year_sec_inv
205 p_weert(j,i) = p_weert_sedi
206 q_weert(j,i) = q_weert_sedi
207 gamma_slide_inv(j,i) = gamma_slide_inv_2
208 sub_melt_flag(j,i) = (gamma_slide_sedi >= eps)
214 #elif (defined(SCAND) \
219 || defined(emtp2sge) \
223 gamma_slide_inv_1 = 1.0_dp/max(gamma_slide, eps)
227 c_slide(j,i) = c_slide*year_sec_inv
228 p_weert(j,i) = p_weert
229 q_weert(j,i) = q_weert
230 gamma_slide_inv(j,i) = gamma_slide_inv_1
231 sub_melt_flag(j,i) = (gamma_slide >= eps)
237 stop
' calc_vxy_b_sia: No valid domain specified!'
243 p_weert_inv(j,i) = 1.0_dp/max(
real(p_weert(j,i),dp), eps)
255 if ((maske(j,i) == 0).or.flag_grounding_line_2(j,i))
then
258 p_b(j,i) = rho*g*(h_c(j,i)+h_t(j,i))
259 p_b_w(j,i) = rho_sw*g*max((z_sl-zb(j,i)), 0.0_dp)
260 p_b_red(j,i) = p_b(j,i)-p_b_w(j,i)
261 p_b_red(j,i) = max(p_b_red(j,i), red_pres_limit_fact*p_b(j,i))
269 p_b_red(j,i) = 0.0_dp
280 tau_b(j,i) = p_b(j,i)*(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
289 if ((maske(j,i) == 0).or.flag_grounding_line_2(j,i))
then
295 cvxy1 = c_slide(j,i) &
296 * (tau_b(j,i)**(p_weert(j,i)-1)/p_b(j,i)**q_weert(j,i)) &
298 ctau1 = 1.0_dp/c_slide(j,i)**p_weert_inv(j,i) &
299 * p_b(j,i)**(q_weert(j,i)*p_weert_inv(j,i))
302 cvxy1 = c_slide(j,i) &
303 * (tau_b(j,i)**(p_weert(j,i)-1)/p_b_red(j,i)**q_weert(j,i)) &
305 ctau1 = 1.0_dp/c_slide(j,i)**p_weert_inv(j,i) &
306 * p_b_red(j,i)**(q_weert(j,i)*p_weert_inv(j,i))
312 if (n_cts(j,i) == -1)
then
314 if (sub_melt_flag(j,i))
then
315 temp_diff = max((temp_c_m(0,j,i)-temp_c(0,j,i)), 0.0_dp)
316 cvxy1a = exp(-gamma_slide_inv(j,i)*temp_diff)
317 ctau1a = 1.0_dp/cvxy1a**p_weert_inv(j,i)
320 ctau1a = 1.0_dp/eps**p_weert_inv(j,i)
323 d_help_b(j,i) = cvxy1*cvxy1a
324 c_drag(j,i) = ctau1*ctau1a
326 else if (n_cts(j,i) == 0)
then
328 d_help_b(j,i) = cvxy1
333 d_help_b(j,i) = cvxy1
340 d_help_b(j,i) = 0.0_dp
352 vx_b(j,i) = -0.5_dp*(d_help_b(j,i)+d_help_b(j,i+1))*dzs_dxi(j,i)
360 vy_b(j,i) = -0.5_dp*(d_help_b(j,i)+d_help_b(j+1,i))*dzs_deta(j,i)
368 vx_b_g(j,i) = -d_help_b(j,i)*dzs_dxi_g(j,i)
369 vy_b_g(j,i) = -d_help_b(j,i)*dzs_deta_g(j,i)
376 vh_max = vh_max/year_sec
380 vx_b(j,i) = max(vx_b(j,i), -vh_max)
381 vx_b(j,i) = min(vx_b(j,i), vh_max)
382 vy_b(j,i) = max(vy_b(j,i), -vh_max)
383 vy_b(j,i) = min(vy_b(j,i), vh_max)
384 vx_b_g(j,i) = max(vx_b_g(j,i), -vh_max)
385 vx_b_g(j,i) = min(vx_b_g(j,i), vh_max)
386 vy_b_g(j,i) = max(vy_b_g(j,i), -vh_max)
387 vy_b_g(j,i) = min(vy_b_g(j,i), vh_max)
Declarations of kind types for SICOPOLIS.
Declarations of global variables for SICOPOLIS (for the ANT domain).
subroutine calc_vxy_b_sia(time, z_sl)
Computation of the basal horizontal velocity vx_b, vy_b in the shallow ice approximation.
Declarations of global variables for SICOPOLIS.