/[MITgcm]/MITgcm/model/src/convective_adjustment.F
ViewVC logotype

Contents of /MITgcm/model/src/convective_adjustment.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.27 - (show annotations) (download)
Wed Jun 22 00:25:32 2005 UTC (19 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57n_post, checkpoint57l_post, checkpoint57p_post, checkpoint57q_post, checkpoint57j_post, checkpoint57o_post, checkpoint57k_post
Changes since 1.26: +2 -2 lines
"rkSign" replaces "-rkFac" (<- removed)

1 C $Header: /u/gcmpack/MITgcm/model/src/convective_adjustment.F,v 1.26 2005/05/15 03:02:08 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: CONVECTIVE_ADJUSTMENT
9 C !INTERFACE:
10 SUBROUTINE CONVECTIVE_ADJUSTMENT(
11 I bi, bj, iMin, iMax, jMin, jMax,
12 I myTime, myIter, myThid )
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | SUBROUTINE CONVECTIVE_ADJUSTMENT
16 C | o Driver for vertical mixing or similar parameterization
17 C *==========================================================*
18 C \ev
19
20 C !USES:
21 IMPLICIT NONE
22 C == Global data ==
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "DYNVARS.h"
27 #include "GRID.h"
28 #ifdef ALLOW_TIMEAVE
29 #include "TIMEAVE_STATV.h"
30 #endif
31 #ifdef ALLOW_AUTODIFF_TAMC
32 #include "tamc.h"
33 #include "tamc_keys.h"
34 #endif /* ALLOW_AUTODIFF_TAMC */
35 EXTERNAL DIFFERENT_MULTIPLE
36 LOGICAL DIFFERENT_MULTIPLE
37
38 C !INPUT/OUTPUT PARAMETERS:
39 C == Routine arguments ==
40 C bi,bj,iMin,iMax,jMin,jMax,K - Loop counters
41 C myTime - Current time in simulation
42 C myIter - Current iteration in simulation
43 C myThid - Thread number of this instance of S/R CONVECT
44 INTEGER bi,bj,iMin,iMax,jMin,jMax
45 _RL myTime
46 INTEGER myIter
47 INTEGER myThid
48
49 #ifdef INCLUDE_CONVECT_CALL
50
51 C !LOCAL VARIABLES:
52 C == Local variables ==
53 C rhoKm1, rhoK :: Density at adjacent levels (common ref. level)
54 C ConvectCount :: Convection mixing freq. counter.
55 INTEGER i, j, K, kTop, kBottom, kDir, deltaK
56 _RL rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57 _RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58 _RL ConvectCount(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
59 _RL weightA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60 _RL weightB(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61 CEOP
62
63 C-- Check to see if should convect now
64 IF ( DIFFERENT_MULTIPLE(cAdjFreq,myTime,deltaTClock)
65 & ) THEN
66
67 C-- Initialise counters
68 kTop = 0
69 kBottom = 0
70 kDir = 0
71 deltaK = 0
72
73 C- Initialisation of Convection Counter
74 DO K=1,Nr
75 DO j=1-OLy,sNy+OLy
76 DO i=1-OLx,sNx+OLx
77 ConvectCount(i,j,k) = 0.
78 ENDDO
79 ENDDO
80 ENDDO
81
82 #ifdef ALLOW_AUTODIFF_TAMC
83 act1 = bi - myBxLo(myThid)
84 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
85 act2 = bj - myByLo(myThid)
86 max2 = myByHi(myThid) - myByLo(myThid) + 1
87 act3 = myThid - 1
88 max3 = nTx*nTy
89 act4 = ikey_dynamics - 1
90 ikey = (act1 + 1) + act2*max1
91 & + act3*max1*max2
92 & + act4*max1*max2*max3
93 #endif /* ALLOW_AUTODIFF_TAMC */
94
95 IF ( rkSign*gravitySign .GT. 0. ) THEN
96 C- <=> usingZCoords:
97 kTop = 2
98 kBottom = Nr
99 kDir = 1
100 deltaK = -1
101 ELSE
102 C- <=> usingPCoords:
103 kTop = Nr
104 kBottom = 2
105 kDir = -1
106 deltaK = 0
107 ENDIF
108
109 C-- Loop over all *interior* layers
110 DO K=kTop,kBottom,kDir
111
112 #ifdef ALLOW_AUTODIFF_TAMC
113 kkey = (ikey-1)*Nr + k
114 CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
115 CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
116 #endif /* ALLOW_AUTODIFF_TAMC */
117 C- Density of K-1 layer (above W(K)) reference to K-1 T-level
118 CALL FIND_RHO(
119 I bi,bj,iMin,iMax,jMin,jMax,K-1,K+deltaK,
120 I theta,salt,
121 O rhoKm1,
122 I myThid )
123
124 C- Density of K layer (below W(K)) reference to K-1 T-level.
125 #ifdef ALLOW_AUTODIFF_TAMC
126 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
127 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
128 #endif /* ALLOW_AUTODIFF_TAMC */
129 CALL FIND_RHO(
130 I bi,bj,iMin,iMax,jMin,jMax,K,K+deltaK,
131 I theta,salt,
132 O rhoK,
133 I myThid )
134
135 #ifdef ALLOW_AUTODIFF_TAMC
136 CADJ STORE rhoKm1(:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
137 CADJ STORE rhoK (:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
138 #endif /* ALLOW_AUTODIFF_TAMC */
139 C- Check static stability with layer below and mix as needed.
140 c CALL CONVECT(
141 c I bi,bj,iMin,iMax,jMin,jMax,K,rhoKm1,rhoK,
142 c U ConvectCount,
143 c I myTime,myIter,myThid)
144
145 C- Pre-calculate mixing weights for interface K
146 CALL CONVECTIVE_WEIGHTS(
147 I bi,bj,K,rhoKm1,rhoK,
148 O weightA,weightB,ConvectCount,
149 I myThid)
150
151 C- Convectively mix heat across interface K
152 CALL CONVECTIVELY_MIXTRACER(
153 I bi,bj,k,weightA,weightB,
154 U theta,
155 I myThid)
156
157 C- Convectively mix salt across interface K
158 CALL CONVECTIVELY_MIXTRACER(
159 I bi,bj,k,weightA,weightB,
160 U salt,
161 I myThid)
162
163 #ifdef ALLOW_PTRACERS
164 C- Convectively mix passive tracers across interface K
165 IF ( usePTRACERS ) THEN
166 CALL PTRACERS_CONVECT(
167 I bi,bj,k,weightA,weightB,myThid)
168 ENDIF
169 #endif /* ALLOW_PTRACERS */
170
171 C-- End DO K=1,Nr
172 ENDDO
173
174 #ifdef ALLOW_TIMEAVE
175 #ifndef MINIMAL_TAVE_OUTPUT
176 ceh3 needs an IF ( useTIMEAVE ) THEN
177 IF (myIter.ne.nIter0 .AND. taveFreq.GT.0.) THEN
178 CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount,
179 I Nr, deltaTclock, bi, bj, myThid)
180 ENDIF
181 #endif /* ndef MINIMAL_TAVE_OUTPUT */
182 #endif /* ALLOW_TIMEAVE */
183
184 C-- End IF (DIFFERENT_MULTIPLE)
185 ENDIF
186
187 #endif /* INCLUDE_CONVECT_CALL */
188
189 RETURN
190 END

  ViewVC Help
Powered by ViewVC 1.1.22