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

Contents of /MITgcm/model/src/calc_3d_diffusivity.F

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


Revision 1.18 - (show annotations) (download)
Wed Jul 30 03:31:35 2014 UTC (9 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
Changes since 1.17: +21 -12 lines
-  add new pkg "kl10" for mixing due to internal wave breaking
  ( http://www.sciencedirect.com/science/article/pii/S1463500310000144 )

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.17 2011/09/20 22:25:23 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: CALC_3D_DIFFUSIVITY
9 C !INTERFACE:
10 SUBROUTINE CALC_3D_DIFFUSIVITY(
11 I bi,bj,iMin,iMax,jMin,jMax,
12 I trIdentity, trUseGMRedi, trUseKPP,
13 O KappaRTr,
14 I myThid)
15
16 C !DESCRIPTION: \bv
17 C *==========================================================*
18 C | SUBROUTINE CALC_3D_DIFFUSIVITY
19 C | o Calculate net (3D) vertical diffusivity for 1 tracer
20 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 ==
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "DYNVARS.h"
33 #include "GRID.h"
34 #ifdef ALLOW_GENERIC_ADVDIFF
35 #include "GAD.h"
36 #endif
37 #ifdef ALLOW_PTRACERS
38 #include "PTRACERS_SIZE.h"
39 #include "PTRACERS_PARAMS.h"
40 #endif
41 #ifdef ALLOW_LONGSTEP
42 #include "LONGSTEP.h"
43 #endif
44
45 C !INPUT/OUTPUT PARAMETERS:
46 C == Routine arguments ==
47 C bi, bj :: tile indices
48 C iMin,iMax :: Range of points for which calculation is performed.
49 C jMin,jMax :: Range of points for which calculation is performed.
50 C trIdentity :: tracer identifier
51 C trUseGMRedi:: this tracer use GM-Redi
52 C trUseKPP :: this tracer use KPP
53 C myThid :: Instance number for this innvocation of CALC_3D_DIFFUSIVITY
54 C KappaRTr :: Net diffusivity for this tracer (trIdentity)
55 INTEGER bi,bj,iMin,iMax,jMin,jMax
56 INTEGER trIdentity
57 LOGICAL trUseGMRedi, trUseKPP
58 _RL KappaRTr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
59 INTEGER myThid
60
61 #ifdef ALLOW_GENERIC_ADVDIFF
62 C !LOCAL VARIABLES:
63 C == Local variables ==
64 C i, j, k :: Loop counters
65 C iTr :: passive tracer index
66 C msgBuf :: message buffer
67 INTEGER i,j,k
68 _RL KbryanLewis79
69 #ifdef ALLOW_BL79_LAT_VARY
70 _RL KbryanLewisEQ
71 #endif
72 CHARACTER*(MAX_LEN_MBUF) msgBuf
73 #ifdef ALLOW_PTRACERS
74 INTEGER iTr
75 #endif
76 CEOP
77
78 IF ( .NOT. trUseKPP ) THEN
79 DO k = 1,Nr
80 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
81 & *(atan(-(rF(k)-diffKrBL79Ho)/diffKrBL79scl)/PI+0.5 _d 0)
82 #ifdef ALLOW_BL79_LAT_VARY
83 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
84 & *(atan(-(rF(k)-diffKrBLEQHo)/diffKrBLEQscl)/PI+0.5 _d 0)
85 #endif
86 DO j = 1-OLy,sNy+OLy
87 DO i = 1-OLx,sNx+OLx
88 #ifdef ALLOW_LONGSTEP
89 IF ( trIdentity .GE. GAD_TR1) THEN
90 KappaRTr(i,j,k) =
91 & LS_IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
92 & + KbryanLewis79
93 #ifdef ALLOW_BL79_LAT_VARY
94 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
95 #endif
96 ELSE
97 #else
98 IF ( .TRUE. ) THEN
99 #endif /* ALLOW_LONGSTEP */
100 KappaRTr(i,j,k) =
101 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
102 & + KbryanLewis79
103 #ifdef ALLOW_BL79_LAT_VARY
104 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
105 #endif
106 ENDIF
107 ENDDO
108 ENDDO
109 ENDDO
110 IF ( trIdentity.EQ.GAD_TEMPERATURE ) THEN
111 DO k = 1,Nr
112 DO j = 1-OLy,sNy+OLy
113 DO i = 1-OLx,sNx+OLx
114 KappaRTr(i,j,k) = KappaRTr(i,j,k)
115 #ifdef ALLOW_3D_DIFFKR
116 & + diffKr(i,j,k,bi,bj)
117 #else
118 & + diffKrNrT(k)
119 #endif
120 ENDDO
121 ENDDO
122 ENDDO
123 ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
124 DO k = 1,Nr
125 DO j = 1-OLy, sNy+OLy
126 DO i = 1-OLx, sNx+OLx
127 KappaRTr(i,j,k) = KappaRTr(i,j,k)
128 #ifdef ALLOW_3D_DIFFKR
129 & + diffKr(i,j,k,bi,bj)
130 #else
131 & + diffKrNrS(k)
132 #endif
133 ENDDO
134 ENDDO
135 ENDDO
136 #ifdef ALLOW_PTRACERS
137 ELSEIF ( trIdentity.GE.GAD_TR1) THEN
138
139 iTr = trIdentity - GAD_TR1 + 1
140 DO k = 1,Nr
141 DO j = 1-OLy, sNy+OLy
142 DO i = 1-OLx, sNx+OLx
143 KappaRTr(i,j,k) = KappaRTr(i,j,k)
144 #ifdef ALLOW_3D_DIFFKR
145 & + diffKr(i,j,k,bi,bj)
146 #else
147 & + PTRACERS_diffKrNr(k,iTr)
148 #endif
149 ENDDO
150 ENDDO
151 ENDDO
152 #endif /* ALLOW_PTRACERS */
153 ELSE
154 WRITE(msgBuf,'(A,I4)')
155 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
156 CALL PRINT_ERROR(msgBuf, myThid)
157 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
158 ENDIF
159 ENDIF
160
161 C-- Add physical pacakge contributions:
162
163 #ifdef ALLOW_KPP
164 IF (trUseKPP) THEN
165 C-- Set vertical diffusivity contribution from KPP
166 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
167 CALL KPP_CALC_DIFF_T(
168 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
169 O KappaRTr,
170 I myThid)
171 ELSEIF (trIdentity.EQ.GAD_SALINITY) THEN
172 CALL KPP_CALC_DIFF_S(
173 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
174 O KappaRTr,
175 I myThid)
176 #ifdef ALLOW_PTRACERS
177 ELSEIF ( trIdentity.GE.GAD_TR1) THEN
178 iTr = trIdentity - GAD_TR1 + 1
179 CALL KPP_CALC_DIFF_Ptr(
180 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
181 O KappaRTr,
182 I iTr, myThid )
183 #endif /* ALLOW_PTRACERS */
184 ELSE
185 WRITE(msgBuf,'(A,I4)')
186 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
187 CALL PRINT_ERROR( msgBuf, myThid )
188 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
189 ENDIF
190 ENDIF
191 #endif /* ALLOW_KPP */
192
193 #ifdef ALLOW_GMREDI
194 IF (trUseGMRedi) THEN
195 CALL GMREDI_CALC_DIFF(
196 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
197 U KappaRTr,
198 I trIdentity,myThid)
199 ENDIF
200 #endif
201
202 #ifdef ALLOW_PP81
203 IF (usePP81) THEN
204 CALL PP81_CALC_DIFF(
205 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
206 U KappaRTr,
207 I myThid)
208 ENDIF
209 #endif
210
211 #ifdef ALLOW_KL10
212 IF (useKL10) THEN
213 CALL KL10_CALC_DIFF(
214 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
215 U KappaRTr,
216 I myThid)
217 ENDIF
218 #endif
219
220 #ifdef ALLOW_MY82
221 IF (useMY82) THEN
222 CALL MY82_CALC_DIFF(
223 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
224 U KappaRTr,
225 I myThid)
226 ENDIF
227 #endif
228
229 #ifdef ALLOW_GGL90
230 IF (useGGL90) THEN
231 CALL GGL90_CALC_DIFF(
232 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
233 O KappaRTr,
234 I myThid)
235 ENDIF
236 #endif
237
238 C- Apply mask to vertical diffusivity
239 C jmc: do not have the impression that masking is needed
240 C but could be removed later if it is the case.
241 c DO j = 1-OLy, sNy+OLy
242 c DO i = 1-OLx, sNx+OLx
243 c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
244 c ENDDO
245 c ENDDO
246
247 #endif /* ALLOW_GENERIC_ADVDIFF */
248
249 RETURN
250 END

  ViewVC Help
Powered by ViewVC 1.1.22