** Warning **

Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.

Last-Modified: Wed, 14 May 2024 05:11:28 GMT Content-Type: text/html; charset=utf-8 MITgcm/MITgcm/pkg/seaice/seaice_diffusion.F
Back to home page

MITgcm

 
 

    


File indexing completed on 2021-06-27 05:11:48 UTC

view on githubraw file Latest commit 4e4ad91a on 2021-06-26 16:30:07 UTC
f12f84b0ce Jean*0001 #include "SEAICE_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C     !ROUTINE: SEAICE_DIFFUSION
                0005 C     !INTERFACE:
                0006       SUBROUTINE SEAICE_DIFFUSION(
                0007      I     tracerIdentity,
6d78fc5463 Gael*0008      I     diffKh, fac,
f12f84b0ce Jean*0009      I     iceFld, iceMask, xA, yA,
                0010      U     gFld,
                0011      I     bi, bj, myTime, myIter, myThid )
                0012 
                0013 C     !DESCRIPTION: \bv
                0014 C     *==========================================================*
                0015 C     | SUBROUTINE SEAICE_DIFFUSION
                0016 C     | o Add tendency from horizontal diffusion
                0017 C     *==========================================================*
                0018 C     *==========================================================*
                0019 
                0020 C     !USES:
                0021       IMPLICIT NONE
                0022 
                0023 C     === Global variables ===
                0024 #include "SIZE.h"
                0025 #include "EEPARAMS.h"
                0026 #include "PARAMS.h"
                0027 #include "GRID.h"
7303eab4f2 Patr*0028 #include "SEAICE_SIZE.h"
f12f84b0ce Jean*0029 #include "SEAICE_PARAMS.h"
                0030 CML#include "SEAICE_GRID.h"
                0031 
                0032 C     !INPUT PARAMETERS:
                0033 C     === Routine arguments ===
                0034 C     afx        :: horizontal advective flux, x direction
                0035 C     afy        :: horizontal advective flux, y direction
                0036 C     myThid     :: my Thread Id number
                0037       _RL iceFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0038       _RL gFld   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0039       _RL iceMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0040       _RS xA     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0041       _RS yA     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
6d78fc5463 Gael*0042       _RL diffKh, fac
f12f84b0ce Jean*0043       INTEGER tracerIdentity
                0044       INTEGER bi,bj
                0045       _RL     myTime
                0046       INTEGER myIter
                0047       INTEGER myThid
e0fa1cecbf Mart*0048 #ifdef ALLOW_GENERIC_ADVDIFF
37de51ebf5 Mart*0049 #ifdef ALLOW_DIAGNOSTICS
                0050       CHARACTER*8 diagName
                0051       CHARACTER*4 SEAICE_DIAG_SUFX, diagSufx
                0052       EXTERNAL    SEAICE_DIAG_SUFX
                0053 #endif
f12f84b0ce Jean*0054 CEOP
                0055 
                0056 C     !LOCAL VARIABLES:
                0057 C     === Local variables ===
                0058 C     i,j :: Loop counters
                0059       INTEGER i, j, k
                0060       _RL fZon   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0061       _RL fMer   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0062 
6d78fc5463 Gael*0063       IF ( diffKh .GT. 0. _d 0 ) THEN
37de51ebf5 Mart*0064 #ifdef ALLOW_DIAGNOSTICS
                0065 C--   Set diagnostic suffix for the current tracer
                0066        IF ( useDiagnostics ) THEN
                0067         diagSufx = SEAICE_DIAG_SUFX( tracerIdentity, myThid )
                0068        ENDIF
                0069 #endif
f12f84b0ce Jean*0070 C--   Tendency due to horizontal diffusion
                0071         k = 1
4e4ad91a39 Jean*0072         DO j=1-OLy,sNy+OLy
                0073          DO i=1-OLx,sNx+OLx
f12f84b0ce Jean*0074           fZon  (i,j) = 0. _d 0
                0075           fMer  (i,j) = 0. _d 0
                0076          ENDDO
                0077         ENDDO
                0078 C--   X-direction
6d78fc5463 Gael*0079         CALL GAD_DIFF_X(bi,bj,k,xA,diffKh,iceFld,fZon,myThid)
f12f84b0ce Jean*0080 C--   Y-direction
6d78fc5463 Gael*0081         CALL GAD_DIFF_Y(bi,bj,k,yA,diffKh,iceFld,fMer,myThid)
f12f84b0ce Jean*0082 C--   Divergence of fluxes: update scalar field
4e4ad91a39 Jean*0083         DO j=1-OLy,sNy+OLy-1
                0084          DO i=1-OLx,sNx+OLx-1
f12f84b0ce Jean*0085           gFld(i,j)= gFld(i,j)
6d78fc5463 Gael*0086      &        - fac*iceMask(i,j,bi,bj)*recip_rA(i,j,bi,bj)
f12f84b0ce Jean*0087      &        *( (fZon(i+1,j)-fZon(i,j))
                0088      &         + (fMer(i,j+1)-fMer(i,j)) )
                0089          ENDDO
                0090         ENDDO
37de51ebf5 Mart*0091 #ifdef ALLOW_DIAGNOSTICS
                0092 C-    Diagnostics of Tracer flux in Y dir (mainly Diffusive terms),
                0093 C     excluding advective terms:
6d78fc5463 Gael*0094         IF ( useDiagnostics .AND. diffKh.NE.0. ) THEN
37de51ebf5 Mart*0095          diagName = 'DFxE'//diagSufx
                0096          CALL DIAGNOSTICS_FILL(fZon,diagName, k,1, 2,bi,bj, myThid)
                0097          diagName = 'DFyE'//diagSufx
                0098          CALL DIAGNOSTICS_FILL(fMer,diagName, k,1, 2,bi,bj, myThid)
                0099         ENDIF
                0100 #endif
f12f84b0ce Jean*0101 C     endif do horizontal diffusion
                0102       ENDIF
e0fa1cecbf Mart*0103 #endif /* ALLOW_GENERIC_ADVDIFF */
f12f84b0ce Jean*0104 
                0105       RETURN
                0106       END