/[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.11 - (show annotations) (download)
Tue Sep 4 16:49:44 2007 UTC (16 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint59g
Changes since 1.10: +13 -10 lines
reduce number of "warning: unused variable"

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.10 2007/04/23 20:46:49 dimitri 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.h"
40 #endif
41
42 C !INPUT/OUTPUT PARAMETERS:
43 C == Routine arguments ==
44 C bi, bj :: tile indices
45 C iMin,iMax :: Range of points for which calculation is performed.
46 C jMin,jMax :: Range of points for which calculation is performed.
47 C trIdentity :: tracer identifier
48 C trUseGMRedi:: this tracer use GM-Redi
49 C trUseKPP :: this tracer use KPP
50 C myThid :: Instance number for this innvocation of CALC_3D_DIFFUSIVITY
51 C KappaRTr :: Net diffusivity for this tracer (trIdentity)
52 INTEGER bi,bj,iMin,iMax,jMin,jMax
53 INTEGER trIdentity
54 LOGICAL trUseGMRedi, trUseKPP
55 _RL KappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
56 INTEGER myThid
57
58 #ifdef ALLOW_GENERIC_ADVDIFF
59 C !LOCAL VARIABLES:
60 C == Local variables ==
61 C i, j, k :: Loop counters
62 C iTr :: passive tracer index
63 C msgBuf :: message buffer
64 INTEGER i,j,k
65 _RL KbryanLewis79
66 #ifdef ALLOW_BL79_LAT_VARY
67 _RL KbryanLewisEQ
68 #endif
69 CHARACTER*(MAX_LEN_MBUF) msgBuf
70 #ifdef ALLOW_PTRACERS
71 INTEGER iTr
72 #endif
73 CEOP
74
75 IF ( .NOT. trUseKPP ) THEN
76 DO k = 1,Nr
77 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
78 & *(atan(-(rF(k)-diffKrBL79Ho)/diffKrBL79scl)/PI+0.5 _d 0)
79 #ifdef ALLOW_BL79_LAT_VARY
80 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
81 & *(atan(-(rF(k)-diffKrBLEQHo)/diffKrBLEQscl)/PI+0.5 _d 0)
82 #endif
83 DO j = 1-Oly,sNy+Oly
84 DO i = 1-Olx,sNx+Olx
85 KappaRTr(i,j,k) =
86 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
87 & + KbryanLewis79
88 #ifdef ALLOW_BL79_LAT_VARY
89 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
90 #endif
91 ENDDO
92 ENDDO
93 ENDDO
94 IF ( trIdentity.EQ.GAD_TEMPERATURE ) THEN
95 DO k = 1,Nr
96 DO j = 1-Oly,sNy+Oly
97 DO i = 1-Olx,sNx+Olx
98 KappaRTr(i,j,k) = KappaRTr(i,j,k)
99 #if (defined ALLOW_3D_DIFFKR || \
100 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
101 & + diffKr(i,j,k,bi,bj)
102 #else
103 & + diffKrNrT(k)
104 #endif
105 ENDDO
106 ENDDO
107 ENDDO
108 ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
109 DO k = 1,Nr
110 DO j = 1-Oly, sNy+Oly
111 DO i = 1-Olx, sNx+Olx
112 KappaRTr(i,j,k) = KappaRTr(i,j,k)
113 #if (defined ALLOW_3D_DIFFKR || \
114 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
115 & + diffKr(i,j,k,bi,bj)
116 #else
117 & + diffKrNrS(k)
118 #endif
119 ENDDO
120 ENDDO
121 ENDDO
122 #ifdef ALLOW_PTRACERS
123 ELSEIF ( trIdentity.GE.GAD_TR1
124 & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
125
126 iTr = trIdentity - GAD_TR1 + 1
127 DO k = 1,Nr
128 DO j = 1-Oly, sNy+Oly
129 DO i = 1-Olx, sNx+Olx
130 KappaRTr(i,j,k) = KappaRTr(i,j,k)
131 #if (defined ALLOW_3D_DIFFKR || \
132 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
133 & + diffKr(i,j,k,bi,bj)
134 #else
135 & + PTRACERS_diffKrNr(k,iTr)
136 #endif
137 ENDDO
138 ENDDO
139 ENDDO
140 #endif /* ALLOW_PTRACERS */
141 ELSE
142 WRITE(msgBuf,'(A,I4)')
143 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
144 CALL PRINT_ERROR(msgBuf, myThid)
145 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
146 ENDIF
147 ENDIF
148
149 C-- Add physical pacakge contributions:
150
151 #ifdef ALLOW_KPP
152 IF (trUseKPP) THEN
153 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
154 CALL KPP_CALC_DIFF_T(
155 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
156 U KappaRTr,
157 I myThid)
158 ELSE
159 CALL KPP_CALC_DIFF_S(
160 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
161 U KappaRTr,
162 I myThid)
163 ENDIF
164 #if (defined ALLOW_PTRACERS && ! (defined ALLOW_3D_DIFFKR || \
165 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))))
166 IF ( trIdentity.GE.GAD_TR1
167 & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
168 iTr = trIdentity - GAD_TR1 + 1
169 DO k = 1,Nr
170 DO j = 1-Oly, sNy+Oly
171 DO i = 1-Olx, sNx+Olx
172 KappaRTr(i,j,k) = KappaRTr(i,j,k)
173 & - diffKrNrS(k) + PTRACERS_diffKrNr(k,iTr)
174 ENDDO
175 ENDDO
176 ENDDO
177 ENDIF
178 #endif
179 ENDIF
180 #endif /* ALLOW_KPP */
181
182 #ifdef ALLOW_GMREDI
183 IF (trUseGMRedi) THEN
184 CALL GMREDI_CALC_DIFF(
185 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
186 U KappaRTr,
187 I myThid)
188 ENDIF
189 #endif
190
191 #ifdef ALLOW_PP81
192 IF (usePP81) THEN
193 CALL PP81_CALC_DIFF(
194 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
195 U KappaRTr,
196 I myThid)
197 ENDIF
198 #endif
199
200 #ifdef ALLOW_MY82
201 IF (useMY82) THEN
202 CALL MY82_CALC_DIFF(
203 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
204 U KappaRTr,
205 I myThid)
206 ENDIF
207 #endif
208
209 #ifdef ALLOW_GGL90
210 IF (useGGL90) THEN
211 CALL GGL90_CALC_DIFF(
212 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
213 O KappaRTr,
214 I myThid)
215 ENDIF
216 #endif
217
218 C- Apply mask to vertical diffusivity
219 C jmc: don't have the impression that masking is needed
220 C but could be removed later if it's the case.
221 c DO j = 1-Oly, sNy+Oly
222 c DO i = 1-Olx, sNx+Olx
223 c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
224 c ENDDO
225 c ENDDO
226
227 #endif /* ALLOW_GENERIC_ADVDIFF */
228
229 RETURN
230 END

  ViewVC Help
Powered by ViewVC 1.1.22