File indexing completed on 2018-03-02 18:37:24 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
d676f916b2 Jean*0001 #include "AIM_OPTIONS.h"
0002
0003 SUBROUTINE CONVMF (PSA,dpFac,SE,QA,QSAT,
0004 O IDEPTH,CBMF,PRECNV,DFSE,DFQA,
0005 I kGrd,bi,bj,myThid)
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 IMPLICIT NONE
0030
0031
0032
0033
0034 #include "AIM_SIZE.h"
0035
0036 #include "EEPARAMS.h"
0037
0038
0039
0040 #include "com_physcon.h"
0041
0042
0043
0044 #include "com_cnvcon.h"
0045
0046
0047 _RL PSA(NGP), SE(NGP,NLEV), QA(NGP,NLEV), QSAT(NGP,NLEV)
0048 _RL dpFac(NGP,NLEV)
0049 INTEGER IDEPTH(NGP)
0050 _RL CBMF(NGP), PRECNV(NGP), DFSE(NGP,NLEV), DFQA(NGP,NLEV)
0051 INTEGER kGrd(NGP)
0052 INTEGER bi,bj,myThid
0053
0054 #ifdef ALLOW_AIM
0055
0056
0057 INTEGER ITOP(NGP)
0058
0059 _RL QATHR(NGP), ENTR(2:NLEV-1)
0060 _RL ENTR_PS(NGP,2:NLEV-1), FM0(NGP)
0061
0062 INTEGER J, K, K1, Ktmp
0063 _RL dSEdp(NGP,NLEV), factP, PSA_1
0064 _RL dSEdpTot, stab_crit, FDMUS
0065
0066 _RL QMAX, DELQ, QB, QSATB, FMASS, ENMASS, SENTR
0067 _RL FPSA, FQMAX, RDPS, FUQ, FDQ, FSQ
0068
0069
0070
0071
0072 PSA_1 = 1.
0073 FQMAX= 5.
0074
0075 RDPS = 2. _d 0 /(1. _d 0 - PSMIN)
0076
0077
0078
0079 DO J=1,NGP
0080 FM0(J)=0.
0081 Ktmp = kGrd(J)
0082 IF ( Ktmp .NE. 0 ) THEN
0083 FPSA = MIN(1. _d 0 ,(PSA(J)-PSMIN)*RDPS)
0084 FM0(J)=P0*DSIG(Ktmp)*dpFac(J,Ktmp)/(GG*TRCNV*3600. _d 0)
0085 ENDIF
0086 ENDDO
0087
0088 DO K=1,NLEV
0089 DO J=1,NGP
0090 DFSE(J,K)=0.0
0091 DFQA(J,K)=0.0
0092 ENDDO
0093 ENDDO
0094 DO K=2,NLEV-1
0095 DO J=1,NGP
0096 ENTR_PS(J,K)=0.
0097 ENDDO
0098 ENDDO
0099
0100 DO J=1,NGP
0101 ITOP(J) =kGrd(J)
0102 CBMF(J) =0.0
0103 PRECNV(J)=0.0
0104 ENDDO
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118 DO K=1,NLEV-1
0119 factP = CP*SIGH(K)**(RD/CP)
0120 DO J=1,NGP
0121 dSEdp(J,K)=(SE(J,K+1)-SE(J,K))*factP
0122 ENDDO
0123 ENDDO
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138 DO J=1,NGP
0139 DO K=2,NLEV-1
0140 ENTR_PS(J,K)=0.
0141 ENDDO
0142 Ktmp = kGrd(J)
0143 IF (Ktmp.GT.2) THEN
0144 SENTR=0.
0145 DO K=2,Ktmp-1
0146 ENTR(K)= ( MAX( 0. _d 0, SIG(K)/PSA(J) - 0.5 _d 0) )**2
0147 SENTR=SENTR+ENTR(K)
0148 ENDDO
0149 IF (SENTR.GT.0.) THEN
0150 SENTR=ENTMAX/SENTR
0151 DO K=2,Ktmp-1
0152 ENTR_PS(J,K) = ENTR(K)*SENTR*PSA(J)
0153 ENDDO
0154 ENDIF
0155 ENDIF
0156 ENDDO
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 DO J=1,NGP
0170 Ktmp = kGrd(J)
0171 IF ( Ktmp .GE. 2 ) THEN
0172 dSEdpTot = dSEdp(J,Ktmp-1)
0173 DO k=Ktmp-2,2,-1
0174 dSEdpTot = dSEdpTot + dSEdp(J,K)
0175 stab_crit = dSEdpTot + ALHC*(QSAT(J,Ktmp)-QSAT(J,K))
0176 & -WVI(K,2)*(dSEdp(J,K) + ALHC*(QSAT(J,K+1)-QSAT(J,K)) )
0177 IF (stab_crit.GT.0.) ITOP(J) = K
0178 ENDDO
0179 ENDIF
0180 ENDDO
0181
0182
0183
0184
0185 DO J=1,NGP
0186 Ktmp = kGrd(J)
0187 IF ( Ktmp .NE. 0 ) THEN
0188 QATHR(J)=MIN(QBL,RHBL*QSAT(J,Ktmp))
0189 IF (QA(J,Ktmp).LT.QATHR(J).OR.PSA(J).LT.PSMIN)
0190 & ITOP(J)=Ktmp
0191 ENDIF
0192 IDEPTH(J)=Ktmp-ITOP(J)
0193 ENDDO
0194
0195
0196
0197 DO 300 J=1,NGP
0198 Ktmp = kGrd(J)
0199 IF (ITOP(J).EQ.Ktmp) GO TO 300
0200
0201
0202
0203 K = Ktmp
0204 K1=K-1
0205
0206
0207 QMAX=MAX(1.01 _d 0 *QA(J,K),QSAT(J,K))
0208
0209
0210
0211 QB=QA(J,K1)+WVI(K1,2)*(QA(J,K)-QA(J,K1))
0212 QB=MIN(QB,QA(J,K))
0213
0214
0215
0216
0217
0218
0219 FMASS = FM0(J)*MIN(FQMAX,(QA(J,K)-QATHR(J))/(QMAX-QB))
0220 CBMF(J)=FMASS
0221
0222
0223
0224 FUQ=FMASS*QMAX
0225
0226
0227
0228 FDQ=FMASS*QB
0229
0230
0231 FDMUS = FMASS*dSEdp(J,K1)*(WVI(K1,2)-1.)
0232 DFSE(J,K)=FDMUS
0233
0234 DFQA(J,K)=FDQ-FUQ
0235
0236
0237
0238 DO K=Ktmp-1,ITOP(J)+1,-1
0239 K1=K-1
0240
0241
0242
0243 DFQA(J,K)=FUQ-FDQ
0244
0245
0246
0247 ENMASS=ENTR_PS(J,K) * CBMF(J)
0248 FMASS=FMASS+ENMASS
0249
0250
0251
0252 FUQ=FUQ+ENMASS*QA(J,K)
0253
0254
0255
0256 QB=QA(J,K1)+WVI(K1,2)*(QA(J,K)-QA(J,K1))
0257
0258 FDQ=FMASS*QB
0259
0260
0261 DFSE(J,K) = FMASS*(WVI(K1,2)-1.)*dSEdp(J,K1)
0262 & -(FMASS-ENMASS)*WVI(K,2)*dSEdp(J,K)
0263 FDMUS = FDMUS + DFSE(J,K)
0264
0265 DFQA(J,K)=DFQA(J,K)+FDQ-FUQ
0266
0267
0268 DELQ=RHIL*QSAT(J,K)-QA(J,K)
0269 IF (DELQ.GT.0.0) THEN
0270 FSQ=SMF*CBMF(J)*DELQ
0271 DFQA(J,K) =DFQA(J,K) +FSQ
0272 DFQA(J,Ktmp)=DFQA(J,Ktmp)-FSQ
0273 ENDIF
0274
0275 ENDDO
0276
0277
0278
0279 K=ITOP(J)
0280
0281
0282 QSATB=QSAT(J,K)+WVI(K,2)*(QSAT(J,K+1)-QSAT(J,K))
0283 PRECNV(J)=MAX(FUQ-FMASS*QSATB, 0. _d 0)
0284
0285
0286 DFSE(J,K)= -FDMUS+ALHC*PRECNV(J)
0287
0288 DFQA(J,K)=FUQ-FDQ-PRECNV(J)
0289
0290 300 CONTINUE
0291
0292 #endif /* ALLOW_AIM */
0293
0294 RETURN
0295 END