Back to home page

MITgcm

 
 

    


File indexing completed on 2024-09-20 05:10:21 UTC

view on githubraw file Latest commit e6e223b2 on 2024-09-19 22:01:15 UTC
8991be1c08 Jean*0001 #include "CPP_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C     !ROUTINE: POST_CG3D
                0005 C     !INTERFACE:
                0006       SUBROUTINE POST_CG3D(
                0007      I                      myTime, myIter, myThid )
                0008 
                0009 C     !DESCRIPTION:
                0010 C     Called from SOLVE_FOR_PRESSURE, after 3-D solver (cg3d):
                0011 C     Finish computation of Non-hydrostatic pressure from 3-D solver solution
                0012 
                0013 C     !USES:
                0014       IMPLICIT NONE
                0015 C     == Global variables
                0016 #include "SIZE.h"
                0017 #include "EEPARAMS.h"
                0018 #ifdef ALLOW_NONHYDROSTATIC
e6e223b277 Jean*0019 # include "PARAMS.h"
                0020 # include "GRID.h"
                0021 # include "SURFACE.h"
                0022 c#include "FFIELDS.h"
                0023 # include "DYNVARS.h"
                0024 # include "NH_VARS.h"
8991be1c08 Jean*0025 #endif
                0026 
                0027 C     !INPUT/OUTPUT PARAMETERS:
                0028 C     myTime      :: Current time in simulation
                0029 C     myIter      :: Current iteration number in simulation
                0030 C     myThid      :: My Thread Id. number
                0031       _RL     myTime
                0032       INTEGER myIter
                0033       INTEGER myThid
                0034 
                0035 #ifdef ALLOW_NONHYDROSTATIC
e6e223b277 Jean*0036 C     !FUNCTIONS:
                0037       LOGICAL  DIFFERENT_MULTIPLE
                0038       EXTERNAL DIFFERENT_MULTIPLE
                0039 
8991be1c08 Jean*0040 C     !LOCAL VARIABLES:
e6e223b277 Jean*0041       INTEGER i, j, bi, bj
8991be1c08 Jean*0042       INTEGER ks
                0043 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
8e18cb9146 Jean*0044       _RL     locGamma
8991be1c08 Jean*0045 CEOP
                0046 
cba4501825 Jean*0047 C--   Separate the Hydrostatic Surface Pressure adjusment (=> put it in dPhiNH)
                0048 C     from the Non-hydrostatic pressure (since cg3d_x contains both contribution)
                0049       IF ( nonHydrostatic .AND. exactConserv ) THEN
8991be1c08 Jean*0050        DO bj=myByLo(myThid),myByHi(myThid)
                0051         DO bi=myBxLo(myThid),myBxHi(myThid)
8e18cb9146 Jean*0052 
                0053          IF ( selectNHfreeSurf.GE.1 ) THEN
                0054           DO j=1,sNy
                0055            DO i=1,sNx
                0056             locGamma = drC(1)*recip_Bo(i,j,bi,bj)
                0057      &               /( deltaTMom*deltaTFreeSurf
                0058      &                 *implicitNHPress*implicDiv2DFlow )
                0059             ks = 1
                0060 c           ks = kSurfC(i,j,bi,bj)
                0061 c           IF ( ks.LE.Nr ) THEN
                0062              dPhiNH(i,j,bi,bj) = ( phi_nh(i,j,ks,bi,bj)
                0063      &           + locGamma*Bo_surf(i,j,bi,bj)
                0064      &                     *implicDiv2DFlow*deltaTFreeSurf
                0065 c    &                     *( wVel(i,j,ks,bi,bj) - wSurfP2d(i,j) )
                0066      &                     *( wVel(i,j,ks,bi,bj) - dPhiNH(i,j,bi,bj) )
                0067      &                           )/(1. _d 0 + locGamma )
                0068 c           ENDIF
                0069            ENDDO
                0070           ENDDO
                0071          ELSEIF ( uniformFreeSurfLev ) THEN
8991be1c08 Jean*0072 C-       Z coordinate: assume surface @ level k=1
                0073           DO j=1-OLy,sNy+OLy
                0074            DO i=1-OLx,sNx+OLx
cba4501825 Jean*0075              dPhiNH(i,j,bi,bj) = phi_nh(i,j,1,bi,bj)
8991be1c08 Jean*0076            ENDDO
                0077           ENDDO
8e18cb9146 Jean*0078          ELSE
8991be1c08 Jean*0079 C-       Other than Z coordinate: no assumption on surface level index
                0080           DO j=1-OLy,sNy+OLy
                0081            DO i=1-OLx,sNx+OLx
e78345ed77 Jean*0082             ks = kSurfC(i,j,bi,bj)
8991be1c08 Jean*0083             IF ( ks.LE.Nr ) THEN
cba4501825 Jean*0084              dPhiNH(i,j,bi,bj) = phi_nh(i,j,ks,bi,bj)
8991be1c08 Jean*0085             ELSE
cba4501825 Jean*0086              dPhiNH(i,j,bi,bj) = 0.
8991be1c08 Jean*0087             ENDIF
                0088            ENDDO
                0089           ENDDO
982e105a17 Jean*0090          ENDIF
8e18cb9146 Jean*0091 
cba4501825 Jean*0092         ENDDO
                0093        ENDDO
982e105a17 Jean*0094        IF ( selectNHfreeSurf.GE.1 .AND.
9952e3248a Jean*0095      &  ( implicitNHPress.LT.oneRL .OR. selectP_inEOS_Zc.EQ.3 ) ) THEN
982e105a17 Jean*0096          CALL EXCH_XY_RL( dPhiNH, myThid )
cba4501825 Jean*0097        ENDIF
                0098       ENDIF
                0099 
8991be1c08 Jean*0100 #endif /* ALLOW_NONHYDROSTATIC */
                0101 
                0102       RETURN
                0103       END