Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:36:23 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
31ab105195 Alis*0001 #include "CPP_OPTIONS.h"
                0002 
9366854e02 Chri*0003 CBOP
                0004 C     !ROUTINE: ADAMS_BASHFORTH2
                0005 C     !INTERFACE:
31ab105195 Alis*0006       SUBROUTINE ADAMS_BASHFORTH2(
23a7f3050f Jean*0007      I                     bi, bj, kArg, kSize,
31ab105195 Alis*0008      U                     gTracer, gTrNm1,
38e8b1b15b Jean*0009      O                     AB_gTr,
117ee419f5 Jean*0010      I                     startAB, myIter, myThid )
9366854e02 Chri*0011 C     !DESCRIPTION: \bv
                0012 C     *==========================================================*
117ee419f5 Jean*0013 C     | S/R ADAMS_BASHFORTH2
23a7f3050f Jean*0014 C     | o Extrapolate forward in time using quasi-second order
                0015 C     |   Adams-Bashforth method.
                0016 C     *==========================================================*
                0017 C     | Either apply to tendency (kArg>0) at level k=kArg,
                0018 C     |     or apply to state variable (kArg=0) for all levels
9366854e02 Chri*0019 C     *==========================================================*
                0020 C     \ev
31ab105195 Alis*0021 
9366854e02 Chri*0022 C     !USES:
                0023       IMPLICIT NONE
31ab105195 Alis*0024 C     == Global variables ===
                0025 #include "SIZE.h"
                0026 #include "EEPARAMS.h"
                0027 #include "PARAMS.h"
                0028 
9366854e02 Chri*0029 C     !INPUT/OUTPUT PARAMETERS:
31ab105195 Alis*0030 C     == Routine Arguments ==
23a7f3050f Jean*0031 C     bi,bj   :: Tile indices
                0032 C     kArg    :: if >0: apply AB on tendency at level k=kArg
                0033 C             :: if =0: apply AB on state variable and process all levels
94e3f14b29 Jean*0034 C     kSize   :: 3rd dimension of tracer and tendency arrays
23a7f3050f Jean*0035 C     gTracer ::  in: Tendency/State at current time
                0036 C             :: out (kArg >0): Extrapolated Tendency at current time
                0037 C     gTrNm1  ::  in: Tendency/State at previous time
                0038 C             :: out: (kArg >0) Save tendency at current time
                0039 C             :: out: (kArg =0) Extrapolated State at current time
38e8b1b15b Jean*0040 C     AB_gTr  :: Adams-Bashforth tendency increment
117ee419f5 Jean*0041 C     startAB :: number of previous time level available to start/restart AB
9366854e02 Chri*0042 C     myIter  :: Current time step number
38e8b1b15b Jean*0043 C     myThid  :: my Thread Id. number
23a7f3050f Jean*0044       INTEGER bi, bj, kArg, kSize
                0045       _RL  gTracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize)
                0046       _RL  gTrNm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize)
38e8b1b15b Jean*0047       _RL  AB_gTr (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117ee419f5 Jean*0048       INTEGER startAB
31ab105195 Alis*0049       INTEGER myIter, myThid
9366854e02 Chri*0050 
                0051 C     !LOCAL VARIABLES:
31ab105195 Alis*0052 C     == Local variables ==
23a7f3050f Jean*0053 C     k          :: level index
9366854e02 Chri*0054 C     i,j        :: Loop counters
38e8b1b15b Jean*0055 C     abFac      :: Adams bashforth extrapolation factor
23a7f3050f Jean*0056       INTEGER i, j, k
38e8b1b15b Jean*0057       _RL abFac
9366854e02 Chri*0058 CEOP
31ab105195 Alis*0059 
38e8b1b15b Jean*0060 C     Adams-Bashforth extrapolation factor
117ee419f5 Jean*0061       IF ( myIter.EQ.nIter0 .AND. startAB.EQ.0 ) THEN
38e8b1b15b Jean*0062        abFac = 0. _d 0
31ab105195 Alis*0063       ELSE
38e8b1b15b Jean*0064        abFac = 0.5 _d 0 + abEps
31ab105195 Alis*0065       ENDIF
                0066 
117ee419f5 Jean*0067 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
31ab105195 Alis*0068 
23a7f3050f Jean*0069       IF ( kArg.EQ.0 ) THEN
                0070 C-    Extrapolate forward in time the state variable, with AB weights:
                0071         DO k=1,kSize
                0072          DO j=1-OLy,sNy+OLy
                0073           DO i=1-OLx,sNx+OLx
                0074            AB_gTr(i,j) = abFac*( gTracer(i,j,k) - gTrNm1(i,j,k) )
                0075            gTrNm1(i,j,k) = gTracer(i,j,k) + AB_gTr(i,j)
                0076           ENDDO
                0077          ENDDO
                0078         ENDDO
                0079       ELSE
                0080 C-    Extrapolate forward in time the tendency, with AB weights:
                0081         k = kArg
                0082         DO j=1-OLy,sNy+OLy
                0083          DO i=1-OLx,sNx+OLx
                0084            AB_gTr(i,j) = abFac*( gTracer(i,j,k) - gTrNm1(i,j,k) )
                0085            gTrNm1(i,j,k) = gTracer(i,j,k)
                0086            gTracer(i,j,k) = gTracer(i,j,k) + AB_gTr(i,j)
                0087          ENDDO
                0088         ENDDO
                0089       ENDIF
31ab105195 Alis*0090 
                0091       RETURN
                0092       END