/[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.34 - (show annotations) (download)
Fri Apr 4 20:54:11 2014 UTC (10 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65o, checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64w, checkpoint64v, HEAD
Changes since 1.33: +15 -10 lines
- Start to include explicitly AUTODIFF_OPTIONS.h, COST_OPTIONS.h,
  and CTRL_OPTIONS.h in src files (to enable to skip the ECCO_CPPOPTIONS.h)
  For now, only in pkgs used in verification/hs94.1x64x5.
- Replace ALLOW_AUTODIFF_TAMC by ALLOW_AUTODIFF (except for tape/storage
  which are specific to TAF/TAMC).

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

  ViewVC Help
Powered by ViewVC 1.1.22