Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:37:00 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 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                      zeroPsNH, zeroMeanPnh,
                0008      I                      myTime, myIter, myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     Called from SOLVE_FOR_PRESSURE, after 3-D solver (cg3d):
                0012 C     Finish computation of Non-hydrostatic pressure from 3-D solver solution
                0013 
                0014 C     !USES:
                0015       IMPLICIT NONE
                0016 C     == Global variables
                0017 #include "SIZE.h"
                0018 #include "EEPARAMS.h"
                0019 #include "PARAMS.h"
                0020 #include "GRID.h"
                0021 #include "SURFACE.h"
                0022 c#include "FFIELDS.h"
                0023 #include "DYNVARS.h"
                0024 #ifdef ALLOW_NONHYDROSTATIC
                0025 #include "NH_VARS.h"
                0026 #endif
                0027 
                0028 C     === Functions ====
cba4501825 Jean*0029       LOGICAL  DIFFERENT_MULTIPLE
                0030       EXTERNAL DIFFERENT_MULTIPLE
8991be1c08 Jean*0031 
                0032 C     !INPUT/OUTPUT PARAMETERS:
                0033 C     == Routine arguments ==
                0034 C     zeroPsNH    :: account for Hyd.component of cg3d_x by updating NH & Surf.Press
                0035 C     zeroMeanPnh :: account for Hyd.component of cg3d_x by updating NH & Surf.Press
                0036 C     myTime      :: Current time in simulation
                0037 C     myIter      :: Current iteration number in simulation
                0038 C     myThid      :: My Thread Id. number
                0039       LOGICAL zeroPsNH, zeroMeanPnh
                0040       _RL     myTime
                0041       INTEGER myIter
                0042       INTEGER myThid
                0043 
                0044 #ifdef ALLOW_NONHYDROSTATIC
                0045 C     !LOCAL VARIABLES:
                0046 C     == Local variables ==
                0047       INTEGER i,j,k,bi,bj
                0048       INTEGER ks
                0049 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
8e18cb9146 Jean*0050       _RL     locGamma
8991be1c08 Jean*0051 CEOP
                0052 
cba4501825 Jean*0053 C--   Separate the Hydrostatic Surface Pressure adjusment (=> put it in dPhiNH)
                0054 C     from the Non-hydrostatic pressure (since cg3d_x contains both contribution)
                0055       IF ( nonHydrostatic .AND. exactConserv ) THEN
8991be1c08 Jean*0056        DO bj=myByLo(myThid),myByHi(myThid)
                0057         DO bi=myBxLo(myThid),myBxHi(myThid)
8e18cb9146 Jean*0058 
                0059          IF ( selectNHfreeSurf.GE.1 ) THEN
                0060           DO j=1,sNy
                0061            DO i=1,sNx
                0062             locGamma = drC(1)*recip_Bo(i,j,bi,bj)
                0063      &               /( deltaTMom*deltaTFreeSurf
                0064      &                 *implicitNHPress*implicDiv2DFlow )
                0065             ks = 1
                0066 c           ks = kSurfC(i,j,bi,bj)
                0067 c           IF ( ks.LE.Nr ) THEN
                0068              dPhiNH(i,j,bi,bj) = ( phi_nh(i,j,ks,bi,bj)
                0069      &           + locGamma*Bo_surf(i,j,bi,bj)
                0070      &                     *implicDiv2DFlow*deltaTFreeSurf
                0071 c    &                     *( wVel(i,j,ks,bi,bj) - wSurfP2d(i,j) )
                0072      &                     *( wVel(i,j,ks,bi,bj) - dPhiNH(i,j,bi,bj) )
                0073      &                           )/(1. _d 0 + locGamma )
                0074 c           ENDIF
                0075            ENDDO
                0076           ENDDO
                0077          ELSEIF ( uniformFreeSurfLev ) THEN
8991be1c08 Jean*0078 C-       Z coordinate: assume surface @ level k=1
                0079           DO j=1-OLy,sNy+OLy
                0080            DO i=1-OLx,sNx+OLx
cba4501825 Jean*0081              dPhiNH(i,j,bi,bj) = phi_nh(i,j,1,bi,bj)
8991be1c08 Jean*0082            ENDDO
                0083           ENDDO
8e18cb9146 Jean*0084          ELSE
8991be1c08 Jean*0085 C-       Other than Z coordinate: no assumption on surface level index
                0086           DO j=1-OLy,sNy+OLy
                0087            DO i=1-OLx,sNx+OLx
e78345ed77 Jean*0088             ks = kSurfC(i,j,bi,bj)
8991be1c08 Jean*0089             IF ( ks.LE.Nr ) THEN
cba4501825 Jean*0090              dPhiNH(i,j,bi,bj) = phi_nh(i,j,ks,bi,bj)
8991be1c08 Jean*0091             ELSE
cba4501825 Jean*0092              dPhiNH(i,j,bi,bj) = 0.
8991be1c08 Jean*0093             ENDIF
                0094            ENDDO
                0095           ENDDO
982e105a17 Jean*0096          ENDIF
8e18cb9146 Jean*0097 
cba4501825 Jean*0098         ENDDO
                0099        ENDDO
982e105a17 Jean*0100        IF ( selectNHfreeSurf.GE.1 .AND.
9952e3248a Jean*0101      &  ( implicitNHPress.LT.oneRL .OR. selectP_inEOS_Zc.EQ.3 ) ) THEN
982e105a17 Jean*0102          CALL EXCH_XY_RL( dPhiNH, myThid )
cba4501825 Jean*0103        ENDIF
                0104       ENDIF
                0105 
                0106 C--   Update surface pressure (account for NH-p @ surface level) and NH pressure:
                0107       IF ( zeroPsNH .OR. zeroMeanPnh ) THEN
                0108        IF ( DIFFERENT_MULTIPLE( diagFreq, myTime, deltaTClock) ) THEN
d10cd93843 Jean*0109         CALL WRITE_FLD_XYZ_RL( 'cg3d_x','I10', phi_nh, myIter, myThid )
cba4501825 Jean*0110        ENDIF
                0111        DO bj=myByLo(myThid),myByHi(myThid)
                0112         DO bi=myBxLo(myThid),myBxHi(myThid)
                0113 
8991be1c08 Jean*0114          DO k=1,Nr
                0115           DO j=1-OLy,sNy+OLy
                0116            DO i=1-OLx,sNx+OLx
                0117             phi_nh(i,j,k,bi,bj) = ( phi_nh(i,j,k,bi,bj)
cba4501825 Jean*0118      &                            - dPhiNH(i,j,bi,bj)
8991be1c08 Jean*0119      &                            )*maskC(i,j,k,bi,bj)
                0120            ENDDO
                0121           ENDDO
                0122          ENDDO
                0123          DO j=1-OLy,sNy+OLy
                0124           DO i=1-OLx,sNx+OLx
                0125             etaN(i,j,bi,bj) = etaN(i,j,bi,bj)
cba4501825 Jean*0126      &                      + recip_Bo(i,j,bi,bj)*dPhiNH(i,j,bi,bj)
0fb70811e0 Jean*0127             dPhiNH(i,j,bi,bj) = 0. _d 0
8991be1c08 Jean*0128           ENDDO
                0129          ENDDO
                0130 
                0131         ENDDO
                0132        ENDDO
                0133       ENDIF
                0134 #endif /* ALLOW_NONHYDROSTATIC */
                0135 
                0136       RETURN
                0137       END