/[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.2 - (show annotations) (download)
Thu Oct 28 00:30:57 2004 UTC (19 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint55j_post, checkpoint56b_post, checkpoint56c_post, checkpoint55i_post, checkpoint56, checkpoint56a_post
Changes since 1.1: +12 -9 lines
Change arrays for total vertical diffusivity (2.D explicit, 3.D implicit)

1 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.1 2004/10/22 16:02:51 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 IF ( trIdentity.EQ.GAD_TEMPERATURE) THEN
68
69 DO k = 1,Nr
70 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
71 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
72 DO j = 1-Oly,sNy+Oly
73 DO i = 1-Olx,sNx+Olx
74 KappaRTr(i,j,k) =
75 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
76 #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
77 & + diffKr(i,j,k,bi,bj)
78 #else
79 & + diffKrNrT(k)
80 #endif
81 & + KbryanLewis79
82 ENDDO
83 ENDDO
84 ENDDO
85
86 ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
87
88 DO k = 1,Nr
89 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
90 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
91 DO j = 1-Oly, sNy+Oly
92 DO i = 1-Olx, sNx+Olx
93 KappaRTr(i,j,k) =
94 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
95 #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
96 & + diffKr(i,j,k,bi,bj)
97 #else
98 & + diffKrNrS(k)
99 #endif
100 & + KbryanLewis79
101 ENDDO
102 ENDDO
103 ENDDO
104
105 #ifdef ALLOW_PTRACERS
106 ELSEIF ( trIdentity.GE.GAD_TR1
107 & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
108
109 iTr = trIdentity - GAD_TR1 + 1
110 DO k = 1,Nr
111 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
112 & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
113 DO j = 1-Oly, sNy+Oly
114 DO i = 1-Olx, sNx+Olx
115 KappaRTr(i,j,k) =
116 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
117 #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
118 & + diffKr(i,j,k,bi,bj)
119 #else
120 & + PTRACERS_diffKrNr(k,iTr)
121 #endif
122 & + KbryanLewis79
123 ENDDO
124 ENDDO
125 ENDDO
126 #endif /* ALLOW_PTRACERS */
127
128 ELSE
129 WRITE(msgBuf,'(A,I4)')
130 & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
131 CALL PRINT_ERROR(msgBuf, myThid)
132 STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
133 ENDIF
134
135 C-- Add physical pacakge contributions:
136
137 #ifdef ALLOW_GMREDI
138 IF (trUseGMRedi) THEN
139 CALL GMREDI_CALC_DIFF(
140 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
141 U KappaRTr,
142 I myThid)
143 ENDIF
144 #endif
145
146 #ifdef ALLOW_KPP
147 IF (trUseKPP) THEN
148 IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
149 CALL KPP_CALC_DIFF_T(
150 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
151 U KappaRTr,
152 I myThid)
153 ELSE
154 CALL KPP_CALC_DIFF_S(
155 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
156 U KappaRTr,
157 I myThid)
158 ENDIF
159 ENDIF
160 #endif
161
162 #ifdef ALLOW_PP81
163 IF (usePP81) THEN
164 CALL PP81_CALC_DIFF(
165 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
166 U KappaRTr,
167 I myThid)
168 ENDIF
169 #endif
170
171 #ifdef ALLOW_MY82
172 IF (useMY82) THEN
173 CALL MY82_CALC_DIFF(
174 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
175 U KappaRTr,
176 I myThid)
177 ENDIF
178 #endif
179
180 #ifdef ALLOW_GGL90
181 IF (useGGL90) THEN
182 CALL GGL90_CALC_DIFF(
183 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
184 O KappaRTr,
185 I myThid)
186 ENDIF
187 #endif
188
189 C- Apply mask to vertical diffusivity
190 C jmc: don't have the impression that masking is needed
191 C but could be removed later if it's the case.
192 c DO j = 1-Oly, sNy+Oly
193 c DO i = 1-Olx, sNx+Olx
194 c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
195 c ENDDO
196 c ENDDO
197
198 RETURN
199 END

  ViewVC Help
Powered by ViewVC 1.1.22