*/ ********************************************************************* *IDENT NDEEP4V */ Update to UGAMP GCM version 2.0 : ugcm2.npl */ Betts-Miller convective adjustment scheme. */ N.B. SUBROUTINES ONLY. MUST BE USED WITH INTERFACE MODSET */ MB940412, IN FILE "ugcm2_bmint2". */ --------------------------------------------------------------------- */ Existing comdecks modified: - none - */ Existing decks modified: - none - */ New comdecks added: - none - */ New decks added: BMDOC,BMINT,BMADJ,BMDEEP,BMSHAL */ --------------------------------------------------------------------- */ */ *************************************************************** BMDOC */ *DECK BMDOC SUBROUTINE BMDOC C C C**** *BMDOC* - DOCUMENTATION DUMMY ROUTINE FOR BETTS-MILLER CONVECTIVE C ADJUSTMENT SCHEME. C C MIKE BLACKBURN U.G.A.M.P. 31/05/94. C *IF DEF,DOC C --------------------------------------------------------------------- C C References. C ----------- C C The Betts-Miller convective adjustment scheme included in the C UGAMP GCM version 2.1 is based on code written by Alan Betts and C Martin Miller. It contains essentially technical changes from C their supplied version. Details are given later. C C The basic method of the original scheme is described in C C Betts, A.K., 1986 Q.J.R. Meteorol. Soc., 112, 677-691. C C Single column tests of the original scheme are described in C C Betts, A.K. & M.J.Miller, 1986 Q.J.R. Meteorol. Soc., 112, C 693-709. C C The current scheme, including an explicit parametrization of C downdraughts, is described by C C Betts, A.K. & M.J.Miller, 1994 American Met. Soc. Monograph C on Convective Parametrizations. C C Implementation of the scheme in the UGCM is described by C C Slingo, J.M. & M. Blackburn, 1992 UGAMP Technical Report 25. C C The calculations for the saturation point (temperature of the C lifting condensation level) follow a functional fit derived by C C Bolton, D., 1980 Mon. Wea. Rev., 108, 1046-1053. C C --------------------------------------------------------------------- C C Outline Documentation. C ---------------------- C C The Betts-Miller scheme contains the following subroutines: C C BMINT: Interface routine to the plug-compatible routine BMADJ. C BMINT is set up for the UGAMP GCM. It extracts common C block variables and passes them in the argument list to C BMADJ. The memory manager is used to locate arrays in C long term storage and these are similarly passed through C the argument list. By-pass processing has been extracted C into this routine. C C BMADJ: Find conditionally unstable layers and select for deep or C shallow moist convection. C Create zonal diagnostics and parameters for diagnostic C cloud scheme. C Compute CAPE statistics, numbers of convecting points. C C BMDEEP: Perform precipitating deep convective adjustment. C Return temperature and moisture tendencies, and surface C rainfall and snowfall rates. C C BMSHAL: Perform non-precipitating shallow convective adjustment. C Return temperature and moisture tendencies, and condens- C ation rate for the cloud scheme. C C The following tuneable parameters are provided: C C CBMTS: Adjustment timescale in seconds for shallow convection. C This timescale may be weakly resolution dependent. It C must be chosen to maintain a balance between turbulent C fluxes, grid-scale descent at inversion level and the C convection. C C CBMTD: Adjustment timescale in seconds for deep convection. C This timescale is resolution dependent and must be C sufficiently short to prevent grid-scale saturation in C the regions of strongest vertical motion. C C CBMEF: Downdraught efficiency for deep convection. This is a C fraction, in the range zero to unity. It represents the C proportion of precipitation generated by the adjustment C above cloud base which is evaporated in the downdraught. C It effectively defines the adjustment timescale in the C planetary boundary layer for deep convection. C C BMINT extracts values for these parameters from common, so they C must be defined in initialisation routines. In the UGAMP GCM, C default values are defined in routine INIPHY and may be overridden C in namelist PHYSCTL. The defaults are: C C CBMTS = 14400 sec (all resolutions) C { 14400 sec, n<=T21 C CBMTD = { 7200 sec, T21T42 C CBMEF = 0.15 (all resolutions). C C Note that these parameters have been tested only at T42L19 and C T21 resolutions in the UGAMP GCM. C C --------------------------------------------------------------------- C C Cautions. C --------- C C 1. This code has been tested and tuned only at T42L19 resolution C in the UGAMP GCM, and has been tested at T21 horizontal resol- C ution. C C 2. The scheme contains level dependent code which has only been C tested with the standard 19 levels. C a) The crossover between shallow and deep convection occurs at C specific sigma (p/ps) values, so is essentially independent C of model level placement. C b) The downdraught part of the deep scheme assumes that the C lowest three model levels constitute the planetary boundary C layer. This is checked but cannot be changed easily while C retaining the downdraught component. C c) The deep scheme contains a level-dependent definition to C separate "low-lift" points from mid-level convection. This C is related to the downdraught parametrization in (b). C d) All points up to a model level in the mid/upper troposphere, C defined by a cut-off hybrid coordinate value, are tested for C possible parcel ascents. This is designed to limit deep C convection to the troposphere and is essentially independent C of model level placement. C e) The scheme can be limited to operate below a prescibed model C level, allowing it to be switched off above the tropopause. C A warning is given if any parcel ascents are buoyant beyond C this cut-off level. This option is largely redundent, given C (d) above. C C 3. Note that routine BMINT here does not copy or update the C diagnostic arrays containing zonally averaged tendencies from C deep convection for wind components and KE (the NDU/V/ECUML/S C arrays in AZDIA), since those particular arrays in UGCM 2.1 C are used by the gravity wave drag scheme after the convection C call. C C 4. The Tetens formula used for the calculation of saturation C specific humidity becomes invalid for pressures less than the C saturated vapour pressure and can give large negative Qsat in C these cases. A correction has been applied to prevent this C by modifying the ZCOR term from ZCOR=1./(1.-VTMPC1*ZQSATC) C to become ZCOR=1./MAX(1.E-10,ABS(1.-VTMPC1*ZQSATC)) . C The problem occurs only in the middle-atmosphere, generally at C heights above 10hPa. This should not be a problem with the C current cut-off vertical coordinate value described in (3c) C above. See UGAMP Technical Report No.5 for details. C C 5. Whilst an attempt has been made to extract all machine-specific C code into the interface routine BMINT, the following Cray- C specific code remains within the main subroutines: C a) Calls to several Cray library routines. C b) Work space local to each subroutine is allocated using the C memory manager of the UGAMP/ECMWF models and Cray pointers. C It will be possible to replace this with ANSI code in C Fortran 90. C C --------------------------------------------------------------------- C C History. C -------- C C 1. Code received from Martin Miller, ECMWF, May 1991. C 2. Interface modset and routine interfaces modified for UGAMP C GCM (UGCM version 1.2), May 1991. C 3. Scheme tuned at T42L19 in UGCM, in collaboration with C Martin Miller & Alan Betts, May - Dec 1991. This involved C the following changes (see UGAMP Technical Report No 25): C a) The base temperature used to begin the deep first guess C reference profile was modified from the environment C temperature at the nominal cloud base to the average of C the environment and cloud ascent temperatures at the C same level. C a) The deep scheme was modified to improve the reference C profile structure above the freezing level, while retaining C the near surface cooling and drying, to reduce the cloud C top heating/cooling dipole. This involved changing from a C linear to quadratic interpolation of the adiabatic deficit C with pressure above freezing level. C b) The relaxation timescales were modified to 2hours (deep) C and 4hours (shallow). C c) The downdraft efficiency parameter was reduced from 0.25 C to 0.15. C 4. Used in the UGAMP AMIP integration, Jan 1992, as "NDEEP2F". C C --------------------------------------------------------------------- C C Further modification history: C ----------------------------- C C 1. Original NDEEP2F 12.91 consists of MJM/AKB code modified C by JMS for UGCM. Includes various switches and options C tuned for T42 resolution, Autumn 1991. C 2. NDEEP3 : tidied version of code. JMS 04.92 C 3. NDEEP3B : Logic modified to print CAPEs every timestep, C (temporary). MB 14.05.92 C 4. NDEEP4A : Modify modset only (interface), not decks. 18.5 C Note : Should be used with EPHYS3 modset, which includes C code to set up NEADJTOP (not yet used here). C 5. NDEEP4B : Tidy deck CONVECT to end of sect 1. MB 21.05.92 C 6. NDEEP4C : Reorder work array in CONVECT. MB 21.05.92 C 7. NDEEP4D : Tidy CONVECT setion 2. MB 22.05.92 C 8. NDEEP4E : Tidy CONVECT setion 3. MB 25.05.92 C 9. NDEEP4F : Move CONVECT 4.1 to 3.7 and modify C calc. of CAPE diagnostics (de-Cray). MB 26.05.92 C 10. NDEEP4G : Reorganise remainder of CONVECT. MB 26.05.92 C 11. NDEEP4H : Skip CONVECT sects if no convection. MB 03.06.92 C 12. NDEEP4I : Limit vertical loops in CONVECT. MB 03.06.92 C 13. NDEEP4J : Tidy up memory etc in DEEP to sect.1 MB 05.06.92 C 14. NDEEP4K : Fix ZCAPE bug in 371 loop (>= NDEEP4F). C New multi-tasking code for CAPE diags MB 15.12.93 C 15. NDEEP4L : Full precision ALOG, EXP, but retain C the XLG function. C Fix bug for ZTREF in DEEP loop 222. C Remove novector in DEEP loop 2201. MB 16.12.93 C 16. NDEEP4M : Remove Cray vector merges in CONVECT. C Small mods to logic. MB 17.12.93 C 17. NDEEP4N : Remove Cray vector merges in DEEP. C Tidy, resection, renumber. C Separate loops for PBL integrals. MB 04.01.94 C 18. NDEEP4O : Remove Cray vector merges in SHALLOW. C Tidy, resection, renumber. C Remove unnecessary work arrays. C Merge single-level loops. MB 06.01.94 C 19. NDEEP4P : Check top level of shallow tendency. C Generalise level-specific IETLAB, NPBL. C Fix bug in 5.5 for shallow AZDIA arrays C which crept in in NDEEP4G(?). MB 12.01.94 C 20. NDEEP4Q : Include Qsat correction for p < SVP. C Modify by-pass processing in CONVECT. C Improved vectorisation in CONVECT. MB 21.01.94 C 21. NDEEP4R : Revised CAPE diagnostics: normalisation C corrected: count failed points. MB 18.03.94 C 22. NDEEP4S : Renumber/reorder DEEP sect.5. and C optimise evaporation calcs. C Arithmetic changes to optimise DEEP. MB 30.03.94 C 23. NDEEP4T : Change names of routines, main switch. C Timescales and downdraught efficiency C become namelist variables. C Checks for imposed top corrected. MB 18.04.94 C Further optimisation of BMADJ,BMDEEP. MB 20.04.94. C By-pass processing corrected. MB 25.04.94. C Computational constants changed/added.MB 25.04.94. C 4T12 : Correct IHITOP calculations in BMADJ. MB 27.04.94. C 4T13 : Avoid ILAB(i,0) use in BMADJ 3.5. MB 28.04.94. C 4T14 : Modify global diagnostics in BMADJ 6. MB 28.04.94. C 4T15 : Restrict BMDEEP 361 calcs to cloud. MB 29.04.94. C 4T16 : Replace redundent vector work arrays C by scalars in BMSHAL. MB 29.04.94. C 24. NDEEP4U : *CALL only required common blocks. MB 06.05.94. C 4U2 : No task info in DEEP/SHAL. No DTIME. MB 09.05.94. C 4U3 : Plug-compatible routines BMDEEP/SHAL. MB 10.05.94. C 4U4 : Plug-compatible main routine BMADJ C & new interface routine BMINT. MB 11.05.94. C 4U5 : Resolution checks extracted to BMINT, C dummy argument name changes. MB 13.05.94. C 25. NDEEP4V : By-pass processing extracted to BMINT MB 31.05.94. C C --------------------------------------------------------------------- C C Changes to results from NDEEP2F to current code: C ------------------------------------------------ C C 1. The half precision exponential and log functions in NDEEP2F C have been replaced by ANSI Fortran functions. C 2. NDEEP2F contained a known bug, whereby the deep first guess C reference temperature at the nominal cloud base was incorrectly C modified at each pass of the loop over levels from the base to C the freezing level. This did not affect the reference profile C above the base level. The second line in (BM)DEEP loop 222: C ZTMEAN=0.5*(ZTCD(JL,NUPBL)+ZTREF(JL,NUPBL)) C was replaced in NDEEP4L by: C ZTMEAN=0.5*(ZTCD(JL,NUPBL)+ZTP1D(JL,NUPBL)) C Subsequently in NDEEP4N a separate loop (342) is executed for C the reference profile at level NUPBL. C 3. Changes to the arithmetic ordering in BMDEEP for optimisation C purposes give rounding differences. The exact changes are: C a) Regroup terms in the PBL evaporation integral in loop 411. C b) Multiply the ZFG factor by the latent heat in the single C level loop 431 rather than nested loop 441. C c) Changes to the evaporation calculation in loop 531: C remove redundent ELSE part of if-block for ZDQEV: C reorder terms in expression for ZZDSP: C introduce ZRINCM to avoid (ZRINC()-ZDR()) terms: C use multiply in place of 2nd divide for ZDQEV. C 4. The correction to the Qsat formula, for pressures less than the C SVP, would alter the results if any cloud parcels encountered C this condition. It only occurs well above the tropopause. C 5. The CAPE diagnostics, but not the meteorological results, C differ following rewriting the macro-tasking code in BMADJ, C in NDEEP4K and further, following the revisions in NDEEP4R to C the normalisation (inclusion of failing non-zero CAPE points). C C --------------------------------------------------------------------- C C CAPE Diagnostics & logic of DEEP/SHALLOW switching. C --------------------------------------------------- C C Subroutine BMADJ computes Convective Available Potential Energy C (CAPE) statistics at each latitude and globally, every 12 hours. C The logic of selecting deep and shallow moist convecting points C excludes two classes of convecting layer which are diagnosed as C having non-zero CAPE, causing the statistics in the original code C to be incorrectly normalised. The errors were typically 1% C globally but were substantial at individual latitudes. The C normalisation now includes the failing points, which are also C counted separately. C C BMADJ section [3] tests all columns at the current latitude for C dry and moist conditional instability. The CAPE is computed for C all moist unstable points and is set to zero for other points. C Points with CAPE below a pre-defined cut-off (which is negative) C and shallow unstable layers at the surface are excluded and have C CAPE reset to zero. C C BMADJ section [4] selects points for deep convection. These C require non-zero CAPE, a deep cloud-top and must include at least C 3 levels from parcel origin to cloud top. Some points fail to C give positive precipitation, due to the convecting layer being C drier than the reference profile. These are excluded from the C count of deep convecting points and are swapped for possible C shallow convection. C C BMADJ section [5] selects points for shallow convection. These C require non-zero CAPE, zero or negative precipitation (i.e. swap C points can be included) and cloud-base must be below the imposed C shallow convective top. C C Finally the CAPE statistics are computed in BMADJ section [6]. C All points having non-zero CAPE are included in the zonal mean C and the land/sea averages. C C Two classes of moist unstable point having non-zero diagnosed C CAPE fail to give successful convection, given the current logic C for deep and shallow selection. They are C C a) 2-level layers having a high cloud base, C C b) Swap points having a high cloud base. C C All such points are mid-level convecting layers. The former fail C the deep selection, having too few levels. The latter are too C dry to give deep convection but cannot swap successfully. C C In the original code, these failing points were included in the C CAPE sums but excluded from the normalisation and the count of C successful convecting points. Such points typically account for C 1% of the total globally, but could even dominate the statistics C at individual latitudes. They are now included in the CAPE C normalisation and are printed in a separate count, together with C their average CAPE at each latitude. C C An additional feature of the CAPE statistics in the original code C was that the zonal average could be larger than the maximum value. C This generally occurred when all non-zero CAPE points failed to C convect. The zonal sums were then normalised by unity. This can C no longer occur and rows with no convecting points correctly show C zero CAPE. C C The deep-shallow selection logic also treats a further class of C points in a non-trivial way. Points having a deep top (defined C as p/ps < 0.725 over land and p/ps < 0.810 over sea) but only 2 C levels fail the deep test. However those having cloud base below C the imposed shallow top (p/ps=0.725 at both land and sea points) C will be selected successfully for shallow convection. C C --------------------------------------------------------------------- *ENDIF C PRINT *,' *** DUMMY ROUTINE BMDOC FOR DOCUMENTATION OF' P ,' BETTS-MILLER CONVECTION SCHEME ***' C RETURN END */ */ *************************************************************** BMINT */ *DECK BMINT SUBROUTINE BMINT C C**** *BMINT* - INTERFACE ROUTINE TO THE BETTS-MILLER C CONVECTIVE ADJUSTMENT SCHEME. C C ORIGINAL VERSION M.BLACKBURN U.G.A.M.P. 31/05/94. C C PURPOSE. C -------- C C THIS ROUTINE IS A MODEL DEPENDENT INTERFACE TO THE PLUG- C COMPATIBLE MAIN SUBROUTINE *BMADJ* OF THE BETTS-MILLER CONVECTIVE C ADJUSTMENT SCHEME. C C** INTERFACE. C ---------- C C *BMINT* IS CALLED FROM *PHYSC*. C THE ROUTINE TAKES ITS INPUT FROM THE LONG-TERM STORAGE: C T,Q AND P AT FULL LEVELS, HALF LEVEL PRESSURE AND SURFACE FIELDS. C IT RETURNS ITS OUTPUT TO THE SAME SPACE: C MODIFIED TENDENCIES OF T AND Q, CONVECTIVE RATES OF SURFACE C PRECIPITATION FOR RAIN AND SNOW, VARIOUS DIAGNOSTICS. C C METHOD. C ------- C C COMMON BLOCK ITEMS ARE EXTRACTED AND PASSED IN THE ARGUMENT C LIST TO *BMADJ*. THE MEMORY MANAGER IS USED TO LOCATE ARRAYS IN C LONG TERM STORAGE, WHICH ARE ALSO PASSED IN THE ARGUMENT LIST TO C *BMADJ*. MULTI-TASKING INFORMATION IS EXTRACTED AND TASK- C DEPENDENT VALUES COMPUTED BEFORE CALLING *BMADJ*. C C EXTERNALS. C ---------- C C *ALLOCA* ALLOCATE ARRAY SPACE (MEMORY MANAGER ROUTINE). C *BMADJ* PLUG-COMPATIBLE MAIN ROUTINE TO PERFORM THE C CONVECTIVE ADJUSTMENT. C *LOCATE* LOCATE A (CRAY) POINTER (MEMORY MANAGER ROUTINE). C C REFERENCES. C ----------- C C NONE. C *CALL PARAM *CALL COMCTL *CALL COMGAU *CALL COMHYB *CALL COMDIA *CALL COMRSW *CALL COMPSW *CALL COMPH2 *CALL COMCON *CALL COMDIZ *CALL COMMSK *CALL COMSDS *CALL COMTASK C C ------------------------ LOGICAL LO,LOLAND,LOFRST LOGICAL LORAD LOGICAL LOZLS LOGICAL LOMASK,LMSKLAT C ---------------------- C SAVE LOFRST C POINTER(ITM1 ,TM1 (NLP2,NLEV)) * ,(IQM1 ,QM1 (NLP2,NLEV)) * ,(ITE ,TE (NLP2,NLEV)) * ,(IQE ,QE (NLP2,NLEV)) * ,(IAPP1 ,APP1 (NLP2,NLEV)) * ,(IAPHP1 ,APHP1 (NLP2,NLEVP1)) C POINTER(ISLMM ,SLMM (NLP2)) * ,(IAPRCM ,APRCM (NLP2)) * ,(IAPRSM ,APRSM (NLP2)) * ,(IARPRCM,ARPRCM(NLP2)) * ,(ITOPCM ,NTOPCM(NLP2)) * ,(IBASECM,NBASECM(NLP2)) * ,(ITSM1M ,TSM1M (NLP2)) C POINTER(IAPRC ,APRC (NLP2)) * ,(IAPRS ,APRS (NLP2)) * ,(IARPRC ,ARPRC (NLP2)) * ,(ITOPC ,NTOPC (NLP2)) * ,(IBASEC ,NBASEC(NLP2)) C POINTER(ILOLAND,LOLAND(NLP2)) C POINTER(IMSKLAT,LMSKLAT(NGL)) C POINTER(IAZDIAM,AZDIAM(NLEV,NUMZLS)) * ,(IAZDIA ,AZDIA (NLEV,NUMZLS)) C POINTER(IRSFC ,RSFC (NLP2)) * ,(ISSFC ,SSFC (NLP2)) C C* DATA STATEMENTS. C ---- ----------- C C *LOFRST* LOGICAL FLAG OF FIRST CALL TO THE ROUTINE. C DATA LOFRST / .TRUE. / C C ------------------------------------------------------------------ C C* 1. LOCATE AND POSITION SPACE. C ------ --- -------- ------ C 100 CONTINUE C ITASK=IQTASK() IROW=NROW(ITASK+1) IGPTYPE=3+ITASK IMDTYPE=50 C CALL LOCATE(IAPRCM ,'APRCM' ,IGPTYPE) CALL LOCATE(IAPRSM ,'APRSM' ,IGPTYPE) CALL LOCATE(IARPRCM,'ARPRCM',IGPTYPE) CALL LOCATE(ITOPCM ,'NTOPCM',IGPTYPE) CALL LOCATE(IBASECM,'NBASECM',IGPTYPE) C CALL LOCATE(IAPRC ,'APRC' ,IGPTYPE) CALL LOCATE(IAPRS ,'APRS' ,IGPTYPE) CALL LOCATE(IARPRC ,'ARPRC' ,IGPTYPE) CALL LOCATE(ITOPC ,'NTOPC' ,IGPTYPE) CALL LOCATE(IBASEC ,'NBASEC',IGPTYPE) C CALL LOCATE(IAZDIAM,'AZDIAM',IGPTYPE) CALL LOCATE(IAZDIA ,'AZDIA' ,IGPTYPE) C IF (LBMADJ) THEN CALL LOCATE(ITM1 ,'TM1' ,IGPTYPE) CALL LOCATE(IQM1 ,'QM1' ,IGPTYPE) CALL LOCATE(ITE ,'TE' ,IGPTYPE) CALL LOCATE(IQE ,'QE' ,IGPTYPE) CALL LOCATE(IAPP1 ,'APP1' ,IGPTYPE) CALL LOCATE(IAPHP1 ,'APHP1' ,IGPTYPE) C CALL LOCATE(ISLMM ,'SLMM' ,IGPTYPE) CALL LOCATE(ITSM1M ,'TSM1M' ,IGPTYPE) C CALL LOCATE(ILOLAND,'LOLAND',IGPTYPE) ENDIF C CALL ALLOCA(IRSFC,NLP2,'RSFC',IGPTYPE) CALL ALLOCA(ISSFC,NLP2,'SSFC',IGPTYPE) C C ------------------------------------------------------------------ C C* 2. RESOLUTION CHECK. C ---------- ------ C 200 CONTINUE C IF (NN.GT.42.AND.LOFRST) THEN PRINT *,' ' PRINT *,' ******************** WARNING ***********************' PRINT *,' * BETTS-MILLER CONVECTIVE ADJUSTMENT SCHEME. *' PRINT *,' * THIS PARAMETRIZATION HAS BEEN TESTED IN THE UGCM *' PRINT *,' * ONLY AT HORIZONTAL RESOLUTIONS UP TO T42. *' PRINT *,' * THE PARAMETERS *CBMTS*, *CBMTD* AND *CBMEF* HAVE *' PRINT *,' * NOT BEEN TUNED AT RESOLUTIONS IN EXCESS OF T42. *' PRINT *,' * *CBMTS* IS THE TIMESCALE FOR SHALLOW CONVECTIVE *' PRINT *,' * ADJUSTMENT. IT DETERMINES THE RATE AT *' PRINT *,' * WHICH MOISTURE IS TRANSFERRED THROUGH *' PRINT *,' * THE PBL AND INTO THE FREE ATMOSPHERE. *' PRINT *,' * *CBMTD* IS THE TIMESCALE FOR DEEP CONVECTIVE *' PRINT *,' * ADJUSTMENT. IT MUST BE SUFFICIENTLY *' PRINT *,' * SMALL TO MAINTAIN SUBSATURATION IN THE *' PRINT *,' * REGIONS OF STRONGEST ASCENT. *' PRINT *,' * *CBMEF* IS A DOWNDRAUGHT EFFICIENCY PARAMETER *' PRINT *,' * FOR DEEP CONVECTION. IT DETERMINES THE *' PRINT *,' * RELATIVE STRENGTH OF THE PBL ADJUSMENT. *' PRINT *,' * DEFAULT VALUES ARE SUPPLIED IN ROUTINE *INIPHY* *' PRINT *,' * AND MAY BE OVERRIDDEN IN NAMELIST *PHYSCTL*. *' PRINT *,' ****************************************************' PRINT *,' ' ENDIF C C ------------------------------------------------------------------ C C* 3. COPY AND PRESET ARRAYS / BY-PASS PROCESSING. C ---- --- ------ ------ - ------- ----------- C 300 CONTINUE C C* 3.1 COPY ZONAL MEAN DIAGNOSTIC ARRAYS. C NDU/V/ECUML/S ARRAYS COPIED AND USED BY GWDRAG. C NDU/V/ESCVL/S ARE CURRENTLY UNUSED. C 310 CONTINUE C DO 311 JK=1,NLEV AZDIA(JK,NDTCUML)=AZDIAM(JK,NDTCUML) AZDIA(JK,NDTCUMS)=AZDIAM(JK,NDTCUMS) AZDIA(JK,NDQCUML)=AZDIAM(JK,NDQCUML) AZDIA(JK,NDQCUMS)=AZDIAM(JK,NDQCUMS) AZDIA(JK,NDTSCVL)=AZDIAM(JK,NDTSCVL) AZDIA(JK,NDTSCVS)=AZDIAM(JK,NDTSCVS) AZDIA(JK,NDQSCVL)=AZDIAM(JK,NDQSCVL) AZDIA(JK,NDQSCVS)=AZDIAM(JK,NDQSCVS) AZDIA(JK,NDUSCVL)=AZDIAM(JK,NDUSCVL) AZDIA(JK,NDUSCVS)=AZDIAM(JK,NDUSCVS) AZDIA(JK,NDVSCVL)=AZDIAM(JK,NDVSCVL) AZDIA(JK,NDVSCVS)=AZDIAM(JK,NDVSCVS) AZDIA(JK,NDESCVL)=AZDIAM(JK,NDESCVL) AZDIA(JK,NDESCVS)=AZDIAM(JK,NDESCVS) 311 CONTINUE C C* 3.2 COPY ARRAYS USED IN CLOUD SCHEME TO OUTPUT BUFFER. C COPY AND PRESET CONVECTIVE PRECIPITATION RATES. C C 320 CONTINUE C DO 321 JL=1,NLON NBASEC(JL)=NBASECM(JL) NTOPC(JL)=NTOPCM(JL) ARPRC(JL)=ARPRCM(JL) APRC(JL)=APRCM(JL) APRS(JL)=APRSM(JL) RSFC(JL)=0. SSFC(JL)=0. 321 CONTINUE C IF (.NOT.LBMADJ) GOTO 600 C C ------------------------------------------------------------------ C C* 4. LOGICAL SWITCHES FOR DIAGNOSTICS. C ------- -------- --- ------------ C 400 CONTINUE C C 4.1 CLOUD DIAGNOSTICS FOR RADIATION SCHEME. C 410 CONTINUE C IF (MOD(NSTEP+1,NRADFR).NE.0) THEN LORAD=.TRUE. ELSE LORAD=.FALSE. ENDIF C C 4.2 ZONAL MEAN DIAGNOSTICS. C 420 CONTINUE C IF (NFRACC.GT.0) THEN LOZLS=LZLS.AND.MOD(NSTEP,NFRACC).EQ.0 ELSE LOZLS=.TRUE. ENDIF C C 4.3 MASK DIAGNOSTICS. C 430 CONTINUE C LO=LMASK.AND.MOD(NSTEP+1,NFRMSK).EQ.0.AND.NSTEP.NE.NRESUM IF (LO) THEN CALL LOCATE(IMSKLAT,'LMSKLAT',IMDTYPE) LOMASK=LMSKLAT(IROW) ELSE LOMASK=.FALSE. ENDIF C C ------------------------------------------------------------------ C C* 5. CALL PLUG-COMPATIBLE MAIN ROUTINE. C ---- --------------- ---- -------- C 500 CONTINUE C ILANDP=NLANDP(IROW) ISEAP=NSEAP(IROW) ZBUDW=BUDW(IROW) ZTWOMU=TWOMU(IROW) C CALL BMADJ( * CBMTS, CBMTD, CBMEF, NEADJTOP * ,NLON, NLP2, NLEV, NLEVM1, NLEVP1, NGL * ,CETA, CETAH, TWODT, IROW * ,NSTEP, NSTART, NLOCKS, JPLOCKS * ,ALS, ALV, API, CPD, G, RD * ,RHOH2O, TMELT, VTMPC1, VTMPC2 * ,C2ES, C3IES, C3LES, C4IES, C4LES, C5LES * ,ZBUDW, ZTWOMU, DCVGR, DCVGS, DCVMOI * ,LORAD, NRADFR, LOMASK, NDTCUM, NDQCUM * ,LOZLS, NUMZLS, ILANDP, ISEAP * ,NDQCUML, NDQCUMS, NDTCUML, NDTCUMS * ,NDQSCVL, NDQSCVS, NDTSCVL, NDTSCVS * ,TM1, QM1, TE, QE, APP1, APHP1 * ,SLMM, TSM1M, RSFC, SSFC, LOLAND * ,APRC, APRS, ARPRC, NTOPC, NBASEC * ,AZDIA * ) C C C ------------------------------------------------------------------ C C* 6. RETURN. C ------- C 600 CONTINUE C LOFRST=.FALSE. C RETURN END */ */ *************************************************************** BMADJ */ *DECK BMADJ SUBROUTINE BMADJ( * CBMTS, CBMTD, CBMEF, NEADJTOP * ,NLON, NLP2, NLEV, NLEVM1, NLEVP1, NGL * ,CETA, CETAH, TWODT, KROW * ,NSTEP, NSTART, NLOCKS, JPLOCKS * ,ALS, ALV, API, CPD, G, RD * ,RHOH2O, TMELT, VTMPC1, VTMPC2 * ,C2ES, C3IES, C3LES, C4IES, C4LES, C5LES * ,PBUDW, PTWOMU, DCVGR, DCVGS, DCVMOI * ,LPRAD, NRADFR, LPMASK, NDTCUM, NDQCUM * ,LPZLS, NUMZLS, KLANDP, KSEAP * ,NDQCUML, NDQCUMS, NDTCUML, NDTCUMS * ,NDQSCVL, NDQSCVS, NDTSCVL, NDTSCVS * ,TM1, QM1, TE, QE, APP1, APHP1 * ,SLMM, TSM1M, RSFC, SSFC, LPLAND * ,APRC, APRS, ARPRC, NTOPC, NBASEC * ,AZDIA * ) C C**** *BMADJ* - COMPUTES T AND Q TENDENCIES DUE TO DEEP AND SHALLOW C CONVECTION. C C ORIGINAL VERSION M.J.MILLER E.C.M.W.F. 16/07/84. C VECTORIZED B.RITTER E.C.M.W.F. 12/84. C IMPLEMENTED & TUNED IN UGCM1 J.M.SLINGO U.G.A.M.P. 12/91. C IMPLEMENTED IN UGCM2 M.BLACKBURN U.G.A.M.P. 31/05/94. C C PURPOSE. C -------- C C THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE TWO C PROGNOSTIC VARIABLES T AND Q DUE TO MOIST CONVECTIVE PROCESSES. C BOTH SHALLOW (NON-PRECIPITATING) CLOUDS AND DEEP (PRECIPITATING) C CLOUDS ARE INCLUDED VIA THE ADJUSTMENT TOWARDS REFERENCE PROFILES. C PRECIPITATION IS EITHER AS SNOW OR AS LIQUID WATER DEPENDING ON C TEMPERATURE. MELTING (OR FREEZING) OF THE FALLING WATER IS ALSO C PERMITTED IN THE PARTITIONING OF SURFACE ACCUMULATIONS. C C** INTERFACE. C ---------- C C *BMADJ* IS CALLED FROM *BMINT*. C THE ROUTINE IS ARGUMENT DRIVEN, TAKING ITS INPUT ENTIRELY C FROM THE VARIABLES AND ARRAYS SUPPLIED IN THE ARGUMENT LIST: C T,Q AND P AT FULL LEVELS, HALF LEVEL PRESSURE AND SURFACE FIELDS. C IT RETURNS ITS OUTPUT VIA THE ARGUMENT LIST: C MODIFIED TENDENCIES OF T AND Q, CONVECTIVE RATES OF SURFACE C PRECIPITATION FOR RAIN AND SNOW, VARIOUS DIAGNOSTICS. C *IF DEF,DOC C --------------------------------------------------------------------- C C INPUT ARGUMENTS: C C *CBMTS* ADJUSTMENT TIMESCALE IN SECONDS FOR SHALLOW CONVECTION. C *CBMTD* ADJUSTMENT TIMESCALE IN SECONDS FOR DEEP CONVECTION. C *CBMEF* DOWNDRAUGHT EFFICIENCY PARAMETER FOR DEEP CONVECTION. C *NEADJTOP*IMOPSED TOP LEVEL FOR BETTS-MILLER SCHEME. C *NLON* NUMBER OF LONGITUDES. C *NLP2* (NLON+2). C *NLEV* NUMBER OF LEVELS. C *NLEVM1* (NLEV-1). C *NLEVP1* (NLEV+1). C *NGL* NUMBER OF LATITUDES. C *CETA* HYBRID COORDINATE AT FULL LEVELS, DIMENSION (NLEV). C *CETAH* HYBRID COORDINATE AT HALF LEVELS, DIMENSION (NLEVP1). C *TWODT* 2* TIMESTEP IN SECONDS. C *KROW* INDEX FOR CURRENT LATITUDE ROW. C *NSTEP* CURRENT TIMESTEP. C *NSTART* TIMESTEP FOR START/RESTART. C *NLOCKS* PRE-ASSIGNED LOCKS, FOR MULTI-TASKING. C *JPLOCKS* DIMENSION OF ARRAY *NLOCKS*. C *ALS* LATENT HEAT FOR SUBLIMATION. C *ALV* LATENT HEAT FOR VAPORISATION. C *API* PI. C *CPD* SPECIFIC HEAT AT CONSTANT PRESSURE FOR DRY AIR. C *G* GRAVITATIONAL ACCELERATION. C *RD* GAS CONSTANT FOR DRY AIR. C *RHOH2O* DENSITY OF LIQUID WATER. C *TMELT* TEMPERATURE OF FUSION OF ICE. C *VTMPC1* CONSTANT FOR VIRTUAL EFFECTS, (RV/RD-1). C *VTMPC2* CONSTANT FOR VIRTUAL EFFECTS, (CPV/CPD-1). c *C__ES* CONSTANTS USED FOR COMPUTATION OF SATURATION SPECIFIC C HUMIDITY OVER LIQUID WATER (C_LES) OR ICE (C_IES). C *C2ES* (RD/RV)*(SVP AT REFERENCE TEMPERATURE C4_ES). C *C3_ES* CONSTANT FOR SVP. C *C4_ES* REFERENCE TEMPERATURE FOR SVP. C *C5_ES* (C3_ES*(TMELT-C4_ES)). C *PBUDW* CURRENT LATITUDE WEIGHT FOR GAUSSIAN INTEGRAL. C *PTWOMU* 2* SINE(GAUSSIAN LATITUDE). C *DCVGR* ACCUM. GLOBAL CONVECTIVE GENERATION OF RAIN. C *DCVGS* ACCUM. GLOBAL CONVECTIVE GENERATION OF SNOW. C *DCVMOI* ACCUM. GLOBAL CONVECTIVE ENVIRONMENTAL MOISTENING. C *LPRAD* SWITCH FOR CLOUD-RADIATION DIAGNOSTICS. C *NRADFR* FREQUENCY IN TIMESTEPS OF FULL CLOUD-RADIATION CALC. C *LPMASK* SWITCH FOR LIMITED AREA AVERAGE (MASK) DIAGNOSTICS. C *ND_CUM* INDEX FOR MASK DIAGNOSTICS OF SENSIBLE/LATENT HEAT C BY CONVECTION. C *LPZLS* SWITCH FOR ACCUMULATION OF ZONAL AVERAGE TENDENCIES. C *NUMZLS* SECOND DIMENSION OF ZONAL AVERAGE TENDENCY ARRAY. C *KLANDP* NUMBER OF LAND POINTS IN ROW. C *KSEAP* NUMBER OF SEA POINTS IN ROW. C *ND_CUM_* INDEX OF ZONAL AVERAGE T/Q TENDENCY FOR LAND/SEA C FOR DEEP CONVECTION. C *ND_SCV_* INDEX OF ZONAL AVERAGE T/Q TENDENCY FOR LAND/SEA C FOR SHALLOW CONVECTION. C *TM1* (T-1) TEMPERATURE, DIMENSION (NLP2,NLEV). C *QM1* (T-1) SPECIFIC HUMIDITY, DIMENSION (NLP2,NLEV). C *TE* TEMPERATURE TENDENCY, DIMENSION (NLP2,NLEV). C *QE* SPECIFIC HUMIDITY TENDENCY, DIMENSION (NLP2,NLEV). C *APP1* FULL LEVEL PRESSURE, DIMENSION (NLP2,NLEV). C *APHP1* HALF LEVEL PRESSURE, DIMENSION (NLP2,NLEVP1). C *SLMM* LAND/SEA MASK (1/0), DIMENSION (NLP2). C *TSM1M* (T-1) SURFACE TEMPERATURE, DIMENSION (NLP2). C *RSFC* ZERO PRESET, DIMENSION (NLP2). C *SSFC* ZERO PRESET, DIMENSION (NLP2). C *LPLAND* LOGICAL ARRAY FOR LAND POINTS, DIMENSION (NLP2). C *APRC* ACCUM. CONVECTIVE PRECIP., DIMENSION (NLP2). C *APRS* ACCUM. CONVECTIVE SNOWFALL, DIMENSION (NLP2). C *ARPRC* ACCUM. PRECIP FOR CLOUD-RADN, DIMENSION (NLP2). C *NTOPC* HIGHEST CONVEC. TOP FOR RADN., DIMENSION (NLP2). C *NBASEC* LOWEST CONVEC. BASE FOR RADN., DIMENSION (NLP2). C *AZDIA* ACCUM. ZONAL TENDENCIES, DIMENSION (NLEV,NUMZLS). C C OUTPUT ARGUMENTS: C C *DCVGR* MODIFIED GLOBAL CONVECTIVE GENERATION OF RAIN. C *DCVGS* MODIFIED GLOBAL CONVECTIVE GENERATION OF SNOW. C *DCVMOI* MODIFIED GLOBAL CONVECTIVE ENVIRONMENTAL MOISTENING. C *TE* MODIFIED TEMPERATURE TENDENCY, DIMENSION (NLP2,NLEV). C *QE* MODIFIED MOISTURE TENDENCY, DIMENSION (NLP2,NLEV). C *RSFC* SURFACE CONVECTIVE RAINFALL RATE, DIMENSION (NLP2). C *SSFC* SURFACE CONVECTIVE SNOWFALL RATE, DIMENSION (NLP2). C *APRC* MODIFIED ACCUM. CONVECTIVE PRECIP., DIMENSION (NLP2). C *APRS* MODIFIED ACCUM. CONVECTIVE SNOWFALL, DIMENSION (NLP2). C *ARPRC* MODIFIED ACCUM. PRECIP FOR CLOUD-RADN, DIMENSION (NLP2). C *NTOPC* MODIFIED HIGHEST CONVEC. TOP FOR RADN, DIMENSION (NLP2). C *NBASEC* MODIFIED LOWEST CONVEC. BASE FOR RADN, DIMENSION (NLP2). C *AZDIA* MODIFIED ACCUM. ZONAL TENDS, DIMENSION (NLEV,NUMZLS). C C --------------------------------------------------------------------- *ENDIF C METHOD. C ------- C C AN INDEX OF CONVECTIVELY ACTIVE POINTS IS CREATED, DEFINED C BY THE EXISTENCE OF LOW LEVEL MOIST ADIABATIC INSTABILITY. C DEEP AND SHALLOW CONVECTIVE POINTS (DISTINGUISHED BY THE HEIGHT C OF THE UNSTABLE SLAB AND THE OCCURRENCE OF PRECIPITATION) ARE C TREATED SEPARATELY. SUBROUTINES *BMDEEP* AND *BMSHAL* PERFORM C THE ADJUSTMENT PROCESS. C C EXTERNALS. C ---------- C C *ALLOCA* ALLOCATE ARRAY SPACE (MEMORY MANAGER ROUTINE). C *BMDEEP* PERFORM THE ADJUSTMENT FOR DEEP CONVECTIVE C SITUATIONS. C *MASKDIA* COMPUTE MASK (LIMITED AREA) DIAGNOSTICS. C *OFFLOCK* ALLOW SUBSEQUENT CODE TO BE EXECUTED MULTI-TASKED. C (CRAY MACRO-TASKING LIBRARY ROUTINE). C *ONLOCK* FORCE SUBSEQUENT CODE TO BE EXECUTED SINGLE-TASKED. C (CRAY MACRO-TASKING LIBRARY ROUTINE). C *BMSHAL* PERFORM THE ADJUSTMENT FOR SHALLOW CONVECTIVE C SITUATIONS. C *UNLOC* FREE ARRAY SPACE (MEMORY MANAGER ROUTINE). C *WHENEQ* SEARCH A VECTOR FOR ELEMENTS EQUAL TO A TARGET, C TO GATHER CONVECTING POINTS (CRAY LIBRARY ROUTINE). C C REFERENCES. C ----------- C C A BASIC DESCRIPTION OF THE METHOD CAN BE FOUND IN BETTS C (1986 : QJRMS 112, 677-691) AND BETTS & MILLER (1986 : QJRMS, C 112, 693-709). C A MORE DETAILED DESCRIPTION OF THE SCHEME IS CONTAINED IN C BETTS & MILLER (1994 : AMERICAN METEOROLOGICAL SOCIETY MONOGRAPH C ON CONVECTIVE PARAMETRIZATION). C IMPLEMENTATION OF THE SCHEME IN THE UGAMP GCM IS DESCRIBED C IN UGAMP TECHNICAL REPORT NO. 25 (SLINGO & BLACKBURN, 1992). C C SATURATION POINT CALCULATIONS FOLLOW BOLTON (1980, MON. WEA. C REV., 108, 1046-1053). SATURATION SPECIFIC HUMIDITY CALCULATIONS C USE THE TETENS FORMULA (LOWE, 1977, J.APPL.MET., 16, 100-103). C C ------------------------------------ LOGICAL LO,LOA,LOB,LO2,LO3,LOIS,LOVS LOGICAL LOC,LOSWAP LOGICAL LOPRT LOGICAL LPRAD,LPZLS,LPMASK C -------------------------- C SAVE NROWSUM SAVE NGCONV,NGSHAL,NGDEEP,NGSWAP,NGFAIL,NGTOT,GCAPE C REAL * TM1 (NLP2,NLEV) * ,QM1 (NLP2,NLEV) * ,TE (NLP2,NLEV) * ,QE (NLP2,NLEV) * ,APP1 (NLP2,NLEV) * ,APHP1 (NLP2,NLEVP1) C REAL * SLMM (NLP2) * ,TSM1M (NLP2) * ,RSFC (NLP2) * ,SSFC (NLP2) * ,APRC (NLP2) * ,APRS (NLP2) * ,ARPRC (NLP2) C INTEGER * NTOPC (NLP2) * ,NBASEC(NLP2) C LOGICAL * LPLAND(NLP2) C REAL * AZDIA (NLEV,NUMZLS) C REAL * CETA (NLEV) * ,CETAH (NLEVP1) C INTEGER * NLOCKS(JPLOCKS) C POINTER(IZTP1 ,ZTP1 (NLON,NLEV)) * ,(IZQP1 ,ZQP1 (NLON,NLEV)) * ,(IZDPP1 ,ZDPP1 (NLON,NLEV)) * ,(IZDPKPK,ZDPKPK(NLON,NLEV)) * ,(IZTC ,ZTC (NLON,NLEV)) * ,(IZQC ,ZQC (NLON,NLEV)) * ,(IZDT ,ZDT (NLON,NLEV)) * ,(IZDQ ,ZDQ (NLON,NLEV)) * ,(IILAB ,ILAB (NLON,NLEV)) C POINTER(ILOC ,LOC (NLON)) * ,(ILSWAP ,LOSWAP(NLON)) * ,(IIQCD ,IQCD (NLON)) * ,(IITEST ,ITEST (NLON)) * ,(IILIFT ,ILIFT (NLON)) * ,(IIBASE ,IBASE (NLON)) * ,(IITOP ,ITOP (NLON)) * ,(IISHTOP,ISHTOP(NLON)) * ,(IIDX ,IDX (NLON)) * ,(IZTCB ,ZTCB (NLON)) * ,(IZSGTP ,ZSGTP (NLON)) * ,(IZCAPE ,ZCAPE (NLON)) * ,(IZSC ,ZSC (NLON)) C XLG(ARG1,ARG2)=EXP(ARG2*ALOG(ARG1)) C C* DATA STATEMENTS. C ---- ----------- C C *NROWSUM* A LATITUDE-ROW COUNTER FOR THE CURRENT TIMESTEP. C IT ENSURES REPRODUCIBLE DIAGNOSTICS IF MULTI-TASKING C CAUSES ROWS TO BE PROCESSED IN AN ARBITRARY ORDER. C DATA NROWSUM / 0 / C C* PHYSICAL CONSTANTS. C -------- ---------- C C *ZBMTS* ADJUSTMENT TIMESCALE IN SECONDS FOR SHALLOW CONVECTION C *ZBMTD* ADJUSTMENT TIMESCALE IN SECONDS FOR DEEP CONVECTION. C *ZBMEF* DOWNDRAUGHT EFFICIENCY FOR DEEP CONVECTION. C *ZMINCP* MINIMUM CONVECTIVE AVAILABLE POTENTIAL ENERGY (CAPE) C FOR WHICH AN ADJUSTMENT PROCESS WILL BE PERFORMED. C *ZCTOPSL/S* THRESHOLD VALUE OF CLOUD TOP SIGMA FOR SHALLOW C CONVECTION FOR LAND/SEA. C *ZTCRIT* MARGIN OF STABILITY, WHICH DETERMINES WHETHER C SLIGHTLY STABLE LAYERS MAY OR MAY NOT SUPRESS C FURTHER ASCENT. C *ZGAMMA* CLOUD-TOP MIXING FRACTION USED FOR PARCEL ASCENT C TEMPERATURE PROFILE (ZGAMMA=0.0 FOR NO MIXING). C *ZMU* CLOUD-TOP MIXING FRACTION USED FOR PARCEL ASCENT C MOISTURE PROFILE (ZMU=0.0 FOR NO MIXING). C *ZETLAB* HYBRID COORD VALUE BELOW WHICH NEW PARCEL ASCENTS ARE C ATTEMPTED (SHOULD BE IN MID/UPPER TROPOSPHERE). C *IETLAB* MODEL LEVEL UP TO WHICH NEW PARCEL ASCENTS ARE BEGUN. C ZBMTS=CBMTS ZBMTD=CBMTD ZBMEF=CBMEF ZMINCP=-10./RD ZCTOPSL=0.725 ZCTOPSS=0.810 ZTCRIT=1.0 ZGAMMA=0.2 ZMU=0.0 ZETLAB=0.3 IETLAB=1 DO 11 JK=1,NLEV IF (CETA(JK).LT.ZETLAB) IETLAB=JK+1 11 CONTINUE C C* SECURITY PARAMETERS. C -------------------- C C *ZEPCOR* MINIMUM VALUE OF DENOMINATOR IN QSAT CALCULATION. C *ZEPQ* MINIMUM SPECIFIC HUMIDITY TO AVOID DIVERGENCE OF THE C SATURATION POINT CALCULATIONS. C *ZINICP* PRESET FOR MAX. CAPE, TO CAPTURE NEGATIVE VALUES. C *ZPWARN* PRESSURE (IN PA) BELOW WHICH IMPOSED TOP OF C CONVECTION IS TOO NEAR TROPOPAUSE. C ZEPCOR=1.E-10 ZEPQ=0.000002 ZINICP=-1.E10 ZPWARN=5000. C C* COMPUTATIONAL CONSTANTS. C ------------- ---------- C C *ZC1-ZC5* CONSTANTS FOR SATURATION POINT CALCULATIONS. C *ZC6* (RD/RV) USED FOR VAPOUR PRESSURE. C *ZC7* (1-RD/RV) USED FOR VAPOUR PRESSURE. C *INPSEC* PRINT FREQUENCY FOR CAPE DIAGNOSTICS. C *LOPRT* SWITCH FOR CAPE DIAGNOSTICS AT CURRENT STEP. C ZTMST=TWODT IF (NSTEP.EQ.NSTART) ZTMST=0.5*TWODT ZDIAGT=0.5*TWODT ZDIAGW=ZDIAGT/RHOH2O C ZCONS1=RD/CPD ZCONS2=ALV/CPD C ZC1=1./ZCONS1 ZC2=55. ZC3=2840. ZC4=3.5 ZC5=0.2 ZC6=0.622 ZC7=0.378 C INPSEC=43200 LOPRT=MOD(NSTEP*NINT(0.5*TWODT),INPSEC).EQ.0 C ZNLM=MAX(1,KLANDP) ZNSM=MAX(1,KSEAP) C C ------------------------------------------------------------------ C C* 1. ALLOCATE SPACE AND POSITION VARIABLES. C -------- ----- --- -------- ---------- C 100 CONTINUE C CALL ALLOCA(IZWORK,(9*NLEV+13)*NLON,'BMADJ',99) C IZTP1 = IZWORK IZQP1 = IZWORK + NLON*NLEV IZDPP1 = IZWORK + NLON*NLEV*2 IZDPKPK = IZWORK + NLON*NLEV*3 IZTC = IZWORK + NLON*NLEV*4 IZQC = IZWORK + NLON*NLEV*5 IZDT = IZWORK + NLON*NLEV*6 IZDQ = IZWORK + NLON*NLEV*7 IILAB = IZWORK + NLON*NLEV*8 IZWK1 = IZWORK + NLON*NLEV*9 C ILOC = IZWK1 ILSWAP = IZWK1 + NLON IIQCD = IZWK1 + NLON*2 IITEST = IZWK1 + NLON*3 IILIFT = IZWK1 + NLON*4 IIBASE = IZWK1 + NLON*5 IITOP = IZWK1 + NLON*6 IISHTOP = IZWK1 + NLON*7 IIDX = IZWK1 + NLON*8 IZTCB = IZWK1 + NLON*9 IZSGTP = IZWK1 + NLON*10 IZCAPE = IZWK1 + NLON*11 IZSC = IZWK1 + NLON*12 C C ------------------------------------------------------------------ C C* 2. PRELIMINARY COMPUTATIONS. C ----------- ------------- C 200 CONTINUE C C C* 2.1 T, Q, DELTA-P AT TIME LEVEL T+1. C PRESET TEST FLAG AND TENDENCIES. C 210 CONTINUE C DO 212 JK=1,NLEV DO 211 JL=1,NLON ZTP1(JL,JK)=TM1(JL,JK)+ZTMST*TE(JL,JK) ZQP1(JL,JK)=QM1(JL,JK)+ZTMST*QE(JL,JK) ZDPP1(JL,JK)=APHP1(JL,JK+1)-APHP1(JL,JK) ILAB(JL,JK)=0 ZDT(JL,JK)=0. ZDQ(JL,JK)=0. 211 CONTINUE 212 CONTINUE C C* 2.2 CHECK THAT ANY IMPOSED TOP LEVEL DOES NOT EXTEND C DOWN TOO NEAR THE TROPOPAUSE. C 220 CONTINUE C IF (NEADJTOP.GT.1) THEN ZPMAX=0. DO 221 JL=1,NLON ZPMAX=MAX(ZPMAX,APP1(JL,NEADJTOP)) 221 CONTINUE IF (ZPMAX.GT.ZPWARN) THEN PRINT *,' *** WARNING : ATTEMPT TO SWITCH OFF BMADJ' * ,' DOWN TO ',ZPMAX/100.,'HPA AT STEP ',NSTEP * ,', ROW ',KROW ENDIF ENDIF C C ---------------------------------------------------------------- C C* 3. CLOUD ASCENT AND FLAGGING. C ----- ------ --- --------- C 300 CONTINUE C PRESET HIGHEST LEVEL IN ROW REACHED BY CONVECTION. C IHITOP=NLEVM1 C C* 3.1 INITIALIZE PARCEL PROPERTIES AND CLOUD INDICES. C 310 CONTINUE C DO 311 JL=1,NLON ZTC(JL,NLEV)=ZTP1(JL,NLEV) ZQC(JL,NLEV)=ZQP1(JL,NLEV) IBASE(JL)=NLEV ITOP(JL)=NLEV ISHTOP(JL)=1 ILIFT(JL)=1 311 CONTINUE C C *ILAB*=1 INDICATES THAT A NEW PARCEL CAN BE STARTED. C *ISHTOP* INDICATES THE IMPOSED SHALLOW CONVECTIVE TOP. C DO 313 JK=IETLAB,NLEV DO 312 JL=1,NLON ILAB(JL,JK)=1 IF (APP1(JL,JK).LT.(ZCTOPSL*APHP1(JL,NLEVP1))) ISHTOP(JL)=JK+1 312 CONTINUE 313 CONTINUE C C* 3.2 START LOOP OVER LEVELS FOR PARCEL ASCENTS. C 320 CONTINUE C DO 341 JK=NLEVM1,1,-1 C C EXTRACT PARCEL-BASE TEMPERATURE FOR VECTORISATION. C DO 321 JL=1,NLON ZTCB(JL)=ZTC(JL,IBASE(JL)) ZDPKPK(JL,JK)=XLG((APP1(JL,JK)/APP1(JL,JK+1)),ZCONS1) 321 CONTINUE C C* 3.3 PARCEL CALCULATIONS AT CURRENT LEVEL, SET FLAGS. C 330 CONTINUE C ISUM=0 DO 331 JL=1,NLON C C LIFT PARCEL UP A DRY ADIABAT. C *ZMU* IS A MOISTURE MIXING FRACTION FROM CLOUD-TOP C ENTRAINMENT. C ZTC(JL,JK)=ZTC(JL,JK+1)*ZDPKPK(JL,JK) ZQC(JL,JK)=ZQC(JL,JK+1)*(1.-ZMU)+ZQP1(JL,JK)*ZMU C C SUPERSATURATION AND CORRECTION FOR MOIST ADIABAT. C ZQSATC=C2ES*EXP(C3LES*(ZTC(JL,JK)-TMELT)* * (1./(ZTC(JL,JK)-C4LES)))/APP1(JL,JK) ZCOR=1./MAX(ZEPCOR,ABS(1.-VTMPC1*ZQSATC)) ZQSATC=ZQSATC*ZCOR ZQCD=MAX(0.,(ZQC(JL,JK)-ZQSATC)/(1.+C5LES*ZCONS2*ZQSATC*ZCOR* * (1./(ZTC(JL,JK)-C4LES))**2)) IF (ZQCD.EQ.0.) THEN IQCD(JL)=0 ELSE IQCD(JL)=1 ZTC(JL,JK)=ZTC(JL,JK)+ZCONS2*ZQCD ZQC(JL,JK)=ZQC(JL,JK)-ZQCD C C SECOND ITERATION FOR MOIST ADIABAT. C ZQSATC=C2ES*EXP(C3LES*(ZTC(JL,JK)-TMELT)* * (1./(ZTC(JL,JK)-C4LES)))/APP1(JL,JK) ZCOR=1./MAX(ZEPCOR,(1.-VTMPC1*ZQSATC)) ZQSATC=ZQSATC*ZCOR ZQCD=(ZQC(JL,JK)-ZQSATC)/(1.+C5LES*ZCONS2*ZQSATC*ZCOR* * (1./(ZTC(JL,JK)-C4LES))**2) ZTC(JL,JK)=ZTC(JL,JK)+ZCONS2*ZQCD ZQC(JL,JK)=ZQC(JL,JK)-ZQCD ENDIF C C PARCEL TEMPERATURE FOR BUOYANCY. C *ZGAMMA* IS A MIXING FRACTION FROM CLOUD-TOP C ENTRAINMENT. C ZZQ=MAX(ZEPQ,ZQP1(JL,JK)) ZP1=ZZQ*APP1(JL,JK)/(ZC6+ZC7*ZZQ) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZTP1(JL,JK))-ALOG(ZP1)-ZC5) ZZSP=APP1(JL,JK)*XLG((ZTSP/ZTP1(JL,JK)),ZC1) ZRATDP=(APP1(JL,NLEV)-ZZSP)/(APP1(JL,NLEV)-APP1(JL,JK)) ZAPP1=APP1(JL,IBASE(JL)) ZTCLD=ZTC(JL,JK)*(1.0-ZGAMMA*ZRATDP)+ZGAMMA*(ZTP1(JL,JK)+ * ZTCB(JL)*XLG((APP1(JL,JK)/ZAPP1),ZCONS1)* * (ZRATDP-1.0)) C C BUOYANCY CONSIDERATION - SET FLAGS. C *LOVS* ACCOUNTS FOR MARGINAL STABILITY. C *ILAB* = 2 DRY: UNSTABLE OR MARGINALLY STABLE. C *ILAB* = 3 MOIST: UNSTABLE, OR MARGINALLY STABLE C NEAR CLOUD-BASE. C LOVS=(ZTP1(JL,JK)-ZTCLD).GT.ZTCRIT LOIS=(ZTP1(JL,JK)-ZTCLD).LT.0. LOC(JL)=IQCD(JL).NE.0 LO2=.NOT.(LOC(JL).OR.LOVS) LO3=LOC(JL).AND.(LOIS.OR.(.NOT.(LOVS.OR.(JK.LT.(IBASE(JL)-2))))) C IF (LO2) ILAB(JL,JK)=2 IF (LO3) THEN ILAB(JL,JK)=3 ITOP(JL)=JK ELSE IBASE(JL)=IBASE(JL)-1 ENDIF C C IF LIFT FROM BELOW IS NOT BUOYANT, RESET PARCEL TO C ENVIRONMENT FOR POSSIBLE NEW ASCENT. C IF (ILAB(JL,JK).EQ.1) THEN ZTC(JL,JK)=ZTP1(JL,JK) ZQC(JL,JK)=ZQP1(JL,JK) ENDIF C C AVOID ATTEMPT FOR NEW LIFT IF ABOVE MIDTROPOSPHERE C OR ABOVE LOWER CLOUD. C LO= (ILAB(JL,JK).EQ.0).OR. * ((ILAB(JL,JK).EQ.1).AND.(ITOP(JL).LT.NLEV)) IF (LO) THEN ZTC(JL,JK)=150. ZQC(JL,JK)=0. ENDIF C ISUM=ISUM+ILAB(JL,JK) 331 CONTINUE C C END ASCENT IF NO CONVECTING OR NEW START POINTS. C *IHITOP* FLAGS DEEPEST ACTUAL MOIST CONVECTION C OR POSSIBLE LIFT POINT. C IF (ISUM.EQ.0) GO TO 342 IHITOP=JK C C* 3.4 END OF VERTICAL LOOP. C CHECK THAT ALL ASCENTS ARE COMPLETED BY TOP LEVEL. C RESTRICT HIGHEST PARCEL TOP IF ABOVE IMPOSED TOP. C 340 CONTINUE C 341 CONTINUE C 342 CONTINUE C IF (IHITOP.LT.NEADJTOP) THEN PRINT *,' *** WARNING : CONVECTION EXTENDS ABOVE IMPOSED TOP' * ,' TO LEVEL ',IHITOP,' AT STEP ',NSTEP,', ROW ',KROW PRINT *,' : BUT IS LIMITED TO IMPOSED TOP LEVEL ' * ,NEADJTOP DO 343 JL=1,NLON ITOP(JL)=MAX(ITOP(JL),NEADJTOP) 343 CONTINUE ELSE IF (IHITOP.EQ.1) THEN PRINT *,' *** WARNING : CONVECTION REACHES TOP MODEL' * ,' LEVEL ',JK,' AT STEP ',NSTEP,', ROW ',KROW ENDIF C C* 3.5 SET INDECES FLAGGING CLOUD LAYERS AND DIAGNOSE CAPES. C *ITOP* ALREADY INDICATES THE TOP IN-CLOUD LEVEL. C *IHITOP* IS RESET TO THE HIGHEST CLOUD TOP IN ROW. C *IBASE* INDICATES THE TOP OF THE SUB-CLOUD LAYER. C *ILIFT* INDICATES THE START OF THE PARCEL ASCENT. C 350 CONTINUE C IHITOP=NLEV DO 351 JL=1,NLON ZCAPE(JL)=0. IBASE(JL)=1 IIT=ITOP(JL) ZSGTP(JL)=APP1(JL,IIT)/APHP1(JL,NLEVP1) IHITOP=MIN(IHITOP,IIT) 351 CONTINUE C DO 354 JK=IHITOP,NLEV DO 352 JL=1,NLON LO3=ILAB(JL,JK).EQ.3 IF (LO3) IBASE(JL)=JK+1 IF (LO3.OR.(JK.EQ.IBASE(JL))) THEN ZCAPE(JL)=ZCAPE(JL)+ * (ZTC(JL,JK)-ZTP1(JL,JK))*ZDPP1(JL,JK)/APP1(JL,JK) ENDIF 352 CONTINUE IF (JK.GE.MAX(2,IETLAB)) THEN DO 353 JL=1,NLON LO=(ILAB(JL,JK-1).GT.1).AND.(ILAB(JL,JK).EQ.1) * .AND.(ILIFT(JL).EQ.1) IF (LO) ILIFT(JL)=JK 353 CONTINUE ENDIF 354 CONTINUE C C AVOID COUNTING SHALLOW LAYERS IN BOUNDARY LAYER. C ALLOW FOR SMALL NEGATIVE CAPE FROM OVERSHOOTS. C DO 355 JL=1,NLON IF (ZCAPE(JL).LT.ZMINCP.OR.ITOP(JL).GE.NLEVM1) ZCAPE(JL)=0. 355 CONTINUE C C ------------------------------------------------------------------ C C* 4. DEEP ADJUSTMENT PROCESS. C ---- ---------- -------- C 400 CONTINUE C C* 4.1 SAMPLE DEEP CONVECTIVE POINTS (LOC, ITEST=1). C 410 CONTINUE C DO 411 JL=1,NLON IF (LPLAND(JL)) THEN ZCTOPS=ZCTOPSL ELSE ZCTOPS=ZCTOPSS ENDIF LOC(JL)=.NOT.( (ZSGTP(JL).GE.ZCTOPS).OR.(ZCAPE(JL).EQ.0.) * .OR.((ILIFT(JL)-1).EQ.ITOP(JL)) ) IF (LOC(JL)) THEN ITEST(JL)=1 ELSE ITEST(JL)=0 ENDIF 411 CONTINUE C C FIND NUMBER OF DEEP CONVECTIVE POINTS AND C FORM ARRAY OF INDECES (IDX) FOR GATHERS IN BMDEEP. C PRESET OTHER COUNTERS. C CALL WHENEQ(NLON,ITEST,1,1,IDX,NDEEP) NLDEEP=0 NSDEEP=0 ISWAP=0 C IF (NDEEP.EQ.0) GOTO 500 C C* 4.2 PREFORM DEEP CONVECTIVE ADJUSTMENT. C 420 CONTINUE C CALL BMDEEP( * NDEEP, ZBMTD, ZBMEF, IDX * ,NLON, NLP2, NLEV, NLEVM1, CETAH * ,ALS, ALV, CPD, G, RD, TMELT * ,VTMPC1, VTMPC2 * ,C2ES, C3IES, C3LES, C4IES, C4LES, C5LES * ,APP1, TSM1M, RSFC, SSFC * ,ZDPP1, ZDPKPK, ZTP1, ZQP1 * ,ZTC, ZQC, ZDT, ZDQ * ,IBASE, ITOP, ILIFT * ) C C* 4.3 RESET NEGATIVE PRECIPITATION AND CORRESPONDING C TENDENCIES. FLAG SUCH POINTS AS "SWAPPED" FOR C POSSIBLE SHALLOW CONVECTION. C 430 CONTINUE C DO 431 JL=1,NLON LOSWAP(JL)=(SSFC(JL)+RSFC(JL)).LT.0. IF (LOSWAP(JL)) THEN ISWAP=ISWAP+1 LOC(JL)=.FALSE. ITEST(JL)=-1 SSFC(JL)=0. RSFC(JL)=0. ELSE NLDEEP=NLDEEP+ITEST(JL)*NINT(SLMM(JL)) ENDIF 431 CONTINUE NDEEP=NDEEP-ISWAP NSDEEP=NDEEP-NLDEEP C DO 433 JK=IHITOP,NLEV DO 432 JL=1,NLON IF (LOSWAP(JL)) THEN ZDT(JL,JK)=0. ZDQ(JL,JK)=0. ENDIF 432 CONTINUE 433 CONTINUE C C* 4.4 STORE TENDENCIES FOR DEEP CONVECTION POINTS ONLY. C 440 CONTINUE C DO 442 JK=IHITOP,NLEV DO 441 JL=1,NLON IF (LOC(JL)) THEN TE(JL,JK)=TE(JL,JK)+ZDT(JL,JK) QE(JL,JK)=QE(JL,JK)+ZDQ(JL,JK) ENDIF 441 CONTINUE 442 CONTINUE C C* 4.5 DEEP CONVECTION PARAMETERS FOR CLOUD SCHEME. C 450 CONTINUE C IF (LPRAD) THEN ZNORMR=1./FLOAT(NRADFR-1) DO 451 JL=1,NLON ZRPRC=RSFC(JL)+SSFC(JL) IF (ZRPRC.GT.0.0) THEN ARPRC(JL)=ARPRC(JL)+ZRPRC*ZNORMR LOA=(IBASE(JL)-1).GT.NBASEC(JL) LOB=((NTOPC(JL).EQ.1).OR.(ITOP(JL).LT.NTOPC(JL))) IF (LOA) NBASEC(JL)=IBASE(JL)-1 IF (LOB) NTOPC(JL)=ITOP(JL) ENDIF 451 CONTINUE ENDIF C C* 4.6 ZONAL MEAN DIAGNOSTICS FOR DEEP CONVECTION. C 460 CONTINUE C IF (LPZLS) THEN DO 462 JK=IHITOP,NLEV ZDTCUML=0.0 ZDTCUMS=0.0 ZDQCUMS=0.0 ZDQCUML=0.0 DO 461 JL=1,NLON ZDTCUML=ZDTCUML+ZDT(JL,JK)*SLMM(JL)/ZNLM ZDTCUMS=ZDTCUMS+ZDT(JL,JK)*(1.-SLMM(JL))/ZNSM ZDQCUML=ZDQCUML+ZDQ(JL,JK)*SLMM(JL)/ZNLM ZDQCUMS=ZDQCUMS+ZDQ(JL,JK)*(1.-SLMM(JL))/ZNSM 461 CONTINUE AZDIA(JK,NDTCUML)=AZDIA(JK,NDTCUML)+ZDTCUML AZDIA(JK,NDTCUMS)=AZDIA(JK,NDTCUMS)+ZDTCUMS AZDIA(JK,NDQCUML)=AZDIA(JK,NDQCUML)+ZDQCUML AZDIA(JK,NDQCUMS)=AZDIA(JK,NDQCUMS)+ZDQCUMS 462 CONTINUE ENDIF C C ------------------------------------------------------------------ C C* 5. SHALLOW CONVECTION PROCESS. C ------- ---------- -------- C 500 CONTINUE C C* 5.1 SAMPLE SHALLOW CONVECTIVE POINTS (LOC, ITEST=2). C SWAPPED POINTS HAVE TOP SET TO IMPOSED MAXIMUM. C PRESET CONDENSATION RATE. C 510 CONTINUE C IHSTOP=NLEV DO 511 JL=1,NLON ZSC(JL)=0. LOC(JL)=.NOT.( (ZCAPE(JL).EQ.0.).OR.((RSFC(JL)+SSFC(JL)).GT.0.) * .OR.(IBASE(JL).LE.ISHTOP(JL)) ) IF (LOC(JL)) THEN ITEST(JL)=2 ITOP(JL)=MAX(ITOP(JL),ISHTOP(JL)) IHSTOP=MIN(IHSTOP,ITOP(JL)) ENDIF 511 CONTINUE C CHECK HIGHEST LEVEL OF SHALLOW CONVECTIVE TENDENCIES C (WHICH INCLUDES A LEVEL ABOVE CLOUD TOP) AGAINST THE C IMPOSED TOP. IN THE UNLIKELY EVENT THAT THE IMPOSED C TOP IS PASSED, RESTRICT TENDENCIES TO IMPOSED TOP. C IF (IHSTOP.LT.NEADJTOP+1) THEN PRINT *,' *** WARNING : SHALLOW CONVECTIVE TENDENCIES EXTEND' * ,' ABOVE IMPOSED TOP TO LEVEL ',IHSTOP-1 * ,' AT STEP ',NSTEP,', ROW ',KROW PRINT *,' : BUT ARE LIMITED TO IMPOSED TOP LEVEL' * ,NEADJTOP DO 512 JL=1,NLON IF (LOC(JL)) ITOP(JL)=MAX(ITOP(JL),NEADJTOP+1) 512 CONTINUE ENDIF C C FIND NUMBER OF SHALLOW CONVECTIVE POINTS. C FORM ARRAY OF INDECES (IDX) FOR GATHERS IN BMSHAL. C PRESET OTHER COUNTERS. C CALL WHENEQ(NLON,ITEST,1,2,IDX,NSHAL) NLSHAL=0 NSSHAL=0 C IF (NSHAL.EQ.0) GOTO 600 C C* 5.2 PERFORM SHALLOW CONVECTIVE ADJUSTMENT. C 520 CONTINUE C CALL BMSHAL( * NSHAL, ZBMTS, IDX * ,NLON, NLP2, NLEV, NLEVM1, NLEVP1 * ,CPD, G, RD, TMELT * ,C2ES, C3LES, C4LES * ,APP1, APHP1 * ,ZTP1, ZQP1 * ,ZDT, ZDQ, ZSC * ,IBASE, ITOP * ,IHCTOP, ILOBAS * ) C C* 5.3 DIAGNOSE NUMBERS OF CONVECTING POINTS IN ROW. C 530 CONTINUE C DO 531 JL=1,NLON IF (LOC(JL)) NLSHAL=NLSHAL+NINT(SLMM(JL)) 531 CONTINUE NSSHAL=NSHAL-NLSHAL C C* 5.4 STORE TENDENCIES FOR SHALLOW CONVECTION POINTS ONLY. C 540 CONTINUE C DO 542 JK=IHCTOP,ILOBAS DO 541 JL=1,NLON IF (LOC(JL)) THEN TE(JL,JK)=TE(JL,JK)+ZDT(JL,JK) QE(JL,JK)=QE(JL,JK)+ZDQ(JL,JK) ENDIF 541 CONTINUE 542 CONTINUE C C* 5.5 SHALLOW CONVECTION PARAMETERS FOR CLOUD SCHEME. C 550 CONTINUE C IF (LPRAD) THEN ZNORMR=1./FLOAT(NRADFR-1) DO 551 JL=1,NLON ZRPRC=ZSC(JL) IF (ZRPRC.GT.0.0) THEN ARPRC(JL)=ARPRC(JL)+ZRPRC*ZNORMR LOA=(IBASE(JL)-1).GT.NBASEC(JL) LOB=((NTOPC(JL).EQ.1).OR.(ITOP(JL).LT.NTOPC(JL))) IF (LOA) NBASEC(JL)=IBASE(JL)-1 IF (LOB) NTOPC(JL)=ITOP(JL) ENDIF 551 CONTINUE ENDIF C C* 5.6 ZONAL MEAN DIAGNOSTICS FOR SHALLOW CONVECTION. C 560 CONTINUE C IF (LPZLS) THEN DO 562 JK=IHCTOP,ILOBAS ZDTSCVL=0. ZDTSCVS=0. ZDQSCVL=0. ZDQSCVS=0. DO 561 JL=1,NLON IF (LOC(JL)) THEN ZDTSCVL=ZDTSCVL+ZDT(JL,JK)*SLMM(JL)/ZNLM ZDTSCVS=ZDTSCVS+ZDT(JL,JK)*(1.-SLMM(JL))/ZNSM ZDQSCVL=ZDQSCVL+ZDQ(JL,JK)*SLMM(JL)/ZNLM ZDQSCVS=ZDQSCVS+ZDQ(JL,JK)*(1.-SLMM(JL))/ZNSM ENDIF 561 CONTINUE AZDIA(JK,NDTSCVL)=AZDIA(JK,NDTSCVL)+ZDTSCVL AZDIA(JK,NDTSCVS)=AZDIA(JK,NDTSCVS)+ZDTSCVS AZDIA(JK,NDQSCVL)=AZDIA(JK,NDQSCVL)+ZDQSCVL AZDIA(JK,NDQSCVS)=AZDIA(JK,NDQSCVS)+ZDQSCVS 562 CONTINUE ENDIF C C ------------------------------------------------------------------ C C* 6. STORE PRECIPITATION AND COMPUTE DIAGNOSTICS. C ----- ------------- --- ------- ------------ C 600 CONTINUE C ZSIG1=0. ZSIG2=0. IF (NDEEP.GT.0) THEN DO 601 JL=1,NLON APRC(JL)=APRC(JL)+ZDIAGW*(RSFC(JL)+SSFC(JL)) APRS(JL)=APRS(JL)+ZDIAGW*SSFC(JL) ZSIG1=ZSIG1+RSFC(JL) ZSIG2=ZSIG2+SSFC(JL) 601 CONTINUE ENDIF C C GLOBAL DIAGNOSTICS. C *DCVGR* IS THE RAINFALL GENERATION. C *DCVGS* IS THE SNOWFALL GENERATION. C *DCVMOI* IS THE ENVIRONMENTAL MOISTENING, JUST THE C NEGATIVE OF THE PRECIPITATION. C EVAPORATION / MELTING RATES ARE NOT RETURNED BY C *BMDEEP*, SO THE GENERATION TERMS ARE OBTAINED FROM C THE SURFACE PRECIPITATION TERMS. C CALL ONLOCK(NLOCKS(22)) C DCVGR =DCVGR +ZDIAGW*PBUDW*ZSIG1 DCVGS =DCVGS +ZDIAGW*PBUDW*ZSIG2 DCVMOI=DCVMOI+ZDIAGW*PBUDW*(-ZSIG1-ZSIG2) C CALL OFFLOCK(NLOCKS(22)) C C MASK DIAGNOSTICS (TOTAL CONVECTIVE TERMS). C IF (LPMASK) THEN CALL ONLOCK(NLOCKS(38)) DO 602 JK=IHITOP,NLEV CALL MASKDIA(NDTCUM,ZDT(1,JK),JK) CALL MASKDIA(NDQCUM,ZDQ(1,JK),JK) 602 CONTINUE CALL OFFLOCK(NLOCKS(38)) END IF C C* 6.1 COMPUTE CAPE STATISTICS FOR CURRENT LATITUDE ROW. C 610 CONTINUE C IF (LOPRT) THEN C ZMCAPE=0. ZMLCAPE=0. ZMFCAPE=0. INTOT=0 INLAND=0 INFAIL=0 ZMXCAPE=ZINICP IMXCAPE=-1 C DO 611 JL=1,NLON IF (ZCAPE(JL).NE.0.) THEN ZMCAPE=ZMCAPE+ZCAPE(JL) INTOT=INTOT+1 ZMLCAPE=ZMLCAPE+ZCAPE(JL)*SLMM(JL) INLAND=INLAND+NINT(SLMM(JL)) IF (ITEST(JL).LE.0) THEN ZMFCAPE=ZMFCAPE+ZCAPE(JL) INFAIL=INFAIL+1 ENDIF ENDIF IF (ZCAPE(JL).GT.ZMXCAPE) THEN ZMXCAPE=ZCAPE(JL) IMXCAPE=JL ENDIF 611 CONTINUE ZMSCAPE=ZMCAPE-ZMLCAPE INSEA=INTOT-INLAND C IF (INTOT.GT.0) THEN ZNCAPE=ZMCAPE*RD/FLOAT(INTOT) ELSE ZNCAPE=0. ENDIF IF (INLAND.GT.0) THEN ZNLCAPE=ZMLCAPE*RD/FLOAT(INLAND) ELSE ZNLCAPE=0. ENDIF IF (INSEA.GT.0) THEN ZNSCAPE=ZMSCAPE*RD/FLOAT(INSEA) ELSE ZNSCAPE=0. ENDIF IF (INFAIL.GT.0) THEN ZNFCAPE=ZMFCAPE*RD/FLOAT(INFAIL) ELSE ZNFCAPE=0. ENDIF ZNXCAPE=ZMXCAPE*RD ZLAT=180.*ASIN(0.5*PTWOMU)/API C NCONV=NSHAL+NDEEP NLCONV=NLDEEP+NLSHAL NSCONV=NSDEEP+NSSHAL C C* 6.2 COMPUTE GLOBAL CONVECTIVE STATISTICS. C USE LOCKS AND INDEPENDENT LATITUDE COUNTER C FOR REPRODUCIBLE RESULTS WHEN MULTI-TASKING. C 620 CONTINUE C CALL ONLOCK(NLOCKS(12)) C NROWSUM=NROWSUM+1 C IF (NROWSUM.EQ.1) THEN PRINT 9001,NSTEP GCAPE=0. NGTOT=0 NGCONV=0 NGDEEP=0 NGSHAL=0 NGSWAP=0 NGFAIL=0 ENDIF C NGTOT =NGTOT +INTOT NGCONV=NGCONV+NCONV NGDEEP=NGDEEP+NDEEP NGSHAL=NGSHAL+NSHAL NGSWAP=NGSWAP+ISWAP NGFAIL=NGFAIL+INFAIL GCAPE=GCAPE+ZMCAPE*RD C PRINT 9002,ZLAT,ZNCAPE,ZNLCAPE,ZNSCAPE,ZNXCAPE,IMXCAPE P ,NCONV,NLCONV,NSCONV,NDEEP,NSHAL,ISWAP P ,INFAIL,ZNFCAPE C IF (NROWSUM.EQ.NGL) THEN PRINT 9003 PRINT 9004,NGCONV,NGDEEP,NGSHAL,NGSWAP,NGFAIL,GCAPE/NGTOT NROWSUM=0 ENDIF C CALL OFFLOCK(NLOCKS(12)) C ENDIF C C ------------------------------------------------------------------ C C* 7. RETURN WORKSPACE. C ------ ---------- C 700 CONTINUE C CALL UNLOC('BMADJ',99) C C ------------------------------------------------------------------ C C* 8. FORMAT STATEMENTS. C ------ ----------- C 800 CONTINUE C 9001 FORMAT (/,1X,'CONVECTIVE ACTIVITY STATISTICS AT STEP ',I5,/, * 4X,'LATITUDE ZONAL MEAN CAPES',12X,'MAX CAPE', * 4X,'NUMBER OF CONVECTIVE POINTS',/, * 60X,'-------- SUCCESSFUL -------- ---- FAIL -----',//, * 16X,'TOTAL LAND SEA VALUE INDEX', * 2X,'TOTAL LAND SEA DEEP SHALL SWAP TOTAL MEAN CAPE',/) 9002 FORMAT (1X,5F10.3,8I6,F10.3) 9003 FORMAT (/,8X,17('*'),' GLOBAL CONVECTION STATISTICS ',17('*'),/, * 8X,' NUMBER OF CONVECTIVE POINTS FAIL', * 10X,'GLOBAL MEAN CAPE',/, * 8X,'TOTAL DEEP SHALLOW SWAP POINTS',/) 9004 FORMAT (8X,5(I5,3X),8X,F12.3,/) RETURN END */ */ ************************************************************** BMDEEP */ *DECK BMDEEP SUBROUTINE BMDEEP( * NDEEP, CBMTD, CBMEF, KDX * ,NLON, NLP2, NLEV, NLEVM1, CETAH * ,ALS, ALV, CPD, G, RD, TMELT * ,VTMPC1, VTMPC2 * ,C2ES, C3IES, C3LES, C4IES, C4LES, C5LES * ,APP1, TSM1M, RSFC, SSFC * ,PDPP1, PDPKPK, PTP1, PQP1 * ,PTC, PQC, PDT, PDQ * ,KBASE, KTOP, KLIFT * ) C C**** *BMDEEP* - PERFORMS SATURATION POINT ADJUSTMENT C FOR DEEP CONVECTION. C C ORIGINAL VERSION B.RITTER E.C.M.W.F. 31/10/84. C MODIFIED M.J.MILLER E.C.M.W.F. 22/07/91. C IMPLEMENTED & TUNED IN UGCM1 J.M.SLINGO U.G.A.M.P. 12/91. C IMPLEMENTED IN UGCM2 M.BLACKBURN U.G.A.M.P. 13/05/94. C C PURPOSE. C -------- C C THIS ROUTINE ADJUSTS THE TEMPERATURE AND SPECIFIC HUMIDITY C PROFILES OF DEEP CONVECTIVE POINTS TOWARDS AN INTERNALLY SPECIFIED C REFERENCE PROFILE. C C** INTERFACE. C ---------- C C *BMDEEP* IS CALLED FROM *BMADJ*. C THE ROUTINE IS ARGUMENT DRIVEN, TAKING ITS INPUT ENTIRELY C FROM THE VARIABLES AND ARRAYS SUPPLIED IN THE ARGUMENT LIST. C FOR VECTORISATION, THE INPUT IS GATHERED IN TEMPORARY ARRAYS OF C LENGTH *NDEEP* (THE NUMBER OF GRIDPOINTS WITH DEEP CONVECTION C ON A LATITUDE ROW) USING INDEX ARRAY *KDX*. THE ROUTINE RETURNS C ITS OUTPUT AS ARGUMENTS, HAVING SCATTERED TO THE FULL GRID. C *IF DEF,DOC C --------------------------------------------------------------------- C C INPUT ARGUMENTS: C C *NDEEP* NUMBER OF GRIDPOINTS WITH DEEP CONVECTION IN ROW. C *CBMTD* ADJUSTMENT TIMESCALE IN SECONDS FOR DEEP CONVECTION. C *CBMEF* DOWNDRAUGHT EFFICIENCY FOR DEEP CONVECTION. C *KDX* INDEX OF CONVECT. POINTS ON FULL GRID, DIMENSION (NLON). C *NLON* NUMBER OF LONGITUDES. C *NLP2* (NLON+2). C *NLEV* NUMBER OF LEVELS. C *NLEVM1* (NLEV-1). C *CETAH* HYBRID COORDINATE AT HALF LEVELS, DIMENSION (NLEV+1). C *ALS* LATENT HEAT FOR SUBLIMATION. C *ALV* LATENT HEAT FOR VAPORISATION. C *CPD* SPECIFIC HEAT AT CONSTANT PRESSURE FOR DRY AIR. C *G* GRAVITATIONAL ACCELERATION. C *RD* GAS CONSTANT FOR DRY AIR. C *TMELT* TEMPERATURE OF FUSION OF ICE. C *VTMPC1* CONSTANT FOR VIRTUAL EFFECTS, (RV/RD-1). C *VTMPC2* CONSTANT FOR VIRTUAL EFFECTS, (CPV/CPD-1). c *C__ES* CONSTANTS USED FOR COMPUTATION OF SATURATION SPECIFIC C HUMIDITY OVER LIQUID WATER (*C_LES*) OR ICE (*C_IES*). C *C2ES* (RD/RV)*(SVP AT REFERENCE TEMPERATURE C4_ES). C *C3_ES* CONSTANT FOR SVP. C *C4_ES* REFERENCE TEMPERATURE FOR SVP. C *C5_ES* (C3_ES*(TMELT-C4_ES)). C *APP1* FULL LEVEL PRESSURE, DIMENSION (NLP2,NLEV). C *TSM1M* (T-1) SURFACE TEMPERATURE, DIMENSION (NLP2). C *PDPP1* LAYER THICKNESS (DELTA-P), DIMENSION (NLON,NLEV). C *PDPKPK* (P(K)/P(K+1))**(RD/CPD), DIMENSION (NLON,NLEV). C *PTP1* PRELIMINARY (T+1) TEMPERATURE, DIMENSION (NLON,NLEV). C *PQP1* PRELIMINARY (T+1) SPECIFIC HUMID, DIMENSION (NLON,NLEV). C *PTC* PARCEL ASCENT TEMPERATURE, DIMENSION (NLON,NLEV). C *PQC* PARCEL ASCENT SPECIFIC HUMIDITY, DIMENSION (NLON,NLEV). C *KBASE* HIGHEST LEVEL IN SUB-CLOUD LAYER, DIMENSION (NLON). C *KTOP* HIGHEST LEVEL IN CLOUD LAYER, DIMENSION (NLON). C *KLIFT* LEVEL OF PARCEL ASCENT ORIGIN, DIMENSION (NLON). C C OUTPUT ARGUMENTS: C C *RSFC* SURFACE RAINFALL RATE, DIMENSION (NLP2). C *SSFC* SURFACE SNOWFALL RATE, DIMENSION (NLP2). C *PDT* TEMPERATURE TENDENCY, DIMENSION (NLON,NLEV). C *PDQ* SPECIFIC HUMIDITY TENDENCY, DIMENSION (NLON,NLEV). C C --------------------------------------------------------------------- *ENDIF C OUTPUT ARRAYS ARE ONLY ASSIGNED AT DEEP CONVECTING POINTS. C ALL ARRAY ELEMENTS SHOULD BE PRESET TO ZERO ON INPUT. C C METHOD. C ------- C C THE BASIC REFERENCE PROFILE IS CONSTRUCTED, BASED ON THE C MEAN OF THE ENVIRONMENT AND PARCEL TEMPERATURES AT THE FIRST C LEVEL ABOVE THE PLANETARY BOUNDARY LAYER. THE PBL IS ASSUMED C TO CONSIST OF THE LOWEST *NPBL* LEVELS, SPECIFIED IN THE CODE. C THE SLOPE OF THE REFERENCE TEMPERATURE PROFILE IS A PRESCRIBED C FRACTION OF THE MOIST ADIABAT (TO APPROXIMATE A VIRTUAL MOIST C ADIABAT) UP TO THE FREEZING LEVEL. ABOVE THIS IT RETURNS, AT C CLOUD TOP, TO THE MOIST ADIABAT FROM CLOUD BASE. THE REFERENCE C MOISTURE PROFILE IS LINEARLY INTERPOLATED BETWEEN PRESCRIBED C SUBSATURATION VALUES AT CLOUD BASE, FREEZING LEVEL AND CLOUD TOP. C THE BASIC REFERENCE PROFILE IS MODIFIED TO GUARANTEE ENERGY C CONSERVATION THROUGH THE ADJUSTMENT PROCESS. FINALLY, HEATING C RATES AND MOISTURE CHANGES ARE CALCULATED AS A RELAXATION TOWARDS C THE REFERENCE PROFILE. C MODIFICATION OF THE PBL BY DOWNDRAUGHTS HAS BEEN INCLUDED. C ****************************************************************** C * N.B. THE RELAXATION TIME *ZTAU* AND DOWNDRAUGHT EFFICIENCY * C * PARAMETER *ZALPHA* ARE RESOLUTION DEPENDENT. SEE COMMENTS * C * BELOW WHERE THESE PHYSICAL CONSTANTS ARE DEFINED. * C ****************************************************************** C * N.B. THE DOWNDRAUGHT MODIFICATION OF THE BOUNDARY LAYER USES * C * LEVEL-SPECIFIC CODE. SEE COMMENTS BELOW WHERE THE PHYSICAL * C * CONSTANT *NPBL* IS DEFINED. * C ****************************************************************** C C EXTERNALS. C ---------- C C *ABORT* CAUSE A FATAL ERROR CONDITION. C *ALLOCA* ALLOCATE ARRAY SPACE (MEMORY MANAGER ROUTINE). C *GATHER* GATHER SELECTED ARRAY ELEMENTS INTO A VECTOR. C (CRAY LIBRARY ROUTINE). C *SCATTER* SCATTER A VECTOR INTO SELECTED ARRAY ELEMENTS. C (CRAY LIBRARY ROUTINE). C *UNLOC* FREE ARRAY SPACE (MEMORY MANAGER ROUTINE). C C REFERENCES. C ----------- C C A BASIC DESCRIPTION OF THE METHOD CAN BE FOUND IN BETTS C (1986 : QJRMS 112, 677-691) AND BETTS & MILLER (1986 : QJRMS, C 112, 693-709). C A MORE DETAILED DESCRIPTION OF THE SCHEME IS CONTAINED IN C BETTS & MILLER (1994 : AMERICAN METEOROLOGICAL SOCIETY MONOGRAPH C ON CONVECTIVE PARAMETRIZATION). C IMPLEMENTATION OF THE SCHEME IN THE UGAMP GCM IS DESCRIBED C IN UGAMP TECHNICAL REPORT NO. 25 (SLINGO & BLACKBURN, 1992). C C SATURATION POINT CALCULATIONS FOLLOW BOLTON (1980, MON. WEA. C REV., 108, 1046-1053). SATURATION SPECIFIC HUMIDITY CALCULATIONS C USE THE TETENS FORMULA (LOWE, 1977, J.APPL.MET., 16, 100-103). C C ------------------------- LOGICAL LO,LOA,LOFR,LOLIM LOGICAL LOLIFT,LOMELT,LOC C ------------------------- C REAL CETAH (NLEV+1) C REAL * APP1 (NLP2,NLEV) * ,TSM1M (NLP2) * ,RSFC (NLP2) * ,SSFC (NLP2) * ,PDPP1 (NLON,NLEV) * ,PDPKPK(NLON,NLEV) * ,PTP1 (NLON,NLEV) * ,PQP1 (NLON,NLEV) * ,PTC (NLON,NLEV) * ,PQC (NLON,NLEV) * ,PDT (NLON,NLEV) * ,PDQ (NLON,NLEV) C INTEGER * KDX (NLON) * ,KBASE (NLON) * ,KTOP (NLON) * ,KLIFT (NLON) C POINTER(IZPP1D ,ZPP1D (NDEEP,NLEV)) * ,(IZDPD ,ZDPD (NDEEP,NLEV)) * ,(IZDPKD ,ZDPKD (NDEEP,NLEV)) * ,(IZTP1D ,ZTP1D (NDEEP,NLEV)) * ,(IZQP1D ,ZQP1D (NDEEP,NLEV)) * ,(IZTCD ,ZTCD (NDEEP,NLEV)) * ,(IZQCD ,ZQCD (NDEEP,NLEV)) * ,(IZTREF ,ZTREF (NDEEP,NLEV)) * ,(IZQREF ,ZQREF (NDEEP,NLEV)) * ,(IZSP ,ZSP (NDEEP,NLEV)) * ,(ILOC ,LOC (NDEEP,NLEV)) C C ARRAY *ZDTTOP* IS CURRENTLY SET BUT UNUSED. C POINTER(IZTSD ,ZTSD (NDEEP)) * ,(IITOPD ,ITOPD (NDEEP)) * ,(IIBASED,IBASED(NDEEP)) * ,(IILIFTD,ILIFTD(NDEEP)) * ,(IZRAIN ,ZRAIN (NDEEP)) * ,(IZSNOW ,ZSNOW (NDEEP)) * ,(IZDTD ,ZDTD (NDEEP)) * ,(IZDQD ,ZDQD (NDEEP)) * ,(IZPFR ,ZPFR (NDEEP)) * ,(IZPTOP ,ZPTOP (NDEEP)) * ,(IZDTFR ,ZDTFR (NDEEP)) * ,(IZDTTOP,ZDTTOP(NDEEP)) * ,(IZDHTOT,ZDHTOT(NDEEP)) * ,(IZDPTOT,ZDPTOT(NDEEP)) * ,(IZRINC ,ZRINC (NDEEP)) * ,(IZRTPBL,ZRTPBL(NDEEP)) * ,(IICOUNT,ICOUNT(NDEEP)) * ,(IIFREEZ,IFREEZ(NDEEP)) * ,(ILOLIFT,LOLIFT(NDEEP)) * ,(ILOMELT,LOMELT(NDEEP)) POINTER(IZALPH ,ZALPH (NDEEP)) * ,(IZEPBL ,ZEPBL (NDEEP)) * ,(IZFPBL ,ZFPBL (NDEEP)) * ,(IZLFGBL,ZLFGBL(NDEEP)) * ,(IZLV ,ZLV (NDEEP)) * ,(IZC3ES ,ZC3ES (NDEEP)) * ,(IZC4ES ,ZC4ES (NDEEP)) C XLG(ARG1,ARG2)=EXP(ARG2*ALOG(ARG1)) C C* PHYSICAL CONSTANTS. C -------- ---------- C C *ZTAU* ADJUSTMENT TIMESCALE IN SECONDS. C **************************************************** C * THE ADJUSTMENT TIMESCALE IS RESOLUTION DEPENDENT.* C * *ZTAU* MUST BE SUFFICIENTLY SMALL TO MAINTAIN * C * SUBSATURATION IN THE REGIONS OF STRONGEST ASCENT.* C * BOTH *ZTAU* AND DOWNDRAUGHT EFFICIENCY FACTOR * C * *ZALPHA* HAVE BEEN TESTED AND TUNED IN THE UGAMP * C * GCM ONLY AT HORIZONTAL RESOLUTIONS UP TO T42. * C * T21 T42 * C * *ZTAU* 14400 7200 * C * *ZALPHA* 0.15 0.15 * C **************************************************** C *ZALPHA* DOWNDRAUGHT EFFICIENCY PARAMETER. C *ZALPHS* FACTOR TO REDUCE DOWNDRAUGHT EVAPORATION EFFICIENCY C FOR SNOW. C *ZDSPLOW* SATURATION POINT DIFFERENCE FOR THE LOWEST LEVEL. C *ZDSPFR* SATURATION POINT DIFFERENCE FOR THE FREEZING LEVEL. C *ZDSPTOP* SATURATION POINT DIFFERENCE AT CLOUD TOP. C *ZDSPHI* SATURATION POINT DIFFERENCE FOR UPPER LEVEL LIFT. C *ZDSPEL* LIMIT FOR SATURATION POINT DIFFERENCE IN SUB-CLOUD C LAYER DUE TO EVAPORATION (HIGH-LIFT POINTS). C *ZSTAB* FRACTION OF MOIST ADIABAT SLOPE USED FOR REFERENCE C PROFILE. C *ZFLIM* LIMIT OF *ZF* IN DOWNDRAUGHT EVAPORATION CALCULATION. C *ZETPBL* HYBRID COORD VALUE AT THE TOP OF THE SPECIFIED C PLANETARY BOUNDARY LAYER (PBL). ALL LAYERS WITH C HALF-LEVEL ETA GREATER THAN THIS ARE DESIGNATED C PART OF THE PBL. C *NPBL* NUMBER OF LEVELS IN PLANETARY BOUNDARY LAYER, C USED FOR DOWNDRAUGHT CALCULATIONS. C ************************************************** C * THE DOWNDRAUGHT CALCS CONTAIN LEVEL-SPECIFIC * C * CODE WHICH REQUIRES *NPBL*=3. ALL OTHER VALUES* C * SWITCH OFF THE DOWNDRAUGHT PART OF THE SCHEME. * C * *NPBL* IS COMPUTED FROM *ZETPBL* TO CHECK THAT * C * THE IMPLIED CLOUD-BASE IS REASONABLE. * C * THE SCHEME HAS ONLY BEEN TUNED FOR *NPBL*=3. * C ************************************************** C *NUPBL* FIRST CLOUD LEVEL ABOVE SPECIFIED PBL. C *NDDLEV* DOWNDRAUGHT INFLOW LEVEL. C ZTAU = CBMTD ZALPHA=CBMEF ZALPHS=0.1 ZDSPLOW=-2500. ZDSPFR =-4000. ZDSPTOP=-2000. ZDSPHI =-4000. ZDSPEL =-2000. ZSTAB=0.85 ZFLIM=-0.5 ZETPBL=0.9 NPBL=0 DO 10 JK=NLEV,1,-1 IF (CETAH(JK).GT.ZETPBL) NPBL=NPBL+1 10 CONTINUE NLEVM2=NLEV-2 NLEVM3=NLEV-3 NUPBL=NLEV-NPBL NDDLEV=NUPBL-1 C IF (NPBL.NE.3) THEN PRINT *,' **************************************************' PRINT *,' * ABORT IN BETTS-MILLER DEEP CONVECTION ROUTINE. *' PRINT *,' * THE DOWNDRAUGHT CALCS CONTAIN LEVEL-SPECIFIC *' PRINT *,' * CODE WHICH REQUIRES *NPBL*=3. ALL OTHER VALUES*' PRINT *,' * SWITCH OFF THE DOWNDRAUGHT PART OF THE SCHEME. *' PRINT *,' * *NPBL* IS COMPUTED FROM *ZETPBL* TO CHECK THAT *' PRINT *,' * THE IMPLIED CLOUD-BASE IS REASONABLE. *' PRINT *,' * THE SCHEME HAS ONLY BEEN TUNED FOR *NPBL*=3. *' PRINT *,' **************************************************' PRINT *,' COMPUTED VALUE OF NPBL = ',NPBL CALL ABORT ENDIF C C* SECURITY PARAMETERS. C -------- ----------- C C *ZEPCOR* MINIMUM VALUE OF DENOMINATOR IN QSAT CALCULATION. C *ZEPQ* MINIMUM SPECIFIC HUMIDITY TO AVOID DIVERGENCE OF THE C SATURATION POINT CALCULATIONS. C *ZEPSEC* IS A SECURITY FOR THE FREEZING LEVEL PRESSURE TO BE C NOT EXACTLY IDENTICAL TO THE CLOUD TOP PRESSURE. C *ZEPSRN* ENSURES THAT ALL RAIN DOES NOT EVAPORATE UNDER HIGH C BASES. C *ZEPVAP* MINIMUM VALUE OF DOWNDRAUGHT EVAPORATION INTEGRAL C OVER THE PBL (PA.KG/KG). C ZEPCOR=1.E-10 ZEPQ=0.000002 ZEPSEC=0.01 ZEPSRN=1.E-9 ZEPVAP=0.01 C C* COMPUTATIONAL CONSTANTS. C ------------- ---------- C C *ZC1-ZC5* CONSTANTS FOR SATURATION POINT CALCULATIONS. C *ZC6* (RD/RV) USED FOR VAPOUR PRESSURE. C *ZC7* (1-RD/RV) USED FOR VAPOUR PRESSURE. C ZCONS1=RD/CPD ZCONS2=ALV/CPD ZCONS3=1./ZTAU C ZC1=CPD/RD ZC2=55. ZC3=2840. ZC4=3.5 ZC5=0.2 ZC6=0.622 ZC7=0.378 C C ------------------------------------------------------------------ C C* 1. ALLOCATE SPACE AND POSITION VARIABLES. C -------- ----- --- -------- ---------- C 100 CONTINUE C CALL ALLOCA(IZWORK,(11*NLEV+27)*NDEEP,'BMDEEP',99) C IZPP1D = IZWORK IZDPD = IZWORK + NDEEP*NLEV IZDPKD = IZWORK + NDEEP*NLEV*2 IZTP1D = IZWORK + NDEEP*NLEV*3 IZQP1D = IZWORK + NDEEP*NLEV*4 IZTCD = IZWORK + NDEEP*NLEV*5 IZQCD = IZWORK + NDEEP*NLEV*6 IZTREF = IZWORK + NDEEP*NLEV*7 IZQREF = IZWORK + NDEEP*NLEV*8 IZSP = IZWORK + NDEEP*NLEV*9 ILOC = IZWORK + NDEEP*NLEV*10 IZWK1 = IZWORK + NDEEP*NLEV*11 C IZTSD = IZWK1 IITOPD = IZWK1 + NDEEP IIBASED = IZWK1 + NDEEP*2 IILIFTD = IZWK1 + NDEEP*3 IZRAIN = IZWK1 + NDEEP*4 IZSNOW = IZWK1 + NDEEP*5 IZDTD = IZWK1 + NDEEP*6 IZDQD = IZWK1 + NDEEP*7 IZPFR = IZWK1 + NDEEP*8 IZPTOP = IZWK1 + NDEEP*9 IZDTFR = IZWK1 + NDEEP*10 IZDTTOP = IZWK1 + NDEEP*11 IZDHTOT = IZWK1 + NDEEP*12 IZDPTOT = IZWK1 + NDEEP*13 IZRINC = IZWK1 + NDEEP*14 IZRTPBL = IZWK1 + NDEEP*15 IICOUNT = IZWK1 + NDEEP*16 IIFREEZ = IZWK1 + NDEEP*17 ILOLIFT = IZWK1 + NDEEP*18 ILOMELT = IZWK1 + NDEEP*19 IZALPH = IZWK1 + NDEEP*20 IZEPBL = IZWK1 + NDEEP*21 IZFPBL = IZWK1 + NDEEP*22 IZLFGBL = IZWK1 + NDEEP*23 IZLV = IZWK1 + NDEEP*24 IZC3ES = IZWK1 + NDEEP*25 IZC4ES = IZWK1 + NDEEP*26 C C ------------------------------------------------------------------ C C* 2. COLLECT DEEP CONVECTIVE POINTS. C ------- ---- ---------- ------- C 200 CONTINUE C CALL GATHER(NDEEP,ZTSD (1),TSM1M(1),KDX) CALL GATHER(NDEEP,ITOPD (1),KTOP (1),KDX) CALL GATHER(NDEEP,IBASED(1),KBASE(1),KDX) CALL GATHER(NDEEP,ILIFTD(1),KLIFT(1),KDX) C NHITOP=NLEV NHIBAS=NLEV DO 201 JL=1,NDEEP NHITOP=MIN(NHITOP,ITOPD(JL)) NHIBAS=MIN(NHIBAS,IBASED(JL)) 201 CONTINUE C DO 202 JK=NHITOP,NLEV CALL GATHER(NDEEP,ZPP1D(1,JK),APP1 (1,JK),KDX) CALL GATHER(NDEEP,ZDPD (1,JK),PDPP1 (1,JK),KDX) CALL GATHER(NDEEP,ZDPKD(1,JK),PDPKPK(1,JK),KDX) CALL GATHER(NDEEP,ZTP1D(1,JK),PTP1 (1,JK),KDX) CALL GATHER(NDEEP,ZQP1D(1,JK),PQP1 (1,JK),KDX) CALL GATHER(NDEEP,ZTCD (1,JK),PTC (1,JK),KDX) CALL GATHER(NDEEP,ZQCD (1,JK),PQC (1,JK),KDX) 202 CONTINUE C C ------------------------------------------------------------------ C C* 3. PRELIMINARY REFERENCE PROFILE. C ----------- --------- -------- C 300 CONTINUE C C* 3.1 COMPLETE MOIST ADIABAT BELOW CLOUD BASE, C WITH SECOND ITERATION AT EACH LEVEL. C 310 CONTINUE C IF (NHIBAS.LE.NLEVM1) THEN INIT=2 DO 313 JK=NHIBAS,NLEV DO 312 JIT=1,INIT DO 311 JL=1,NDEEP LO=JK.GE.IBASED(JL) IF (LO) THEN IF (JIT.EQ.1) THEN ZTCD(JL,JK)=ZTCD(JL,JK-1)/ZDPKD(JL,JK-1) ZQCD(JL,JK)=ZQCD(JL,JK-1) ENDIF ZQSATC=C2ES*EXP(C3LES*(ZTCD(JL,JK)-TMELT)* * (1./(ZTCD(JL,JK)-C4LES)))/(ZPP1D(JL,JK)) ZCOR=1./MAX(ZEPCOR,(1.-VTMPC1*ZQSATC)) ZQSATC=ZQSATC*ZCOR ZDQCD=(ZQCD(JL,JK)-ZQSATC)/(1.+C5LES*ZCONS2*ZQSATC*ZCOR* * (1./(ZTCD(JL,JK)-C4LES))**2) ZTCD(JL,JK)=ZTCD(JL,JK)+ZCONS2*ZDQCD ZQCD(JL,JK)=ZQCD(JL,JK)-ZDQCD ENDIF 311 CONTINUE 312 CONTINUE 313 CONTINUE ENDIF C C* 3.2 BOUNDARY LAYER REFERENCE PROFILE, BASED ON A C DOWNDRAUGHT FED BY ENVIRONMENTAL AIR AT *NDDLEV*. C 320 CONTINUE C IF (NUPBL.EQ.NLEVM3) THEN DO 322 JK=NUPBL+1,NLEV DO 321 JL=1,NDEEP ZTREF(JL,JK)=ZTP1D(JL,NDDLEV)+(ZTCD(JL,JK)-ZTCD(JL,NDDLEV)) ZQREF(JL,JK)=ZQP1D(JL,NDDLEV)+(ZQCD(JL,JK)-ZQCD(JL,NDDLEV)) 321 CONTINUE 322 CONTINUE ENDIF C C* 3.3 PRESET REFERENCE PROFILE ABOVE BOUNDARY LAYER. C 330 CONTINUE C DO 332 JK=NHITOP,NUPBL DO 331 JL=1,NDEEP ZTREF(JL,JK)=ZTP1D(JL,JK) ZQREF(JL,JK)=ZQP1D(JL,JK) 331 CONTINUE 332 CONTINUE C C 3.4 FOR PARCELS LIFTED FROM LOW LEVELS, CONSTRUCT THE C TEMPERATURE PROFILE FROM CLOUD BASE UP TO FREEZING C LEVEL. APPROXIMATE A VIRTUAL MOIST ADIABAT BY USING C A FRACTION OF THE MOIST ADIABAT STATIC STABILITY. C OMIT PARCELS LIFTED FROM HIGHER LEVELS, BY SETTING C NOMINAL FREEZING LEVEL TO THE FIRST IN-CLOUD LEVEL. C C *ICOUNT=0* BELOW NOMINAL FREEZING LEVEL. C *IFREEZ* INDICATES NOMINAL FREEZING LEVEL. C 340 CONTINUE C DO 341 JL=1,NDEEP LOLIFT(JL)=(ILIFTD(JL)-1).GE.(NLEV-4) IF (LOLIFT(JL)) THEN ICOUNT(JL)=0 IFREEZ(JL)=1 ELSE ICOUNT(JL)=1 IFREEZ(JL)=IBASED(JL)-1 ENDIF C C *********************************************** C START OF REFERENCE PROFILE CAN BE VARIED. C TUNED AT T42L19 TO USE MEAN OF ENVIRONMENT AND C CLOUD TEMPERATURES AT THE FIRST IN-CLOUD LEVEL. C *********************************************** C LO=(ICOUNT(JL).EQ.0).AND.(NUPBL.EQ.NLEVM3) IF (LO) ZTREF(JL,NUPBL)=0.5*(ZTCD(JL,NUPBL)+ZTP1D(JL,NUPBL)) 341 CONTINUE C NLEVM=NUPBL-1 DO 343 JK=NLEVM,NHITOP,-1 C ISUM=0 DO 342 JL=1,NDEEP IF (ICOUNT(JL).EQ.0) THEN ZTREF(JL,JK)=ZTREF(JL,JK+1)*ZDPKD(JL,JK)+ * ZSTAB*(ZTCD(JL,JK)-ZTCD(JL,JK+1)*ZDPKD(JL,JK)) ENDIF LOFR=(ZTREF(JL,JK).LE.TMELT).OR.(JK.LE.ITOPD(JL)) IF (LOFR.AND.IFREEZ(JL).EQ.1) THEN ICOUNT(JL)=1 IFREEZ(JL)=JK ENDIF ISUM=ISUM+ICOUNT(JL) 342 CONTINUE C C SKIP OUT OF LEVEL-LOOP IF ALL FREEZING LEVELS C HAVE BEEN FOUND. C IF (ISUM.EQ.NDEEP) GO TO 344 C 343 CONTINUE C 344 CONTINUE C C* 3.5 CONSTRUCT TEMPERATURE PROFILE ABOVE FREEZING LEVEL, C BY INTERPOLATING (QUADRATICALLY) BETWEEN TEMPERATURE C DEFICITS RELATIVE TO THE MOIST ADIABAT AT FREEZING C LEVEL AND CLOUD TOP. C C SINCE POINT OF NEUTRAL STABILITY DOES NOT NECESSARILY C FALL ON A MODEL LEVEL AN ASSUMPTION ON ITS POSITION C HAS TO BE MADE. C *** CLOUD TOP ADIABATIC DEFICIT SET TO ZERO: NEVER USED. C 350 CONTINUE C ILFR=NHITOP DO 351 JL=1,NDEEP IIT=ITOPD(JL) ZPTOP(JL)=ZPP1D(JL,IIT) C*** ZDTTOP(JL)=(ZTCD(JL,IIT)-ZTP1D(JL,IIT)) ZDTTOP(JL)=0.0 IIF=IFREEZ(JL) ZPFR(JL)=ZPP1D(JL,IIF)+ZEPSEC ZDTFR(JL)=(ZTCD(JL,IIF)-ZTREF(JL,IIF)) ILFR=MAX(ILFR,IIF) 351 CONTINUE C C *ILFR* IS LOWEST FREEZING LEVEL AROUND LATITUDE. C IF (ILFR.GT.NHITOP) THEN ILFRM1=ILFR-1 DO 353 JK=NHITOP,ILFRM1 DO 352 JL=1,NDEEP LO=(JK.LE.IFREEZ(JL)).AND.(JK.GE.ITOPD(JL)) IF (LO) THEN ZNDP=(ZPFR(JL)-ZPP1D(JL,JK))/(ZPFR(JL)-ZPTOP(JL)) ZTREF(JL,JK)=ZTCD(JL,JK)-ZDTFR(JL)*(1.0-ZNDP*ZNDP) ENDIF 352 CONTINUE 353 CONTINUE ENDIF C C* 3.6 SATURATION POINTS AND REFERENCE HUMIDITY C FOR ALL IN-CLOUD LEVELS ABOVE BOUNDARY LAYER. C C RETAIN PRESET ENVIRONMENT PROFILE ABOVE CLOUD C AND BELOW NOMINAL FREEZING LEVEL (CLOUD-BASE) C FOR CLOUDS LIFTED FROM HIGHER LEVELS. C 360 CONTINUE C DO 362 JK=NHITOP,NUPBL DO 361 JL=1,NDEEP IF (LOLIFT(JL)) THEN ZZDSPFR=ZDSPFR ZZDSPTOP=ZDSPTOP ELSE ZZDSPFR=ZDSPHI ZZDSPTOP=ZDSPHI ENDIF LOFR=JK.LE.IFREEZ(JL) IF (LOFR) THEN ZDSP=ZZDSPFR-(ZZDSPFR-ZZDSPTOP)*(ZPFR(JL)-ZPP1D(JL,JK)) * /(ZPFR(JL)-ZPTOP(JL)) ELSE ZDSP=ZDSPLOW-(ZDSPLOW-ZDSPFR)*(ZPP1D(JL,NUPBL)-ZPP1D(JL,JK)) * /(ZPP1D(JL,NUPBL)-ZPFR(JL)) ENDIF LOC(JL,JK)=(JK.GE.ITOPD(JL)).AND.(LOFR.OR.LOLIFT(JL)) IF (LOC(JL,JK)) THEN ZSP(JL,JK)=ZPP1D(JL,JK)+ZDSP ZTSP=ZTREF(JL,JK)*XLG((ZSP(JL,JK)/ZPP1D(JL,JK)),ZCONS1) ZQREF(JL,JK)=C2ES*EXP(C3LES*(ZTSP-TMELT)/(ZTSP-C4LES)) * /ZSP(JL,JK) ENDIF 361 CONTINUE 362 CONTINUE C C ------------------------------------------------------------------ C C* 4. CONSIDERATION OF ENERGY CONSERVATION. C ------------- -- ------ ------------- C 400 CONTINUE C C* 4.1 COMPUTE THE DOWNDRAUGHT EVAPORATION INTEGRAL C OVER THE BOUNDARY LAYER. C SET LOGICAL ARRAY FOR SURFACE TEMPERATURE. C 410 CONTINUE C DO 411 JL=1,NDEEP ZDEVAP=(ZQCD(JL,NLEV )-ZQCD(JL,NDDLEV))*ZDPD(JL,NLEV )+ * (ZQCD(JL,NLEVM1)-ZQCD(JL,NDDLEV))*ZDPD(JL,NLEVM1)+ * (ZQCD(JL,NLEVM2)-ZQCD(JL,NDDLEV))*ZDPD(JL,NLEVM2) ZEPBL(JL)=MAX(ZEPVAP,ZDEVAP) LOMELT(JL)=ZTSD(JL).GT.TMELT IF (LOMELT(JL)) THEN ZLV(JL)=ALV ZC3ES(JL)=C3LES ZC4ES(JL)=C4LES ELSE ZLV(JL)=ALS ZC3ES(JL)=C3IES ZC4ES(JL)=C4IES ENDIF 411 CONTINUE C C* 4.2 BEGIN LOOP FOR TWO ITERATIONS OF ENERGY CORRECTION. C 420 CONTINUE C DO 461 JIT=1,2 C C* 4.3 INITIALISE ENERGY AND PRESSURE INTEGRALS. C COMPUTE BOUNDARY LAYER INTEGRALS. C 430 CONTINUE C DO 431 JL=1,NDEEP ZDHTOT(JL)=0. ZDPTOT(JL)=0. IF (LOMELT(JL)) THEN ZALPH(JL)=ZALPHA ELSE ZALPH(JL)=ZALPHS*ZALPHA ENDIF ZFI=(ZQREF(JL,NLEV )-ZQP1D(JL,NLEV ))*ZDPD(JL,NLEV )+ * (ZQREF(JL,NLEVM1)-ZQP1D(JL,NLEVM1))*ZDPD(JL,NLEVM1)+ * (ZQREF(JL,NLEVM2)-ZQP1D(JL,NLEVM2))*ZDPD(JL,NLEVM2) ZF=ZALPH(JL)*ZFI/ZEPBL(JL) LOLIM=ZF.LT.ZFLIM IF (LOLIM) THEN ZALPH(JL)=ZALPH(JL)*(ZFLIM/ZF) ZF=ZFLIM ENDIF ZGI=(ZTREF(JL,NLEV )-ZTP1D(JL,NLEV ))*ZDPD(JL,NLEV )+ * (ZTREF(JL,NLEVM1)-ZTP1D(JL,NLEVM1))*ZDPD(JL,NLEVM1)+ * (ZTREF(JL,NLEVM2)-ZTP1D(JL,NLEVM2))*ZDPD(JL,NLEVM2) ZG=ZALPH(JL)*ZGI/(ZEPBL(JL)*ZCONS2) ZLFGBL(JL)=ZLV(JL)*(1.0-ZG)/(1.0+ZF) 431 CONTINUE C C* 4.4 COMPUTE ENERGY INTEGRAL. C 440 CONTINUE C DO 442 JK=NHITOP,NUPBL DO 441 JL=1,NDEEP IF (LOC(JL,JK)) THEN ZDPTOT(JL)=ZDPTOT(JL)+ZDPD(JL,JK) ZDHTOT(JL)=ZDHTOT(JL)+ZDPD(JL,JK)* * (CPD*(1.+VTMPC2*ZQP1D(JL,JK))*(ZTP1D(JL,JK)-ZTREF(JL,JK))+ * ZLFGBL(JL)*(ZQP1D(JL,JK)-ZQREF(JL,JK))) ENDIF 441 CONTINUE 442 CONTINUE C C NORMALISE INTEGRAL, AVOIDING ZERO PRESSURE INTERVAL. C DO 443 JL=1,NDEEP ZZDP=MAX(ZEPSEC,ZDPTOT(JL)) ZDHTOT(JL)=ZDHTOT(JL)/ZZDP 443 CONTINUE C C* 4.5 MODIFY ORIGINAL PROFILE FOR ENERGY CONSERVATION. C INCLUDE CLOUDTOP TO ALLOW CORRECTION WHEN ZDTTOP=0. C 450 CONTINUE C DO 452 JK=NHITOP,NUPBL DO 451 JL=1,NDEEP IF (LOC(JL,JK)) THEN ZTSP1=(ZTREF(JL,JK)+1.)*(XLG((ZSP(JL,JK)/ZPP1D(JL,JK)),ZCONS1)) ZQSP=C2ES*EXP(ZC3ES(JL)*(ZTSP1-TMELT)/(ZTSP1-ZC4ES(JL))) * /ZSP(JL,JK) ZDHDT=CPD*(1.+VTMPC2*ZQP1D(JL,JK))+ZLV(JL)*(ZQSP-ZQREF(JL,JK)) ZTREF(JL,JK)=ZTREF(JL,JK)+ZDHTOT(JL)/ZDHDT ZTSP=ZTREF(JL,JK)*(XLG((ZSP(JL,JK)/ZPP1D(JL,JK)),ZCONS1)) ZQREF(JL,JK)=C2ES*EXP(ZC3ES(JL)*(ZTSP-TMELT)/(ZTSP-ZC4ES(JL))) * /ZSP(JL,JK) ENDIF 451 CONTINUE 452 CONTINUE C C* 4.6 END OF LOOP OVER ITERATIONS. C 461 CONTINUE C C ------------------------------------------------------------------ C C* 5. PRECIPITATION AND EVAPORATION, FINAL TENDENCIES. C ------------- --- ------------ ----- ----------- C 500 CONTINUE C C* 5.1 PRESET ARRAYS. C COMPUTE A BOUNDARY LAYER MOISTURE INTEGRAL. C 510 CONTINUE C DO 511 JL=1,NDEEP ZRAIN(JL)=0. ZRINC(JL)=0. IF (LOMELT(JL)) THEN ZALPH(JL)=ZALPHA ELSE ZALPH(JL)=0.1*ZALPHA ENDIF ZFI=(ZQREF(JL,NLEV )-ZQP1D(JL,NLEV ))*ZDPD(JL,NLEV )+ * (ZQREF(JL,NLEVM1)-ZQP1D(JL,NLEVM1))*ZDPD(JL,NLEVM1)+ * (ZQREF(JL,NLEVM2)-ZQP1D(JL,NLEVM2))*ZDPD(JL,NLEVM2) ZF=ZALPH(JL)*ZFI/ZEPBL(JL) LOLIM=ZF.LT.ZFLIM IF (LOLIM) THEN ZALPH(JL)=ZALPH(JL)*(ZFLIM/ZF) ZF=ZFLIM ENDIF ZFPBL(JL)=ZF 511 CONTINUE C C* 5.2 COMPUTE PRECIPITATION FROM INTEGRAL OF MOISTURE C TENDENCY OVER CLOUD LEVELS. C *ZRAIN* CONTAINS TOTAL PRECIPITATION IN SECTIONS C 5.2, 5.3, IRRESPECTIVE OF SURFACE TEMPERATURE. C 520 CONTINUE C DO 522 JK=NHITOP,NUPBL DO 521 JL=1,NDEEP ZZDQ=(ZQREF(JL,JK)-ZQP1D(JL,JK))*ZCONS3/(1.0+ZFPBL(JL)) ZRAIN(JL)=ZRAIN(JL)-ZZDQ*ZDPD(JL,JK)/G 521 CONTINUE 522 CONTINUE C C* 5.3 EVAPORATION BELOW CLOUD-BASE FOR PARCELS LIFTED C FROM HIGH LEVELS. C 530 CONTINUE C DO 532 JK=NHIBAS,NLEV DO 531 JL=1,NDEEP LO= (JK.GE.IBASED(JL)) * .AND.(.NOT.LOLIFT(JL)) * .AND.(ZRINC(JL).LE.ZRAIN(JL)) IF (LO) THEN ZZQ=MAX(ZEPQ,ZQP1D(JL,JK)) ZZT=ZTP1D(JL,JK) ZP1=ZZQ*ZPP1D(JL,JK)/(ZC6+ZC7*ZZQ) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZZT)-ALOG(ZP1)-ZC5) ZZSP=ZPP1D(JL,JK)*XLG((ZTSP/ZZT),ZC1) ZZQ1=ZZQ+CPD/ALV ZZT1=ZZT-1. ZP11=ZZQ1*ZPP1D(JL,JK)/(ZC6+ZC7*ZZQ1) ZTSP1=ZC2+ZC3/(ZC4*ALOG(ZZT1)-ALOG(ZP11)-ZC5) ZZSP1=ZPP1D(JL,JK)*XLG((ZTSP1/ZZT1),ZC1) ZZDSP=ZPP1D(JL,JK)-ZZSP+ZDSPEL IF (ZZDSP.GT.0.) THEN ZDQEV=ZZDSP/((ZZSP1-ZZSP)*ZCONS2) ZDR=ZDPD(JL,JK)*ZDQEV*ZCONS3/G ZRINCM=ZRINC(JL) ZRINC(JL)=ZRINC(JL)+ZDR LOA=(ZRAIN(JL).LT.ZRINC(JL)).AND.(ZRAIN(JL).GT.ZRINCM) IF (LOA) THEN ZDQEV=(ZRAIN(JL)-ZRINCM-ZEPSRN)*G/(ZCONS3*ZDPD(JL,JK)) ENDIF ZTREF(JL,JK)=ZTREF(JL,JK)-ZDQEV*ZCONS2 ZQREF(JL,JK)=ZQREF(JL,JK)+ZDQEV ENDIF ENDIF 531 CONTINUE 532 CONTINUE C C* 5.4 COMPUTE FINAL TENDENCIES. C SEPARATE ADJUSTMENT TIMESCALE FOR LEVELS IN THE C BOUNDARY LAYER AFFECTED BY THE DOWNDRAUGHT. C RECALCULATE PRECIPITATION AFTER EVAPORATON. C SCATTER RESULTS BACK TO ORIGINAL GRID. C 540 CONTINUE C DO 541 JL=1,NDEEP ZRTPBL(JL)=(ZALPH(JL)*G*ZRAIN(JL))/ZEPBL(JL) ZRAIN(JL)=0. ZSNOW(JL)=0. 541 CONTINUE C DO 543 JK=NHITOP,NLEV C LO=(JK.LE.NUPBL).OR.(NUPBL.NE.NLEVM3) C DO 542 JL=1,NDEEP IF (LO) THEN ZDTD(JL)=(ZTREF(JL,JK)-ZTP1D(JL,JK))*ZCONS3 ZDQD(JL)=(ZQREF(JL,JK)-ZQP1D(JL,JK))*ZCONS3 ELSE ZDTD(JL)=(ZTREF(JL,JK)-ZTP1D(JL,JK))*ZRTPBL(JL) ZDQD(JL)=(ZQREF(JL,JK)-ZQP1D(JL,JK))*ZRTPBL(JL) ENDIF IF (LOMELT(JL)) THEN ZRAIN(JL)=ZRAIN(JL)-ZDQD(JL)*ZDPD(JL,JK)/G ELSE ZSNOW(JL)=ZSNOW(JL)-ZDQD(JL)*ZDPD(JL,JK)/G ENDIF 542 CONTINUE C CALL SCATTER(NDEEP,PDT(1,JK),KDX,ZDTD(1)) CALL SCATTER(NDEEP,PDQ(1,JK),KDX,ZDQD(1)) C 543 CONTINUE C C SCATTER PRECIPITATION BACK TO ORIGINAL GRID. C CHECK FOR NEGATIVE PRECIP. OCCURS IN THE MAIN ROUTINE, C WHERE SUCH POINTS ARE TREATED AS SHALLOW CONVECTION. C CALL SCATTER(NDEEP,RSFC(1),KDX,ZRAIN(1)) CALL SCATTER(NDEEP,SSFC(1),KDX,ZSNOW(1)) C C ------------------------------------------------------------------ C C* 6. RETURN WORKSPACE. C ------ ---------- C 600 CONTINUE C CALL UNLOC('BMDEEP',99) C RETURN END */ */ ************************************************************** BMSHAL */ *DECK BMSHAL SUBROUTINE BMSHAL( * NSHAL, CBMTS, KDX * ,NLON, NLP2, NLEV, NLEVM1, NLEVP1 * ,CPD, G, RD, TMELT * ,C2ES, C3LES, C4LES * ,APP1, APHP1 * ,PTP1, PQP1 * ,PDT, PDQ, PSC * ,KBASE, KTOP * ,KHCTOP, KLOBAS * ) C C**** *BMSHAL* - PERFORMS SATURATION POINT ADJUSTMENT C FOR SHALLOW CONVECTION. C C ORIGINAL VERSION B.RITTER E.C.M.W.F. 31/10/84. C IMPLEMENTED & TUNED IN UGCM1 J.M.SLINGO U.G.A.M.P. 12/91. C IMPLEMENTED IN UGCM2 M.BLACKBURN U.G.A.M.P. 13/05/94. C C PURPOSE. C -------- C C THIS ROUTINE ADJUSTS THE TEMPERATURE AND SPECIFIC HUMIDITY C PROFILES OF SHALLOW CONVECTIVE POINTS TO AN INTERNALLY SPECIFIED C REFERENCE PROFILE. C C** INTERFACE. C ---------- C C *BMSHAL* IS CALLED FROM *BMADJ*. C THE ROUTINE IS ARGUMENT DRIVEN, TAKING ITS INPUT ENTIRELY C FROM THE VARIABLES AND ARRAYS SUPPLIED IN THE ARGUMENT LIST. C FOR VECTORISATION, THE INPUT IS GATHERED IN TEMPORARY ARRAYS OF C LENGTH *NSHAL* (THE NUMBER OF GRIDPOINTS WITH SHALLOW CONVECTION C ON A LATITUDE ROW) USING INDEX ARRAY *KDX*. THE ROUTINE RETURNS C ITS OUTPUT AS ARGUMENTS, HAVING SCATTERED TO THE FULL GRID. C *IF DEF,DOC C --------------------------------------------------------------------- C C INPUT ARGUMENTS: C C *NSHAL* NUMBER OF GRIDPOINTS WITH SHALLOW CONVECTION IN ROW. C *CBMTS* ADJUSTMENT TIMESCALE IN SECONDS FOR SHALLOW CONVECTION. C *KDX* INDEX OF CONVECT. POINTS ON FULL GRID, DIMENSION (NLON). C *NLON* NUMBER OF LONGITUDES. C *NLP2* (NLON+2). C *NLEV* NUMBER OF LEVELS. C *NLEVM1* (NLEV-1). C *NLEVP1* (NLEV+1). C *ALS* LATENT HEAT FOR SUBLIMATION. C *ALV* LATENT HEAT FOR VAPORISATION. C *CPD* SPECIFIC HEAT AT CONSTANT PRESSURE FOR DRY AIR. C *G* GRAVITATIONAL ACCELERATION. C *RD* GAS CONSTANT FOR DRY AIR. C *TMELT* TEMPERATURE OF FUSION OF ICE. C *C__ES* CONSTANTS USED FOR COMPUTATION OF SATURATION SPECIFIC C HUMIDITY OVER LIQUID WATER (*C_LES*) OR ICE (*C_IES*). C *C2ES* (RD/RV)*(SVP AT REFERENCE TEMPERATURE C4_ES). C *C3_ES* CONSTANT FOR SVP. C *C4_ES* REFERENCE TEMPERATURE FOR SVP. C *APP1* FULL LEVEL PRESSURE, DIMENSION (NLP2,NLEV). C *APHP1* HALF LEVEL PRESSURE, DIMENSION (NLP2,NLEVP1). C *PTP1* PRELIMINARY (T+1) TEMPERATURE, DIMENSION (NLON,NLEV). C *PQP1* PRELIMINARY (T+1) SPECIFIC HUMID, DIMENSION (NLON,NLEV). C *KBASE* HIGHEST LEVEL IN SUB-CLOUD LAYER, DIMENSION (NLON). C *KTOP* HIGHEST LEVEL IN CLOUD LAYER, DIMENSION (NLON). C C OUTPUT ARGUMENTS: C C *PDT* TEMPERATURE TENDENCY, DIMENSION (NLON,NLEV). C *PDQ* SPECIFIC HUMIDITY TENDENCY, DIMENSION (NLON,NLEV). C *PSC* CONDENSATION RATE, DIMENSION (NLON). C *KHCTOP* UPPERMOST LEVEL AT WHICH TENDENCIES ARE COMPUTED. C *KLOBAS* LOWEST LEVEL AT WHICH TENDENCIES ARE COMPUTED. C C --------------------------------------------------------------------- *ENDIF C OUTPUT ARRAYS ARE ONLY ASSIGNED AT SHALLOW CONVECTING POINTS. C ALL ARRAY ELEMENTS SHOULD BE PRESET TO ZERO ON INPUT. C C METHOD. C ------- C C THE BASIC REFERENCE PROFILE IS DEFINED BY THE SATURATION C POINTS OF THE LOWEST LEVEL AND A LEVEL ABOVE THE INVERSION. C THESE DETERMINE THE MIXING LINE. THE STRENGTH OF THE INVERSION C IS CONSIDERED AS WELL. THE REFERENCE PROFILES ARE CONSTRAINED C BY THE REQUIREMENT OF CONSERVATION OF SENSIBLE AND LATENT HEAT C SEPERATELY. C FINALLY HEATING RATES AND MOISTURE CHANGES ARE CALCULATED C AS A RELAXATION TO THE ADJUSTMENT PROFILE. NOTE THAT TENDENCIES C ARE APPLIED UP TO THE INVERSION LEVEL ABOVE THE INPUT CLOUD TOP. C ****************************************************************** C * N.B. THE RELAXATION TIME *ZTAU* IS RESOLUTION DEPENDENT. * C * SEE COMMENTS BELOW WHERE THIS PHYSICAL CONSTANT IS DEFINED. * C ****************************************************************** C C EXTERNALS. C ---------- C C *ALLOCA* ALLOCATE ARRAY SPACE (MEMORY MANAGER ROUTINE). C *GATHER* GATHER SELECTED ARRAY ELEMENTS INTO A VECTOR. C (CRAY LIBRARY ROUTINE). C *SCATTER* SCATTER A VECTOR INTO SELECTED ARRAY ELEMENTS. C (CRAY LIBRARY ROUTINE). C *UNLOC* FREE ARRAY SPACE (MEMORY MANAGER ROUTINE). C C REFERENCES. C ----------- C C A BASIC DESCRIPTION OF THE METHOD CAN BE FOUND IN BETTS C (1986 : QJRMS 112, 677-691) AND BETTS & MILLER (1986 : QJRMS, C 112, 693-709). C A MORE DETAILED DESCRIPTION OF THE SCHEME IS CONTAINED IN C BETTS & MILLER (1994 : AMERICAN METEOROLOGICAL SOCIETY MONOGRAPH C ON CONVECTIVE PARAMETRIZATION). C IMPLEMENTATION OF THE SCHEME IN THE UGAMP GCM IS DESCRIBED C IN UGAMP TECHNICAL REPORT NO. 25 (SLINGO & BLACKBURN, 1992). C C SATURATION POINT CALCULATIONS FOLLOW BOLTON (1980, MON. WEA. C REV., 108, 1046-1053). SATURATION SPECIFIC HUMIDITY CALCULATIONS C USE THE TETENS FORMULA (LOWE, 1977, J.APPL.MET., 16, 100-103). C C ------------------ LOGICAL LO,LOA,LOB C ------------------ C REAL * APP1 (NLP2,NLEV) * ,APHP1 (NLP2,NLEVP1) * ,PTP1 (NLON,NLEV) * ,PQP1 (NLON,NLEV) * ,PDT (NLON,NLEV) * ,PDQ (NLON,NLEV) * ,PSC (NLON) C INTEGER * KDX (NLON) * ,KTOP (NLON) * ,KBASE (NLON) C POINTER(IZPP1S ,ZPP1S (NSHAL,NLEV)) * ,(IZPHP1S,ZPHP1S(NSHAL,NLEV)) * ,(IZTP1S ,ZTP1S (NSHAL,NLEV)) * ,(IZQP1S ,ZQP1S (NSHAL,NLEV)) * ,(IZTREF ,ZTREF (NSHAL,NLEV)) * ,(IZQREF ,ZQREF (NSHAL,NLEV)) * ,(IZDP ,ZDP (NSHAL,NLEV)) C POINTER(IZDTS ,ZDTS (NSHAL)) * ,(IZDQS ,ZDQS (NSHAL)) * ,(IITOPS ,ITOPS (NSHAL)) * ,(IIBASES,IBASES(NSHAL)) * ,(IZMIX ,ZMIX (NSHAL)) * ,(IZBINV ,ZBINV (NSHAL)) * ,(IZTSUM ,ZTSUM (NSHAL)) * ,(IZQSUM ,ZQSUM (NSHAL)) * ,(IZQINT ,ZQINT (NSHAL)) C XLG(ARG1,ARG2)=EXP(ARG2*ALOG(ARG1)) C C* PHYSICAL CONSTANTS. C -------- ---------- C C *ZTAU* RELAXATION TIMESCALE IN SECONDS. C **************************************************** C * THE ADJUSTMENT TIMESCALE IS RESOLUTION DEPENDENT * C * *ZTAU* DETERMINES THE RATE AT WHICH MOISTURE IS * C * TRANSFERRED THROUGH THE PBL AND INTO THE FREE * C * ATMOSPHERE. IT HAS BEEN TESTED AND TUNED IN THE * C * UGAMP GCM, TOGETHER WITH *ZTAU* AND *ZALPHA* IN * C * *BMDEEP*, ONLY AT HORIZONTAL RESOLUTIONS UP TO * C * T42. * C * T21 T42 * C * *ZTAU* 14400 14400 * C **************************************************** C *ZSPDIFF* SATURATION POINT DIFFERENCE FOR THE LOWEST LEVEL. C *ZBITOP* MIXING PARAMETER FOR THE INVERSION. C *ZBMIN* MINIMUM LIMIT OF INVERSION MIXING PARAMETER. C *ZBMAX* MAXIMUM LIMIT OF INVERSION MIXING PARAMETER. C *ZBSHAL* MIXING PARAMETER. C *ZSTABM* MIXING LINE WEIGHT. C *ZPZERO* REFERENCE PRESSURE FOR DRY ADIABATS. C ZTAU=CBMTS ZSPDIFF=-5000. ZBITOP=1.2 ZBMIN=1.0 ZBMAX=2.5 ZBSHAL=1.0 ZSTABM=0.85 ZPZERO=100000. C C* SECURITY CONSTANTS. C -------- ---------- C C *NLEVM1* (DUMMY ARGUMENT) LOWEST CLOUD BASE ALLOWED. C *ZEPDSP* MINIMUM SATURATION POINT DIFFERENCE OVER LAYER, C TO AVOID DIVIDE BY ZERO. C *ZEPMIX* MINIMUM VALUE OF MIXING LINE GRADIENT. C *ZEPQ* MINIMUM SPECIFIC HUMIDITY TO AVOID DIVERGENCE OF THE C SATURATION POINT CALCULATIONS. C ZEPDSP=-1.E-2 ZEPMIX=-0.0007 ZEPQ=0.000002 C C* COMPUTATIONAL CONSTANTS. C ------------- ---------- C C *ZC1-ZC5* CONSTANTS FOR SATURATION POINT CALCULATIONS. C *ZC6* (RD/RV) USED FOR VAPOUR PRESSURE. C *ZC7* (1-RD/RV) USED FOR VAPOUR PRESSURE. C ZCONS1=RD/CPD ZCONS3=1./ZTAU C ZC1=CPD/RD ZC2=55. ZC3=2840. ZC4=3.5 ZC5=0.2 ZC6=0.622 ZC7=0.378 C C ------------------------------------------------------------------ C C* 1. ALLOCATE SPACE AND POSITION VARIABLES. C -------- ----- --- -------- ---------- C 100 CONTINUE C CALL ALLOCA(IZWORK,(7*NLEV+9)*NSHAL,'BMSHAL',99) C IZPP1S = IZWORK IZPHP1S = IZWORK + NSHAL*NLEV*1 IZTP1S = IZWORK + NSHAL*NLEV*2 IZQP1S = IZWORK + NSHAL*NLEV*3 IZTREF = IZWORK + NSHAL*NLEV*4 IZQREF = IZWORK + NSHAL*NLEV*5 IZDP = IZWORK + NSHAL*NLEV*6 IZWK1 = IZWORK + NSHAL*NLEV*7 C IZDTS = IZWK1 IZDQS = IZWK1 + NSHAL IITOPS = IZWK1 + NSHAL*2 IIBASES = IZWK1 + NSHAL*3 IZMIX = IZWK1 + NSHAL*4 IZBINV = IZWK1 + NSHAL*5 IZTSUM = IZWK1 + NSHAL*6 IZQSUM = IZWK1 + NSHAL*7 IZQINT = IZWK1 + NSHAL*8 C C ------------------------------------------------------------------ C C* 2. COLLECT SHALLOW CONVECTIVE POINTS. C ------- ------- ---------- ------- C 200 CONTINUE C CALL GATHER(NSHAL,ITOPS (1),KTOP (1),KDX) CALL GATHER(NSHAL,IBASES(1),KBASE(1),KDX) C C* 2.1 FIND LOWEST CLOUD-BASE AND HIGHEST TOP. C MODIFY ALL BASES TO FIRST IN-CLOUD LEVEL. C MODIFY ALL TOPS TO INCLUDE INVERSION LEVEL. C 210 CONTINUE C KLOBAS=1 KHCTOP=NLEV DO 211 JL=1,NSHAL ITOPS(JL)=ITOPS(JL)-1 IBASES(JL)=IBASES(JL)-1 KLOBAS=MAX(KLOBAS,IBASES(JL)) KHCTOP=MIN(KHCTOP,ITOPS(JL)) 211 CONTINUE C C GATHER MULTI-LEVEL ARRAYS UP TO THE SECOND LEVEL C ABOVE THE ORIGINAL HIGHEST CLOUD-TOP, WHICH IS C USED FOR THE MIXING LINE CALCULATIONS. C DO 212 JK=KHCTOP-1,NLEV CALL GATHER(NSHAL,ZTP1S (1,JK),PTP1 (1,JK),KDX) CALL GATHER(NSHAL,ZQP1S (1,JK),PQP1 (1,JK),KDX) CALL GATHER(NSHAL,ZPP1S (1,JK),APP1 (1,JK),KDX) CALL GATHER(NSHAL,ZPHP1S(1,JK),APHP1(1,JK),KDX) 212 CONTINUE C C ------------------------------------------------------------------ C C* 3. PRELIMINARY REFERENCE PROFILE. C ----------- --------- -------- C 300 CONTINUE C C 3.1 PRESET REFERENCE PROFILE. C DO 312 JK=KHCTOP,NLEV DO 311 JL=1,NSHAL ZTREF(JL,JK)=ZTP1S(JL,JK) ZQREF(JL,JK)=ZQP1S(JL,JK) 311 CONTINUE 312 CONTINUE C C 3.2 SINGLE LEVEL CALCULATIONS FOR MIXING LINE. C 320 CONTINUE C DO 321 JL=1,NSHAL C C UPPER LEVEL T AND Q FOR MIXING LINE. C ITOPM1=ITOPS(JL)-1 ITOPP=ITOPS(JL) ITOPP1=ITOPS(JL)+1 ZPTOPM1=ZPP1S(JL,ITOPM1) ZTTOPM1=ZTP1S(JL,ITOPM1) ZQTOPM1=MAX(ZEPQ,ZQP1S(JL,ITOPM1)) ZPTOPP1=ZPP1S(JL,ITOPP1) ZTTOPP1=ZTP1S(JL,ITOPP1) ZQTOPP1=MAX(ZEPQ,ZQP1S(JL,ITOPP1)) ZDPTOP=ZPP1S(JL,ITOPP)-ZPP1S(JL,ITOPM1) ZQNLM1=MAX(ZEPQ,ZQP1S(JL,NLEVM1)) C C MEAN THETA AND Q FOR MIXING LINE. C ZQMX=0.5*(ZQTOPM1+ZQNLM1) ZTHMX=0.5*(ZTTOPM1*XLG((ZPZERO/ZPTOPM1),ZCONS1)+ * ZTP1S(JL,NLEVM1)*XLG((ZPZERO/ZPP1S(JL,NLEVM1)),ZCONS1)) ZTMX=ZTHMX*XLG((ZPTOPM1/ZPZERO),ZCONS1) C C SATURATION POINT FOR NLEVM1. C ZZT=ZTP1S(JL,NLEVM1) ZP1=ZQNLM1*ZPP1S(JL,NLEVM1)/(ZC6+ZC7*ZQNLM1) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZZT)-ALOG(ZP1)-ZC5) ZSPL=ZPP1S(JL,NLEVM1)*XLG((ZTSP/ZZT),ZC1) C C SATURATION POINT FOR UPPER MIXING LEVEL. C ZP1=ZQMX*ZPTOPM1/(ZC6+ZC7*ZQMX) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZTMX)-ALOG(ZP1)-ZC5) ZSPT=ZPTOPM1*XLG((ZTSP/ZTMX),ZC1) C C SLOPE OF MIXING LINE. C ZDPMIX=MIN(ZSPT-ZSPL,ZEPDSP) ZTHBOT=ZTP1S(JL,NLEVM1)*XLG((ZPZERO/ZPP1S(JL,NLEVM1)),ZCONS1) ZMIX(JL)=(ZTHMX-ZTHBOT)/ZDPMIX ZMIX(JL)=MAX(ZEPMIX,MIN(ZMIX(JL),0.)) C C SATURATION POINT FOR LEVEL ABOVE INVERSION. C ZP1=ZQTOPM1*ZPTOPM1/(ZC6+ZC7*ZQTOPM1) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZTTOPM1)-ALOG(ZP1)-ZC5) ZSPTI=ZPTOPM1*XLG((ZTSP/ZTTOPM1),ZC1) C C SATURATION POINT FOR LEVEL BELOW INVERSION. C ZP1=ZQTOPP1*ZPTOPP1/(ZC6+ZC7*ZQTOPP1) ZTSP=ZC2+ZC3/(ZC4*ALOG(ZTTOPP1)-ALOG(ZP1)-ZC5) ZSPBI=ZPTOPP1*XLG((ZTSP/ZTTOPP1),ZC1) C C MIXING PARAMETER FOR INVERSION. C ZBINV(JL)=ZBITOP*(ZSPBI-ZSPTI-ZDPTOP) * /(ZPTOPP1-ZPTOPM1-ZDPTOP) ZBINV(JL)=MAX(ZBMIN,MIN(ZBMAX,ZBINV(JL))) C 321 CONTINUE C C* 3.3 REFERENCE TEMPERATURE AND HUMIDITY. C 330 CONTINUE C DO 332 JK=KLOBAS,KHCTOP,-1 DO 331 JL=1,NSHAL IF (JK.EQ.ITOPS(JL)) THEN ZBETA=ZBINV(JL) ELSE ZBETA=ZBSHAL ENDIF LOA=(JK.GE.ITOPS(JL)).AND.(JK.LT.IBASES(JL)) IF (LOA) THEN ZTREF(JL,JK)= * (ZTREF(JL,JK+1)*XLG((ZPZERO/ZPP1S(JL,JK+1)),ZCONS1)+ * ZBETA*ZSTABM*ZMIX(JL)*(ZPP1S(JL,JK)-ZPP1S(JL,JK+1)))* * XLG((ZPP1S(JL,JK)/ZPZERO),ZCONS1) ENDIF LOB=(JK.GE.ITOPS(JL)).AND.(JK.LE.IBASES(JL)) IF (LOB) THEN ZSP=ZSPDIFF-(ZBETA-1.)*(ZPP1S(JL,JK+1)-ZPP1S(JL,JK)) * +ZPP1S(JL,JK) ZTS=ZTREF(JL,JK)*XLG((ZSP/ZPP1S(JL,JK)),ZCONS1) ZQREF(JL,JK)=C2ES*EXP(C3LES*(ZTS-TMELT)/(ZTS-C4LES))/ZSP ENDIF 331 CONTINUE 332 CONTINUE C C ------------------------------------------------------------------ C C* 4. CONSIDERATION OF ENERGY CONSERVATION. C ------------- -- ------ ------------- C 400 CONTINUE C C* 4.1 SEPERATE ENERGY INTEGRALS FOR T AND Q. C 410 CONTINUE C DO 411 JL=1,NSHAL ZTSUM(JL)=0. ZQSUM(JL)=0. ZQINT(JL)=0. 411 CONTINUE C DO 413 JK=KHCTOP,KLOBAS DO 412 JL=1,NSHAL ZDP(JL,JK)=ZPHP1S(JL,JK+1)-ZPHP1S(JL,JK) ZTSUM(JL)=ZTSUM(JL)+(ZTP1S(JL,JK)-ZTREF(JL,JK))*ZDP(JL,JK) ZQSUM(JL)=ZQSUM(JL)+(ZQP1S(JL,JK)-ZQREF(JL,JK))*ZDP(JL,JK) 412 CONTINUE 413 CONTINUE C DO 414 JL=1,NSHAL IBOT=IBASES(JL)+1 ITOPP=ITOPS(JL) ZTSUM(JL)=ZTSUM(JL)/(ZPHP1S(JL,IBOT)-ZPHP1S(JL,ITOPP)) ZQSUM(JL)=ZQSUM(JL)/(ZPHP1S(JL,IBOT)-ZPHP1S(JL,ITOPP)) 414 CONTINUE C C* 4.2 MODIFICATION OF PRELIMINARY REFERENCE PROFILE. C COMPUTE INTEGRATED CONDENSATION RATE. C 420 CONTINUE C DO 422 JK=KHCTOP,KLOBAS DO 421 JL=1,NSHAL LO=(JK.GE.ITOPS(JL)).AND.(JK.LE.IBASES(JL)) IF (LO) THEN ZTREF(JL,JK)=ZTREF(JL,JK)+ZTSUM(JL) ZQREF(JL,JK)=ZQREF(JL,JK)+ZQSUM(JL) ZCOND=(ZQREF(JL,JK)-ZQP1S(JL,JK))*ZCONS3 IF (ZCOND.GT.0.) THEN ZQINT(JL)=ZQINT(JL)+ZCOND*ZDP(JL,JK)/G ENDIF ENDIF 421 CONTINUE 422 CONTINUE C C ------------------------------------------------------------------ C C* 5. FINAL TENDENCIES, SCATTER TO FULL GRID. C ----- ----------- ------- -- ---- ----- C 500 CONTINUE C DO 502 JK=KHCTOP,KLOBAS C DO 501 JL=1,NSHAL ZDQS(JL)=(ZQREF(JL,JK)-ZQP1S(JL,JK))*ZCONS3 ZDTS(JL)=(ZTREF(JL,JK)-ZTP1S(JL,JK))*ZCONS3 501 CONTINUE C CALL SCATTER(NSHAL,PDT(1,JK),KDX,ZDTS(1)) CALL SCATTER(NSHAL,PDQ(1,JK),KDX,ZDQS(1)) C 502 CONTINUE C CALL SCATTER(NSHAL,PSC(1),KDX,ZQINT(1)) C C ------------------------------------------------------------------ C C* 6. RETURN WORKSPACE. C ------ ---------- C 600 CONTINUE C CALL UNLOC('BMSHAL',99) C RETURN END