36 at4_1, at4_2, at5, at6, at7, atr1, alb1, &
37 ai1, ai2, ai4, mean_accum_inv, &
38 dtime_temp, dtt_2dxi, dtt_2deta, i, j)
46 integer(i4b),
intent(in) :: i, j
47 real(dp),
intent(in) :: at1(0:kcmax), at2_1(0:kcmax), at2_2(0:kcmax), &
48 at3_1(0:kcmax), at3_2(0:kcmax), at4_1(0:kcmax), &
49 at4_2(0:kcmax), at5(0:kcmax), at6(0:kcmax), at7, &
50 ai1(0:kcmax), ai2(0:kcmax), ai4, &
52 real(dp),
intent(in) :: mean_accum_inv
53 real(dp),
intent(in) :: dtime_temp, dtt_2dxi, dtt_2deta
55 integer(i4b) :: kc, kt, kr
56 real(dp) :: ct1(0:kcmax), ct2(0:kcmax), ct3(0:kcmax), ct4(0:kcmax), &
57 ct5(0:kcmax), ct6(0:kcmax), ct7(0:kcmax), ctr1, clb1
58 real(dp) :: ct1_sg(0:kcmax), ct2_sg(0:kcmax), ct3_sg(0:kcmax), &
59 ct4_sg(0:kcmax), adv_vert_sg(0:kcmax), abs_adv_vert_sg(0:kcmax)
60 real(dp) :: ci1(0:kcmax), ci2(0:kcmax)
61 real(dp) :: ftx_c_l(0:kcmax), ftx_c_r(0:kcmax), &
62 fty_c_l(0:kcmax), fty_c_r(0:kcmax), &
63 fax_c_l(0:kcmax), fax_c_r(0:kcmax), &
64 fay_c_l(0:kcmax), fay_c_r(0:kcmax)
65 real(dp) :: temp_c_help(0:kcmax)
66 real(dp) :: vx_c_help, vy_c_help
67 real(dp) :: adv_vert_help
68 real(dp) :: dtt_dxi, dtt_deta
69 real(dp) :: lgs_a0(0:kcmax+ktmax+krmax+imax+jmax), &
70 lgs_a1(0:kcmax+ktmax+krmax+imax+jmax), &
71 lgs_a2(0:kcmax+ktmax+krmax+imax+jmax), &
72 lgs_x(0:kcmax+ktmax+krmax+imax+jmax), &
73 lgs_b(0:kcmax+ktmax+krmax+imax+jmax)
74 real(dp),
parameter :: zero=0.0_dp
78 if ((i == 0).or.(i == imax).or.(j == 0).or.(j == jmax)) &
79 stop
' calc_temp_ssa: Boundary points not allowed.'
84 clb1 = alb1*q_geo(j,i)
89 ct1(kc) = at1(kc)/h_c(j,i)*0.5_dp*(vz_c(kc,j,i)+vz_c(kc-1,j,i))
93 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
96 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
99 #elif ( ADV_VERT==2 || ADV_VERT==3 )
102 ct1_sg(kc) = 0.5_dp*(at1(kc)+at1(kc+1))/h_c(j,i)*vz_c(kc,j,i)
109 ct2(kc) = ( at2_1(kc)*dzm_dtau(j,i) &
110 +at2_2(kc)*dh_c_dtau(j,i) )/h_c(j,i)
111 ct3(kc) = ( at3_1(kc)*dzm_dxi_g(j,i) &
112 +at3_2(kc)*dh_c_dxi_g(j,i) )/h_c(j,i) &
113 *0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1)) *insq_g11_g(j,i)
114 ct4(kc) = ( at4_1(kc)*dzm_deta_g(j,i) &
115 +at4_2(kc)*dh_c_deta_g(j,i) )/h_c(j,i) &
116 *0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i)) *insq_g22_g(j,i)
118 /
c_val(temp_c(kc,j,i)) &
120 ct7(kc) = 2.0_dp*at7 &
121 /
c_val(temp_c(kc,j,i)) &
123 temp_c(kc,j,i), temp_c_m(kc,j,i), 0.0_dp, &
124 enh_c(kc,j,i), .true.) &
126 ci1(kc) = ai1(kc)/h_c(j,i)
131 if (vx_c(kc,j,i-1) >= zero)
then
132 ftx_c_l(kc) = temp_c(kc,j,i-1)*vx_c(kc,j,i-1)
133 fax_c_l(kc) = age_c(kc,j,i-1)*vx_c(kc,j,i-1)
135 ftx_c_l(kc) = temp_c(kc,j,i)*vx_c(kc,j,i-1)
136 fax_c_l(kc) = age_c(kc,j,i)*vx_c(kc,j,i-1)
139 if (vx_c(kc,j,i) >= zero)
then
140 ftx_c_r(kc) = temp_c(kc,j,i)*vx_c(kc,j,i)
141 fax_c_r(kc) = age_c(kc,j,i)*vx_c(kc,j,i)
143 ftx_c_r(kc) = temp_c(kc,j,i+1)*vx_c(kc,j,i)
144 fax_c_r(kc) = age_c(kc,j,i+1)*vx_c(kc,j,i)
147 if (vy_c(kc,j-1,i) >= zero)
then
148 fty_c_l(kc) = temp_c(kc,j-1,i)*vy_c(kc,j-1,i)
149 fay_c_l(kc) = age_c(kc,j-1,i)*vy_c(kc,j-1,i)
151 fty_c_l(kc) = temp_c(kc,j,i)*vy_c(kc,j-1,i)
152 fay_c_l(kc) = age_c(kc,j,i)*vy_c(kc,j-1,i)
155 if (vy_c(kc,j,i) >= zero)
then
156 fty_c_r(kc) = temp_c(kc,j,i)*vy_c(kc,j,i)
157 fay_c_r(kc) = age_c(kc,j,i)*vy_c(kc,j,i)
159 fty_c_r(kc) = temp_c(kc,j+1,i)*vy_c(kc,j,i)
160 fay_c_r(kc) = age_c(kc,j+1,i)*vy_c(kc,j,i)
169 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
170 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
171 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
172 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
173 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
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))
181 #elif ( ADV_VERT==2 || ADV_VERT==3 )
184 ct2_sg(kc) = 0.5_dp*(ct2(kc)+ct2(kc+1))
185 ct3_sg(kc) = 0.5_dp*(ct3(kc)+ct3(kc+1))
186 ct4_sg(kc) = 0.5_dp*(ct4(kc)+ct4(kc+1))
187 adv_vert_sg(kc) = ct1_sg(kc)-ct2_sg(kc)-ct3_sg(kc)-ct4_sg(kc)
188 abs_adv_vert_sg(kc) = abs(adv_vert_sg(kc))
194 temp_c_help(kc) = 0.5_dp*(temp_c(kc,j,i)+temp_c(kc+1,j,i))
198 ci2(kc) = ai2(kc)/h_c(j,i)
201 #if ( ADV_HOR==3 || ADV_HOR==4 )
202 dtt_dxi = 2.0_dp*dtt_2dxi
203 dtt_deta = 2.0_dp*dtt_2deta
218 lgs_a1(kr) = 1.0_dp + 2.0_dp*ctr1
220 lgs_b(kr) = temp_r(kr,j,i)
230 lgs_b(kr) = 2.0_dp*clb1
238 lgs_b(kr) = temp_c_m(0,j,i)-delta_tm_sw
242 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, krmax)
247 temp_r_neu(kr,j,i) = lgs_x(kr)
255 lgs_b(kc) = temp_c_m(0,j,i)-delta_tm_sw
261 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
263 lgs_a1(kc) = 1.0_dp+ct5(kc)*(ct6(kc)+ct6(kc-1))
264 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
270 = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
274 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
275 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
276 +ct5(kc)*(ct6(kc)+ct6(kc-1))
278 = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) ) &
283 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
286 = -max(adv_vert_help, 0.0_dp) &
290 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp) &
291 +ct5(kc)*(ct6(kc)+ct6(kc-1))
293 = min(adv_vert_help, 0.0_dp) &
300 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
302 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
303 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
305 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
306 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
307 *insq_g11_sgx(j,i-1) ) &
309 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
310 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
312 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
313 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
314 *insq_g22_sgy(j-1,i) )
318 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
319 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
321 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
323 ( min(vx_c_help, 0.0_dp) &
324 *(temp_c(kc,j,i+1)-temp_c(kc,j,i)) &
326 +max(vx_c_help, 0.0_dp) &
327 *(temp_c(kc,j,i)-temp_c(kc,j,i-1)) &
328 *insq_g11_sgx(j,i-1) ) &
330 ( min(vy_c_help, 0.0_dp) &
331 *(temp_c(kc,j+1,i)-temp_c(kc,j,i)) &
333 +max(vy_c_help, 0.0_dp) &
334 *(temp_c(kc,j,i)-temp_c(kc,j-1,i)) &
335 *insq_g22_sgy(j-1,i) )
339 lgs_b(kc) = temp_c(kc,j,i) + ct7(kc) &
340 -dtt_dxi *(ftx_c_r(kc)-ftx_c_l(kc)) &
341 -dtt_deta*(fty_c_r(kc)-fty_c_l(kc))
350 lgs_b(kc) = temp_s(j,i)
354 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
359 temp_c_neu(kc,j,i) = lgs_x(kc)
366 omega_t_neu(kt,j,i) = 0.0_dp
376 lgs_a1(kc) = 1.0_dp - min(adv_vert_sg(kc), 0.0_dp)
377 lgs_a2(kc) = min(adv_vert_sg(kc), 0.0_dp)
381 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
383 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
384 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
386 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
387 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
388 *insq_g11_sgx(j,i-1) ) &
390 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
391 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
393 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
394 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
395 *insq_g22_sgy(j-1,i) )
399 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
400 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
402 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
404 ( min(vx_c_help, 0.0_dp) &
405 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
407 +max(vx_c_help, 0.0_dp) &
408 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
409 *insq_g11_sgx(j,i-1) ) &
411 ( min(vy_c_help, 0.0_dp) &
412 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
414 +max(vy_c_help, 0.0_dp) &
415 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
416 *insq_g22_sgy(j-1,i) )
428 lgs_a0(kc) = -0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
430 lgs_a1(kc) = 1.0_dp+ci1(kc)*(ci2(kc)+ci2(kc-1))
431 lgs_a2(kc) = 0.5_dp*(ct1(kc)-ct2(kc)-ct3(kc)-ct4(kc)) &
436 lgs_a0(kc) = -0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1))
437 lgs_a1(kc) = 1.0_dp &
438 +0.5_dp*(adv_vert_sg(kc-1)+abs_adv_vert_sg(kc-1)) &
439 -0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
440 lgs_a2(kc) = 0.5_dp*(adv_vert_sg(kc) -abs_adv_vert_sg(kc) )
444 adv_vert_help = 0.5_dp*(adv_vert_sg(kc)+adv_vert_sg(kc-1))
446 lgs_a0(kc) = -max(adv_vert_help, 0.0_dp)
447 lgs_a1(kc) = 1.0_dp &
448 +max(adv_vert_help, 0.0_dp)-min(adv_vert_help, 0.0_dp)
449 lgs_a2(kc) = min(adv_vert_help, 0.0_dp)
455 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
457 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
458 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
460 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
461 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
462 *insq_g11_sgx(j,i-1) ) &
464 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
465 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
467 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
468 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
469 *insq_g22_sgy(j-1,i) )
473 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
474 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
476 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
478 ( min(vx_c_help, 0.0_dp) &
479 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
481 +max(vx_c_help, 0.0_dp) &
482 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
483 *insq_g11_sgx(j,i-1) ) &
485 ( min(vy_c_help, 0.0_dp) &
486 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
488 +max(vy_c_help, 0.0_dp) &
489 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
490 *insq_g22_sgy(j-1,i) )
494 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
495 -dtt_dxi *(fax_c_r(kc)-fax_c_l(kc)) &
496 -dtt_deta*(fay_c_r(kc)-fay_c_l(kc))
503 if (as_perp(j,i) >= zero)
then
508 lgs_a0(kc) = -max(adv_vert_sg(kc-1), 0.0_dp)
509 lgs_a1(kc) = 1.0_dp + max(adv_vert_sg(kc-1), 0.0_dp)
514 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
516 ( (vx_c(kc,j,i)-abs(vx_c(kc,j,i))) &
517 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
519 +(vx_c(kc,j,i-1)+abs(vx_c(kc,j,i-1))) &
520 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
521 *insq_g11_sgx(j,i-1) ) &
523 ( (vy_c(kc,j,i)-abs(vy_c(kc,j,i))) &
524 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
526 +(vy_c(kc,j-1,i)+abs(vy_c(kc,j-1,i))) &
527 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
528 *insq_g22_sgy(j-1,i) )
532 vx_c_help = 0.5_dp*(vx_c(kc,j,i)+vx_c(kc,j,i-1))
533 vy_c_help = 0.5_dp*(vy_c(kc,j,i)+vy_c(kc,j-1,i))
535 lgs_b(kc) = age_c(kc,j,i) + dtime_temp &
537 ( min(vx_c_help, 0.0_dp) &
538 *(age_c(kc,j,i+1)-age_c(kc,j,i)) &
540 +max(vx_c_help, 0.0_dp) &
541 *(age_c(kc,j,i)-age_c(kc,j,i-1)) &
542 *insq_g11_sgx(j,i-1) ) &
544 ( min(vy_c_help, 0.0_dp) &
545 *(age_c(kc,j+1,i)-age_c(kc,j,i)) &
547 +max(vy_c_help, 0.0_dp) &
548 *(age_c(kc,j,i)-age_c(kc,j-1,i)) &
549 *insq_g22_sgy(j-1,i) )
561 call
tri_sle(lgs_a0, lgs_a1, lgs_a2, lgs_x, lgs_b, kcmax)
568 age_c_neu(kc,j,i) = lgs_x(kc)
570 if (age_c_neu(kc,j,i) < (age_min*year_sec)) &
571 age_c_neu(kc,j,i) = 0.0_dp
572 if (age_c_neu(kc,j,i) > (age_max*year_sec)) &
573 age_c_neu(kc,j,i) = age_max*year_sec
580 age_t_neu(kt,j,i) = age_c_neu(0,j,i)