146
147
153
155# ifdef DISTRIBUTE
158# endif
160
161
162
163 integer, intent(in) :: ng, tile
164 integer, intent(in) :: LBi, UBi, LBj, UBj
165 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
166 integer, intent(in) :: nrhs, nstp, nnew
167
168# ifdef ASSUMED_SHAPE
169# ifdef MASKING
170 real(r8), intent(in) :: rmask(LBi:,LBj:)
171 real(r8), intent(in) :: umask(LBi:,LBj:)
172 real(r8), intent(in) :: vmask(LBi:,LBj:)
173# endif
174# ifdef WET_DRY
175 real(r8), intent(in) :: rmask_wet(LBi:,LBj:)
176 real(r8), intent(in) :: umask_wet(LBi:,LBj:)
177 real(r8), intent(in) :: vmask_wet(LBi:,LBj:)
178# endif
179 real(r8), intent(in) :: omn(LBi:,LBj:)
180 real(r8), intent(in) :: om_u(LBi:,LBj:)
181 real(r8), intent(in) :: om_v(LBi:,LBj:)
182 real(r8), intent(in) :: on_u(LBi:,LBj:)
183 real(r8), intent(in) :: on_v(LBi:,LBj:)
184 real(r8), intent(in) :: pm(LBi:,LBj:)
185 real(r8), intent(in) :: pn(LBi:,LBj:)
186 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
187 real(r8), intent(in) :: Huon(LBi:,LBj:,:)
188 real(r8), intent(in) :: Hvom(LBi:,LBj:,:)
189 real(r8), intent(in) :: z_r(LBi:,LBj:,:)
190# ifdef SUN
191 real(r8), intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
192 real(r8), intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
193# else
194 real(r8), intent(in) :: Akt(LBi:,LBj:,0:,:)
195 real(r8), intent(in) :: t(LBi:,LBj:,:,:,:)
196# endif
197 real(r8), intent(in) :: W(LBi:,LBj:,0:)
198
199 real(r8), intent(in) :: tl_Hz(LBi:,LBj:,:)
200 real(r8), intent(in) :: tl_Huon(LBi:,LBj:,:)
201 real(r8), intent(in) :: tl_Hvom(LBi:,LBj:,:)
202 real(r8), intent(in) :: tl_z_r(LBi:,LBj:,:)
203# ifdef SUN
204 real(r8), intent(in) :: tl_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
205# else
206 real(r8), intent(in) :: tl_Akt(LBi:,LBj:,0:,:)
207# endif
208 real(r8), intent(in) :: tl_W(LBi:,LBj:,0:)
209# ifdef DIAGNOSTICS_TS
210
211# endif
212# ifdef SUN
213 real(r8), intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
214# else
215 real(r8), intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
216# endif
217# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
218 real(r8), intent(out) :: dAktdz(LBi:,LBj:,:)
219# endif
220
221# else
222
223# ifdef MASKING
224 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
225 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
226 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
227# endif
228# ifdef WET_DRY
229 real(r8), intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
230 real(r8), intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
231 real(r8), intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
232# endif
233 real(r8), intent(in) :: omn(LBi:UBi,LBj:UBj)
234 real(r8), intent(in) :: om_u(LBi:UBi,LBj:UBj)
235 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
236 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
237 real(r8), intent(in) :: on_v(LBi:UBi,LBj:UBj)
238 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
239 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
240 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
241 real(r8), intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
242 real(r8), intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
243 real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
244 real(r8), intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
245 real(r8), intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
246 real(r8), intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
247
248 real(r8), intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
249 real(r8), intent(in) :: tl_Huon(LBi:UBi,LBj:UBj,N(ng))
250 real(r8), intent(in) :: tl_Hvom(LBi:UBi,LBj:UBj,N(ng))
251 real(r8), intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
252 real(r8), intent(in) :: tl_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
253 real(r8), intent(in) :: tl_W(LBi:UBi,LBj:UBj,0:N(ng))
254# ifdef DIAGNOSTICS_TS
255
256
257# endif
258 real(r8), intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
259# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
260 real(r8), intent(out) :: dAktdz(LBi:UBi,LBj:UBj,N(ng))
261# endif
262# endif
263
264
265
266 logical :: LapplySrc, Lhsimt
267
268 integer :: JminT, JmaxT
269 integer :: Isrc, Jsrc
270 integer :: i, ic, is, itrc, j, k, ltrc
271# if defined AGE_MEAN && defined T_PASSIVE
272 integer :: iage
273# endif
274# ifdef DIAGNOSTICS_TS
275 integer :: idiag
276# endif
277 real(r8), parameter :: eps = 1.0e-16_r8
278
279 real(r8) :: cff, cff1, cff2, cff3
280 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3
281
282 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CF
283 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: BC
284 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC
285 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: FC
286
287 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_CF
288 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_BC
289 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
290 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: tl_FC
291
292 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: FE
293 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: FX
294 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: curv
295 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: grad
296
297 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
298 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
299 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_curv
300 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
301
302 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: oHz
303 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: tl_oHz
304
305# include "set_bounds.h"
306
307
308
309
310
313
314
315
316 IF (lhsimt) THEN
318 DO j=jstrm2,jendp2
319 DO i=istrm2,iendp2
320 ohz(i,j,k)=1.0_r8/hz(i,j,k)
321 tl_ohz(i,j,k)=-ohz(i,j,k)*ohz(i,j,k)*tl_hz(i,j,k)+ &
322# ifdef TL_IOMS
323 & 2.0_r8*ohz(i,j,k)
324# endif
325 END DO
326 END DO
327 END DO
328 ELSE
330 DO j=jstr,jend
331 DO i=istr,iend
332 ohz(i,j,k)=1.0_r8/hz(i,j,k)
333 tl_ohz(i,j,k)=-ohz(i,j,k)*ohz(i,j,k)*tl_hz(i,j,k)+ &
334# ifdef TL_IOMS
335 & 2.0_r8*ohz(i,j,k)
336# endif
337 END DO
338 END DO
339 END DO
340 END IF
341
342
343
344
345 t_loop1 :
DO itrc=1,
nt(ng)
346
347# ifdef RP_SUPPORTED
348
349
350
351
352
356
357
358
359
361 & lbi, ubi, lbj, ubj, 1,
n(ng), &
362 & tl_t(:,:,:,nnew,itrc))
363 END IF
364
365# ifdef DISTRIBUTE
366
367
368
369
370
371
373 & lbi, ubi, lbj, ubj, 1,
n(ng), &
376 & tl_t(:,:,:,nnew,itrc))
377# endif
378 END IF
379# endif
380
381
382
383 k_loop :
DO k=1,
n(ng)
384
386
387
388
389 DO j=jstr,jend
390 DO i=istr,iend+1
391 fx(i,j)=huon(i,j,k)* &
392 & 0.5_r8*(t(i-1,j,k,3,itrc)+ &
393 & t(i ,j,k,3,itrc))
394 tl_fx(i,j)=0.5_r8* &
395 & (tl_huon(i,j,k)*(t(i-1,j,k,3,itrc)+ &
396 & t(i ,j,k,3,itrc))+ &
397 & huon(i,j,k)*(tl_t(i-1,j,k,3,itrc)+ &
398 & tl_t(i ,j,k,3,itrc)))- &
399# ifdef TL_IOMS
400 & fx(i,j)
401# endif
402 END DO
403 END DO
404 DO j=jstr,jend+1
405 DO i=istr,iend
406 fe(i,j)=hvom(i,j,k)* &
407 & 0.5_r8*(t(i,j-1,k,3,itrc)+ &
408 & t(i,j ,k,3,itrc))
409 tl_fe(i,j)=0.5_r8* &
410 & (tl_hvom(i,j,k)*(t(i,j-1,k,3,itrc)+ &
411 & t(i,j ,k,3,itrc))+ &
412 & hvom(i,j,k)*(tl_t(i,j-1,k,3,itrc)+ &
413 & tl_t(i,j ,k,3,itrc)))- &
414# ifdef TL_IOMS
415 & fe(i,j)
416# endif
417 END DO
418 END DO
419
421
422
423
424 CONTINUE
425
427
428
429
430
431
432
433
434
435
436
437 CONTINUE
438
443
444
445
446
447 DO j=jstr,jend
448 DO i=istrm1,iendp2
449 fx(i,j)=t(i ,j,k,3,itrc)- &
450 & t(i-1,j,k,3,itrc)
451 tl_fx(i,j)=tl_t(i ,j,k,3,itrc)- &
452 & tl_t(i-1,j,k,3,itrc)
453# ifdef MASKING
454 fx(i,j)=fx(i,j)*umask(i,j)
455 tl_fx(i,j)=tl_fx(i,j)*umask(i,j)
456# endif
457 END DO
458 END DO
460 IF (
domain(ng)%Western_Edge(tile))
THEN
461 DO j=jstr,jend
462 fx(istr-1,j)=fx(istr,j)
463 tl_fx(istr-1,j)=tl_fx(istr,j)
464 END DO
465 END IF
466 END IF
468 IF (
domain(ng)%Eastern_Edge(tile))
THEN
469 DO j=jstr,jend
470 fx(iend+2,j)=fx(iend+1,j)
471 tl_fx(iend+2,j)=tl_fx(iend+1,j)
472 END DO
473 END IF
474 END IF
475
476 DO j=jstr,jend
477 DO i=istr-1,iend+1
479 curv(i,j)=fx(i+1,j)-fx(i,j)
480 tl_curv(i,j)=tl_fx(i+1,j)-tl_fx(i,j)
482 cff=2.0_r8*fx(i+1,j)*fx(i,j)
483 tl_cff=2.0_r8*(tl_fx(i+1,j)*fx(i,j)+ &
484 & fx(i+1,j)*tl_fx(i,j))- &
485# ifdef TL_IOMS
486 & cff
487# endif
488 IF (cff.gt.eps) THEN
489 grad(i,j)=cff/(fx(i+1,j)+fx(i,j))
490 tl_grad(i,j)=((fx(i+1,j)+fx(i,j))*tl_cff- &
491 & cff*(tl_fx(i+1,j)+tl_fx(i,j)))/ &
492 & ((fx(i+1,j)+fx(i,j))* &
493 & (fx(i+1,j)+fx(i,j)))+ &
494# ifdef TL_IOMS
495 & grad(i,j)
496# endif
497 ELSE
498 grad(i,j)=0.0_r8
499 tl_grad(i,j)=0.0_r8
500 END IF
503 grad(i,j)=0.5_r8*(fx(i+1,j)+fx(i,j))
504 tl_grad(i,j)=0.5_r8*(tl_fx(i+1,j)+tl_fx(i,j))
505 END IF
506 END DO
507 END DO
508
509 cff1=1.0_r8/6.0_r8
510 cff2=1.0_r8/3.0_r8
511 DO j=jstr,jend
512 DO i=istr,iend+1
514 fx(i,j)=huon(i,j,k)*0.5_r8* &
515 & (t(i-1,j,k,3,itrc)+ &
516 & t(i ,j,k,3,itrc))- &
517 & cff1*(curv(i-1,j)*max(huon(i,j,k),0.0_r8)+ &
518 & curv(i ,j)*min(huon(i,j,k),0.0_r8))
519 tl_fx(i,j)=0.5_r8* &
520 & (tl_huon(i,j,k)* &
521 & (t(i-1,j,k,3,itrc)+ &
522 & t(i ,j,k,3,itrc))+ &
523 & huon(i,j,k)* &
524 & (tl_t(i-1,j,k,3,itrc)+ &
525 & tl_t(i ,j,k,3,itrc)))- &
526 & cff1* &
527 & (tl_curv(i-1,j)*max(huon(i,j,k),0.0_r8)+ &
528 & curv(i-1,j)* &
529 & (0.5_r8+sign(0.5_r8, huon(i,j,k)))* &
530 & tl_huon(i,j,k)+ &
531 & tl_curv(i ,j)*min(huon(i,j,k),0.0_r8)+ &
532 & curv(i ,j)* &
533 & (0.5_r8+sign(0.5_r8,-huon(i,j,k)))* &
534 & tl_huon(i,j,k))- &
535# ifdef TL_IOMS
536 & fx(i,j)
537# endif
541 fx(i,j)=huon(i,j,k)*0.5_r8* &
542 & (t(i-1,j,k,3,itrc)+ &
543 & t(i ,j,k,3,itrc)- &
544 & cff2*(grad(i ,j)- &
545 & grad(i-1,j)))
546 tl_fx(i,j)=0.5_r8* &
547 & (tl_huon(i,j,k)* &
548 & (t(i-1,j,k,3,itrc)+ &
549 & t(i ,j,k,3,itrc)- &
550 & cff2*(grad(i ,j)- &
551 & grad(i-1,j)))+ &
552 & huon(i,j,k)* &
553 & (tl_t(i-1,j,k,3,itrc)+ &
554 & tl_t(i ,j,k,3,itrc)- &
555 & cff2*(tl_grad(i ,j)- &
556 & tl_grad(i-1,j))))- &
557# ifdef TL_IOMS
558 & fx(i,j)
559# endif
560 END IF
561 END DO
562 END DO
563
564 DO j=jstrm1,jendp2
565 DO i=istr,iend
566 fe(i,j)=t(i,j ,k,3,itrc)- &
567 & t(i,j-1,k,3,itrc)
568 tl_fe(i,j)=tl_t(i,j ,k,3,itrc)- &
569 & tl_t(i,j-1,k,3,itrc)
570# ifdef MASKING
571 fe(i,j)=fe(i,j)*vmask(i,j)
572 tl_fe(i,j)=tl_fe(i,j)*vmask(i,j)
573# endif
574 END DO
575 END DO
577 IF (
domain(ng)%Southern_Edge(tile))
THEN
578 DO i=istr,iend
579 fe(i,jstr-1)=fe(i,jstr)
580 tl_fe(i,jstr-1)=tl_fe(i,jstr)
581 END DO
582 END IF
583 END IF
585 IF (
domain(ng)%Northern_Edge(tile))
THEN
586 DO i=istr,iend
587 fe(i,jend+2)=fe(i,jend+1)
588 tl_fe(i,jend+2)=tl_fe(i,jend+1)
589 END DO
590 END IF
591 END IF
592
593 DO j=jstr-1,jend+1
594 DO i=istr,iend
596 curv(i,j)=fe(i,j+1)-fe(i,j)
597 tl_curv(i,j)=tl_fe(i,j+1)-tl_fe(i,j)
599 cff=2.0_r8*fe(i,j+1)*fe(i,j)
600 tl_cff=2.0_r8*(tl_fe(i,j+1)*fe(i,j)+ &
601 & fe(i,j+1)*tl_fe(i,j))- &
602# ifdef TL_IOMS
603 & cff
604# endif
605 IF (cff.gt.eps) THEN
606 grad(i,j)=cff/(fe(i,j+1)+fe(i,j))
607 tl_grad(i,j)=((fe(i,j+1)+fe(i,j))*tl_cff- &
608 & cff*(tl_fe(i,j+1)+tl_fe(i,j)))/ &
609 & ((fe(i,j+1)+fe(i,j))* &
610 & (fe(i,j+1)+fe(i,j)))+ &
611# ifdef TL_IOMS
612 & grad(i,j)
613# endif
614 ELSE
615 grad(i,j)=0.0_r8
616 tl_grad(i,j)=0.0_r8
617 END IF
620 grad(i,j)=0.5_r8*(fe(i,j+1)+fe(i,j))
621 tl_grad(i,j)=0.5_r8*(tl_fe(i,j+1)+tl_fe(i,j))
622 END IF
623 END DO
624 END DO
625
626 cff1=1.0_r8/6.0_r8
627 cff2=1.0_r8/3.0_r8
628 DO j=jstr,jend+1
629 DO i=istr,iend
631 fe(i,j)=hvom(i,j,k)*0.5_r8* &
632 & (t(i,j-1,k,3,itrc)+ &
633 & t(i,j ,k,3,itrc))- &
634 & cff1*(curv(i,j-1)*max(hvom(i,j,k),0.0_r8)+ &
635 & curv(i,j )*min(hvom(i,j,k),0.0_r8))
636 tl_fe(i,j)=0.5_r8* &
637 & (tl_hvom(i,j,k)* &
638 & (t(i,j-1,k,3,itrc)+ &
639 & t(i,j ,k,3,itrc))+ &
640 & hvom(i,j,k)* &
641 & (tl_t(i,j-1,k,3,itrc)+ &
642 & tl_t(i,j ,k,3,itrc)))- &
643 & cff1* &
644 & (tl_curv(i,j-1)*max(hvom(i,j,k),0.0_r8)+ &
645 & curv(i,j-1)* &
646 & (0.5_r8+sign(0.5_r8, hvom(i,j,k)))* &
647 & tl_hvom(i,j,k)+ &
648 & tl_curv(i,j )*min(hvom(i,j,k),0.0_r8)+ &
649 & curv(i,j )* &
650 & (0.5_r8+sign(0.5_r8,-hvom(i,j,k)))* &
651 & tl_hvom(i,j,k))- &
652# ifdef TL_IOMS
653 & fe(i,j)
654# endif
658 fe(i,j)=hvom(i,j,k)*0.5_r8* &
659 & (t(i,j-1,k,3,itrc)+ &
660 & t(i,j ,k,3,itrc)- &
661 & cff2*(grad(i,j )- &
662 & grad(i,j-1)))
663 tl_fe(i,j)=0.5_r8* &
664 & (tl_hvom(i,j,k)* &
665 & (t(i,j-1,k,3,itrc)+ &
666 & t(i,j ,k,3,itrc)- &
667 & cff2*(grad(i,j )- &
668 & grad(i,j-1)))+ &
669 & hvom(i,j,k)* &
670 & (tl_t(i,j-1,k,3,itrc)+ &
671 & tl_t(i,j ,k,3,itrc)- &
672 & cff2*(tl_grad(i,j )- &
673 & tl_grad(i,j-1))))- &
674# ifdef TL_IOMS
675 & fe(i,j)
676# endif
677 END IF
678 END DO
679 END DO
680 END IF hadv_flux
681
682
683
684
685
686
687
692 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
695 lapplysrc=(istrum2.le.isrc).and. &
696 & (isrc.le.iendp3).and. &
697 & (jstrvm2.le.jsrc).and. &
698 & (jsrc.le.jendp2i)
699 ELSE
700 lapplysrc=(istr.le.isrc).and. &
701 & (isrc.le.iend+1).and. &
702 & (jstr.le.jsrc).and. &
703 & (jsrc.le.jend)
704 END IF
705 IF (lapplysrc) THEN
707 fx(isrc,jsrc)=huon(isrc,jsrc,k)* &
709 tl_fx(isrc,jsrc)=tl_huon(isrc,jsrc,k)* &
710 &
sources(ng)%Tsrc(is,k,itrc)+ &
711 & huon(isrc,jsrc,k)* &
712 &
sources(ng)%tl_Tsrc(is,k,itrc)- &
713# ifdef TL_IOMS
714 & fx(isrc,jsrc)
715# endif
716# ifdef MASKING
717 ELSE
718 IF ((rmask(isrc ,jsrc).eq.0.0_r8).and. &
719 & (rmask(isrc-1,jsrc).eq.1.0_r8)) THEN
720 fx(isrc,jsrc)=huon(isrc,jsrc,k)* &
721 & t(isrc-1,jsrc,k,3,itrc)
722 tl_fx(isrc,jsrc)=tl_huon(isrc,jsrc,k)* &
723 & t(isrc-1,jsrc,k,3,itrc)+ &
724 & huon(isrc,jsrc,k)* &
725 & tl_t(isrc-1,jsrc,k,3,itrc)- &
726# ifdef TL_IOMS
727 & fx(isrc,jsrc)
728# endif
729 ELSE IF ((rmask(isrc ,jsrc).eq.1.0_r8).and. &
730 & (rmask(isrc-1,jsrc).eq.0.0_r8)) THEN
731 fx(isrc,jsrc)=huon(isrc,jsrc,k)* &
732 & t(isrc ,jsrc,k,3,itrc)
733 tl_fx(isrc,jsrc)=tl_huon(isrc,jsrc,k)* &
734 & t(isrc ,jsrc,k,3,itrc)+ &
735 & huon(isrc,jsrc,k)* &
736 & tl_t(isrc ,jsrc,k,3,itrc)- &
737# ifdef TL_IOMS
738 & fx(isrc,jsrc)
739# endif
740 END IF
741# endif
742 END IF
743 END IF
744 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
747 lapplysrc=(istrum2.le.isrc).and. &
748 & (isrc.le.iendp2i).and. &
749 & (jstrvm2.le.jsrc).and. &
750 & (jsrc.le.jendp3)
751 ELSE
752 lapplysrc=(istr.le.isrc).and. &
753 & (isrc.le.iend).and. &
754 & (jstr.le.jsrc).and. &
755 & (jsrc.le.jend+1)
756 END IF
757 IF (lapplysrc) THEN
759 fe(isrc,jsrc)=hvom(isrc,jsrc,k)* &
761 tl_fe(isrc,jsrc)=tl_hvom(isrc,jsrc,k)* &
762 &
sources(ng)%Tsrc(is,k,itrc)+ &
763 & hvom(isrc,jsrc,k)* &
764 &
sources(ng)%tl_Tsrc(is,k,itrc)- &
765# ifdef TL_IOMS
766 & fe(isrc,jsrc)
767# endif
768# ifdef MASKING
769 ELSE
770 IF ((rmask(isrc,jsrc ).eq.0.0_r8).and. &
771 & (rmask(isrc,jsrc-1).eq.1.0_r8)) THEN
772 fe(isrc,jsrc)=hvom(isrc,jsrc,k)* &
773 & t(isrc,jsrc-1,k,3,itrc)
774 tl_fe(isrc,jsrc)=tl_hvom(isrc,jsrc,k)* &
775 & t(isrc,jsrc-1,k,3,itrc)+ &
776 & hvom(isrc,jsrc,k)* &
777 & tl_t(isrc,jsrc-1,k,3,itrc)- &
778# ifdef TL_IOMS
779 & fe(isrc,jsrc)
780# endif
781 ELSE IF ((rmask(isrc,jsrc ).eq.1.0_r8).and. &
782 & (rmask(isrc,jsrc-1).eq.0.0_r8)) THEN
783 fe(isrc,jsrc)=hvom(isrc,jsrc,k)* &
784 & t(isrc,jsrc ,k,3,itrc)
785 tl_fe(isrc,jsrc)=tl_hvom(isrc,jsrc,k)* &
786 & t(isrc,jsrc ,k,3,itrc)+ &
787 & hvom(isrc,jsrc,k)* &
788 & tl_t(isrc,jsrc ,k,3,itrc)- &
789# ifdef TL_IOMS
790 & fe(isrc,jsrc)
791# endif
792 END IF
793# endif
794 END IF
795 END IF
796 END IF
797 END DO
798 END IF
799
800
801
802
804 CONTINUE
805 ELSE
806 DO j=jstr,jend
807 DO i=istr,iend
808 cff=
dt(ng)*pm(i,j)*pn(i,j)
809
810
811 tl_cff1=cff*(tl_fx(i+1,j)-tl_fx(i,j))
812
813
814 tl_cff2=cff*(tl_fe(i,j+1)-tl_fe(i,j))
815
816
817 tl_cff3=tl_cff1+tl_cff2
818
819
820 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff3
821# ifdef DIAGNOSTICS_TS
822
823
824
825# endif
826 END DO
827 END DO
828 END IF hadv_stepping
829 END DO k_loop
830 END DO t_loop1
831
832
833
834
835
836 t_loop2 :
DO itrc=1,
nt(ng)
838 jmint=jstrvm2
839 jmaxt=jendp2i
840 ELSE
841 jmint=jstr
842 jmaxt=jend
843 END IF
844
845 j_loop1 : DO j=jmint,jmaxt
846
848
849
850
851
852
853 DO i=istr,iend
854# ifdef NEUMANN
855 fc(i,0)=1.5_r8*t(i,j,1,3,itrc)
856 cf(i,1)=0.5_r8
857# else
858 fc(i,0)=2.0_r8*t(i,j,1,3,itrc)
859 cf(i,1)=1.0_r8
860# endif
861 END DO
863 DO i=istr,iend
864 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
865 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
866 cf(i,k+1)=cff*hz(i,j,k)
867 fc(i,k)=cff*(3.0_r8*(hz(i,j,k )*t(i,j,k+1,3,itrc)+ &
868 & hz(i,j,k+1)*t(i,j,k ,3,itrc))- &
869 & hz(i,j,k+1)*fc(i,k-1))
870 END DO
871 END DO
872 DO i=istr,iend
873# ifdef NEUMANN
874 fc(i,
n(ng))=(3.0_r8*t(i,j,
n(ng),3,itrc)-fc(i,
n(ng)-1))/ &
875 & (2.0_r8-cf(i,
n(ng)))
876# else
877 fc(i,
n(ng))=(2.0_r8*t(i,j,
n(ng),3,itrc)-fc(i,
n(ng)-1))/ &
878 & (1.0_r8-cf(i,
n(ng)))
879# endif
880 END DO
882 DO i=istr,iend
883 fc(i,k)=fc(i,k)-cf(i,k+1)*fc(i,k+1)
884 END DO
885 END DO
886
887
888
889 DO i=istr,iend
890# ifdef NEUMANN
891
892
893 tl_fc(i,0)=1.5_r8*tl_t(i,j,1,3,itrc)
894 cf(i,1)=0.5_r8
895# else
896
897
898 tl_fc(i,0)=2.0_r8*tl_t(i,j,1,3,itrc)
899 cf(i,1)=1.0_r8
900# endif
901 END DO
903 DO i=istr,iend
904 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
905 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
906 cf(i,k+1)=cff*hz(i,j,k)
907# ifdef TL_IOMS
908 tl_fc(i,k)=cff* &
909 & (3.0_r8*(hz(i,j,k )*tl_t(i,j,k+1,3,itrc)+ &
910 & hz(i,j,k+1)*tl_t(i,j,k ,3,itrc)+ &
911 & tl_hz(i,j,k )*t(i,j,k+1,3,itrc)+ &
912 & tl_hz(i,j,k+1)*t(i,j,k ,3,itrc)- &
913 & hz(i,j,k )*t(i,j,k+1,3,itrc)- &
914 & hz(i,j,k+1)*t(i,j,k ,3,itrc))- &
915 & ((tl_hz(i,j,k+1)-hz(i,j,k+1))*fc(i,k-1)+ &
916 & 2.0_r8*(tl_hz(i,j,k )+ &
917 & tl_hz(i,j,k+1)- &
918 & hz(i,j,k )- &
919 & hz(i,j,k+1))*fc(i,k)+ &
920 & (tl_hz(i,j,k )-hz(i,j,k ))*fc(i,k+1))- &
921 & hz(i,j,k+1)*tl_fc(i,k-1))
922# else
923 tl_fc(i,k)=cff*
924 & (3.0_r8*(hz(i,j,k )*tl_t(i,j,k+1,3,itrc)+ &
925 & hz(i,j,k+1)*tl_t(i,j,k ,3,itrc)+ &
926 & tl_hz(i,j,k )*t(i,j,k+1,3,itrc)+ &
927 & tl_hz(i,j,k+1)*t(i,j,k ,3,itrc))- &
928 & (tl_hz(i,j,k+1)*fc(i,k-1)+ &
929 & 2.0_r8*(tl_hz(i,j,k )+ &
930 & tl_hz(i,j,k+1))*fc(i,k)+ &
931 & tl_hz(i,j,k )*fc(i,k+1))- &
932 & hz(i,j,k+1)*tl_fc(i,k-1))
933# endif
934 END DO
935 END DO
936 DO i=istr,iend
937# ifdef NEUMANN
938
939
940
941 tl_fc(i,
n(ng))=(3.0_r8*tl_t(i,j,
n(ng),3,itrc)- &
942 & tl_fc(i,
n(ng)-1))/ &
943 & (2.0_r8-cf(i,
n(ng)))
944# else
945
946
947
948 tl_fc(i,
n(ng))=(2.0_r8*tl_t(i,j,
n(ng),3,itrc)- &
949 & tl_fc(i,
n(ng)-1))/ &
950 & (1.0_r8-cf(i,
n(ng)))
951# endif
952 END DO
954 DO i=istr,iend
955
956
957 tl_fc(i,k)=tl_fc(i,k)-cf(i,k+1)*tl_fc(i,k+1)
958
959
960 tl_fc(i,k+1)=tl_w(i,j,k+1)*fc(i,k+1)+ &
961 & w(i,j,k+1)*tl_fc(i,k+1)- &
962# ifdef TL_IOMS
963 & w(i,j,k+1)*fc(i,k+1)
964# endif
965 END DO
966 END DO
967 DO i=istr,iend
968
969
970 tl_fc(i,
n(ng))=0.0_r8
971
972
973 tl_fc(i,0)=0.0_r8
974 END DO
975
976
977
979 DO i=istr,iend
980 fc(i,k+1)=w(i,j,k+1)*fc(i,k+1)
981 END DO
982 END DO
983 DO i=istr,iend
985 fc(i,0)=0.0_r8
986 END DO
987
989
990
991
993 DO i=istr,iend
994 fc(i,k)=t(i,j,k+1,3,itrc)- &
995 & t(i,j,k ,3,itrc)
996 tl_fc(i,k)=tl_t(i,j,k+1,3,itrc)- &
997 & tl_t(i,j,k ,3,itrc)
998 END DO
999 END DO
1000 DO i=istr,iend
1001 fc(i,0)=fc(i,1)
1002 tl_fc(i,0)=tl_fc(i,1)
1003 fc(i,
n(ng))=fc(i,
n(ng)-1)
1004 tl_fc(i,
n(ng))=tl_fc(i,
n(ng)-1)
1005 END DO
1007 DO i=istr,iend
1008 cff=2.0_r8*fc(i,k)*fc(i,k-1)
1009 tl_cff=2.0_r8*(tl_fc(i,k)*fc(i,k-1)+ &
1010 & fc(i,k)*tl_fc(i,k-1))- &
1011# ifdef TL_IOMS
1012 & cff
1013# endif
1014 IF (cff.gt.eps) THEN
1015 cf(i,k)=cff/(fc(i,k)+fc(i,k-1))
1016 tl_cf(i,k)=((fc(i,k)+fc(i,k-1))*tl_cff- &
1017 & cff*(tl_fc(i,k)+tl_fc(i,k-1)))/ &
1018 & ((fc(i,k)+fc(i,k-1))*(fc(i,k)+fc(i,k-1)))+ &
1019# ifdef TL_IOMS
1020 & cf(i,k)
1021# endif
1022 ELSE
1023 cf(i,k)=0.0_r8
1024 tl_cf(i,k)=0.0_r8
1025 END IF
1026 END DO
1027 END DO
1028 cff1=1.0_r8/3.0_r8
1030 DO i=istr,iend
1031 fc(i,k)=w(i,j,k)* &
1032 & 0.5_r8*(t(i,j,k ,3,itrc)+ &
1033 & t(i,j,k+1,3,itrc)- &
1034 & cff1*(cf(i,k+1)-cf(i,k)))
1035 tl_fc(i,k)=0.5_r8* &
1036 & (tl_w(i,j,k)* &
1037 & (t(i,j,k ,3,itrc)+ &
1038 & t(i,j,k+1,3,itrc)- &
1039 & cff1*(cf(i,k+1)-cf(i,k)))+ &
1040 & w(i,j,k)* &
1041 & (tl_t(i,j,k ,3,itrc)+ &
1042 & tl_t(i,j,k+1,3,itrc)- &
1043 & cff1*(tl_cf(i,k+1)-tl_cf(i,k))))- &
1044# ifdef TL_IOMS
1045 & fc(i,k)
1046# endif
1047 END DO
1048 END DO
1049 DO i=istr,iend
1050# ifdef SED_MORPH
1051 fc(i,0)=w(i,j,0)*t(i,j,1,3,itrc)
1052 tl_fc(i,0)=tl_w(i,j,0)*t(i,j,1,3,itrc)+ &
1053 & w(i,j,0)*tl_t(i,j,1,3,itrc)- &
1054# ifdef TL_IOMS
1055 & fc(i,0)
1056# endif
1057# else
1058 fc(i,0)=0.0_r8
1059 tl_fc(i,0)=0.0_r8
1060# endif
1062 tl_fc(i,
n(ng))=0.0_r8
1063 END DO
1064
1066
1067
1068
1069
1071 DO i=istr,iend
1072 fc(i,k)=w(i,j,k)* &
1073 & 0.5_r8*(t(i,j,k ,3,itrc)+ &
1074 & t(i,j,k+1,3,itrc))
1075 tl_fc(i,k)=0.5_r8* &
1076 & (tl_w(i,j,k)* &
1077 & (t(i,j,k ,3,itrc)+ &
1078 & t(i,j,k+1,3,itrc))+ &
1079 & w(i,j,k)* &
1080 & (tl_t(i,j,k ,3,itrc)+ &
1081 & tl_t(i,j,k+1,3,itrc)))- &
1082# ifdef TL_IOMS
1083 & fc(i,k)
1084# endif
1085 END DO
1086 END DO
1087 DO i=istr,iend
1088# ifdef SED_MORPH
1089 fc(i,0)=w(i,j,0)*t(i,j,1,3,itrc)
1090 tl_fc(i,0)=tl_w(i,j,0)*t(i,j,1,3,itrc)+ &
1091 & w(i,j,0)*tl_t(i,j,1,3,itrc)- &
1092# ifdef TL_IOMS
1093 & fc(i,0)
1094# endif
1095# else
1096 fc(i,0)=0.0_r8
1097 tl_fc(i,0)=0.0_r8
1098# endif
1100 tl_fc(i,
n(ng))=0.0_r8
1101 END DO
1102
1104
1105
1106
1107
1108 CONTINUE
1109
1111
1112
1113
1114
1115
1116 CONTINUE
1117
1120
1121
1122
1123
1124 cff1=0.5_r8
1125 cff2=7.0_r8/12.0_r8
1126 cff3=1.0_r8/12.0_r8
1128 DO i=istr,iend
1129 fc(i,k)=w(i,j,k)* &
1130 & (cff2*(t(i,j,k ,3,itrc)+ &
1131 & t(i,j,k+1,3,itrc))- &
1132 & cff3*(t(i,j,k-1,3,itrc)+ &
1133 & t(i,j,k+2,3,itrc)))
1134 tl_fc(i,k)=tl_w(i,j,k)* &
1135 & (cff2*(t(i,j,k ,3,itrc)+ &
1136 & t(i,j,k+1,3,itrc))- &
1137 & cff3*(t(i,j,k-1,3,itrc)+ &
1138 & t(i,j,k+2,3,itrc)))+ &
1139 & w(i,j,k)* &
1140 & (cff2*(tl_t(i,j,k ,3,itrc)+ &
1141 & tl_t(i,j,k+1,3,itrc))- &
1142 & cff3*(tl_t(i,j,k-1,3,itrc)+ &
1143 & tl_t(i,j,k+2,3,itrc)))- &
1144# ifdef TL_IOMS
1145 & fc(i,k)
1146# endif
1147 END DO
1148 END DO
1149 DO i=istr,iend
1150# ifdef SED_MORPH
1151 fc(i,0)=w(i,j,0)*2.0_r8* &
1152 & (cff2*t(i,j,1,3,itrc)- &
1153 & cff3*t(i,j,2,3,itrc))
1154 tl_fc(i,0)=2.0_r8* &
1155 & (tl_w(i,j,0)* &
1156 & (cff2*t(i,j,1,3,itrc)- &
1157 & cff3*t(i,j,2,3,itrc))+ &
1158 & w(i,j,0)* &
1159 & (cff2*tl_t(i,j,1,3,itrc)- &
1160 & cff3*tl_t(i,j,2,3,itrc)))- &
1161# ifdef TL_IOMS
1162 & fc(i,0)
1163# endif
1164# else
1165 fc(i,0)=0.0_r8
1166 tl_fc(i,0)=0.0_r8
1167# endif
1168 fc(i,1)=w(i,j,1)* &
1169 & (cff1*t(i,j,1,3,itrc)+ &
1170 & cff2*t(i,j,2,3,itrc)- &
1171 & cff3*t(i,j,3,3,itrc))
1172 tl_fc(i,1)=tl_w(i,j,1)* &
1173 & (cff1*t(i,j,1,3,itrc)+ &
1174 & cff2*t(i,j,2,3,itrc)- &
1175 & cff3*t(i,j,3,3,itrc))+ &
1176 & w(i,j,1)* &
1177 & (cff1*tl_t(i,j,1,3,itrc)+ &
1178 & cff2*tl_t(i,j,2,3,itrc)- &
1179 & cff3*tl_t(i,j,3,3,itrc))- &
1180# ifdef TL_IOMS
1181 & fc(i,1)
1182# endif
1183 fc(i,
n(ng)-1)=w(i,j,
n(ng)-1)* &
1184 & (cff1*t(i,j,
n(ng) ,3,itrc)+ &
1185 & cff2*t(i,j,
n(ng)-1,3,itrc)- &
1186 & cff3*t(i,j,
n(ng)-2,3,itrc))
1187 tl_fc(i,
n(ng)-1)=tl_w(i,j,
n(ng)-1)* &
1188 & (cff1*t(i,j,
n(ng) ,3,itrc)+ &
1189 & cff2*t(i,j,
n(ng)-1,3,itrc)- &
1190 & cff3*t(i,j,
n(ng)-2,3,itrc))+ &
1192 & (cff1*tl_t(i,j,
n(ng) ,3,itrc)+ &
1193 & cff2*tl_t(i,j,
n(ng)-1,3,itrc)- &
1194 & cff3*tl_t(i,j,
n(ng)-2,3,itrc))- &
1195# ifdef TL_IOMS
1197# endif
1199 tl_fc(i,
n(ng))=0.0_r8
1200 END DO
1201 END IF vadv_flux
1202
1203
1204
1205# ifdef DIAGNOSTICS_TS
1206
1207# endif
1208
1210 CONTINUE
1211 ELSE
1212 DO i=istr,iend
1213 cf(i,0)=
dt(ng)*pm(i,j)*pn(i,j)
1214 END DO
1216 DO i=istr,iend
1217 cff1=cf(i,0)*(fc(i,k)-fc(i,k-1))
1218 tl_cff1=cf(i,0)*(tl_fc(i,k)-tl_fc(i,k-1))
1219
1220
1221 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)-tl_cff1
1222# ifdef SPLINES_VDIFF
1223
1224
1225 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)* &
1226 & ohz(i,j,k)+ &
1227 & (t(i,j,k,nnew,itrc)*hz(i,j,k))* &
1228 & tl_ohz(i,j,k)- &
1229# ifdef TL_IOMS
1230 & t(i,j,k,nnew,itrc)
1231# endif
1232# endif
1233# ifdef DIAGNOSTICS_TS
1234
1235
1236
1237
1238
1239# endif
1240 END DO
1241 END DO
1242 END IF vadv_stepping
1243 END DO j_loop1
1244 END DO t_loop2
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1262 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
1265 IF (((istr.le.isrc).and.(isrc.le.iend+1)).and. &
1266 & ((jstr.le.jsrc).and.(jsrc.le.jend+1))) THEN
1268 cff=
dt(ng)*pm(isrc,jsrc)*pn(isrc,jsrc)
1269# ifdef SPLINES_VDIFF
1270 cff=cff*ohz(isrc,jsrc,k)
1271 tl_cff=cff*tl_ohz(isrc,jsrc,k)
1272# endif
1274 cff3=
sources(ng)%Tsrc(is,k,itrc)
1275 tl_cff3=
sources(ng)%tl_Tsrc(is,k,itrc)
1276 ELSE
1277 cff3=t(isrc,jsrc,k,3,itrc)
1278 tl_cff3=tl_t(isrc,jsrc,k,3,itrc)
1279 END IF
1280
1281
1282
1283
1284# ifdef SPLINES_VDIFF
1285 tl_t(isrc,jsrc,k,nnew,itrc)= &
1286 & tl_t(isrc,jsrc,k,nnew,itrc)+ &
1287 & cff*(
sources(ng)%tl_Qsrc(is,k)* &
1288 & cff3+ &
1290 & tl_cff3)+ &
1291 & tl_cff*
sources(ng)%Qsrc(is,k)* &
1292 & cff3- &
1293# ifdef TL_IOMS
1294 & 2.0_r8*cff* &
1296# endif
1297# else
1298 tl_t(isrc,jsrc,k,nnew,itrc)= &
1299 & tl_t(isrc,jsrc,k,nnew,itrc)+ &
1300 & cff*(
sources(ng)%tl_Qsrc(is,k)* &
1301 & cff3+ &
1303 & tl_cff3)- &
1304# ifdef TL_IOMS
1305 & cff*
sources(ng)%Qsrc(is,k)* &
1306 & cff3
1307# endif
1308# endif
1309 END DO
1310 END IF
1311 END IF
1312 END DO
1313 END IF
1314 END DO
1315 END IF
1316
1317
1318
1319
1320
1321 j_loop2 : DO j=jstr,jend
1324
1325# ifdef SPLINES_VDIFF
1328
1329
1330
1331
1332
1333 cff1=1.0_r8/6.0_r8
1335 DO i=istr,iend
1336 fc(i,k)=cff1*hz(i,j,k )- &
1337 &
dt(ng)*akt(i,j,k-1,ltrc)*ohz(i,j,k )
1338 cf(i,k)=cff1*hz(i,j,k+1)- &
1339 &
dt(ng)*akt(i,j,k+1,ltrc)*ohz(i,j,k+1)
1340 END DO
1341 END DO
1342 DO i=istr,iend
1343 cf(i,0)=0.0_r8
1344 dc(i,0)=0.0_r8
1345 END DO
1346
1347
1348
1349 cff1=1.0_r8/3.0_r8
1351 DO i=istr,iend
1352 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
1353 &
dt(ng)*akt(i,j,k,ltrc)*(ohz(i,j,k)+ohz(i,j,k+1))
1354 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1355 cf(i,k)=cff*cf(i,k)
1356 dc(i,k)=cff*(t(i,j,k+1,nnew,itrc)-t(i,j,k,nnew,itrc)- &
1357 & fc(i,k)*dc(i,k-1))
1358 END DO
1359 END DO
1360
1361
1362
1363
1364 DO i=istr,iend
1366 END DO
1368 DO i=istr,iend
1369 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
1370 END DO
1371 END DO
1372
1373
1374
1375
1376
1377
1378
1379
1380 cff1=1.0_r8/6.0_r8
1382 DO i=istr,iend
1383 fc(i,k)=cff1*hz(i,j,k )- &
1384 &
dt(ng)*akt(i,j,k-1,ltrc)*ohz(i,j,k )
1385 tl_fc(i,k)=cff1*tl_hz(i,j,k )- &
1386 &
dt(ng)*(tl_akt(i,j,k-1,ltrc)*ohz(i,j,k )+ &
1387 & akt(i,j,k-1,ltrc)*tl_ohz(i,j,k ))
1388 cf(i,k)=cff1*hz(i,j,k+1)- &
1389 &
dt(ng)*akt(i,j,k+1,ltrc)*ohz(i,j,k+1)
1390 tl_cf(i,k)=cff1*tl_hz(i,j,k+1)- &
1391 &
dt(ng)*(tl_akt(i,j,k+1,ltrc)*ohz(i,j,k+1)+ &
1392 & akt(i,j,k+1,ltrc)*tl_ohz(i,j,k+1))
1393 END DO
1394 END DO
1395 DO i=istr,iend
1396 cf(i,0)=0.0_r8
1397 tl_cf(i,0)=0.0_r8
1398 tl_dc(i,0)=0.0_r8
1399 END DO
1400
1401
1402# ifdef TL_IOMS
1403
1404# endif
1405
1406 cff1=1.0_r8/3.0_r8
1408 DO i=istr,iend
1409 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
1410 &
dt(ng)*akt(i,j,k,ltrc)*(ohz(i,j,k)+ohz(i,j,k+1))
1411 tl_bc(i,k)=cff1*(tl_hz(i,j,k)+tl_hz(i,j,k+1))+ &
1412 &
dt(ng)*(tl_akt(i,j,k,ltrc)* &
1413 & (ohz(i,j,k)+ohz(i,j,k+1))+ &
1414 & akt(i,j,k,ltrc)* &
1415 & (tl_ohz(i,j,k)+tl_ohz(i,j,k+1)))
1416 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1417# ifdef TL_IOMS
1418 tl_dc(i,k)=cff*(tl_t(i,j,k+1,nnew,itrc)- &
1419 & tl_t(i,j,k ,nnew,itrc)- &
1420 & ((tl_fc(i,k)-fc(i,k))*dc(i,k-1)+ &
1421 & (tl_bc(i,k)-bc(i,k))*dc(i,k )+ &
1422 & (tl_cf(i,k)-cf(i,k))*dc(i,k+1))- &
1423 & fc(i,k)*tl_dc(i,k-1))
1424 cf(i,k)=cff*cf(i,k)
1425# else
1426 cf(i,k)=cff*cf(i,k)
1427 tl_dc(i,k)=cff*(tl_t(i,j,k+1,nnew,itrc)- &
1428 & tl_t(i,j,k ,nnew,itrc)- &
1429 & (tl_fc(i,k)*dc(i,k-1)+ &
1430 & tl_bc(i,k)*dc(i,k )+ &
1431 & tl_cf(i,k)*dc(i,k+1))- &
1432 & fc(i,k)*tl_dc(i,k-1))
1433# endif
1434 END DO
1435 END DO
1436
1437
1438
1439 DO i=istr,iend
1440 tl_dc(i,
n(ng))=0.0_r8
1441 END DO
1443 DO i=istr,iend
1444 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
1445 END DO
1446 END DO
1447
1448
1449
1450
1452 DO i=istr,iend
1453 tl_dc(i,k)=tl_dc(i,k)*akt(i,j,k,ltrc)+ &
1454 & dc(i,k)*tl_akt(i,j,k,ltrc)
1455# ifdef TL_IOMS
1456
1457
1458# endif
1459 dc(i,k)=dc(i,k)*akt(i,j,k,ltrc)
1460
1461
1462 tl_cff1=
dt(ng)*(tl_ohz(i,j,k)*(dc(i,k)-dc(i,k-1))+ &
1463 & ohz(i,j,k)*(tl_dc(i,k)-tl_dc(i,k-1)))- &
1464# ifdef TL_IOMS
1465 &
dt(ng)*ohz(i,j,k)*(dc(i,k)-dc(i,k-1))
1466# endif
1467
1468
1469 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)+tl_cff1
1470# ifdef DIAGNOSTICS_TS
1471
1472
1473# endif
1474 END DO
1475 END DO
1476 ELSE
1477# endif
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1492 DO i=istr,iend
1493 cff1=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1494 tl_cff1=-cff1*cff1*(tl_z_r(i,j,k+1)-tl_z_r(i,j,k))+ &
1495# ifdef TL_IOMS
1496 & 2.0_r8*cff1
1497# endif
1498 fc(i,k)=cff*cff1*akt(i,j,k,ltrc)
1499 tl_fc(i,k)=cff*(tl_cff1*akt(i,j,k,ltrc)+ &
1500 & cff1*tl_akt(i,j,k,ltrc))
1501# ifdef TL_IOMS
1502
1503
1504
1505
1506# endif
1507 END DO
1508 END DO
1509 DO i=istr,iend
1510 fc(i,0)=0.0_r8
1511 tl_fc(i,0)=0.0_r8
1513 tl_fc(i,
n(ng))=0.0_r8
1514 END DO
1515
1516
1517
1519 DO i=istr,iend
1520 bc(i,k)=hz(i,j,k)-fc(i,k)-fc(i,k-1)
1521 tl_bc(i,k)=tl_hz(i,j,k)-tl_fc(i,k)-tl_fc(i,k-1)
1522 END DO
1523 END DO
1524
1525
1526
1527
1529 DO i=istr,iend
1530# ifdef TL_IOMS
1531 dc(i,k)=tl_t(i,j,k,nnew,itrc)- &
1532 & ((tl_fc(i,k-1)-fc(i,k-1))*t(i,j,k-1,nnew,itrc)+ &
1533 & (tl_bc(i,k )-bc(i,k ))*t(i,j,k ,nnew,itrc)+ &
1534 & (tl_fc(i,k )-fc(i,k ))*t(i,j,k+1,nnew,itrc))
1535# else
1536 dc(i,k)=tl_t(i,j,k,nnew,itrc)- &
1537 & (tl_fc(i,k-1)*t(i,j,k-1,nnew,itrc)+ &
1538 & tl_bc(i,k )*t(i,j,k ,nnew,itrc)+ &
1539 & tl_fc(i,k )*t(i,j,k+1,nnew,itrc))
1540# endif
1541 END DO
1542 END DO
1543 DO i=istr,iend
1544# ifdef TL_IOMS
1545 dc(i,1)=tl_t(i,j,1,nnew,itrc)- &
1546 & ((tl_bc(i,1)-bc(i,1))*t(i,j,1,nnew,itrc)+ &
1547 & (tl_fc(i,1)-fc(i,1))*t(i,j,2,nnew,itrc))
1548 dc(i,
n(ng))=tl_t(i,j,
n(ng),nnew,itrc)- &
1549 & ((tl_fc(i,
n(ng)-1)-fc(i,
n(ng)-1))* &
1550 & t(i,j,
n(ng)-1,nnew,itrc)+ &
1551 & (tl_bc(i,
n(ng) )-bc(i,
n(ng) ))* &
1552 & t(i,j,
n(ng) ,nnew,itrc))
1553# else
1554 dc(i,1)=tl_t(i,j,1,nnew,itrc)- &
1555 & (tl_bc(i,1)*t(i,j,1,nnew,itrc)+ &
1556 & tl_fc(i,1)*t(i,j,2,nnew,itrc))
1557 dc(i,
n(ng))=tl_t(i,j,
n(ng),nnew,itrc)- &
1558 & (tl_fc(i,
n(ng)-1)*t(i,j,
n(ng)-1,nnew,itrc)+ &
1559 & tl_bc(i,
n(ng) )*t(i,j,
n(ng) ,nnew,itrc))
1560# endif
1561 END DO
1562
1563 DO i=istr,iend
1564 cff=1.0_r8/bc(i,1)
1565 cf(i,1)=cff*fc(i,1)
1566 dc(i,1)=cff*dc(i,1)
1567 END DO
1569 DO i=istr,iend
1570 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
1571 cf(i,k)=cff*fc(i,k)
1572 dc(i,k)=cff*(dc(i,k)-fc(i,k-1)*dc(i,k-1))
1573 END DO
1574 END DO
1575
1576
1577
1578
1579 DO i=istr,iend
1580# ifdef DIAGNOSTICS_TS
1581
1582# endif
1583 dc(i,
n(ng))=(dc(i,
n(ng))-fc(i,
n(ng)-1)*dc(i,
n(ng)-1))/ &
1584 & (bc(i,
n(ng))-fc(i,
n(ng)-1)*cf(i,
n(ng)-1))
1585 tl_t(i,j,
n(ng),nnew,itrc)=dc(i,
n(ng))
1586# ifdef DIAGNOSTICS_TS
1587
1588
1589
1590# endif
1591 END DO
1593 DO i=istr,iend
1594# ifdef DIAGNOSTICS_TS
1595
1596# endif
1597 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
1598 tl_t(i,j,k,nnew,itrc)=dc(i,k)
1599# ifdef DIAGNOSTICS_TS
1600
1601
1602# endif
1603 END DO
1604 END DO
1605# ifdef SPLINES_VDIFF
1606 END IF
1607# endif
1608 END DO
1609 END DO j_loop2
1610
1611# if defined AGE_MEAN && defined T_PASSIVE
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1630 DO j=jstr,jend
1631 DO i=istr,iend
1634 CONTINUE
1635 ELSE
1636
1637
1638
1639 tl_t(i,j,k,nnew,iage)=tl_t(i,j,k,nnew,iage)+ &
1641 & tl_t(i,j,k,3,
inert(itrc))
1642 END IF
1643 END DO
1644 END DO
1645 END DO
1646 END DO
1647# endif
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658 ic=0
1659
1661
1662
1663
1664
1666 ic=ic+1
1667 END IF
1668
1669
1670
1671
1672
1673
1674
1675
1676
1678 & lbi, ubi, lbj, ubj,
n(ng),
nt(ng), &
1679 & imins, imaxs, jmins, jmaxs, &
1680 & nstp, nnew, &
1681 & tl_t)
1682
1683
1684
1687 DO j=jstrr,jendr
1688 DO i=istrr,iendr
1689
1690
1691
1692
1693
1694
1695 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)- &
1697 &
clima(ng)%Tnudgcof(i,j,k,ic)* &
1698 & tl_t(i,j,k,nnew,itrc)+ &
1699# ifdef TL_IOMS
1701 &
clima(ng)%Tnudgcof(i,j,k,ic)* &
1702 &
clima(ng)%tclm(i,j,k,ic)
1703# endif
1704 END DO
1705 END DO
1706 END DO
1707 END IF
1708
1709# ifdef MASKING
1710
1711
1712
1714 DO j=jstrr,jendr
1715 DO i=istrr,iendr
1716
1717
1718 tl_t(i,j,k,nnew,itrc)=tl_t(i,j,k,nnew,itrc)*rmask(i,j)
1719 END DO
1720 END DO
1721 END DO
1722# endif
1723# ifdef DIAGNOSTICS_TS
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737# endif
1738
1739
1740
1742
1743
1744
1745
1747 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1748 & tl_t(:,:,:,nnew,itrc))
1749 END IF
1750 END DO
1751# ifdef DISTRIBUTE
1752
1753
1754
1755
1756
1757
1758
1759
1760
1762 & lbi, ubi, lbj, ubj, 1,
n(ng), 1,
nt(ng), &
1765 & tl_t(:,:,:,nnew,:))
1766# endif
1767# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
1768
1769
1770
1771
1772
1773
1774 DO j=jstrr,jendr
1775 DO i=istrr,iendr
1777 daktdz(i,j,k)=(akt(i,j,k,1)-akt(i,j,k-1,1))/hz(i,j,k)
1778 END DO
1779 END DO
1780 END DO
1781
1782
1783
1786 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1787 & daktdz)
1788 END IF
1789
1790# ifdef DISTRIBUTE
1792 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1795 & daktdz)
1796# endif
1797# endif
1798
1799 RETURN
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
type(t_clima), dimension(:), allocatable clima
type(t_adv), dimension(:,:), allocatable tl_hadvection
integer, dimension(:), allocatable n
type(t_adv), dimension(:,:), allocatable tl_vadvection
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable nt
logical, dimension(:), allocatable luvsrc
logical, dimension(:,:), allocatable ltracersrc
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable lwsrc
logical, dimension(:,:), allocatable compositegrid
integer, parameter isouth
integer, dimension(:), pointer inert
logical, dimension(:,:), allocatable ltracerclm
integer, parameter inorth
logical, dimension(:,:), allocatable lnudgetclm
type(t_sources), dimension(:), allocatable sources
integer, dimension(:), allocatable nsrc
subroutine mp_exchange4d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, lbt, ubt, nghost, ew_periodic, ns_periodic, a, b, c)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine, public rp_t3dbc_tile(ng, tile, itrc, ic, lbi, ubi, lbj, ubj, ubk, ubt, imins, imaxs, jmins, jmaxs, nstp, nout, tl_t)