36 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
38 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
48 integer(i4b),
intent(in) :: i, j
49 real(dp),
intent(in) :: at1(0:kcmax), at2_1(0:kcmax), at2_2(0:kcmax), &
50 at3_1(0:kcmax), at3_2(0:kcmax), at4_1(0:kcmax), &
51 at4_2(0:kcmax), at5(0:kcmax), at6(0:kcmax), at7, &
52 ai1(0:kcmax), ai2(0:kcmax), &
54 real(dp),
intent(in) :: dtime_temp, dtt_2dxi, dtt_2deta
56 integer(i4b) :: kc, kt, kr
57 real(dp) :: ct1(0:kcmax), ct2(0:kcmax), ct3(0:kcmax), ct4(0:kcmax), &
58 ct5(0:kcmax), ct6(0:kcmax), ct7(0:kcmax), ctr1, clb1
59 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
60 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
61 real(dp) :: ci1(0:kcmax), ci2(0:kcmax)
62 real(dp) :: temp_c_help(0:kcmax)
63 real(dp) :: vx_c_help, vy_c_help
64 real(dp) :: adv_vert_help
65 real(dp) :: dtt_dxi, dtt_deta
66 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
67 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
68 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
69 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
70 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
71 real(dp),
parameter :: zero=0.0_dp
75 if ((i == 0).or.(i == imax).or.(j == 0).or.(j == jmax)) &
76 stop
' calc_temp_ssa: Boundary points not allowed.'
81 clb1 = alb1*q_geo(j,i)
86 ct1(kc) = at1(kc)/h_c(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
90 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
93 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
96 #elif ( ADV_VERT==2 || ADV_VERT==3 )
99 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
106 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
107 +at2_2(kc)*dh_c_dtau(j,i) )/h_c(j,i)
108 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
109 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c(j,i) &
110 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
111 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
112 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c(j,i) &
113 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
115 /
c_val(temp_c(kc,j,i)) &
117 ct7(kc) = 2.0_dp*at7 &
118 /
c_val(temp_c(kc,j,i)) &
120 temp_c(kc,j,i), temp_c_m(kc,j,i), 0.0_dp, &
121 enh_c(kc,j,i), 0_i2b) &
123 ci1(kc) = ai1(kc)/h_c(j,i)
130 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
131 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
132 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
133 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
134 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
136 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
137 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
138 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
139 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
140 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
142 #elif ( ADV_VERT==2 || ADV_VERT==3 )
145 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
146 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
147 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
148 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
149 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
155 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)
216 lgs_b(kc) = temp_c_m(0,j,i)-delta_tm_sw
222 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
224 lgs_a1(kc) = 1.0_dp+ct5(kc)*(ct6(kc)+ct6(kc-1))
225 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
231 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
235 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
236 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
237 +ct5(kc)*(ct6(kc)+ct6(kc-1))
239 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
244 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
247 = -max(adv_vert_help, 0.0_dp) &
251 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp) &
252 +ct5(kc)*(ct6(kc)+ct6(kc-1))
254 = min(adv_vert_help, 0.0_dp) &
261 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
263 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
264 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
266 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
267 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
268 *insq_g11_sgx(j,i-1) ) &
270 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
271 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
273 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
274 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
275 *insq_g22_sgy(j-1,i) )
279 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
280 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
282 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
284 ( min(vx_c_help, 0.0_dp) &
285 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
287 +max(vx_c_help, 0.0_dp) &
288 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
289 *insq_g11_sgx(j,i-1) ) &
291 ( min(vy_c_help, 0.0_dp) &
292 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
294 +max(vy_c_help, 0.0_dp) &
295 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
296 *insq_g22_sgy(j-1,i) )
305 lgs_b(kc) = temp_s(j,i)
309 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
314 temp_c_neu(kc,j,i) = lgs_x(kc)
321 omega_t_neu(kt,j,i) = 0.0_dp
331 lgs_a1(kc) = 1.0_dp - min(adv_vert_sg(kc), 0.0_dp)
332 lgs_a2(kc) = min(adv_vert_sg(kc), 0.0_dp)
336 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
338 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
339 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
341 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
342 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
343 *insq_g11_sgx(j,i-1) ) &
345 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
346 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
348 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
349 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
350 *insq_g22_sgy(j-1,i) )
354 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
355 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
357 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
359 ( min(vx_c_help, 0.0_dp) &
360 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
362 +max(vx_c_help, 0.0_dp) &
363 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
364 *insq_g11_sgx(j,i-1) ) &
366 ( min(vy_c_help, 0.0_dp) &
367 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
369 +max(vy_c_help, 0.0_dp) &
370 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
371 *insq_g22_sgy(j-1,i) )
379 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
381 lgs_a1(kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
382 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
387 lgs_a0(kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
388 lgs_a1(kc) = 1.0_dp &
389 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
390 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
391 lgs_a2(kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
395 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
397 lgs_a0(kc) = -max(adv_vert_help, 0.0_dp)
398 lgs_a1(kc) = 1.0_dp &
399 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp)
400 lgs_a2(kc) = min(adv_vert_help, 0.0_dp)
406 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
408 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
409 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
411 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
412 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
413 *insq_g11_sgx(j,i-1) ) &
415 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
416 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
418 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
419 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
420 *insq_g22_sgy(j-1,i) )
424 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
425 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
427 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
429 ( min(vx_c_help, 0.0_dp) &
430 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
432 +max(vx_c_help, 0.0_dp) &
433 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
434 *insq_g11_sgx(j,i-1) ) &
436 ( min(vy_c_help, 0.0_dp) &
437 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
439 +max(vy_c_help, 0.0_dp) &
440 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
441 *insq_g22_sgy(j-1,i) )
448 if (as_perp(j,i) >= zero)
then
453 lgs_a0(kc) = -max(adv_vert_sg(kc-1), 0.0_dp)
454 lgs_a1(kc) = 1.0_dp + max(adv_vert_sg(kc-1), 0.0_dp)
459 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
461 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
462 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
464 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
465 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
466 *insq_g11_sgx(j,i-1) ) &
468 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
469 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
471 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
472 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
473 *insq_g22_sgy(j-1,i) )
477 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
478 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
480 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
482 ( min(vx_c_help, 0.0_dp) &
483 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
485 +max(vx_c_help, 0.0_dp) &
486 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
487 *insq_g11_sgx(j,i-1) ) &
489 ( min(vy_c_help, 0.0_dp) &
490 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
492 +max(vy_c_help, 0.0_dp) &
493 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
494 *insq_g22_sgy(j-1,i) )
502 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
509 age_c_neu(kc,j,i) = lgs_x(kc)
511 if (age_c_neu(kc,j,i) < (age_min*year_sec)) &
512 age_c_neu(kc,j,i) = 0.0_dp
513 if (age_c_neu(kc,j,i) > (age_max*year_sec)) &
514 age_c_neu(kc,j,i) = age_max*year_sec
521 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).
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_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).
Declarations of global variables for SICOPOLIS.