7 !! Computation of temperature, water content and age for an ice column with a
8 !! temperate base overlain by a temperate-ice layer.
12 !! Copyright 2009-2013 Ralf Greve
16 !! This file is part of SICOPOLIS.
18 !! SICOPOLIS is free software: you can redistribute it and/or modify
19 !! it under the terms of the GNU General Public License as published by
20 !! the Free Software Foundation, either version 3 of the License, or
21 !! (at your option) any later version.
23 !! SICOPOLIS is distributed in the hope that it will be useful,
24 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
25 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 !! GNU General Public License for more details.
28 !! You should have received a copy of the GNU General Public License
29 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
31 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
34 !> Computation of temperature, water content and age for an ice column with a
35 !! temperate base overlain by a temperate-ice layer.
36 !<------------------------------------------------------------------------------
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, mean_accum_inv, dzeta_t, &
41 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
47 integer(i4b) :: i, j, kc, kt, kr
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 ai1(0:kcmax), ai2(0:kcmax), ai3, &
53 real(dp) :: ct1(0:kcmax), ct2(0:kcmax), ct3(0:kcmax), ct4(0:kcmax), &
54 ct5(0:kcmax), ct6(0:kcmax), ct7(0:kcmax), ctr1, cm1, cm2, &
56 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
57 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
58 real(dp) :: ci1(0:kcmax), ci2(0:kcmax), ci3
59 real(dp) :: aw1, aw2, aw3, aw4, aw5, aw7, aw8, aw9, aqtld
60 real(dp) :: cw1(0:ktmax), cw2(0:ktmax), cw3(0:ktmax), cw4(0:ktmax), &
61 cw5, cw7(0:ktmax), cw8, cw9(0:ktmax)
62 real(dp) :: cw1_sg(0:ktmax), cw2_sg(0:ktmax), cw3_sg(0:ktmax), &
63 cw4_sg(0:ktmax), adv_vert_w_sg(0:ktmax), abs_adv_vert_w_sg(0:ktmax)
64 real(dp) :: ftx_c_l(0:kcmax), ftx_c_r(0:kcmax), &
65 fty_c_l(0:kcmax), fty_c_r(0:kcmax), &
66 fax_c_l(0:kcmax), fax_c_r(0:kcmax), &
67 fay_c_l(0:kcmax), fay_c_r(0:kcmax)
68 real(dp) :: fwx_t_l(0:ktmax), fwx_t_r(0:ktmax), &
69 fwy_t_l(0:ktmax), fwy_t_r(0:ktmax), &
70 fax_t_l(0:ktmax), fax_t_r(0:ktmax), &
71 fay_t_l(0:ktmax), fay_t_r(0:ktmax)
72 real(dp) :: sigma_c_help(0:kcmax), sigma_t_help(0:ktmax), &
74 real(dp) :: dtt_2dxi, dtt_2deta, dtime_temp, dzeta_t
75 real(dp) :: dtt_dxi, dtt_deta
76 real(dp) :: mean_accum_inv
78 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
79 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
80 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
81 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
82 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
83 real(dp),
parameter :: zero=0.0_dp
87 if ((i.eq.0).or.(i.eq.imax).or.(j.eq.0).or.(j.eq.jmax)) &
88 stop
' calc_temp3: Boundary points not allowed.'
93 cm1 = am1*h_c_neu(j,i)
94 clb1 = alb1*q_geo(j,i)
99 ct1(kc) = at1(kc)/h_c_neu(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
102 #elif (ADV_VERT==2 || ADV_VERT==3)
105 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c_neu(j,i)*vz_c(kc,j,i)
112 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
113 +at2_2(kc)*dh_c_dtau(j,i) )/h_c_neu(j,i)
114 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
115 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c_neu(j,i) &
116 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
117 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
118 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c_neu(j,i) &
119 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
121 /
c_val(temp_c(kc,j,i)) &
125 = rho*g*h_c_neu(j,i)*(1.0_dp-eaz_c_quotient(kc)) &
126 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
128 /
c_val(temp_c(kc,j,i)) &
130 *
ratefac(temp_c(kc,j,i), temp_c_m(kc,j,i)) &
131 *
creep(sigma_c_help(kc)) &
132 *sigma_c_help(kc)*sigma_c_help(kc)
134 ci1(kc) = ai1(kc)/h_c_neu(j,i)
139 if (vx_c(kc,j,i-1).ge.zero)
then
140 ftx_c_l(kc) = temp_c(kc,j,i-1)*vx_c(kc,j,i-1)
141 fax_c_l(kc) = age_c(kc,j,i-1)*vx_c(kc,j,i-1)
143 ftx_c_l(kc) = temp_c(kc,j,i)*vx_c(kc,j,i-1)
144 fax_c_l(kc) = age_c(kc,j,i)*vx_c(kc,j,i-1)
147 if (vx_c(kc,j,i).ge.zero)
then
148 ftx_c_r(kc) = temp_c(kc,j,i)*vx_c(kc,j,i)
149 fax_c_r(kc) = age_c(kc,j,i)*vx_c(kc,j,i)
151 ftx_c_r(kc) = temp_c(kc,j,i+1)*vx_c(kc,j,i)
152 fax_c_r(kc) = age_c(kc,j,i+1)*vx_c(kc,j,i)
155 if (vy_c(kc,j-1,i).ge.zero)
then
156 fty_c_l(kc) = temp_c(kc,j-1,i)*vy_c(kc,j-1,i)
157 fay_c_l(kc) = age_c(kc,j-1,i)*vy_c(kc,j-1,i)
159 fty_c_l(kc) = temp_c(kc,j,i)*vy_c(kc,j-1,i)
160 fay_c_l(kc) = age_c(kc,j,i)*vy_c(kc,j-1,i)
163 if (vy_c(kc,j,i).ge.zero)
then
164 fty_c_r(kc) = temp_c(kc,j,i)*vy_c(kc,j,i)
165 fay_c_r(kc) = age_c(kc,j,i)*vy_c(kc,j,i)
167 fty_c_r(kc) = temp_c(kc,j+1,i)*vy_c(kc,j,i)
168 fay_c_r(kc) = age_c(kc,j+1,i)*vy_c(kc,j,i)
174 #if (ADV_VERT==2 || ADV_VERT==3)
177 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
178 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
179 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
180 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
181 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
187 temp_c_help(kc) = 0.5_dp*(temp_c(kc,j,i)+temp_c(kc+1,j,i))
191 ci2(kc) = ai2(kc)/h_c_neu(j,i)
194 cw5 = aw5/(h_t_neu(j,i)**2)
196 ci3 = ai3/(h_t_neu(j,i)**2)
201 cw1(kt) = aw1/h_t_neu(j,i)*0.5_dp*(vz_t(kt,j,i)+vz_t(kt-1,j,i))
204 #elif (ADV_VERT==2 || ADV_VERT==3)
207 cw1_sg(kt) = aw1/h_t_neu(j,i)*vz_t(kt,j,i)
214 *
c_val(temp_t_m(kt,j,i)) &
216 +0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1))*dzs_dxi_g(j,i) &
217 +0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i))*dzs_deta_g(j,i) &
218 -0.5_dp*(vz_t(kt,j,i)+vz_t(kt-1,j,i)) )
223 cw2(kt) = aw2*(dzb_dtau(j,i)+zeta_t(kt)*dh_t_dtau(j,i)) &
225 cw3(kt) = aw3*(dzb_dxi_g(j,i)+zeta_t(kt)*dh_t_dxi_g(j,i)) &
227 *0.5_dp*(vx_t(kt,j,i)+vx_t(kt,j,i-1)) *insq_g11_g(j,i)
228 cw4(kt) = aw4*(dzb_deta_g(j,i)+zeta_t(kt)*dh_t_deta_g(j,i)) &
230 *0.5_dp*(vy_t(kt,j,i)+vy_t(kt,j-1,i)) *insq_g22_g(j,i)
234 + rho*g*h_t_neu(j,i)*(1.0_dp-zeta_t(kt)) &
235 *(dzs_dxi_g(j,i)**2+dzs_deta_g(j,i)**2)**0.5_dp
239 *
creep(sigma_t_help(kt)) &
240 *sigma_t_help(kt)*sigma_t_help(kt)
245 if (vx_t(kt,j,i-1).ge.zero)
then
246 fwx_t_l(kt) = omega_t(kt,j,i-1)*vx_t(kt,j,i-1)
247 fax_t_l(kt) = age_t(kt,j,i-1)*vx_t(kt,j,i-1)
249 fwx_t_l(kt) = omega_t(kt,j,i)*vx_t(kt,j,i-1)
250 fax_t_l(kt) = age_t(kt,j,i)*vx_t(kt,j,i-1)
253 if (vx_t(kt,j,i).ge.zero)
then
254 fwx_t_r(kt) = omega_t(kt,j,i)*vx_t(kt,j,i)
255 fax_t_r(kt) = age_t(kt,j,i)*vx_t(kt,j,i)
257 fwx_t_r(kt) = omega_t(kt,j,i+1)*vx_t(kt,j,i)
258 fax_t_r(kt) = age_t(kt,j,i+1)*vx_t(kt,j,i)
261 if (vy_t(kt,j-1,i).ge.zero)
then
262 fwy_t_l(kt) = omega_t(kt,j-1,i)*vy_t(kt,j-1,i)
263 fay_t_l(kt) = age_t(kt,j-1,i)*vy_t(kt,j-1,i)
265 fwy_t_l(kt) = omega_t(kt,j,i)*vy_t(kt,j-1,i)
266 fay_t_l(kt) = age_t(kt,j,i)*vy_t(kt,j-1,i)
269 if (vy_t(kt,j,i).ge.zero)
then
270 fwy_t_r(kt) = omega_t(kt,j,i)*vy_t(kt,j,i)
271 fay_t_r(kt) = age_t(kt,j,i)*vy_t(kt,j,i)
273 fwy_t_r(kt) = omega_t(kt,j+1,i)*vy_t(kt,j,i)
274 fay_t_r(kt) = age_t(kt,j+1,i)*vy_t(kt,j,i)
280 #if (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
357 #elif (ADV_VERT==2 || ADV_VERT==3)
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 #if (ADV_HOR==2 || ADV_HOR==3)
375 lgs_b(kt) = omega_t(kt,j,i) + cw7(kt) + cw8 + cw9(kt) &
377 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
378 *(omega_t(kt,j,i+1)-omega_t(kt,j,i)) &
380 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
381 *(omega_t(kt,j,i)-omega_t(kt,j,i-1)) &
382 *insq_g11_sgx(j,i-1) ) &
384 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
385 *(omega_t(kt,j+1,i)-omega_t(kt,j,i)) &
387 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
388 *(omega_t(kt,j,i)-omega_t(kt,j-1,i)) &
389 *insq_g22_sgy(j-1,i) )
393 lgs_b(kt) = omega_t(kt,j,i) + cw7(kt) + cw8 + cw9(kt) &
394 -dtt_dxi *(fwx_t_r(kt)-fwx_t_l(kt)) &
395 -dtt_deta*(fwy_t_r(kt)-fwy_t_l(kt))
403 if (am_perp(j,i).ge.zero)
then
415 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, ktmax)
423 if (lgs_x(kt).lt.zero)
then
424 omega_t_neu(kt,j,i) = 0.0_dp
425 else if (lgs_x(kt).lt.omega_max)
then
426 omega_t_neu(kt,j,i) = lgs_x(kt)
428 omega_t_neu(kt,j,i) = omega_max
429 q_tld(j,i) = q_tld(j,i) &
430 +aqtld*h_t_neu(j,i)*(lgs_x(kt)-omega_max)
440 if (am_perp(j,i).ge.zero)
then
443 cm2 = am2*h_c_neu(j,i)*omega_t_neu(ktmax,j,i)*am_perp(j,i) &
456 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
458 lgs_a1(kc) = 1.0_dp+ct5(kc)*(ct6(kc)+ct6(kc-1))
459 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
462 #elif (ADV_VERT==2 || ADV_VERT==3)
465 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
469 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
470 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
471 +ct5(kc)*(ct6(kc)+ct6(kc-1))
473 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
478 #if (ADV_HOR==2 || ADV_HOR==3)
480 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
482 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
483 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
485 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
486 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
487 *insq_g11_sgx(j,i-1) ) &
489 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
490 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
492 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
493 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
494 *insq_g22_sgy(j-1,i) )
498 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
499 -dtt_dxi *(ftx_c_r(kc)-ftx_c_l(kc)) &
500 -dtt_deta*(fty_c_r(kc)-fty_c_l(kc))
509 lgs_b(kc) = temp_s(j,i)
513 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
518 temp_c_neu(kc,j,i) = lgs_x(kc)
524 #if (ADV_HOR==3 && ADV_VERT==3)
535 lgs_b(kt) = m_age*h_t(j,i)*dzeta_t*mean_accum_inv
540 lgs_a1(kt) = 1.0_dp - adv_vert_w_sg(kt)
541 lgs_a2(kt) = adv_vert_w_sg(kt)
542 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
544 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
545 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
547 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
548 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
549 *insq_g11_sgx(j,i-1) ) &
551 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
552 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
554 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
555 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
556 *insq_g22_sgy(j-1,i) )
564 lgs_a0(kt) = -0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
565 lgs_a1(kt) = 1.0_dp + 2.0_dp*ci3
566 lgs_a2(kt) = 0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
570 lgs_a0(kt) = -0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1))
571 lgs_a1(kt) = 1.0_dp &
572 +0.5_dp*(adv_vert_w_sg(kt-1)+abs_adv_vert_w_sg(kt-1)) &
573 -0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) )
574 lgs_a2(kt) = 0.5_dp*(adv_vert_w_sg(kt) -abs_adv_vert_w_sg(kt) )
580 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
582 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
583 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
585 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
586 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
587 *insq_g11_sgx(j,i-1) ) &
589 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
590 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
592 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
593 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
594 *insq_g22_sgy(j-1,i) )
598 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
599 -dtt_dxi *(fax_t_r(kt)-fax_t_l(kt)) &
600 -dtt_deta*(fay_t_r(kt)-fay_t_l(kt))
611 lgs_a0(kt) = -0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
612 lgs_a1(kt) = 1.0_dp + 2.0_dp*ci3
613 lgs_a2(kt) = 0.5_dp*(cw1(kt)-cw2(kt)-cw3(kt)-cw4(kt)) - ci3
614 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
616 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
617 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
619 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
620 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
621 *insq_g11_sgx(j,i-1) ) &
623 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
624 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
626 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
627 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
628 *insq_g22_sgy(j-1,i) )
635 if (adv_vert_sg(kc).le.zero)
then
637 lgs_a0(ktmax+kc) = 0.0_dp
638 lgs_a1(ktmax+kc) = 1.0_dp - adv_vert_sg(kc)
639 lgs_a2(ktmax+kc) = adv_vert_sg(kc)
640 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
642 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
643 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
645 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
646 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
647 *insq_g11_sgx(j,i-1) ) &
649 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
650 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
652 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
653 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
654 *insq_g22_sgy(j-1,i) )
656 else if (adv_vert_w_sg(kt-1).ge.zero)
then
658 lgs_a0(kt) = -adv_vert_w_sg(kt-1)
659 lgs_a1(kt) = 1.0_dp + adv_vert_w_sg(kt-1)
661 lgs_b(kt) = age_t(kt,j,i) + dtime_temp &
663 ( (vx_t(kt,j,i)-abs(vx_t(kt,j,i))) &
664 *(age_t(kt,j,i+1)-age_t(kt,j,i)) &
666 +(vx_t(kt,j,i-1)+abs(vx_t(kt,j,i-1))) &
667 *(age_t(kt,j,i)-age_t(kt,j,i-1)) &
668 *insq_g11_sgx(j,i-1) ) &
670 ( (vy_t(kt,j,i)-abs(vy_t(kt,j,i))) &
671 *(age_t(kt,j+1,i)-age_t(kt,j,i)) &
673 +(vy_t(kt,j-1,i)+abs(vy_t(kt,j-1,i))) &
674 *(age_t(kt,j,i)-age_t(kt,j-1,i)) &
675 *insq_g22_sgy(j-1,i) )
693 lgs_a0(ktmax+kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
695 lgs_a1(ktmax+kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
696 lgs_a2(ktmax+kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
701 lgs_a0(ktmax+kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
702 lgs_a1(ktmax+kc) = 1.0_dp &
703 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
704 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
705 lgs_a2(ktmax+kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
711 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
713 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
714 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
716 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
717 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
718 *insq_g11_sgx(j,i-1) ) &
720 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
721 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
723 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
724 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
725 *insq_g22_sgy(j-1,i) )
729 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
730 -dtt_dxi *(fax_c_r(kc)-fax_c_l(kc)) &
731 -dtt_deta*(fay_c_r(kc)-fay_c_l(kc))
740 if (as_perp(j,i).ge.zero)
then
741 lgs_a0(ktmax+kc) = 0.0_dp
742 lgs_a1(ktmax+kc) = 1.0_dp
743 lgs_b(ktmax+kc) = 0.0_dp
745 lgs_a0(ktmax+kc) = -1.0_dp
746 lgs_a1(ktmax+kc) = 1.0_dp
747 lgs_b(ktmax+kc) = 0.0_dp
753 if (as_perp(j,i).ge.zero)
then
754 lgs_a0(ktmax+kc) = 0.0_dp
755 lgs_a1(ktmax+kc) = 1.0_dp
756 lgs_b(ktmax+kc) = 0.0_dp
758 lgs_a0(ktmax+kc) = -adv_vert_sg(kc-1)
759 lgs_a1(ktmax+kc) = 1.0_dp + adv_vert_sg(kc-1)
760 lgs_b(ktmax+kc) = age_c(kc,j,i) + dtime_temp &
762 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
763 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
765 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
766 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
767 *insq_g11_sgx(j,i-1) ) &
769 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
770 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
772 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
773 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
774 *insq_g22_sgy(j-1,i) )
781 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax+ktmax)
788 age_t_neu(kt,j,i) = lgs_x(kt)
790 if (age_t_neu(kt,j,i).lt.(age_min*year_sec)) &
791 age_t_neu(kt,j,i) = 0.0_dp
792 if (age_t_neu(kt,j,i).gt.(age_max*year_sec)) &
793 age_t_neu(kt,j,i) = age_max*year_sec
799 age_c_neu(kc,j,i) = lgs_x(ktmax+kc)
801 if (age_c_neu(kc,j,i).lt.(age_min*year_sec)) &
802 age_c_neu(kc,j,i) = 0.0_dp
803 if (age_c_neu(kc,j,i).gt.(age_max*year_sec)) &
804 age_c_neu(kc,j,i) = age_max*year_sec