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

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

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


Revision 1.26 - (hide annotations) (download)
Sun May 15 03:02:08 2005 UTC (19 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57i_post, checkpoint57h_done
Changes since 1.25: +5 -5 lines
remove "baseTime" (no used) from arg. list of DIFF_BASE_MULTIPLE
and rename it: DIFFERENT_MULTIPLE

1 jmc 1.26 C $Header: /u/gcmpack/MITgcm/model/src/convective_adjustment.F,v 1.25 2005/04/06 18:29:52 jmc Exp $
2 cnh 1.8 C $Name: $
3 adcroft 1.2
4 edhill 1.19 #include "PACKAGES_CONFIG.h"
5 adcroft 1.2 #include "CPP_OPTIONS.h"
6    
7 cnh 1.8 CBOP
8     C !ROUTINE: CONVECTIVE_ADJUSTMENT
9     C !INTERFACE:
10 adcroft 1.2 SUBROUTINE CONVECTIVE_ADJUSTMENT(
11     I bi, bj, iMin, iMax, jMin, jMax,
12     I myTime, myIter, myThid )
13 cnh 1.8 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 adcroft 1.2 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 jmc 1.5 #ifdef ALLOW_TIMEAVE
29     #include "TIMEAVE_STATV.h"
30 jmc 1.4 #endif
31 heimbach 1.6 #ifdef ALLOW_AUTODIFF_TAMC
32     #include "tamc.h"
33     #include "tamc_keys.h"
34     #endif /* ALLOW_AUTODIFF_TAMC */
35 jmc 1.26 EXTERNAL DIFFERENT_MULTIPLE
36     LOGICAL DIFFERENT_MULTIPLE
37 adcroft 1.2
38 cnh 1.8 C !INPUT/OUTPUT PARAMETERS:
39 adcroft 1.2 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 cnh 1.8 C !LOCAL VARIABLES:
52 adcroft 1.2 C == Local variables ==
53 cnh 1.8 C rhoKm1, rhoK :: Density at adjacent levels (common ref. level)
54     C ConvectCount :: Convection mixing freq. counter.
55 heimbach 1.17 INTEGER i, j, K, kTop, kBottom, kDir, deltaK
56 adcroft 1.2 _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 adcroft 1.10 _RL weightA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60     _RL weightB(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61 cnh 1.8 CEOP
62 adcroft 1.2
63     C-- Check to see if should convect now
64 jmc 1.26 IF ( DIFFERENT_MULTIPLE(cAdjFreq,myTime,deltaTClock)
65 jmc 1.25 & ) THEN
66 adcroft 1.2
67 heimbach 1.17 C-- Initialise counters
68     kTop = 0
69     kBottom = 0
70     kDir = 0
71     deltaK = 0
72    
73 jmc 1.4 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 heimbach 1.6 #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 jmc 1.23 IF ( rkFac*gravitySign .LT. 0. ) THEN
96     C- <=> usingZCoords:
97 heimbach 1.17 kTop = 2
98 mlosch 1.15 kBottom = Nr
99 heimbach 1.17 kDir = 1
100     deltaK = -1
101 jmc 1.23 ELSE
102     C- <=> usingPCoords:
103 mlosch 1.16 kTop = Nr
104     kBottom = 2
105 mlosch 1.15 kDir = -1
106 heimbach 1.17 deltaK = 0
107 jmc 1.23 ENDIF
108 mlosch 1.15
109 adcroft 1.2 C-- Loop over all *interior* layers
110 mlosch 1.15 DO K=kTop,kBottom,kDir
111    
112 adcroft 1.2 #ifdef ALLOW_AUTODIFF_TAMC
113 heimbach 1.7 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 adcroft 1.2 #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 heimbach 1.17 I bi,bj,iMin,iMax,jMin,jMax,K-1,K+deltaK,
120 adcroft 1.2 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 heimbach 1.7 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 adcroft 1.2 #endif /* ALLOW_AUTODIFF_TAMC */
129     CALL FIND_RHO(
130 heimbach 1.17 I bi,bj,iMin,iMax,jMin,jMax,K,K+deltaK,
131 adcroft 1.2 I theta,salt,
132     O rhoK,
133     I myThid )
134    
135     #ifdef ALLOW_AUTODIFF_TAMC
136 heimbach 1.7 CADJ STORE rhoKm1(:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
137     CADJ STORE rhoK (:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
138 adcroft 1.2 #endif /* ALLOW_AUTODIFF_TAMC */
139     C- Check static stability with layer below and mix as needed.
140 adcroft 1.10 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 adcroft 1.11 #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 jmc 1.4
171 adcroft 1.2 C-- End DO K=1,Nr
172     ENDDO
173    
174 jmc 1.5 #ifdef ALLOW_TIMEAVE
175 dimitri 1.24 #ifndef MINIMAL_TAVE_OUTPUT
176 edhill 1.19 ceh3 needs an IF ( useTIMEAVE ) THEN
177 jmc 1.5 IF (myIter.ne.nIter0 .AND. taveFreq.GT.0.) THEN
178 jmc 1.18 CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount,
179     I Nr, deltaTclock, bi, bj, myThid)
180 jmc 1.5 ENDIF
181 dimitri 1.24 #endif /* ndef MINIMAL_TAVE_OUTPUT */
182 jmc 1.5 #endif /* ALLOW_TIMEAVE */
183 adcroft 1.2
184 jmc 1.26 C-- End IF (DIFFERENT_MULTIPLE)
185 adcroft 1.2 ENDIF
186    
187     #endif /* INCLUDE_CONVECT_CALL */
188    
189     RETURN
190     END

  ViewVC Help
Powered by ViewVC 1.1.22