7 !! Computation of temperature, water content and age in polythermal mode.
11 !! Copyright 2009-2013 Ralf Greve
15 !! This file is part of SICOPOLIS.
17 !! SICOPOLIS is free software: you can redistribute it and/or modify
18 !! it under the terms of the GNU General Public License as published by
19 !! the Free Software Foundation, either version 3 of the License, or
20 !! (at your option) any later version.
22 !! SICOPOLIS is distributed in the hope that it will be useful,
23 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
24 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 !! GNU General Public License for more details.
27 !! You should have received a copy of the GNU General Public License
28 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
30 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33 !> Computation of temperature, water content and age in polythermal mode.
34 !<------------------------------------------------------------------------------
36 dtime_temp, mean_accum_inv)
43 real(dp),
intent(in) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
44 real(dp),
intent(in) :: dtime_temp
45 real(dp),
intent(in) :: mean_accum_inv
47 integer(i4b) :: i, j, kc, kt, kr, ii, jj
48 real(dp) :: at1(0:kcmax), at2_1(0:kcmax), at2_2(0:kcmax), &
49 at3_1(0:kcmax), at3_2(0:kcmax), at4_1(0:kcmax), &
50 at4_2(0:kcmax), at5(0:kcmax), at6(0:kcmax), at7, &
51 acb1, acb2, acb3, acb4, &
52 ai1(0:kcmax), ai2(0:kcmax), ai3, ai4, &
54 real(dp) :: aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld
55 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)
78 ai4 = deform*dzeta_c/(ea-1.0_dp)
80 atr1 = kappa_r/(rho_c_r*h_r**2)*dtime_temp/(dzeta_r**2)
82 am1 = deform*beta*dzeta_c/(ea-1.0_dp)
83 am2 = deform*l*rho*dzeta_c/(ea-1.0_dp)
85 acb1 = (ea-1.0_dp)/deform/dzeta_c
86 acb2 = kappa_r/h_r/dzeta_r
90 alb1 = h_r/kappa_r*dzeta_r
92 aqtld = dzeta_t/dtime_temp
94 dtt_2dxi = 0.5_dp*dtime_temp/dxi
95 dtt_2deta = 0.5_dp*dtime_temp/deta
97 dtime_temp_inv = 1.0_dp/dtime_temp
100 at1(kc) = (ea-1.0_dp)/(deform*eaz_c(kc))*dtime_temp/dzeta_c
101 at2_1(kc) = (ea-1.0_dp)/(deform*eaz_c(kc))*dtime_temp/dzeta_c
102 at2_2(kc) = (eaz_c(kc)-1.0_dp)/(deform*eaz_c(kc)) &
104 at3_1(kc) = (ea-1.0_dp)/(deform*eaz_c(kc))*dtime_temp/dzeta_c
105 at3_2(kc) = (eaz_c(kc)-1.0_dp)/(deform*eaz_c(kc)) &
107 at4_1(kc) = (ea-1.0_dp)/(deform*eaz_c(kc))*dtime_temp/dzeta_c
108 at4_2(kc) = (eaz_c(kc)-1.0_dp)/(deform*eaz_c(kc)) &
110 at5(kc) = (ea-1.0_dp)/(rho*deform*eaz_c(kc)) &
112 if (kc /= kcmax)
then
113 at6(kc) = (ea-1.0_dp) &
114 /(deform*exp(deform*0.5_dp*(zeta_c(kc)+zeta_c(kc+1)))) &
119 ai1(kc) = agediff*(ea-1.0_dp)/(deform*eaz_c(kc)) &
121 if (kc /= kcmax)
then
122 ai2(kc) = (ea-1.0_dp) &
123 /(deform*exp(deform*0.5_dp*(zeta_c(kc)+zeta_c(kc+1)))) &
135 if (maske(j,i)==0)
then
139 if (n_cts(j,i).eq.-1)
then
141 n_cts_neu(j,i) = n_cts(j,i)
142 zm_neu(j,i) = zb(j,i)
143 h_c_neu(j,i) = h_c(j,i)
144 h_t_neu(j,i) = h_t(j,i)
146 call
calc_temp1(at1, at2_1, at2_2, at3_1, at3_2, &
147 at4_1, at4_2, at5, at6, at7, atr1, acb1, acb2, &
148 acb3, acb4, alb1, ai1, ai2, ai4, &
150 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
154 if (temp_c_neu(0,j,i).gt.temp_c_m(0,j,i))
then
158 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
159 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
160 ai1, ai2, ai4, mean_accum_inv, &
161 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
168 ( n_cts_neu(j,i).eq.0 ).and. &
169 ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
170 .gt.(am1*h_c_neu(j,i)) ) &
174 zm_neu(j,i) = zb(j,i)+0.001_dp
175 h_c_neu(j,i) = h_c(j,i)-0.001_dp
176 h_t_neu(j,i) = h_t(j,i)+0.001_dp
179 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
180 at4_1, at4_2, at5, at6, at7, atr1, &
182 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
183 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
184 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
187 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
188 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
189 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
190 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
197 else if (n_cts(j,i).eq.0)
then
199 n_cts_neu(j,i) = n_cts(j,i)
200 zm_neu(j,i) = zb(j,i)
201 h_c_neu(j,i) = h_c(j,i)
202 h_t_neu(j,i) = h_t(j,i)
204 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
205 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
206 ai1, ai2, ai4, mean_accum_inv, &
207 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
211 if ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
212 .lt. (am1*h_c(j,i)) )
then
216 call
calc_temp1(at1, at2_1, at2_2, at3_1, at3_2, &
217 at4_1, at4_2, at5, at6, at7, atr1, acb1, acb2, &
218 acb3, acb4, alb1, ai1, ai2, ai4, &
220 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
222 if (temp_c_neu(0,j,i).ge.temp_c_m(0,j,i))
then
226 call
calc_temp2(at1, at2_1, at2_2, at3_1, at3_2, &
227 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
228 ai1, ai2, ai4, mean_accum_inv, &
229 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
238 ( n_cts_neu(j,i).eq.0 ).and. &
239 ( (temp_c_neu(1,j,i)-temp_c_neu(0,j,i)) &
240 .gt.(am1*h_c_neu(j,i)) ) &
244 zm_neu(j,i) = zb(j,i)+0.001_dp
245 h_c_neu(j,i) = h_c(j,i)-0.001_dp
246 h_t_neu(j,i) = h_t(j,i)+0.001_dp
249 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
250 at4_1, at4_2, at5, at6, at7, atr1, &
252 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
253 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
254 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
257 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
258 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
259 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
260 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
269 n_cts_neu(j,i) = n_cts(j,i)
270 zm_neu(j,i) = zm(j,i)
271 h_c_neu(j,i) = h_c(j,i)
272 h_t_neu(j,i) = h_t(j,i)
274 call
calc_temp3(at1, at2_1, at2_2, at3_1, at3_2, &
275 at4_1, at4_2, at5, at6, at7, atr1, &
277 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
278 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
279 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
281 if ( (temp_c_neu(0,j,i)-(-beta*h_c_neu(j,i))).gt.0.0_dp ) &
284 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
285 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
286 ai1, ai2, ai3, mean_accum_inv, dzeta_t, &
287 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
291 at4_1, at4_2, at5, at6, at7, atr1, am1, am2, alb1, &
292 aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld, &
293 ai1, ai2, ai3, ai4, mean_accum_inv, dzeta_t, &
294 dtime_temp, dtt_2dxi, dtt_2deta, dtime_temp_inv, &
302 else if (maske(j,i)==3)
then
305 zm_neu(j,i) = zb(j,i)
306 h_c_neu(j,i) = h_c(j,i) + h_t(j,i)
307 h_t_neu(j,i) = 0.0_dp
310 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
311 ai1, ai2, ai4, mean_accum_inv, &
312 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
318 if (temp_c_neu(kc,j,i) > temp_c_m(kc,j,i)) &
319 temp_c_neu(kc,j,i) = temp_c_m(kc,j,i)
327 zm_neu(j,i) = zb(j,i)
328 h_c_neu(j,i) = h_c(j,i)
329 h_t_neu(j,i) = h_t(j,i)
345 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
351 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
352 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
356 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
357 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
361 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
364 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
365 h_c_neu(j,i) = h_c(j,i)
366 h_t_neu(j,i) = h_t(j,i)
367 zm_neu(j,i) = zb(j,i)
372 zm_neu(j,i) = zb(j,i)
373 h_c_neu(j,i) = h_c(j,i)
374 h_t_neu(j,i) = h_t(j,i)
385 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
391 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
392 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
396 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
397 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
401 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
404 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
405 h_c_neu(j,i) = h_c(j,i)
406 h_t_neu(j,i) = h_t(j,i)
407 zm_neu(j,i) = zb(j,i)
412 zm_neu(j,i) = zb(j,i)
413 h_c_neu(j,i) = h_c(j,i)
414 h_t_neu(j,i) = h_t(j,i)
425 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
431 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
432 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
436 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
437 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
441 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
444 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
445 h_c_neu(j,i) = h_c(j,i)
446 h_t_neu(j,i) = h_t(j,i)
447 zm_neu(j,i) = zb(j,i)
452 zm_neu(j,i) = zb(j,i)
453 h_c_neu(j,i) = h_c(j,i)
454 h_t_neu(j,i) = h_t(j,i)
465 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
471 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
472 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
476 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
477 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
481 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
484 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
485 h_c_neu(j,i) = h_c(j,i)
486 h_t_neu(j,i) = h_t(j,i)
487 zm_neu(j,i) = zb(j,i)
492 zm_neu(j,i) = zb(j,i)
493 h_c_neu(j,i) = h_c(j,i)
494 h_t_neu(j,i) = h_t(j,i)
508 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
514 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
515 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
519 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
520 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
524 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
527 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
528 h_c_neu(j,i) = h_c(j,i)
529 h_t_neu(j,i) = h_t(j,i)
530 zm_neu(j,i) = zb(j,i)
535 zm_neu(j,i) = zb(j,i)
536 h_c_neu(j,i) = h_c(j,i)
537 h_t_neu(j,i) = h_t(j,i)
547 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
553 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
554 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
558 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
559 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
563 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
566 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
567 h_c_neu(j,i) = h_c(j,i)
568 h_t_neu(j,i) = h_t(j,i)
569 zm_neu(j,i) = zb(j,i)
574 zm_neu(j,i) = zb(j,i)
575 h_c_neu(j,i) = h_c(j,i)
576 h_t_neu(j,i) = h_t(j,i)
592 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
598 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
599 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
603 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
604 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
608 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
611 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
612 h_c_neu(j,i) = h_c(j,i)
613 h_t_neu(j,i) = h_t(j,i)
614 zm_neu(j,i) = zb(j,i)
619 zm_neu(j,i) = zb(j,i)
620 h_c_neu(j,i) = h_c(j,i)
621 h_t_neu(j,i) = h_t(j,i)
631 if ( (maske(j,i).eq.0).or.(maske(j,i).eq.3) )
then
637 temp_c_neu(kc,j,i) = temp_c_neu(kc,jj,ii)
638 age_c_neu(kc,j,i) = age_c_neu(kc,jj,ii)
642 omega_t_neu(kt,j,i) = omega_t_neu(kt,jj,ii)
643 age_t_neu(kt,j,i) = age_t_neu(kt,jj,ii)
647 temp_r_neu(kr,j,i) = temp_r_neu(kr,jj,ii)
650 n_cts_neu(j,i) = min(n_cts_neu(jj,ii),0)
651 h_c_neu(j,i) = h_c(j,i)
652 h_t_neu(j,i) = h_t(j,i)
653 zm_neu(j,i) = zb(j,i)
658 zm_neu(j,i) = zb(j,i)
659 h_c_neu(j,i) = h_c(j,i)
660 h_t_neu(j,i) = h_t(j,i)
675 if (n_cts_neu(j,i).eq.1)
then
676 vol_t = vol_t + h_t_neu(j,i)*area(j,i)
685 if (n_cts_neu(j,i).ne.-1)
then
687 dh_t_smooth(j,i) = numdiff_h_t* ( -4.0_dp*h_t_neu(j,i) &
688 +h_t_neu(j,i+1)+h_t_neu(j,i-1) &
689 +h_t_neu(j+1,i)+h_t_neu(j-1,i) )
690 if (dh_t_smooth(j,i).gt.0.001_dp) n_cts_neu(j,i) = 1
698 if (n_cts_neu(j,i).eq.1)
then
699 h_t_neu(j,i) = h_t_neu(j,i) + dh_t_smooth(j,i)
706 vol_t_smooth = 0.0_dp
709 if (n_cts_neu(j,i).eq.1)
then
710 vol_t_smooth = vol_t_smooth + h_t_neu(j,i)*area(j,i)
717 if (vol_t_smooth.gt.0.0_dp)
then
719 korrfakt_t = vol_t/vol_t_smooth
722 if (n_cts_neu(j,i).eq.1)
then
723 h_t_neu(j,i) = h_t_neu(j,i)*korrfakt_t
734 time_lag_cts = tau_cts*year_sec
739 if (n_cts_neu(j,i).eq.1)
then
741 h_t_neu(j,i) = ( time_lag_cts*h_t(j,i) &
742 + dtime_temp*h_t_neu(j,i) ) &
743 /(time_lag_cts+dtime_temp)
745 zm_neu(j,i) = zb(j,i) + h_t_neu(j,i)
746 h_c_neu(j,i) = zs(j,i) - zm_neu(j,i)