/[MITgcm]/MITgcm/model/src/calc_diffusivity.F
ViewVC logotype

Diff of /MITgcm/model/src/calc_diffusivity.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.5 by cnh, Tue Aug 18 16:32:41 1998 UTC revision 1.25 by jmc, Fri Oct 22 01:42:34 2004 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4  #include "CPP_EEOPTIONS.h"  #include "PACKAGES_CONFIG.h"
5    #include "CPP_OPTIONS.h"
6    
7  CStartOfInterFace  CBOP
8    C     !ROUTINE: CALC_DIFFUSIVITY
9    C     !INTERFACE:
10        SUBROUTINE CALC_DIFFUSIVITY(        SUBROUTINE CALC_DIFFUSIVITY(
11       I        bi,bj,iMin,iMax,jMin,jMax,K,       I        bi,bj,iMin,iMax,jMin,jMax,k,
12       I        maskC,maskUp,KapGM,K33,       I        maskUp,
13       O        KappaRT,KappaRS,       O        KappaRT,KappaRS,
14       I        myThid)       I        myThid)
15    
16  C     /==========================================================\  C     !DESCRIPTION: \bv
17  C     | SUBROUTINE CALC_DIFFUSIVITY                              |  C     *==========================================================*
18  C     | o Calculate net diffusivity                              |  C     | SUBROUTINE CALC_DIFFUSIVITY                              
19  C     \==========================================================/  C     | o Calculate net vertical diffusivity                              
20        IMPLICIT NONE  C     *==========================================================*
21    C     | Combines spatially varying diffusion coefficients from
22    C     | KPP and/or GM and/or convective stability test.
23    C     *==========================================================*
24    C     \ev
25    
26    C     !USES:
27          IMPLICIT NONE
28  C     == GLobal variables ==  C     == GLobal variables ==
29  #include "SIZE.h"  #include "SIZE.h"
30  #include "EEPARAMS.h"  #include "EEPARAMS.h"
31  #include "PARAMS.h"  #include "PARAMS.h"
32  #include "DYNVARS.h"  #include "DYNVARS.h"
33    #include "GRID.h"
34    
35    C     !INPUT/OUTPUT PARAMETERS:
36  C     == Routine arguments ==  C     == Routine arguments ==
37  C     bi, bj, iMin, iMax, jMin, jMax - Range of points for which calculation  C     bi, bj, :: tile indices
38  C     maskC   - land/water mask for tracer points  C     iMin,   :: Range of points for which calculation is performed.
39  C     maskUp  - land/water mask for Wvel points (above tracer level)  C     iMax,
40  C     myThid - Instance number for this innvocation of CALC_COMMON_FACTORS  C     jMin,
41  C  C     jMax
42    C     maskUp  :: land/water mask for Wvel points (above tracer level)
43    C     myThid  :: Instance number for this innvocation of CALC_DIFFUSIVITY
44    C     KappaRT :: Net diffusivity for temperature
45    C     KappaRS :: Net diffusivity for salinity
46        INTEGER bi,bj,iMin,iMax,jMin,jMax,K        INTEGER bi,bj,iMin,iMax,jMin,jMax,K
       _RS maskC(1-Olx:sNx+Olx,1-Oly:sNy+Oly)  
47        _RS maskUp(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RS maskUp(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
48        _RL KapGM(1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL KappaRT(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
49        _RL K33(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)        _RL KappaRS(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
       _RL KappaRT(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)  
       _RL KappaRS(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)  
50        INTEGER myThid        INTEGER myThid
 CEndOfInterface  
51    
52    C     !LOCAL VARIABLES:
53  C     == Local variables ==  C     == Local variables ==
54  C     I, J, K - Loop counters  C     I, J :: Loop counters
55        INTEGER i,j        INTEGER i,j
56          _RL KbryanLewis79
57    CEOP
58    
59          KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
60         & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
61    
62          DO j = 1-Oly, sNy+Oly
63           DO i = 1-Olx, sNx+Olx
64            KappaRT(i,j,k) =
65         &         IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
66    #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
67         &       + diffKr(i,j,k,bi,bj)
68    #else
69         &       + diffKrNrT(k)
70    #endif
71         &       + KbryanLewis79
72           ENDDO
73          ENDDO
74    
75        DO j=jMin,jMax        DO j = 1-Oly, sNy+Oly
76         DO i=iMin,iMax         DO i = 1-Olx, sNx+Olx
77          KappaRT(i,j,k) = maskC(i,j)*maskUp(i,j)*          KappaRS(i,j,k) =
78       &      ( diffKrT + KapGM(i,j)*K33(i,j,k) )       &         IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
79    #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
80         &       + diffKr(i,j,k,bi,bj)
81    #else
82         &       + diffKrNrS(k)
83    #endif
84         &       + KbryanLewis79
85         ENDDO         ENDDO
86        ENDDO        ENDDO
87    
88        DO j=jMin,jMax  #ifdef ALLOW_GMREDI
89         DO i=iMin,iMax        IF (useGMRedi) THEN
90          KappaRS(i,j,k) = maskC(i,j)*maskUp(i,j)*           CALL GMREDI_CALC_DIFF(
91       &      ( diffKrS + KapGM(i,j)*K33(i,j,k) )       I        bi,bj,iMin,iMax,jMin,jMax,k,Nr,
92         U        KappaRT,
93         I        myThid)
94             CALL GMREDI_CALC_DIFF(
95         I        bi,bj,iMin,iMax,jMin,jMax,k,Nr,
96         U        KappaRS,
97         I        myThid)
98          ENDIF
99    #endif
100    
101    #ifdef ALLOW_KPP
102          IF (useKPP) THEN
103             CALL KPP_CALC_DIFF_T(
104         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
105         U        KappaRT,
106         I        myThid)
107             CALL KPP_CALC_DIFF_S(
108         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
109         U        KappaRS,
110         I        myThid)
111          ENDIF
112    #endif
113    
114    #ifdef ALLOW_PP81
115          IF (usePP81) THEN
116             CALL PP81_CALC_DIFF(
117         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
118         U        KappaRT,
119         I        myThid)
120             CALL PP81_CALC_DIFF(
121         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
122         U        KappaRS,
123         I        myThid)
124          ENDIF
125    #endif
126    
127    #ifdef ALLOW_MY82
128          IF (useMY82) THEN
129             CALL MY82_CALC_DIFF(
130         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
131         U        KappaRT,
132         I        myThid)
133             CALL MY82_CALC_DIFF(
134         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
135         U        KappaRS,
136         I        myThid)
137          ENDIF
138    #endif
139          
140    #ifdef ALLOW_GGL90
141          IF (useGGL90) THEN
142             CALL GGL90_CALC_DIFF(
143         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
144         O        KappaRT,
145         I        myThid)
146             CALL GGL90_CALC_DIFF(
147         I        bi,bj,iMin+1,iMax,jMin+1,jMax,k,Nr,
148         O        KappaRS,
149         I        myThid)
150          ENDIF
151    #endif
152          
153    C-    Apply mask to vertical diffusivity
154    C jmc: don't have the impression that masking is needed
155    C      but could be removed later if it's the case.
156          DO j = 1-Oly, sNy+Oly
157           DO i = 1-Olx, sNx+Olx
158            KappaRT(i,j,k) = maskUp(i,j)*KappaRT(i,j,k)
159            KappaRS(i,j,k) = maskUp(i,j)*KappaRS(i,j,k)
160         ENDDO         ENDDO
161        ENDDO        ENDDO
162    

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.25

  ViewVC Help
Powered by ViewVC 1.1.22