38 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
40 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
51 integer(i4b),
intent(in) :: i, j
52 real(dp),
intent(in) :: at1(0:kcmax), at2_1(0:kcmax), at2_2(0:kcmax), &
53 at3_1(0:kcmax), at3_2(0:kcmax), &
54 at4_1(0:kcmax), at4_2(0:kcmax), &
55 at5(0:kcmax), at6(0:kcmax), at7, &
56 ai1(0:kcmax), ai2(0:kcmax), &
58 real(dp),
intent(in) :: dtime_temp, dtt_2dxi, dtt_2deta
60 integer(i4b) :: kc, kt, kr
61 real(dp) :: ct1(0:kcmax), ct2(0:kcmax), ct3(0:kcmax), ct4(0:kcmax), &
62 ce5(0:kcmax), ce6(0:kcmax), ce7(0:kcmax), ctr1, clb1
63 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
64 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
65 real(dp) :: ci1(0:kcmax), ci2(0:kcmax)
66 real(dp) :: temp_c_help(0:kcmax)
67 real(dp) :: vx_c_help, vy_c_help
68 real(dp) :: adv_vert_help
69 real(dp) :: dtt_dxi, dtt_deta
70 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
71 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
72 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
73 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
74 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
75 real(dp),
parameter :: zero=0.0_dp
79 if ((i == 0).or.(i == imax).or.(j == 0).or.(j == jmax)) &
80 stop
' calc_temp_enth_ssa: Boundary points not allowed.'
85 clb1 = alb1*q_geo(j,i)
90 ct1(kc) = at1(kc)/h_c(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
94 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
97 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
100 #elif (ADV_VERT==2 || ADV_VERT==3)
103 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
110 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
111 +at2_2(kc)*dh_c_dtau(j,i) )/h_c(j,i)
112 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
113 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c(j,i) &
114 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
115 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
116 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c(j,i) &
117 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
118 ce5(kc) = at5(kc)/h_c(j,i)
119 ce7(kc) = 2.0_dp*at7 &
121 temp_c(kc,j,i), temp_c_m(kc,j,i), 0.0_dp, &
122 enh_c(kc,j,i), 0_i2b) &
124 ci1(kc) = ai1(kc)/h_c(j,i)
131 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
132 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
133 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
134 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
135 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
137 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
138 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
139 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
140 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
141 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
143 #elif (ADV_VERT==2 || ADV_VERT==3)
146 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
147 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
148 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
149 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
150 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
156 temp_c_help(kc) = 0.5_dp*(temp_c(kc,j,i)+temp_c(kc+1,j,i))
159 ci2(kc) = ai2(kc)/h_c(j,i)
163 dtt_dxi = 2.0_dp*dtt_2dxi
164 dtt_deta = 2.0_dp*dtt_2deta
179 lgs_a1(kr) = 1.0_dp + 2.0_dp*ctr1
181 lgs_b(kr) = temp_r(kr,j,i)
191 lgs_b(kr) = 2.0_dp*clb1
199 lgs_b(kr) = temp_c_m(0,j,i)-delta_tm_sw
203 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, krmax)
208 temp_r_neu(kr,j,i) = lgs_x(kr)
223 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
225 lgs_a1(kc) = 1.0_dp+ce5(kc)*(ce6(kc)+ce6(kc-1))
226 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
232 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
236 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
237 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
238 +ce5(kc)*(ce6(kc)+ce6(kc-1))
240 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
245 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
248 = -max(adv_vert_help, 0.0_dp) &
252 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp) &
253 +ce5(kc)*(ce6(kc)+ce6(kc-1))
255 = min(adv_vert_help, 0.0_dp) &
262 lgs_b(kc) = enth_c(kc,j,i) + ce7(kc) &
264 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
265 *(enth_c(kc,j,i+1)-enth_c(kc,j,i)) &
267 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
268 *(enth_c(kc,j,i)-enth_c(kc,j,i-1)) &
269 *insq_g11_sgx(j,i-1) ) &
271 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
272 *(enth_c(kc,j+1,i)-enth_c(kc,j,i)) &
274 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
275 *(enth_c(kc,j,i)-enth_c(kc,j-1,i)) &
276 *insq_g22_sgy(j-1,i) )
280 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
281 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
283 lgs_b(kc) = enth_c(kc,j,i) + ce7(kc) &
285 ( min(vx_c_help, 0.0_dp) &
286 *(enth_c(kc,j,i+1)-enth_c(kc,j,i)) &
288 +max(vx_c_help, 0.0_dp) &
289 *(enth_c(kc,j,i)-enth_c(kc,j,i-1)) &
290 *insq_g11_sgx(j,i-1) ) &
292 ( min(vy_c_help, 0.0_dp) &
293 *(enth_c(kc,j+1,i)-enth_c(kc,j,i)) &
295 +max(vy_c_help, 0.0_dp) &
296 *(enth_c(kc,j,i)-enth_c(kc,j-1,i)) &
297 *insq_g22_sgy(j-1,i) )
311 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
316 enth_c_neu(kc,j,i) = lgs_x(kc)
317 temp_c_neu(kc,j,i) =
temp_fct_enth(enth_c_neu(kc,j,i), temp_c_m(kc,j,i))
318 omega_c_neu(kc,j,i) =
omega_fct_enth(enth_c_neu(kc,j,i), temp_c_m(kc,j,i))
325 enth_t_neu(kt,j,i) = enth_c_neu(0,j,i)
326 omega_t_neu(kt,j,i) = omega_c_neu(0,j,i)
336 lgs_a1(kc) = 1.0_dp - min(adv_vert_sg(kc), 0.0_dp)
337 lgs_a2(kc) = min(adv_vert_sg(kc), 0.0_dp)
341 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
343 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
344 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
346 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
347 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
348 *insq_g11_sgx(j,i-1) ) &
350 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
351 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
353 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
354 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
355 *insq_g22_sgy(j-1,i) )
359 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
360 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
362 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
364 ( min(vx_c_help, 0.0_dp) &
365 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
367 +max(vx_c_help, 0.0_dp) &
368 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
369 *insq_g11_sgx(j,i-1) ) &
371 ( min(vy_c_help, 0.0_dp) &
372 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
374 +max(vy_c_help, 0.0_dp) &
375 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
376 *insq_g22_sgy(j-1,i) )
384 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
386 lgs_a1(kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
387 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
392 lgs_a0(kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
393 lgs_a1(kc) = 1.0_dp &
394 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
395 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
396 lgs_a2(kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
400 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
402 lgs_a0(kc) = -max(adv_vert_help, 0.0_dp)
403 lgs_a1(kc) = 1.0_dp &
404 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp)
405 lgs_a2(kc) = min(adv_vert_help, 0.0_dp)
411 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
413 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
414 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
416 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
417 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
418 *insq_g11_sgx(j,i-1) ) &
420 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
421 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
423 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
424 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
425 *insq_g22_sgy(j-1,i) )
429 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
430 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
432 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
434 ( min(vx_c_help, 0.0_dp) &
435 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
437 +max(vx_c_help, 0.0_dp) &
438 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
439 *insq_g11_sgx(j,i-1) ) &
441 ( min(vy_c_help, 0.0_dp) &
442 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
444 +max(vy_c_help, 0.0_dp) &
445 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
446 *insq_g22_sgy(j-1,i) )
453 if (as_perp(j,i) >= zero)
then
458 lgs_a0(kc) = -max(adv_vert_sg(kc-1), 0.0_dp)
459 lgs_a1(kc) = 1.0_dp + max(adv_vert_sg(kc-1), 0.0_dp)
464 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
466 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
467 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
469 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
470 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
471 *insq_g11_sgx(j,i-1) ) &
473 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
474 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
476 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
477 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
478 *insq_g22_sgy(j-1,i) )
482 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
483 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
485 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
487 ( min(vx_c_help, 0.0_dp) &
488 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
490 +max(vx_c_help, 0.0_dp) &
491 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
492 *insq_g11_sgx(j,i-1) ) &
494 ( min(vy_c_help, 0.0_dp) &
495 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
497 +max(vy_c_help, 0.0_dp) &
498 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
499 *insq_g22_sgy(j-1,i) )
507 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
514 age_c_neu(kc,j,i) = lgs_x(kc)
516 if (age_c_neu(kc,j,i) < (age_min*year_sec)) &
517 age_c_neu(kc,j,i) = 0.0_dp
518 if (age_c_neu(kc,j,i) > (age_max*year_sec)) &
519 age_c_neu(kc,j,i) = age_max*year_sec
526 age_t_neu(kt,j,i) = age_c_neu(0,j,i)
subroutine tri_sle(a0, a1, a2, x, b, nrows)
Solution of a system of linear equations Ax=b with tridiagonal matrix A.
Declarations of kind types for SICOPOLIS.
real(dp) function viscosity(de_val, temp_val, temp_m_val, omega_val, enh_val, i_flag_cold_temp)
Ice viscosity as a function of the effective strain rate and the temperature (in cold ice) or the wat...
real(dp) function, public temp_fct_enth(enth_val, temp_m_val)
Temperature as a function of enthalpy.
Declarations of global variables for SICOPOLIS (for the ANT domain).
real(dp) function, public omega_fct_enth(enth_val, temp_m_val)
Water content as a function of enthalpy.
Solvers for systems of linear equations used by SICOPOLIS.
real(dp) function, public kappa_val(temp_val)
Heat conductivity of ice: Linear interpolation of tabulated values in KAPPA(.).
real(dp) function, public c_val(temp_val)
Specific heat of ice: Linear interpolation of tabulated values in C(.).
Material quantities of ice: Rate factor, heat conductivity, specific heat (heat capacity).
subroutine calc_temp_enth_ssa(at1, at2_1, at2_2, at3_1, at3_2, at4_1, at4_2, at5, at6, at7, atr1, alb1, ai1, ai2, dtime_temp, dtt_2dxi, dtt_2deta, i, j)
Computation of temperature and age for ice shelves (floating ice) with the enthalpy method...
Declarations of global variables for SICOPOLIS.
Conversion from temperature (temp) and water content (omega) to enthalpy (enth) and vice versa...
real(dp) function, public enth_fct_temp_omega(temp_val, omega_val)
Enthalpy as a function of temperature and water content.