107 |
C uTrans,vTrans :: 2-D arrays of volume transports at U,V points |
C uTrans,vTrans :: 2-D arrays of volume transports at U,V points |
108 |
C rTrans :: 2-D arrays of volume transports at W points |
C rTrans :: 2-D arrays of volume transports at W points |
109 |
C rTransKp :: vertical volume transport at interface k+1 |
C rTransKp :: vertical volume transport at interface k+1 |
110 |
|
C rTran3d :: 3-D array of volume transport at W points |
111 |
|
C afr :: 3-D array of vertical advective flux |
112 |
C af :: 2-D array for horizontal advective flux |
C af :: 2-D array for horizontal advective flux |
113 |
C afx :: 2-D array for horizontal advective flux, x direction |
C afx :: 2-D array for horizontal advective flux, x direction |
114 |
C afy :: 2-D array for horizontal advective flux, y direction |
C afy :: 2-D array for horizontal advective flux, y direction |
137 |
_RL vTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL vTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
138 |
_RL rTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
139 |
_RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
140 |
|
_RL rTran3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
141 |
|
_RL afr (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
142 |
_RL af (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL af (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
143 |
_RL afx (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL afx (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
144 |
_RL afy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL afy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
422 |
CALL GAD_OS7MP_ADV_X( bi,bj,k, .TRUE., deltaTLev(k), |
CALL GAD_OS7MP_ADV_X( bi,bj,k, .TRUE., deltaTLev(k), |
423 |
I uTrans, uFld(1-OLx,1-OLy,k), maskLocW, localTij, |
I uTrans, uFld(1-OLx,1-OLy,k), maskLocW, localTij, |
424 |
O af, myThid ) |
O af, myThid ) |
425 |
#endif |
ELSEIF (advectionScheme.EQ.ENUM_PPM_NULL_LIMIT .OR. |
426 |
|
& advectionScheme.EQ.ENUM_PPM_MONO_LIMIT .OR. |
427 |
|
& advectionScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN |
428 |
|
CALL GAD_PPM_ADV_X( advectionScheme, bi, bj, k , .TRUE., |
429 |
|
I deltaTLev(k), uFld(1-OLx,1-OLy,k), uTrans, localTij, |
430 |
|
O af, myThid ) |
431 |
|
ELSEIF (advectionScheme.EQ.ENUM_PQM_NULL_LIMIT .OR. |
432 |
|
& advectionScheme.EQ.ENUM_PQM_MONO_LIMIT .OR. |
433 |
|
& advectionScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN |
434 |
|
CALL GAD_PQM_ADV_X( advectionScheme, bi, bj, k , .TRUE., |
435 |
|
I deltaTLev(k), uFld(1-OLx,1-OLy,k), uTrans, localTij, |
436 |
|
O af, myThid ) |
437 |
|
#endif /* ndef ALLOW_AUTODIFF */ |
438 |
ELSE |
ELSE |
439 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim' |
440 |
ENDIF |
ENDIF |
631 |
CALL GAD_OS7MP_ADV_Y( bi,bj,k, .TRUE., deltaTLev(k), |
CALL GAD_OS7MP_ADV_Y( bi,bj,k, .TRUE., deltaTLev(k), |
632 |
I vTrans, vFld(1-OLx,1-OLy,k), maskLocS, localTij, |
I vTrans, vFld(1-OLx,1-OLy,k), maskLocS, localTij, |
633 |
O af, myThid ) |
O af, myThid ) |
634 |
#endif |
ELSEIF (advectionScheme.EQ.ENUM_PPM_NULL_LIMIT .OR. |
635 |
|
& advectionScheme.EQ.ENUM_PPM_MONO_LIMIT .OR. |
636 |
|
& advectionScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN |
637 |
|
CALL GAD_PPM_ADV_Y(advectionScheme, bi, bj, k , .TRUE., |
638 |
|
I deltaTLev(k), vFld(1-OLX,1-OLy,k), vTrans, localTij, |
639 |
|
O af, myThid ) |
640 |
|
ELSEIF (advectionScheme.EQ.ENUM_PQM_NULL_LIMIT .OR. |
641 |
|
& advectionScheme.EQ.ENUM_PQM_MONO_LIMIT .OR. |
642 |
|
& advectionScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN |
643 |
|
CALL GAD_PQM_ADV_Y(advectionScheme, bi, bj, k , .TRUE., |
644 |
|
I deltaTLev(k), vFld(1-OLX,1-OLy,k), vTrans, localTij, |
645 |
|
O af, myThid ) |
646 |
|
#endif /* ndef ALLOW_AUTODIFF */ |
647 |
ELSE |
ELSE |
648 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
649 |
ENDIF |
ENDIF |
833 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
834 |
|
|
835 |
IF ( .NOT.implicitAdvection ) THEN |
IF ( .NOT.implicitAdvection ) THEN |
836 |
|
|
837 |
|
#ifndef ALLOW_AUTODIFF |
838 |
|
IF (vertAdvecScheme.EQ.ENUM_PPM_NULL_LIMIT .OR. |
839 |
|
& vertAdvecScheme.EQ.ENUM_PPM_MONO_LIMIT .OR. |
840 |
|
& vertAdvecScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN |
841 |
|
C-- PPM-style vertical advection |
842 |
|
DO k=1,Nr |
843 |
|
IF (k.EQ.1) THEN |
844 |
|
C-- vertical transport: surface |
845 |
|
DO j=1-OLy,sNy+OLy |
846 |
|
DO i=1-OLx,sNx+OLx |
847 |
|
rTran3d(i,j,k) = 0. _d 0 |
848 |
|
ENDDO |
849 |
|
ENDDO |
850 |
|
ELSE |
851 |
|
C-- vertical transport: interior |
852 |
|
DO j=1-OLy,sNy+OLy |
853 |
|
DO i=1-OLx,sNx+OLx |
854 |
|
rTran3d(i,j,k) = wFld(i,j,k)*rA(i,j,bi,bj) |
855 |
|
& *deepFac2F(k)*rhoFacF(k) |
856 |
|
& *maskC(i,j,k-1,bi,bj) |
857 |
|
ENDDO |
858 |
|
ENDDO |
859 |
|
ENDIF |
860 |
|
ENDDO |
861 |
|
C-- calc. PPM vertical flux data |
862 |
|
CALL GAD_PPM_ADV_R( vertAdvecScheme, bi, bj, |
863 |
|
I deltaTLev, wFld, rTran3d, localT3d, |
864 |
|
O afr, myThid ) |
865 |
|
ENDIF |
866 |
|
|
867 |
|
IF (vertAdvecScheme.EQ.ENUM_PQM_NULL_LIMIT .OR. |
868 |
|
& vertAdvecScheme.EQ.ENUM_PQM_MONO_LIMIT .OR. |
869 |
|
& vertAdvecScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN |
870 |
|
C-- PQM-style vertical advection |
871 |
|
DO k=1,Nr |
872 |
|
IF (k.EQ.1) THEN |
873 |
|
C-- vertical transport: surface |
874 |
|
DO j=1-OLy,sNy+OLy |
875 |
|
DO i=1-OLx,sNx+OLx |
876 |
|
rTran3d(i,j,k) = 0. _d 0 |
877 |
|
ENDDO |
878 |
|
ENDDO |
879 |
|
ELSE |
880 |
|
C-- vertical transport: interior |
881 |
|
DO j=1-OLy,sNy+OLy |
882 |
|
DO i=1-OLx,sNx+OLx |
883 |
|
rTran3d(i,j,k) = wFld(i,j,k)*rA(i,j,bi,bj) |
884 |
|
& *deepFac2F(k)*rhoFacF(k) |
885 |
|
& *maskC(i,j,k-1,bi,bj) |
886 |
|
ENDDO |
887 |
|
ENDDO |
888 |
|
ENDIF |
889 |
|
ENDDO |
890 |
|
C-- calc. PQM vertical flux data |
891 |
|
CALL GAD_PQM_ADV_R( vertAdvecScheme, bi, bj, |
892 |
|
I deltaTLev, wFld, rTran3d, localT3d, |
893 |
|
O afr, myThid ) |
894 |
|
ENDIF |
895 |
|
#endif /* ndef ALLOW_AUTODIFF */ |
896 |
|
|
897 |
C-- Start of k loop for vertical flux |
C-- Start of k loop for vertical flux |
898 |
DO k=Nr,1,-1 |
DO k=Nr,1,-1 |
899 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
973 |
CALL GAD_OS7MP_ADV_R( bi,bj,k, deltaTLev(k), |
CALL GAD_OS7MP_ADV_R( bi,bj,k, deltaTLev(k), |
974 |
I rTrans, wFld(1-OLx,1-OLy,k), localT3d, |
I rTrans, wFld(1-OLx,1-OLy,k), localT3d, |
975 |
O fVerT(1-OLx,1-OLy,kUp), myThid ) |
O fVerT(1-OLx,1-OLy,kUp), myThid ) |
976 |
#endif |
ELSEIF (vertAdvecScheme.EQ.ENUM_PPM_NULL_LIMIT .OR. |
977 |
|
& vertAdvecScheme.EQ.ENUM_PPM_MONO_LIMIT .OR. |
978 |
|
& vertAdvecScheme.EQ.ENUM_PPM_WENO_LIMIT .OR. |
979 |
|
& vertAdvecScheme.EQ.ENUM_PQM_NULL_LIMIT .OR. |
980 |
|
& vertAdvecScheme.EQ.ENUM_PQM_MONO_LIMIT .OR. |
981 |
|
& vertAdvecScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN |
982 |
|
C- copy level from 3d flux data |
983 |
|
DO j = 1-OLy,sNy+OLy |
984 |
|
DO i = 1-OLx,sNx+OLx |
985 |
|
fVerT(i,j,kUp) = afr(i,j,k) |
986 |
|
ENDDO |
987 |
|
ENDDO |
988 |
|
#endif /* ndef ALLOW_AUTODIFF */ |
989 |
ELSE |
ELSE |
990 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
991 |
ENDIF |
ENDIF |