/[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.12 - (hide annotations) (download)
Sun Mar 24 02:08:21 2002 UTC (22 years, 2 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint45a_post, checkpoint45b_post, checkpoint44h_post, checkpoint45
Changes since 1.11: +4 -1 lines
Header file TR1.h was missing for case ALLOW_PASSIVE_TRACER.

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

  ViewVC Help
Powered by ViewVC 1.1.22