/[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.14 - (show annotations) (download)
Tue Feb 12 23:04:44 2008 UTC (16 years, 3 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59o, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61r, checkpoint61p, checkpoint61q
Changes since 1.13: +2 -2 lines
Add tracer identity as argument of gmredi_calc_diff.F

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.13 2007/11/05 18:52:21 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
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 C-- Set vertical diffusivity contribution from KPP
154 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
155 CALL KPP_CALC_DIFF_T(
156 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
157 O KappaRTr,
158 I myThid)
159 ELSE
160 CALL KPP_CALC_DIFF_S(
161 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
162 O KappaRTr,
163 I myThid)
164 ENDIF
165 #if (defined ALLOW_PTRACERS && ! (defined ALLOW_3D_DIFFKR || \
166 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))))
167 IF ( trIdentity.GE.GAD_TR1
168 & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
169 iTr = trIdentity - GAD_TR1 + 1
170 DO k = 1,Nr
171 DO j = 1-Oly, sNy+Oly
172 DO i = 1-Olx, sNx+Olx
173 KappaRTr(i,j,k) = KappaRTr(i,j,k)
174 & - diffKrNrS(k) + PTRACERS_diffKrNr(k,iTr)
175 ENDDO
176 ENDDO
177 ENDDO
178 ENDIF
179 #endif
180 ENDIF
181 #endif /* ALLOW_KPP */
182
183 #ifdef ALLOW_GMREDI
184 IF (trUseGMRedi) THEN
185 CALL GMREDI_CALC_DIFF(
186 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
187 U KappaRTr,
188 I trIdentity,myThid)
189 ENDIF
190 #endif
191
192 #ifdef ALLOW_PP81
193 IF (usePP81) THEN
194 CALL PP81_CALC_DIFF(
195 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
196 U KappaRTr,
197 I myThid)
198 ENDIF
199 #endif
200
201 #ifdef ALLOW_MY82
202 IF (useMY82) THEN
203 CALL MY82_CALC_DIFF(
204 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
205 U KappaRTr,
206 I myThid)
207 ENDIF
208 #endif
209
210 #ifdef ALLOW_GGL90
211 IF (useGGL90) THEN
212 CALL GGL90_CALC_DIFF(
213 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
214 O KappaRTr,
215 I myThid)
216 ENDIF
217 #endif
218
219 C- Apply mask to vertical diffusivity
220 C jmc: don't have the impression that masking is needed
221 C but could be removed later if it's the case.
222 c DO j = 1-Oly, sNy+Oly
223 c DO i = 1-Olx, sNx+Olx
224 c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
225 c ENDDO
226 c ENDDO
227
228 #endif /* ALLOW_GENERIC_ADVDIFF */
229
230 RETURN
231 END

  ViewVC Help
Powered by ViewVC 1.1.22