/[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.17 - (show annotations) (download)
Tue Sep 20 22:25:23 2011 UTC (12 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63c, checkpoint64, checkpoint65, checkpoint65a
Changes since 1.16: +13 -22 lines
move KPP hack into kpp_calc_diff_ptr.F (+ add argument to S/R KPP_CALC_DIFF_PTR)

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.16 2010/03/16 00:08:27 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_MY82
212 IF (useMY82) THEN
213 CALL MY82_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_GGL90
221 IF (useGGL90) THEN
222 CALL GGL90_CALC_DIFF(
223 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
224 O KappaRTr,
225 I myThid)
226 ENDIF
227 #endif
228
229 C- Apply mask to vertical diffusivity
230 C jmc: do not have the impression that masking is needed
231 C but could be removed later if it is the case.
232 c DO j = 1-Oly, sNy+Oly
233 c DO i = 1-Olx, sNx+Olx
234 c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
235 c ENDDO
236 c ENDDO
237
238 #endif /* ALLOW_GENERIC_ADVDIFF */
239
240 RETURN
241 END

  ViewVC Help
Powered by ViewVC 1.1.22