/[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.9 - (show annotations) (download)
Sat Apr 14 18:32:32 2007 UTC (17 years, 2 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint59, checkpoint58y_post
Changes since 1.8: +26 -5 lines
latitudinal dependence of Bryan and Lewis, 1979
fixed and reworked as per JM suggestions

1 C $Header: /u/gcmpack/MITgcm_contrib/high_res_cube/code-mods/calc_3d_diffusivity.F,v 1.1 2007/04/12 02:24:39 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, KbryanLewisEQ
66 CHARACTER*(MAX_LEN_MBUF) msgBuf
67 #ifdef ALLOW_PTRACERS
68 INTEGER iTr
69 #endif
70 CEOP
71
72 IF ( trIdentity.EQ.GAD_TEMPERATURE) THEN
73
74 DO k = 1,Nr
75 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
76 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
77 #ifdef ALLOW_BL79_LAT_VARY
78 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
79 & *( atan( -( rF(k)-diffKrBLEQHo )/diffKrBLEQscl )/PI+0.5 _d 0)
80 #endif
81 DO j = 1-Oly,sNy+Oly
82 DO i = 1-Olx,sNx+Olx
83 KappaRTr(i,j,k) =
84 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
85 #if (defined ALLOW_3D_DIFFKR || \
86 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
87 & + diffKr(i,j,k,bi,bj)
88 #else
89 & + diffKrNrT(k)
90 #endif
91 & + KbryanLewis79
92 #ifdef ALLOW_BL79_LAT_VARY
93 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
94 #endif
95 ENDDO
96 ENDDO
97 ENDDO
98
99 ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
100
101 DO k = 1,Nr
102 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
103 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
104 #ifdef ALLOW_BL79_LAT_VARY
105 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
106 & *( atan( -( rF(k)-diffKrBLEQHo )/diffKrBLEQscl )/PI+0.5 _d 0)
107 #endif
108 DO j = 1-Oly, sNy+Oly
109 DO i = 1-Olx, sNx+Olx
110 KappaRTr(i,j,k) =
111 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
112 #if (defined ALLOW_3D_DIFFKR || \
113 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
114 & + diffKr(i,j,k,bi,bj)
115 #else
116 & + diffKrNrS(k)
117 #endif
118 & + KbryanLewis79
119 #ifdef ALLOW_BL79_LAT_VARY
120 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
121 #endif
122 ENDDO
123 ENDDO
124 ENDDO
125
126 #ifdef ALLOW_PTRACERS
127 ELSEIF ( trIdentity.GE.GAD_TR1
128 & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
129
130 iTr = trIdentity - GAD_TR1 + 1
131 DO k = 1,Nr
132 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
133 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
134 #ifdef ALLOW_BL79_LAT_VARY
135 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
136 & *( atan( -( rF(k)-diffKrBLEQHo )/diffKrBLEQscl )/PI+0.5 _d 0)
137 #endif
138 DO j = 1-Oly, sNy+Oly
139 DO i = 1-Olx, sNx+Olx
140 KappaRTr(i,j,k) =
141 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
142 #if (defined ALLOW_3D_DIFFKR || \
143 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
144 & + diffKr(i,j,k,bi,bj)
145 #else
146 & + PTRACERS_diffKrNr(k,iTr)
147 #endif
148 & + KbryanLewis79
149 #ifdef ALLOW_BL79_LAT_VARY
150 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
151 #endif
152 ENDDO
153 ENDDO
154 ENDDO
155 #endif /* ALLOW_PTRACERS */
156
157 ELSE
158 WRITE(msgBuf,'(A,I4)')
159 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
160 CALL PRINT_ERROR(msgBuf, myThid)
161 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
162 ENDIF
163
164 C-- Add physical pacakge contributions:
165
166 #ifdef ALLOW_GMREDI
167 IF (trUseGMRedi) THEN
168 CALL GMREDI_CALC_DIFF(
169 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
170 U KappaRTr,
171 I myThid)
172 ENDIF
173 #endif
174
175 #ifdef ALLOW_KPP
176 IF (trUseKPP) THEN
177 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
178 CALL KPP_CALC_DIFF_T(
179 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
180 U KappaRTr,
181 I myThid)
182 ELSE
183 CALL KPP_CALC_DIFF_S(
184 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
185 U KappaRTr,
186 I myThid)
187 ENDIF
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