/[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.1 - (show annotations) (download)
Fri Oct 22 16:02:51 2004 UTC (19 years, 7 months ago) by jmc
Branch: MAIN
compute vertical diffusivity for each tracer (but not yet called)

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

  ViewVC Help
Powered by ViewVC 1.1.22