38 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
39 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
40 ai1, ai2, ai3, dzeta_t, &
41 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), at4_1(0:kcmax), &
54 at4_2(0:kcmax), at5(0:kcmax), at6(0:kcmax), at7, &
55 ai1(0:kcmax), ai2(0:kcmax), ai3, &
57 real(dp),
intent(in) :: aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld
58 real(dp),
intent(in) :: dzeta_t, 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 ct5(0:kcmax), ct6(0:kcmax), ct7(0:kcmax), ctr1, cm1, cm2, &
64 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
65 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
66 real(dp) :: ci1(0:kcmax), ci2(0:kcmax), ci3
67 real(dp) :: cw1(0:ktmax), cw2(0:ktmax), cw3(0:ktmax), cw4(0:ktmax), &
68 cw5, cw7(0:ktmax), cw8, cw9(0:ktmax)
69 real(dp) :: cw1_sg(0:ktmax), cw2_sg(0:ktmax), cw3_sg(0:ktmax), &
70 cw4_sg(0:ktmax), adv_vert_w_sg(0:ktmax), abs_adv_vert_w_sg(0:ktmax)
71 real(dp) :: sigma_c_help(0:kcmax), sigma_t_help(0:ktmax), &
73 real(dp) :: vx_c_help, vy_c_help, vx_t_help, vy_t_help
74 real(dp) :: adv_vert_help, adv_vert_w_help
75 real(dp) :: dtt_dxi, dtt_deta
76 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
77 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
78 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
79 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
80 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
81 real(dp),
parameter :: zero=0.0_dp
85 if ((i == 0).or.(i == imax).or.(j == 0).or.(j == jmax)) &
86 stop
' calc_temp3: Boundary points not allowed.'
91 cm1 = am1*h_c_neu(j,i)
92 clb1 = alb1*q_geo(j,i)
97 ct1(kc) = at1(kc)/h_c_neu(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
101 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c_neu(j,i)*vz_c(kc,j,i)
104 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c_neu(j,i)*vz_c(kc,j,i)
107 #elif (ADV_VERT==2 || ADV_VERT==3)
110 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c_neu(j,i)*vz_c(kc,j,i)
117 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
118 +at2_2(kc)*dh_c_dtau(j,i) )/h_c_neu(j,i)
119 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
120 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c_neu(j,i) &
121 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
122 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
123 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c_neu(j,i) &
124 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
126 /
c_val(temp_c(kc,j,i)) &
130 = rho*g*h_c_neu(j,i)*(1.0_dp-eaz_c_quotient(kc)) &
131 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
134 if (.not.flag_shelfy_stream(j,i))
then
137 /
c_val(temp_c(kc,j,i)) &
139 *
ratefac_c(temp_c(kc,j,i), temp_c_m(kc,j,i)) &
140 *
creep(sigma_c_help(kc)) &
141 *sigma_c_help(kc)*sigma_c_help(kc)
144 ct7(kc) = 2.0_dp*at7 &
145 /
c_val(temp_c(kc,j,i)) &
147 temp_c(kc,j,i), temp_c_m(kc,j,i), 0.0_dp, &
148 enh_c(kc,j,i), 0_i2b) &
153 ci1(kc) = ai1(kc)/h_c_neu(j,i)
160 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
161 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
162 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
163 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
164 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
166 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
167 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
168 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
169 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
170 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
172 #elif (ADV_VERT==2 || ADV_VERT==3)
175 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
176 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
177 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
178 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
179 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
185 temp_c_help(kc) = 0.5_dp*(temp_c(kc,j,i)+temp_c(kc+1,j,i))
189 ci2(kc) = ai2(kc)/h_c_neu(j,i)
192 cw5 = aw5/(h_t_neu(j,i)**2)
194 ci3 = ai3/(h_t_neu(j,i)**2)
199 cw1(kt) = aw1/h_t_neu(j,i)*0.5_dp*(vz_t(kt,j,i)+vz_t(kt-1,j,i))
203 cw1(kt) = aw1/h_t_neu(j,i)*0.5_dp*(vz_t(kt-1,j,i)+vz_c(0,j,i))
206 cw1_sg(kt) = aw1/h_t_neu(j,i)*vz_t(kt,j,i)
209 cw1_sg(kt) = aw1/h_t_neu(j,i)*vz_t(kt,j,i)
212 #elif (ADV_VERT==2 || ADV_VERT==3)
215 cw1_sg(kt) = aw1/h_t_neu(j,i)*vz_t(kt,j,i)
222 *
c_val(temp_t_m(kt,j,i)) &
224 +0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))*dzs_dxi_g(j,i) &
225 +0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))*dzs_deta_g(j,i) &
226 -0.5_dp*(vz_t(kt,j,i)+vz_t(kt-1,j,i)) )
231 cw2(kt) = aw2*(dzb_dtau(j,i)+zeta_t(kt)*dh_t_dtau(j,i)) &
233 cw3(kt) = aw3*(dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
235 *0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1)) *insq_g11_g(j,i)
236 cw4(kt) = aw4*(dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
238 *0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i)) *insq_g22_g(j,i)
241 + rho*g*h_t_neu(j,i)*(1.0_dp-zeta_t(kt)) &
242 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
245 if (.not.flag_shelfy_stream(j,i))
then
250 *
creep(sigma_t_help(kt)) &
251 *sigma_t_help(kt)*sigma_t_help(kt)
254 cw7(kt) = 2.0_dp*aw7 &
256 temp_t_m(kt,j,i), temp_t_m(kt,j,i), &
258 enh_t(kt,j,i), 1_i2b) &
268 cw2_sg(kt) = 0.5_dp*(cw2(kt)+cw2(kt+1))
269 cw3_sg(kt) = 0.5_dp*(cw3(kt)+cw3(kt+1))
270 cw4_sg(kt) = 0.5_dp*(cw4(kt)+cw4(kt+1))
271 adv_vert_w_sg(kt) = cw1_sg(kt)-cw2_sg(kt)-cw3_sg(kt)-cw4_sg(kt)
272 abs_adv_vert_w_sg(kt) = abs(adv_vert_w_sg(kt))
274 cw2_sg(kt) = 0.5_dp*(cw2(kt)+cw2(kt+1))
275 cw3_sg(kt) = 0.5_dp*(cw3(kt)+cw3(kt+1))
276 cw4_sg(kt) = 0.5_dp*(cw4(kt)+cw4(kt+1))
277 adv_vert_w_sg(kt) = cw1_sg(kt)-cw2_sg(kt)-cw3_sg(kt)-cw4_sg(kt)
278 abs_adv_vert_w_sg(kt) = abs(adv_vert_w_sg(kt))
280 #elif (ADV_VERT==2 || ADV_VERT==3)
283 cw2_sg(kt) = 0.5_dp*(cw2(kt)+cw2(kt+1))
284 cw3_sg(kt) = 0.5_dp*(cw3(kt)+cw3(kt+1))
285 cw4_sg(kt) = 0.5_dp*(cw4(kt)+cw4(kt+1))
286 adv_vert_w_sg(kt) = cw1_sg(kt)-cw2_sg(kt)-cw3_sg(kt)-cw4_sg(kt)
287 abs_adv_vert_w_sg(kt) = abs(adv_vert_w_sg(kt))
293 dtt_dxi = 2.0_dp*dtt_2dxi
294 dtt_deta = 2.0_dp*dtt_2deta
309 lgs_a1(kr) = 1.0_dp + 2.0_dp*ctr1
311 lgs_b(kr) = temp_r(kr,j,i)
321 lgs_b(kr) = 2.0_dp*clb1
329 lgs_b(kr) = temp_t_m(0,j,i)
333 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, krmax)
338 temp_r_neu(kr,j,i) = lgs_x(kr)
353 lgs_a0(kt) = -0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - cw5
354 lgs_a1(kt) = 1.0_dp + 2.0_dp*cw5
355 lgs_a2(kt) = 0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - cw5
360 = -0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1)) &
364 +0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1)) &
365 -0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) ) &
368 = 0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) ) &
373 adv_vert_w_help = 0.5_dp*(adv_vert_w_sg(kt)+adv_vert_w_sg(kt-1))
376 = -max(adv_vert_w_help, 0.0_dp) &
380 +max(adv_vert_w_help, 0.0_dp)-min(adv_vert_w_help, 0.0_dp) &
383 = min(adv_vert_w_help, 0.0_dp) &
390 lgs_b(kt) = omega_t(kt,j,i) + cw7(kt) + cw8 + cw9(kt) &
392 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
393 *(omega_t(kt,j,i+1)-omega_t(kt,j,i)) &
395 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
396 *(omega_t(kt,j,i)-omega_t(kt,j,i-1)) &
397 *insq_g11_sgx(j,i-1) ) &
399 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
400 *(omega_t(kt,j+1,i)-omega_t(kt,j,i)) &
402 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
403 *(omega_t(kt,j,i)-omega_t(kt,j-1,i)) &
404 *insq_g22_sgy(j-1,i) )
408 vx_t_help = 0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))
409 vy_t_help = 0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))
411 lgs_b(kt) = omega_t(kt,j,i) + cw7(kt) + cw8 + cw9(kt) &
413 ( min(vx_t_help, 0.0_dp) &
414 *(omega_t(kt,j,i+1)-omega_t(kt,j,i)) &
416 +max(vx_t_help, 0.0_dp) &
417 *(omega_t(kt,j,i)-omega_t(kt,j,i-1)) &
418 *insq_g11_sgx(j,i-1) ) &
420 ( min(vy_t_help, 0.0_dp) &
421 *(omega_t(kt,j+1,i)-omega_t(kt,j,i)) &
423 +max(vy_t_help, 0.0_dp) &
424 *(omega_t(kt,j,i)-omega_t(kt,j-1,i)) &
425 *insq_g22_sgy(j-1,i) )
433 #if ( !defined(CTS_MELTING_FREEZING) || CTS_MELTING_FREEZING==1 )
435 if (am_perp(j,i) >= zero)
then
445 #elif (CTS_MELTING_FREEZING==2)
452 stop
' calc_temp3: CTS_MELTING_FREEZING must be either 1 or 2!'
457 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, ktmax)
465 if (lgs_x(kt) < zero)
then
466 omega_t_neu(kt,j,i) = 0.0_dp
467 else if (lgs_x(kt) < omega_max)
then
468 omega_t_neu(kt,j,i) = lgs_x(kt)
470 omega_t_neu(kt,j,i) = omega_max
471 q_tld(j,i) = q_tld(j,i) &
472 +aqtld*h_t_neu(j,i)*(lgs_x(kt)-omega_max)
482 #if ( !defined(CTS_MELTING_FREEZING) || CTS_MELTING_FREEZING==1 )
484 if (am_perp(j,i) >= zero)
then
487 cm2 = am2*h_c_neu(j,i)*omega_t_neu(ktmax,j,i)*am_perp(j,i) &
491 #elif (CTS_MELTING_FREEZING==2)
496 stop
' calc_temp3: CTS_MELTING_FREEZING must be either 1 or 2!'
508 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
510 lgs_a1(kc) = 1.0_dp+ct5(kc)*(ct6(kc)+ct6(kc-1))
511 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
517 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
521 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
522 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
523 +ct5(kc)*(ct6(kc)+ct6(kc-1))
525 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
530 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
533 = -max(adv_vert_help, 0.0_dp) &
537 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp) &
538 +ct5(kc)*(ct6(kc)+ct6(kc-1))
540 = min(adv_vert_help, 0.0_dp) &
547 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
549 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
550 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
552 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
553 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
554 *insq_g11_sgx(j,i-1) ) &
556 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
557 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
559 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
560 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
561 *insq_g22_sgy(j-1,i) )
565 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
566 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
568 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
570 ( min(vx_c_help, 0.0_dp) &
571 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
573 +max(vx_c_help, 0.0_dp) &
574 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
575 *insq_g11_sgx(j,i-1) ) &
577 ( min(vy_c_help, 0.0_dp) &
578 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
580 +max(vy_c_help, 0.0_dp) &
581 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
582 *insq_g22_sgy(j-1,i) )
591 lgs_b(kc) = temp_s(j,i)
595 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
600 temp_c_neu(kc,j,i) = lgs_x(kc)
607 lgs_a1(kt) = 1.0_dp - min(adv_vert_w_sg(kt), 0.0_dp)
608 lgs_a2(kt) = min(adv_vert_w_sg(kt), 0.0_dp)
612 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
614 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
615 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
617 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
618 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
619 *insq_g11_sgx(j,i-1) ) &
621 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
622 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
624 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
625 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
626 *insq_g22_sgy(j-1,i) )
630 vx_t_help = 0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))
631 vy_t_help = 0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))
633 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
635 ( min(vx_t_help, 0.0_dp) &
636 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
638 +max(vx_t_help, 0.0_dp) &
639 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
640 *insq_g11_sgx(j,i-1) ) &
642 ( min(vy_t_help, 0.0_dp) &
643 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
645 +max(vy_t_help, 0.0_dp) &
646 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
647 *insq_g22_sgy(j-1,i) )
655 lgs_a0(kt) = -0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
656 lgs_a1(kt) = 1.0_dp + 2.0_dp*ci3
657 lgs_a2(kt) = 0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
661 lgs_a0(kt) = -0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1))
662 lgs_a1(kt) = 1.0_dp &
663 +0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1)) &
664 -0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) )
665 lgs_a2(kt) = 0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) )
669 adv_vert_w_help = 0.5_dp*(adv_vert_w_sg(kt)+adv_vert_w_sg(kt-1))
671 lgs_a0(kt) = -max(adv_vert_w_help, 0.0_dp)
672 lgs_a1(kt) = 1.0_dp &
673 +max(adv_vert_w_help, 0.0_dp)-min(adv_vert_w_help, 0.0_dp)
674 lgs_a2(kt) = min(adv_vert_w_help, 0.0_dp)
680 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
682 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
683 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
685 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
686 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
687 *insq_g11_sgx(j,i-1) ) &
689 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
690 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
692 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
693 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
694 *insq_g22_sgy(j-1,i) )
698 vx_t_help = 0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))
699 vy_t_help = 0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))
701 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
703 ( min(vx_t_help, 0.0_dp) &
704 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
706 +max(vx_t_help, 0.0_dp) &
707 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
708 *insq_g11_sgx(j,i-1) ) &
710 ( min(vy_t_help, 0.0_dp) &
711 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
713 +max(vy_t_help, 0.0_dp) &
714 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
715 *insq_g22_sgy(j-1,i) )
726 lgs_a0(kt) = -0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
727 lgs_a1(kt) = 1.0_dp + 2.0_dp*ci3
728 lgs_a2(kt) = 0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
732 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
734 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
735 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
737 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
738 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
739 *insq_g11_sgx(j,i-1) ) &
741 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
742 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
744 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
745 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
746 *insq_g22_sgy(j-1,i) )
750 vx_t_help = 0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))
751 vy_t_help = 0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))
753 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
755 ( min(vx_t_help, 0.0_dp) &
756 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
758 +max(vx_t_help, 0.0_dp) &
759 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
760 *insq_g11_sgx(j,i-1) ) &
762 ( min(vy_t_help, 0.0_dp) &
763 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
765 +max(vy_t_help, 0.0_dp) &
766 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
767 *insq_g22_sgy(j-1,i) )
771 #elif (ADV_VERT==2 || ADV_VERT==3)
776 if (adv_vert_sg(kc) <= zero)
then
778 lgs_a0(ktmax+kc) = 0.0_dp
779 lgs_a1(ktmax+kc) = 1.0_dp - adv_vert_sg(kc)
780 lgs_a2(ktmax+kc) = adv_vert_sg(kc)
784 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
786 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
787 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
789 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
790 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
791 *insq_g11_sgx(j,i-1) ) &
793 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
794 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
796 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
797 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
798 *insq_g22_sgy(j-1,i) )
802 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
803 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
805 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
807 ( min(vx_c_help, 0.0_dp) &
808 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
810 +max(vx_c_help, 0.0_dp) &
811 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
812 *insq_g11_sgx(j,i-1) ) &
814 ( min(vy_c_help, 0.0_dp) &
815 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
817 +max(vy_c_help, 0.0_dp) &
818 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
819 *insq_g22_sgy(j-1,i) )
823 else if (adv_vert_w_sg(kt-1) >= zero)
then
825 lgs_a0(kt) = -adv_vert_w_sg(kt-1)
826 lgs_a1(kt) = 1.0_dp + adv_vert_w_sg(kt-1)
831 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
833 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
834 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
836 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
837 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
838 *insq_g11_sgx(j,i-1) ) &
840 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
841 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
843 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
844 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
845 *insq_g22_sgy(j-1,i) )
849 vx_t_help = 0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))
850 vy_t_help = 0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))
852 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
854 ( min(vx_t_help, 0.0_dp) &
855 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
857 +max(vx_t_help, 0.0_dp) &
858 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
859 *insq_g11_sgx(j,i-1) ) &
861 ( min(vy_t_help, 0.0_dp) &
862 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
864 +max(vy_t_help, 0.0_dp) &
865 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
866 *insq_g22_sgy(j-1,i) )
886 lgs_a0(ktmax+kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
888 lgs_a1(ktmax+kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
889 lgs_a2(ktmax+kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
894 lgs_a0(ktmax+kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
895 lgs_a1(ktmax+kc) = 1.0_dp &
896 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
897 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
898 lgs_a2(ktmax+kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
902 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
904 lgs_a0(ktmax+kc) = -max(adv_vert_help, 0.0_dp)
905 lgs_a1(ktmax+kc) = 1.0_dp &
906 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp)
907 lgs_a2(ktmax+kc) = min(adv_vert_help, 0.0_dp)
913 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
915 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
916 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
918 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
919 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
920 *insq_g11_sgx(j,i-1) ) &
922 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
923 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
925 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
926 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
927 *insq_g22_sgy(j-1,i) )
931 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
932 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
934 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
936 ( min(vx_c_help, 0.0_dp) &
937 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
939 +max(vx_c_help, 0.0_dp) &
940 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
941 *insq_g11_sgx(j,i-1) ) &
943 ( min(vy_c_help, 0.0_dp) &
944 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
946 +max(vy_c_help, 0.0_dp) &
947 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
948 *insq_g22_sgy(j-1,i) )
955 if (as_perp(j,i) >= zero)
then
956 lgs_a0(ktmax+kc) = 0.0_dp
957 lgs_a1(ktmax+kc) = 1.0_dp
958 lgs_b(ktmax+kc) = 0.0_dp
960 lgs_a0(ktmax+kc) = -max(adv_vert_sg(kc-1), 0.0_dp)
961 lgs_a1(ktmax+kc) = 1.0_dp + max(adv_vert_sg(kc-1), 0.0_dp)
966 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
968 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
969 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
971 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
972 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
973 *insq_g11_sgx(j,i-1) ) &
975 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
976 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
978 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
979 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
980 *insq_g22_sgy(j-1,i) )
984 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
985 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
987 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
989 ( min(vx_c_help, 0.0_dp) &
990 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
992 +max(vx_c_help, 0.0_dp) &
993 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
994 *insq_g11_sgx(j,i-1) ) &
996 ( min(vy_c_help, 0.0_dp) &
997 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
999 +max(vy_c_help, 0.0_dp) &
1000 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
1001 *insq_g22_sgy(j-1,i) )
1009 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax+ktmax)
1016 age_t_neu(kt,j,i) = lgs_x(kt)
1018 if (age_t_neu(kt,j,i) < (age_min*year_sec)) &
1019 age_t_neu(kt,j,i) = 0.0_dp
1020 if (age_t_neu(kt,j,i) > (age_max*year_sec)) &
1021 age_t_neu(kt,j,i) = age_max*year_sec
1027 age_c_neu(kc,j,i) = lgs_x(ktmax+kc)
1029 if (age_c_neu(kc,j,i) < (age_min*year_sec)) &
1030 age_c_neu(kc,j,i) = 0.0_dp
1031 if (age_c_neu(kc,j,i) > (age_max*year_sec)) &
1032 age_c_neu(kc,j,i) = age_max*year_sec
subroutine tri_sle(a0, a1, a2, x, b, nrows)
Solution of a system of linear equations Ax=b with tridiagonal matrix A.
subroutine calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, ai1, ai2, ai3, dzeta_t, dtime_temp, dtt_2dxi, dtt_2deta, i, j)
Computation of temperature, water content and age for an ice column with a temperate base overlain by...
real(dp) function, public ratefac_t(omega_val)
Rate factor for temperate ice.
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.