/[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.16 - (show annotations) (download)
Tue Mar 16 00:08:27 2010 UTC (14 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63a, checkpoint63b, checkpoint63, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.15: +3 -3 lines
avoid unbalanced quote (single or double) in commented line

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.15 2009/06/26 23:10:08 jahn 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 #if (defined ALLOW_3D_DIFFKR || \
116 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
117 & + diffKr(i,j,k,bi,bj)
118 #else
119 & + diffKrNrT(k)
120 #endif
121 ENDDO
122 ENDDO
123 ENDDO
124 ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
125 DO k = 1,Nr
126 DO j = 1-Oly, sNy+Oly
127 DO i = 1-Olx, sNx+Olx
128 KappaRTr(i,j,k) = KappaRTr(i,j,k)
129 #if (defined ALLOW_3D_DIFFKR || \
130 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
131 & + diffKr(i,j,k,bi,bj)
132 #else
133 & + diffKrNrS(k)
134 #endif
135 ENDDO
136 ENDDO
137 ENDDO
138 #ifdef ALLOW_PTRACERS
139 ELSEIF ( trIdentity.GE.GAD_TR1) THEN
140
141 iTr = trIdentity - GAD_TR1 + 1
142 DO k = 1,Nr
143 DO j = 1-Oly, sNy+Oly
144 DO i = 1-Olx, sNx+Olx
145 KappaRTr(i,j,k) = KappaRTr(i,j,k)
146 #if (defined ALLOW_3D_DIFFKR || \
147 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
148 & + diffKr(i,j,k,bi,bj)
149 #else
150 & + PTRACERS_diffKrNr(k,iTr)
151 #endif
152 ENDDO
153 ENDDO
154 ENDDO
155 #endif /* ALLOW_PTRACERS */
156 ELSE
157 WRITE(msgBuf,'(A,I4)')
158 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
159 CALL PRINT_ERROR(msgBuf, myThid)
160 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
161 ENDIF
162 ENDIF
163
164 C-- Add physical pacakge contributions:
165
166 #ifdef ALLOW_KPP
167 IF (trUseKPP) THEN
168 C-- Set vertical diffusivity contribution from KPP
169 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
170 CALL KPP_CALC_DIFF_T(
171 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
172 O KappaRTr,
173 I myThid)
174 ELSEIF (trIdentity.EQ.GAD_SALINITY) THEN
175 CALL KPP_CALC_DIFF_S(
176 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
177 O KappaRTr,
178 I myThid)
179 ELSEIF ( trIdentity.GE.GAD_TR1) THEN
180 CALL KPP_CALC_DIFF_Ptr(
181 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
182 O KappaRTr,
183 I myThid)
184 ENDIF
185 #if (defined ALLOW_PTRACERS && ! (defined ALLOW_3D_DIFFKR || \
186 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))))
187 IF ( trIdentity.GE.GAD_TR1) THEN
188 iTr = trIdentity - GAD_TR1 + 1
189 DO k = 1,Nr
190 DO j = 1-Oly, sNy+Oly
191 DO i = 1-Olx, sNx+Olx
192 KappaRTr(i,j,k) = KappaRTr(i,j,k)
193 & - diffKrNrS(k) + PTRACERS_diffKrNr(k,iTr)
194 ENDDO
195 ENDDO
196 ENDDO
197 ENDIF
198 #endif
199 ENDIF
200 #endif /* ALLOW_KPP */
201
202 #ifdef ALLOW_GMREDI
203 IF (trUseGMRedi) THEN
204 CALL GMREDI_CALC_DIFF(
205 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
206 U KappaRTr,
207 I trIdentity,myThid)
208 ENDIF
209 #endif
210
211 #ifdef ALLOW_PP81
212 IF (usePP81) THEN
213 CALL PP81_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