Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:19 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
dd92b9a824 Jean*0001 #include "MONITOR_OPTIONS.h"
                0002 
                0003 C--  File mon_calc_advcfl.F: Routines to compute Tracer Advective CFL
                0004 C--   Contents
                0005 C--   o MON_CALC_ADVCFL_TILE
                0006 C--   o MON_CALC_ADVCFL_GLOB
                0007 
                0008 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0009 CBOP
                0010 C     !ROUTINE: MON_CALC_ADVCFL_TILE
                0011 
                0012 C     !INTERFACE:
                0013       SUBROUTINE MON_CALC_ADVCFL_TILE(
                0014      I               myNr, bi, bj,
                0015      I               uFld, vFld, wFld, dT_lev,
                0016      O               maxCFL,
                0017      I               myIter, myThid )
                0018 
                0019 C     Calculate Maximum advective CFL in 3 direction (x,y,z)
                0020 C     for current tile bi,bj
                0021 
                0022 C     !USES:
                0023       IMPLICIT NONE
                0024 #include "SIZE.h"
                0025 #include "EEPARAMS.h"
                0026 #include "PARAMS.h"
                0027 #include "GRID.h"
                0028 c#include "SURFACE.h"
                0029 c#include "MONITOR.h"
                0030 
                0031 C     !INPUT/OUTPUT PARAMETERS:
                0032 C     myNr    :: number of levels
                0033 C     bi, bj  :: tile indices
                0034 C     uFld    :: zonal velocity
                0035 C     vFld    :: merid velocity
                0036 C     wFld    :: vert. velocity
                0037 C     dT_lev  :: tracer time-step
                0038 C     maxCFL  :: maximum advective CFL in 3 directions
                0039 C     myIter  :: my Iteration number
                0040 C     myThid  :: my Thread Id number
                0041       INTEGER myNr, bi, bj
                0042       _RL uFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr)
                0043       _RL vFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr)
                0044       _RL wFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr)
                0045       _RL dT_lev(myNr)
                0046       _RL maxCFL(3)
                0047       INTEGER myIter, myThid
                0048 CEOP
                0049 
                0050 C     !LOCAL VARIABLES:
                0051       INTEGER i,j,k
9d10313027 Jean*0052       _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0053       _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0054       _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0055       _RL rTransKp1, tmpVal, recVol_dT
dd92b9a824 Jean*0056 
                0057 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0058 
                0059       maxCFL(1) = 0.
                0060       maxCFL(2) = 0.
                0061       maxCFL(3) = 0.
                0062 
9d10313027 Jean*0063       DO j=1-OLy,sNy+OLy
                0064         DO i=1-OLx,sNx+OLx
                0065           rTrans(i,j) = 0.
dd92b9a824 Jean*0066         ENDDO
                0067       ENDDO
                0068 
                0069       DO k=myNr,1,-1
                0070 
                0071 C--   compute horiz. transport and time-step divided by volume
                0072 C     (without level thickness "drF" since it cancels)
                0073         DO j=1,sNy+1
                0074          DO i=1,sNx+1
                0075            uTrans(i,j) = uFld(i,j,k)*dyG(i,j,bi,bj)*deepFacC(k)
                0076      &                         *hFacW(i,j,k,bi,bj)
                0077            vTrans(i,j) = vFld(i,j,k)*dxG(i,j,bi,bj)*deepFacC(k)
                0078      &                         *hFacS(i,j,k,bi,bj)
                0079          ENDDO
                0080         ENDDO
                0081         DO j=1,sNy
                0082          DO i=1,sNx
                0083            recVol_dT = dT_lev(k)
                0084      &             *recip_rA(i,j,bi,bj)*recip_deepFac2C(k)
                0085      &                   *recip_hFacC(i,j,k,bi,bj)
                0086            tmpVal = (
                0087      &          + MAX( uTrans(i+1,j), zeroRL )
                0088      &          - MIN( uTrans( i ,j), zeroRL )
                0089      &              )*recVol_dT
                0090            maxCFL(1) = MAX( maxCFL(1), tmpVal )
                0091            tmpVal = (
                0092      &          + MAX( vTrans(i,j+1), zeroRL )
                0093      &          - MIN( vTrans(i, j ), zeroRL )
                0094      &              )*recVol_dT
                0095            maxCFL(2) = MAX( maxCFL(2), tmpVal )
                0096          ENDDO
                0097         ENDDO
                0098 
                0099 C--   compute vert. transport and time-step divided by volume
                0100 C     (without grid-cell area "rA" since it cancels)
                0101         DO j=1,sNy
                0102          DO i=1,sNx
9d10313027 Jean*0103            rTransKp1 = rTrans(i,j)
dd92b9a824 Jean*0104            rTrans(i,j) = wFld(i,j,k)
                0105      &                 *deepFac2F(k)*rhoFacF(k)
                0106            recVol_dT = dT_lev(k)
                0107      &             *recip_deepFac2C(k)*recip_rhoFacC(k)
                0108      &             *recip_drF(k)*recip_hFacC(i,j,k,bi,bj)
                0109            tmpVal = (
                0110      &          + MAX( rTrans(i,j), zeroRL )
9d10313027 Jean*0111      &          - MIN( rTransKp1, zeroRL )
dd92b9a824 Jean*0112      &              )*recVol_dT
                0113            maxCFL(3) = MAX( maxCFL(3), tmpVal )
                0114          ENDDO
                0115         ENDDO
                0116 
                0117       ENDDO
                0118 
                0119       RETURN
                0120       END
                0121 
                0122 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0123 CBOP
                0124 C     !ROUTINE: MON_CALC_ADVCFL_GLOB
                0125 
                0126 C     !INTERFACE:
                0127       SUBROUTINE MON_CALC_ADVCFL_GLOB(
                0128      I               maxCFL, myIter, myThid )
                0129 
                0130 C     !DESCRIPTION:
                0131 C     Calculate Maximum advective CFL in 3 direction (x,y,z)
                0132 C     in global domain (from tile-max value)
                0133 
                0134 C     !USES:
                0135       IMPLICIT NONE
                0136 #include "SIZE.h"
                0137 #include "EEPARAMS.h"
                0138 #include "PARAMS.h"
                0139 #include "MONITOR.h"
                0140 
                0141 C     !INPUT PARAMETERS:
                0142 C     maxCFL  :: maximum advective CFL (per tile) in 3 directions
                0143 C     myIter  :: Current iteration number in simulation
                0144 C     myThid  :: my Thread Id number
                0145       _RL maxCFL(3,nSx,nSy)
                0146       INTEGER myIter
                0147       INTEGER myThid
                0148 CEOP
                0149 
                0150 C     !LOCAL VARIABLES:
                0151       INTEGER bi, bj
                0152       _RL uCFL, vCFL, wCFL
                0153 
                0154       uCFL = 0.
                0155       vCFL = 0.
                0156       wCFL = 0.
                0157       DO bj=myByLo(myThid),myByHi(myThid)
                0158        DO bi=myBxLo(myThid),myBxHi(myThid)
                0159          uCFL = MAX( uCFL, maxCFL(1,bi,bj) )
                0160          vCFL = MAX( vCFL, maxCFL(2,bi,bj) )
                0161          wCFL = MAX( wCFL, maxCFL(3,bi,bj) )
                0162        ENDDO
                0163       ENDDO
                0164       _GLOBAL_MAX_RL( uCFL, myThid )
                0165       _GLOBAL_MAX_RL( vCFL, myThid )
                0166       _GLOBAL_MAX_RL( wCFL, myThid )
                0167 
                0168 C-    store values in common bloc
                0169       _BEGIN_MASTER(myThid)
                0170        mon_trAdvCFL(1) = uCFL
                0171        mon_trAdvCFL(2) = vCFL
                0172        mon_trAdvCFL(3) = wCFL
                0173       _END_MASTER(myThid)
                0174 
                0175       RETURN
                0176       END