45 real(dp),
intent(in) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
46 real(dp),
intent(in) :: dtime_temp
48 integer(i4b) :: i, j, kc, kt, kr, ii, jj
49 real(dp) :: 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 acb1, acb2, acb3, acb4, &
53 ai1(0:kcmax), ai2(0:kcmax), ai3, &
55 real(dp) :: aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld
56 real(dp) :: dtime_temp_inv, dtt_2dxi, dtt_2deta
57 real(dp) :: temp_c_help(0:kcmax)
58 real(dp) :: fact_thick
59 real(dp) :: time_lag_cts
60 real(dp) :: vol_t, vol_t_smooth, korrfakt_t, &
61 dh_t_smooth(0:jmax,0:imax)
65 at7 = 2.0_dp/rho*dtime_temp
67 aw1 = dtime_temp/dzeta_t
68 aw2 = dtime_temp/dzeta_t
69 aw3 = dtime_temp/dzeta_t
70 aw4 = dtime_temp/dzeta_t
71 aw5 = nue/rho*dtime_temp/(dzeta_t**2)
72 aw7 = 2.0_dp/(rho*l)*dtime_temp
73 aw8 = beta**2/(rho*l) &
75 aw9 = beta/l*dtime_temp
77 ai3 = agediff*dtime_temp/(dzeta_t**2)
79 atr1 = kappa_r/(rho_c_r*h_r**2)*dtime_temp/(dzeta_r**2)
81 if (flag_aa_nonzero)
then
82 am1 = aa*beta*dzeta_c/(ea-1.0_dp)
83 am2 = aa*l*rho*dzeta_c/(ea-1.0_dp)
89 if (flag_aa_nonzero)
then
90 acb1 = (ea-1.0_dp)/aa/dzeta_c
95 acb2 = kappa_r/h_r/dzeta_r
99 alb1 = h_r/kappa_r*dzeta_r
101 aqtld = dzeta_t/dtime_temp
103 dtt_2dxi = 0.5_dp*dtime_temp/dxi
104 dtt_2deta = 0.5_dp*dtime_temp/deta
106 dtime_temp_inv = 1.0_dp/dtime_temp
110 if (flag_aa_nonzero)
then
112 at1(kc) = (ea-1.0_dp)/(aa*eaz_c(kc))*dtime_temp/dzeta_c
113 at2_1(kc) = (ea-1.0_dp)/(aa*eaz_c(kc))*dtime_temp/dzeta_c
114 at2_2(kc) = (eaz_c(kc)-1.0_dp)/(aa*eaz_c(kc)) &
116 at3_1(kc) = (ea-1.0_dp)/(aa*eaz_c(kc))*dtime_temp/dzeta_c
117 at3_2(kc) = (eaz_c(kc)-1.0_dp)/(aa*eaz_c(kc)) &
119 at4_1(kc) = (ea-1.0_dp)/(aa*eaz_c(kc))*dtime_temp/dzeta_c
120 at4_2(kc) = (eaz_c(kc)-1.0_dp)/(aa*eaz_c(kc)) &
122 at5(kc) = (ea-1.0_dp)/(rho*aa*eaz_c(kc)) &
124 if (kc /= kcmax)
then
125 at6(kc) = (ea-1.0_dp) &
126 /(aa*exp(aa*0.5_dp*(zeta_c(kc)+zeta_c(kc+1)))) &
131 ai1(kc) = agediff*(ea-1.0_dp)/(aa*eaz_c(kc)) &
133 if (kc /= kcmax)
then
134 ai2(kc) = (ea-1.0_dp) &
135 /(aa*exp(aa*0.5_dp*(zeta_c(kc)+zeta_c(kc+1)))) &
143 at1(kc) = dtime_temp/dzeta_c
144 at2_1(kc) = dtime_temp/dzeta_c
145 at2_2(kc) = zeta_c(kc) &
147 at3_1(kc) = dtime_temp/dzeta_c
148 at3_2(kc) = zeta_c(kc) &
150 at4_1(kc) = dtime_temp/dzeta_c
151 at4_2(kc) = zeta_c(kc) &
153 at5(kc) = 1.0_dp/rho &
155 if (kc /= kcmax)
then
163 if (kc /= kcmax)
then
179 if (maske(j,i)==0)
then
183 if (n_cts(j,i).eq.-1)
then
185 n_cts_neu(j,i) = n_cts(j,i)
186 zm_neu(j,i) = zb(j,i)
187 h_c_neu(j,i) = h_c(j,i)
188 h_t_neu(j,i) = h_t(j,i)
190 call
calc_temp1(at1, at2_1, at2_2, at3_1, at3_2, &
191 at4_1, at4_2, at5, at6, at7, atr1, acb1, acb2, &
192 acb3, acb4, alb1, ai1, ai2, &
193 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
197 if (temp_c_neu(0,j,i).gt.temp_c_m(0,j,i))
then
201 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
202 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
204 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
211 ( n_cts_neu(j,i).eq.0 ).and. &
212 ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
213 .gt.(am1*h_c_neu(j,i)) ) &
217 zm_neu(j,i) = zb(j,i)+0.001_dp
218 h_c_neu(j,i) = h_c(j,i)-0.001_dp
219 h_t_neu(j,i) = h_t(j,i)+0.001_dp
222 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
223 at4_1, at4_2, at5, at6, at7, atr1, &
225 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
226 ai1, ai2, ai3, dzeta_t, &
227 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
230 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
231 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
232 ai1, ai2, ai3, dzeta_t, &
233 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
240 else if (n_cts(j,i).eq.0)
then
242 n_cts_neu(j,i) = n_cts(j,i)
243 zm_neu(j,i) = zb(j,i)
244 h_c_neu(j,i) = h_c(j,i)
245 h_t_neu(j,i) = h_t(j,i)
247 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
248 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
250 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
254 if ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
255 .lt. (am1*h_c(j,i)) )
then
259 call
calc_temp1(at1, at2_1, at2_2, at3_1, at3_2, &
260 at4_1, at4_2, at5, at6, at7, atr1, acb1, acb2, &
261 acb3, acb4, alb1, ai1, ai2, &
262 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
264 if (temp_c_neu(0,j,i).ge.temp_c_m(0,j,i))
then
268 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
269 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
271 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
280 ( n_cts_neu(j,i).eq.0 ).and. &
281 ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
282 .gt.(am1*h_c_neu(j,i)) ) &
286 zm_neu(j,i) = zb(j,i)+0.001_dp
287 h_c_neu(j,i) = h_c(j,i)-0.001_dp
288 h_t_neu(j,i) = h_t(j,i)+0.001_dp
291 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
292 at4_1, at4_2, at5, at6, at7, atr1, &
294 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
295 ai1, ai2, ai3, dzeta_t, &
296 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
299 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
300 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
301 ai1, ai2, ai3, dzeta_t, &
302 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
311 n_cts_neu(j,i) = n_cts(j,i)
312 zm_neu(j,i) = zm(j,i)
313 h_c_neu(j,i) = h_c(j,i)
314 h_t_neu(j,i) = h_t(j,i)
316 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
317 at4_1, at4_2, at5, at6, at7, atr1, &
319 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
320 ai1, ai2, ai3, dzeta_t, &
321 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
323 if ( (temp_c_neu(0,j,i)-(-beta*h_c_neu(j,i))).gt.0.0_dp ) &
326 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
327 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
328 ai1, ai2, ai3, dzeta_t, &
329 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
333 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
334 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
335 ai1, ai2, ai3, dzeta_t, &
336 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
344 else if (maske(j,i)==3)
then
347 zm_neu(j,i) = zb(j,i)
348 h_c_neu(j,i) = h_c(j,i) + h_t(j,i)
349 h_t_neu(j,i) = 0.0_dp
352 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
354 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
360 if (temp_c_neu(kc,j,i) > temp_c_m(kc,j,i)) &
361 temp_c_neu(kc,j,i) = temp_c_m(kc,j,i)
369 zm_neu(j,i) = zb(j,i)
370 h_c_neu(j,i) = h_c(j,i)
371 h_t_neu(j,i) = h_t(j,i)
387 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
393 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
394 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
398 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
399 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
403 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
406 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
407 h_c_neu(j,i) = h_c(j,i)
408 h_t_neu(j,i) = h_t(j,i)
409 zm_neu(j,i) = zb(j,i)
414 zm_neu(j,i) = zb(j,i)
415 h_c_neu(j,i) = h_c(j,i)
416 h_t_neu(j,i) = h_t(j,i)
427 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
433 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
434 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
438 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
439 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
443 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
446 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
447 h_c_neu(j,i) = h_c(j,i)
448 h_t_neu(j,i) = h_t(j,i)
449 zm_neu(j,i) = zb(j,i)
454 zm_neu(j,i) = zb(j,i)
455 h_c_neu(j,i) = h_c(j,i)
456 h_t_neu(j,i) = h_t(j,i)
467 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
473 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
474 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
478 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
479 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
483 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
486 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
487 h_c_neu(j,i) = h_c(j,i)
488 h_t_neu(j,i) = h_t(j,i)
489 zm_neu(j,i) = zb(j,i)
494 zm_neu(j,i) = zb(j,i)
495 h_c_neu(j,i) = h_c(j,i)
496 h_t_neu(j,i) = h_t(j,i)
507 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
513 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
514 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
518 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
519 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
523 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
526 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
527 h_c_neu(j,i) = h_c(j,i)
528 h_t_neu(j,i) = h_t(j,i)
529 zm_neu(j,i) = zb(j,i)
534 zm_neu(j,i) = zb(j,i)
535 h_c_neu(j,i) = h_c(j,i)
536 h_t_neu(j,i) = h_t(j,i)
550 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
556 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
557 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
561 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
562 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
566 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
569 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
570 h_c_neu(j,i) = h_c(j,i)
571 h_t_neu(j,i) = h_t(j,i)
572 zm_neu(j,i) = zb(j,i)
577 zm_neu(j,i) = zb(j,i)
578 h_c_neu(j,i) = h_c(j,i)
579 h_t_neu(j,i) = h_t(j,i)
589 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
595 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
596 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
600 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
601 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
605 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
608 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
609 h_c_neu(j,i) = h_c(j,i)
610 h_t_neu(j,i) = h_t(j,i)
611 zm_neu(j,i) = zb(j,i)
616 zm_neu(j,i) = zb(j,i)
617 h_c_neu(j,i) = h_c(j,i)
618 h_t_neu(j,i) = h_t(j,i)
634 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
640 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
641 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
645 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
646 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
650 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
653 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
654 h_c_neu(j,i) = h_c(j,i)
655 h_t_neu(j,i) = h_t(j,i)
656 zm_neu(j,i) = zb(j,i)
661 zm_neu(j,i) = zb(j,i)
662 h_c_neu(j,i) = h_c(j,i)
663 h_t_neu(j,i) = h_t(j,i)
673 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
679 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
680 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
684 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
685 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
689 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
692 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
693 h_c_neu(j,i) = h_c(j,i)
694 h_t_neu(j,i) = h_t(j,i)
695 zm_neu(j,i) = zb(j,i)
700 zm_neu(j,i) = zb(j,i)
701 h_c_neu(j,i) = h_c(j,i)
702 h_t_neu(j,i) = h_t(j,i)
722 if (n_cts_neu(j,i).eq.1)
then
723 vol_t = vol_t + h_t_neu(j,i)*area(j,i)
732 if (n_cts_neu(j,i).ne.-1)
then
734 dh_t_smooth(j,i) = numdiff_h_t* ( -4.0_dp*h_t_neu(j,i) &
735 +h_t_neu(j,i+1)+h_t_neu(j,i-1) &
736 +h_t_neu(j+1,i)+h_t_neu(j-1,i) )
737 if (dh_t_smooth(j,i).gt.0.001_dp) n_cts_neu(j,i) = 1
745 if (n_cts_neu(j,i).eq.1)
then
746 h_t_neu(j,i) = h_t_neu(j,i) + dh_t_smooth(j,i)
753 vol_t_smooth = 0.0_dp
756 if (n_cts_neu(j,i).eq.1)
then
757 vol_t_smooth = vol_t_smooth + h_t_neu(j,i)*area(j,i)
764 if (vol_t_smooth.gt.0.0_dp)
then
766 korrfakt_t = vol_t/vol_t_smooth
769 if (n_cts_neu(j,i).eq.1)
then
770 h_t_neu(j,i) = h_t_neu(j,i)*korrfakt_t
781 time_lag_cts = tau_cts*year_sec
786 if (n_cts_neu(j,i).eq.1)
then
788 h_t_neu(j,i) = ( time_lag_cts*h_t(j,i) &
789 + dtime_temp*h_t_neu(j,i) ) &
790 /(time_lag_cts+dtime_temp)
792 zm_neu(j,i) = zb(j,i) + h_t_neu(j,i)
793 h_c_neu(j,i) = zs(j,i) - zm_neu(j,i)
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...
Declarations of kind types for SICOPOLIS.
subroutine shift_cts_downward(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, dtime_temp_inv, i, j)
Downward shifting of the CTS.
Declarations of global variables for SICOPOLIS (for the ANT domain).
subroutine calc_temp_poly(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
Computation of temperature, water content and age in polythermal mode.
real(dp) function, public kappa_val(temp_val)
Heat conductivity of ice: Linear interpolation of tabulated values in KAPPA(.).
subroutine calc_temp1(at1, at2_1, at2_2, at3_1, at3_2, at4_1, at4_2, at5, at6, at7, atr1, acb1, acb2, acb3, acb4, alb1, ai1, ai2, dtime_temp, dtt_2dxi, dtt_2deta, i, j)
Computation of temperature and age for a cold ice column.
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).
subroutine shift_cts_upward(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, dtime_temp_inv, i, j)
Upward shifting of the CTS.
Declarations of global variables for SICOPOLIS.
subroutine calc_temp_r(atr1, alb1, i, j)
Computation of temperature for an ice-free column.
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...