38 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
40 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
50 integer(i4b),
intent(in) :: i, j
51 real(dp),
intent(in) :: at1(0:kcmax), at2_1(0:kcmax), at2_2(0:kcmax), &
52 at3_1(0:kcmax), at3_2(0:kcmax), at4_1(0:kcmax), &
53 at4_2(0:kcmax), at5(0:kcmax), at6(0:kcmax), at7, &
54 ai1(0:kcmax), ai2(0:kcmax), &
56 real(dp),
intent(in) :: dtime_temp, dtt_2dxi, dtt_2deta
58 integer(i4b) :: kc, kt, kr
59 real(dp) :: ct1(0:kcmax), ct2(0:kcmax), ct3(0:kcmax), ct4(0:kcmax), &
60 ct5(0:kcmax), ct6(0:kcmax), ct7(0:kcmax), ctr1, clb1
61 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
62 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
63 real(dp) :: ci1(0:kcmax), ci2(0:kcmax)
64 real(dp) :: temp_c_help(0:kcmax)
65 real(dp) :: vx_c_help, vy_c_help
66 real(dp) :: adv_vert_help
67 real(dp) :: dtt_dxi, dtt_deta
68 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
69 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
70 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
71 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
72 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
73 real(dp),
parameter :: zero=0.0_dp
77 if ((i == 0).or.(i == imax).or.(j == 0).or.(j == jmax)) &
78 stop
' calc_temp2: Boundary points not allowed.'
83 clb1 = alb1*q_geo(j,i)
88 ct1(kc) = at1(kc)/h_c(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
92 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
95 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
98 #elif (ADV_VERT==2 || ADV_VERT==3)
101 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
108 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
109 +at2_2(kc)*dh_c_dtau(j,i) )/h_c(j,i)
110 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
111 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c(j,i) &
112 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
113 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
114 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c(j,i) &
115 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
117 /
c_val(temp_c(kc,j,i)) &
121 if (.not.flag_shelfy_stream(j,i))
then
124 /
c_val(temp_c(kc,j,i)) &
126 *
ratefac_c(temp_c(kc,j,i), temp_c_m(kc,j,i)) &
127 *
creep(sigma_c(kc,j,i)) &
128 *sigma_c(kc,j,i)*sigma_c(kc,j,i)
131 ct7(kc) = 2.0_dp*at7 &
132 /
c_val(temp_c(kc,j,i)) &
134 temp_c(kc,j,i), temp_c_m(kc,j,i), 0.0_dp, &
135 enh_c(kc,j,i), 0_i2b) &
140 ci1(kc) = ai1(kc)/h_c(j,i)
147 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
148 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
149 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
150 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
151 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
153 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
154 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
155 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
156 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
157 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
159 #elif (ADV_VERT==2 || ADV_VERT==3)
162 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
163 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
164 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
165 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
166 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
172 temp_c_help(kc) = 0.5_dp*(temp_c(kc,j,i)+temp_c(kc+1,j,i))
176 ci2(kc) = ai2(kc)/h_c(j,i)
180 dtt_dxi = 2.0_dp*dtt_2dxi
181 dtt_deta = 2.0_dp*dtt_2deta
196 lgs_a1(kr) = 1.0_dp + 2.0_dp*ctr1
198 lgs_b(kr) = temp_r(kr,j,i)
208 lgs_b(kr) = 2.0_dp*clb1
216 lgs_b(kr) = temp_t_m(0,j,i)
220 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, krmax)
225 temp_r_neu(kr,j,i) = lgs_x(kr)
233 lgs_b(kc) = temp_c_m(0,j,i)
239 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
241 lgs_a1(kc) = 1.0_dp+ct5(kc)*(ct6(kc)+ct6(kc-1))
242 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
248 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
252 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
253 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
254 +ct5(kc)*(ct6(kc)+ct6(kc-1))
256 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
261 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
264 = -max(adv_vert_help, 0.0_dp) &
268 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp) &
269 +ct5(kc)*(ct6(kc)+ct6(kc-1))
271 = min(adv_vert_help, 0.0_dp) &
278 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
280 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
281 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
283 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
284 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
285 *insq_g11_sgx(j,i-1) ) &
287 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
288 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
290 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
291 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
292 *insq_g22_sgy(j-1,i) )
296 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
297 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
299 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
301 ( min(vx_c_help, 0.0_dp) &
302 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
304 +max(vx_c_help, 0.0_dp) &
305 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
306 *insq_g11_sgx(j,i-1) ) &
308 ( min(vy_c_help, 0.0_dp) &
309 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
311 +max(vy_c_help, 0.0_dp) &
312 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
313 *insq_g22_sgy(j-1,i) )
322 lgs_b(kc) = temp_s(j,i)
326 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
331 temp_c_neu(kc,j,i) = lgs_x(kc)
338 omega_t_neu(kt,j,i) = 0.0_dp
348 lgs_a1(kc) = 1.0_dp - min(adv_vert_sg(kc), 0.0_dp)
349 lgs_a2(kc) = min(adv_vert_sg(kc), 0.0_dp)
353 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
355 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
356 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
358 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
359 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
360 *insq_g11_sgx(j,i-1) ) &
362 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
363 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
365 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
366 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
367 *insq_g22_sgy(j-1,i) )
371 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
372 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
374 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
376 ( min(vx_c_help, 0.0_dp) &
377 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
379 +max(vx_c_help, 0.0_dp) &
380 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
381 *insq_g11_sgx(j,i-1) ) &
383 ( min(vy_c_help, 0.0_dp) &
384 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
386 +max(vy_c_help, 0.0_dp) &
387 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
388 *insq_g22_sgy(j-1,i) )
396 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
398 lgs_a1(kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
399 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
404 lgs_a0(kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
405 lgs_a1(kc) = 1.0_dp &
406 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
407 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
408 lgs_a2(kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
412 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
414 lgs_a0(kc) = -max(adv_vert_help, 0.0_dp)
415 lgs_a1(kc) = 1.0_dp &
416 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp)
417 lgs_a2(kc) = min(adv_vert_help, 0.0_dp)
423 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
425 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
426 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
428 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
429 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
430 *insq_g11_sgx(j,i-1) ) &
432 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
433 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
435 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
436 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
437 *insq_g22_sgy(j-1,i) )
441 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
442 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
444 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
446 ( min(vx_c_help, 0.0_dp) &
447 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
449 +max(vx_c_help, 0.0_dp) &
450 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
451 *insq_g11_sgx(j,i-1) ) &
453 ( min(vy_c_help, 0.0_dp) &
454 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
456 +max(vy_c_help, 0.0_dp) &
457 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
458 *insq_g22_sgy(j-1,i) )
465 if (as_perp(j,i) >= zero)
then
470 lgs_a0(kc) = -max(adv_vert_sg(kc-1), 0.0_dp)
471 lgs_a1(kc) = 1.0_dp + max(adv_vert_sg(kc-1), 0.0_dp)
476 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
478 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
479 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
481 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
482 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
483 *insq_g11_sgx(j,i-1) ) &
485 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
486 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
488 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
489 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
490 *insq_g22_sgy(j-1,i) )
494 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
495 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
497 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
499 ( min(vx_c_help, 0.0_dp) &
500 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
502 +max(vx_c_help, 0.0_dp) &
503 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
504 *insq_g11_sgx(j,i-1) ) &
506 ( min(vy_c_help, 0.0_dp) &
507 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
509 +max(vy_c_help, 0.0_dp) &
510 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
511 *insq_g22_sgy(j-1,i) )
519 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
526 age_c_neu(kc,j,i) = lgs_x(kc)
528 if (age_c_neu(kc,j,i) < (age_min*year_sec)) &
529 age_c_neu(kc,j,i) = 0.0_dp
530 if (age_c_neu(kc,j,i) > (age_max*year_sec)) &
531 age_c_neu(kc,j,i) = age_max*year_sec
538 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...
Declarations of global variables for SICOPOLIS (for the ANT domain).
real(dp) function, public ratefac_c(temp_val, temp_m_val)
Rate factor for cold ice: Linear interpolation of tabulated values in RF(.).
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).
Declarations of global variables for SICOPOLIS.
real(dp) function creep(sigma_val)
Creep response function for ice.
subroutine calc_temp2(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 an ice column with a temperate base overlain by cold ice...