SUBROUTINE ADJUST(TEMP,Q,BETA,KMAX) implicit none C **** C **** PERFORMS CONVECTIVE ADJUSTMENT ON TEMPERATURE COLUMN C **** TEMP(KMAX) NEUTRAL TEMPERATURE COLUMN FOR C **** CONVECTIVE ADJUSTMENT C **** BETA(KMAX) C **** BETA(K) = 1./PI(K) C **** WHERE: C **** PI(1) = (P(1))**(G/CP(1)) C **** PI(K) = PI(K-1)*(P(K)/P(K-1))**(G/CP(K-1)) C **** Q(KMAX) C **** Q(1) = PI(1)*(P(1)-P(2)) C **** Q(K) = PI(K)*(P(K-1)-P(K+1)) C **** C **** N(KMAX), THETA(KMAX), S(KMAX) AND T(KMAX) ARE C **** WORK ARRAYS C **** C **** OUTPUT IS CORRECTED TEMP ARRAY C **** ! ! Args: integer,intent(in) :: kmax real,intent(in) :: q(kmax), beta(kmax) real,intent(inout) :: temp(kmax) ! ! Local: integer :: k,nn,l real :: ss,tt,ttheta real :: s(kmax), t(kmax), theta(kmax) integer :: n(kmax) ! 1 K = 1 N(1) = 1 L = 2 THETA(1) = BETA(1)*TEMP(1) 2 NN = 1 TTHETA = BETA(L)*TEMP(L) 3 IF(THETA(K).LE.TTHETA)GO TO 6 IF(NN.GT.1)GO TO 4 SS = Q(L) TT = SS*TTHETA 4 IF(N(K).GT.1)GO TO 5 S(K) = Q(L-NN) T(K) = S(K)*THETA(K) 5 NN = NN+N(K) S(K) = SS+S(K) SS = S(K) T(K) = TT+T(K) TT = T(K) TTHETA = TT/SS IF(K.EQ.1)GO TO 7 K = K-1 GO TO 3 6 K = K+1 7 IF(L.EQ.KMAX)GO TO 8 L = L+1 N(K) = NN THETA(K) = TTHETA GO TO 2 8 IF(NN.EQ.1)GO TO 11 9 TEMP(L) = TTHETA/BETA(L) IF(NN.EQ.1)GO TO 11 10 L = L-1 NN = NN-1 GO TO 9 11 IF(K.EQ.1)RETURN K = K-1 L = L-1 NN = N(K) TTHETA = THETA(K) GO TO 8 END