Back to home page

MITgcm

 
 

    


File indexing completed on 2023-09-03 05:10:48 UTC

view on githubraw file Latest commit 74487008 on 2023-09-03 01:50:18 UTC
0c3d35c9cd Gael*0001 #include "SMOOTH_OPTIONS.h"
                0002 
9f5240b52a Jean*0003       SUBROUTINE SMOOTH_DIFF3D( fld_in, nbt_in, myThid )
0c3d35c9cd Gael*0004 
                0005 C     *==========================================================*
                0006 C     | SUBROUTINE smooth_diff3D
                0007 C     | o Routine that smoothes a 3D field, using diffusion
                0008 C     *==========================================================*
                0009 
                0010       IMPLICIT NONE
                0011 #include "EEPARAMS.h"
                0012 #include "SIZE.h"
                0013 #include "PARAMS.h"
                0014 #include "GRID.h"
                0015 #include "SMOOTH.h"
                0016 
c487ea887f Gael*0017       _RL fld_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
9f5240b52a Jean*0018       INTEGER nbt_in
                0019       INTEGER myThid
                0020 
                0021       INTEGER i, j, k, bi, bj
                0022       INTEGER myIter(nSx,nSy), iloop
                0023       _RL gT_in  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
c487ea887f Gael*0024       _RL gTm1_in(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
9f5240b52a Jean*0025       _RL gt_AB  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0c3d35c9cd Gael*0026 
9f5240b52a Jean*0027       DO bj=myByLo(myThid),myByHi(myThid)
                0028        DO bi=myBxLo(myThid),myBxHi(myThid)
0c3d35c9cd Gael*0029         DO k=1,Nr
c487ea887f Gael*0030          DO j=1-OLy,sNy+OLy
                0031           DO i=1-OLx,sNx+OLx
0c3d35c9cd Gael*0032            gT_in(i,j,k,bi,bj)   = 0. _d 0
9f5240b52a Jean*0033            gTm1_in(i,j,k,bi,bj) = 0. _d 0
0c3d35c9cd Gael*0034           ENDDO
                0035          ENDDO
                0036         ENDDO
                0037        ENDDO
                0038       ENDDO
                0039 
9f5240b52a Jean*0040       CALL EXCH_XYZ_RL( fld_in,  myThid )
                0041       CALL EXCH_XYZ_RL( gt_in,   myThid )
                0042       CALL EXCH_XYZ_RL( gtm1_in, myThid )
0c3d35c9cd Gael*0043 
9f5240b52a Jean*0044       DO iloop=1,nbt_in
0c3d35c9cd Gael*0045 
9f5240b52a Jean*0046        DO bj=myByLo(myThid),myByHi(myThid)
                0047         DO bi=myBxLo(myThid),myBxHi(myThid)
                0048          DO k=1,Nr
                0049           DO j=1,sNy
                0050            DO i=1,sNx
                0051             gT_in(i,j,k,bi,bj) = 0. _d 0
                0052            ENDDO
0c3d35c9cd Gael*0053           ENDDO
                0054          ENDDO
                0055         ENDDO
                0056        ENDDO
                0057 
9f5240b52a Jean*0058        CALL EXCH_XYZ_RL( gt_in, myThid )
0c3d35c9cd Gael*0059 
                0060 c compute gT_in:
7448700841 Mart*0061        CALL SMOOTH_RHS( fld_in, gT_in, myThid )
0c3d35c9cd Gael*0062 
9f5240b52a Jean*0063        DO bj=myByLo(myThid),myByHi(myThid)
                0064         DO bi=myBxLo(myThid),myBxHi(myThid)
0c3d35c9cd Gael*0065 c adams bashfort on gT_in:
9f5240b52a Jean*0066          myIter(bi,bj) = iloop-1
                0067          DO k=1,Nr
                0068           CALL ADAMS_BASHFORTH2(
9d0e3cbad3 Jean*0069      I                        bi, bj, k, Nr,
                0070      U                        gT_in(1-OLx,1-OLy,1,bi,bj),
                0071      U                        gTm1_in(1-OLx,1-OLy,1,bi,bj), gt_AB,
                0072      I                        0, myIter(bi,bj), myThid )
9f5240b52a Jean*0073          ENDDO
0c3d35c9cd Gael*0074 c time stepping:
9f5240b52a Jean*0075          DO k=1,Nr
                0076           DO j=1-OLy,sNy+OLy
                0077            DO i=1-OLx,sNx+OLx
                0078             IF (maskC(i,j,k,bi,bj).NE.0.) THEN
                0079              fld_in(i,j,k,bi,bj) = fld_in(i,j,k,bi,bj)
                0080      &            + smooth3DdelTime*gT_in(i,j,k,bi,bj)
                0081              gT_in(i,j,k,bi,bj) = 0
                0082             ENDIF
                0083            ENDDO
0c3d35c9cd Gael*0084           ENDDO
                0085          ENDDO
                0086 
9f5240b52a Jean*0087          IF ( smooth3DdoImpldiff ) THEN
0c3d35c9cd Gael*0088           CALL SMOOTH_IMPLDIFF(
                0089      I         bi, bj, 1, sNx, 1, sNy ,
                0090      I         smooth3DdelTime, smooth3D_kappaR(1-OLx,1-OLy,1,bi,bj),
                0091      I         recip_hFacC,
                0092      U         fld_in,
                0093      I         myThid )
9f5240b52a Jean*0094          ENDIF
0c3d35c9cd Gael*0095 
9f5240b52a Jean*0096         ENDDO
0c3d35c9cd Gael*0097        ENDDO
                0098 
9f5240b52a Jean*0099        CALL EXCH_XYZ_RL ( fld_in , myThid )
                0100        CALL EXCH_XYZ_RL ( gt_in , myThid )
                0101        CALL EXCH_XYZ_RL ( gtm1_in , myThid )
0c3d35c9cd Gael*0102 
9f5240b52a Jean*0103       ENDDO
0c3d35c9cd Gael*0104 
9f5240b52a Jean*0105       RETURN
0c3d35c9cd Gael*0106       END