*IF DEF,CONTROL,AND,DEF,ATMOS                                              CLDCTL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.937    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.938    
C                                                                          GTS2F400.939    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.940    
C restrictions as set forth in the contract.                               GTS2F400.941    
C                                                                          GTS2F400.942    
C                Meteorological Office                                     GTS2F400.943    
C                London Road                                               GTS2F400.944    
C                BRACKNELL                                                 GTS2F400.945    
C                Berkshire UK                                              GTS2F400.946    
C                RG12 2SZ                                                  GTS2F400.947    
C                                                                          GTS2F400.948    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.949    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.950    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.951    
C Modelling at the above address.                                          GTS2F400.952    
C ******************************COPYRIGHT******************************    GTS2F400.953    
C                                                                          GTS2F400.954    
CLL SUBROUTINE CLD_CTL -----------------------------------------------     CLDCTL1.3      
CLL                                                                        CLDCTL1.4      
CLL Purpose:   Calls  LS_CLD  to convert liquid water, temperature,        CLDCTL1.5      
CLL           and total water into temperature, moisture, cloud water,     CLDCTL1.6      
CLL           and cloud ice. At non radiation timesteps, reads and adds    CLDCTL1.7      
CLL           radiation increments, and calls output processing.           CLDCTL1.8      
CLL                                                                        CLDCTL1.9      
CLL LEVEL 2 Control routine                                                CLDCTL1.10     
CLL Version for CRAY YMP                                                   CLDCTL1.11     
CLL                                                                        CLDCTL1.12     
CLL SB, CW, RR  <- programmer of some or all of previous code or changes   CLDCTL1.13     
CLL                                                                        CLDCTL1.14     
CLL  Model            Modification history from model version 3.0:         CLDCTL1.15     
CLL version  Date                                                          CLDCTL1.16     
CLL  3.1   2/02/93 : added comdeck CHSUNITS to define NUNITS for i/o       RS030293.95     
CLL  3.1  20/01/93  Interface routine CLOUD_COVER_BASE to output cloud     RB200193.20     
CLL  base ht. for a set of cloud cover thresholds (specified in DATA       RB200193.21     
CLL  statement until implemented later as pseudo-levels).  R.T.H.Barnes    RB200193.22     
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.35     
CLL                   portability.  Author Tracey Smith.                   TS150793.36     
CLL  3.2  05/07/93  Modified call to CLOUD_COVER_BASE to include low       PC120793.120    
CLL                 cloud fraction, base and top. Pete Clark               PC120793.121    
CLL  3.2  13/04/93  Dynamic allocation of main arrays. R.T.H.Barnes.       @DYALLOC.720    
!LL  4.0  22/11/94  Add two extra arguments to pass Qc and bs from         AYY2F400.91     
!LL                 LS_CLD to ATMPHYS. A.C.Bushell.                        AYY2F400.92     
CLL                 Argument LCAL360 passed to SOLPOS                      GSS1F304.262    
CLL                                                 S.J.Swarbrick          GSS1F304.263    
CLL  3.4  10/06/94  Variables added for TW and freezing level height.      ASW1F304.1      
CLL                  Steve Woltering.                                      ASW1F304.2      
CLL  3.4  07/07/94  Variables added for total cloud top height.            ASW1F304.3      
CLL                  Steve Woltering.                                      ASW1F304.4      
CLL  3.5  28/03/95  Sub-Model changes : Remove run time constants          ADR1F305.56     
CLL                 from Atmos Dump headers. D. Robinson.                  ADR1F305.57     
!     3.5    9/5/95   MPP code: Change updateable area,                    APB1F305.177    
!                     add halo updates    P.Burton                         APB1F305.178    
CLL  3.5  05/06/95  Chgs to SI & STINDEX arrays.  RTHBarnes                GRB4F305.35     
CLL  4.0   1/2/95    Correct time information for calculating solar        AWI1F400.7      
CLL                                           angle, and so incoming SW.   AWI1F400.8      
CLL  4.1  17/1/96   Obtain photosynthetically active radiation from        AJS1F401.1441   
CLL                 RADINCS array, correct for zenith angle and pass       AJS1F401.1442   
CLL                 to section 3 (in non-radiation timesteps).             AJS1F401.1443   
CLL                                               R.A.Betts                AJS1F401.1444   
!    4.1  23/05/96  MPP Changes. D. Robinson.                              APBHF401.2      
CLL   4.1  22/05/96  Replaced *DEF FAST with FRADIO to allow fast          GGH3F401.12     
CLL                  radiation i/o code to be used. G Henderson            GGH3F401.13     
!     4.2     Oct. 96 T3E migration: IF DEF CRAY removed                   GSS9F402.92     
!                       S.J.Swarbrick                                      GSS9F402.93     
!LL   4.2  10/02/97  Added PPX arguments to COPY_DIAG and                  GPB1F403.507    
!LL                  EXTDIAG                         P.Burton              GPB1F403.508    
!LL  4.3  26/02/97  Make diagnostic calcs. safer for MPP runs.             ARB2F403.109    
!LL  4.3  28/04/97  Split EXTDIAG into seperate call to avoid              GPB1F403.1283   
!LL                 processing unset diagnostics.   P.Burton               GPB1F403.1284   
!    4.4  29/10/96 1A PDF_QC_OR_CF_LIQ = cloud PDF QC value,               AYY1F404.155    
!                  2A PDF_QC_OR_CF_LIQ = liquid cloud fraction.            AYY1F404.156    
!                  1A PDF_BS_OR_CF_ICE = cloud PDF bs value,               AYY1F404.157    
!                  2A PDF_BS_OR_CF_ICE = frozen cloud fraction.            AYY1F404.158    
!                                                   A.C.Bushell            AYY1F404.159    
CLL  4.4  29/10/97  Call to RAD_MOSES added - surface radiation            ARE2F404.20     
CLL                 calculations for MOSES II.      R. Essery              ARE2F404.21     
!!!  4.4  18/09/97  SW Heating rates calculated for A03_6A                 ARN1F404.99     
CLL                                                                        CLDCTL1.17     
!LL  4.4  30/10/97  2D cloud amount calculated to be passed into           AJX0F404.495    
!LL                 diagnostic routines.             J.M.Gregory           AJX0F404.496    
!!!  4.5    2/6/98  Correct RAD_SNOW and RAD_NO_SNOW over sea, and add     ABX1F405.94     
!!!                 check for unknown version of boundary layer.           ABX1F405.95     
!!!                                                  R.A.Betts             ABX1F405.96     
!LL  4.5  13/05/98  New area cloud array passed in.New parametrizations    ASK1F405.144    
!LL                 called, and altered call to GLUE_CLD. S. Cusack        ASK1F405.145    
CLL Programing Standards : U.M.D.P. NO 3                                   CLDCTL1.18     
CLL                                                                        CLDCTL1.19     
CLL System Components Covered : P292                                       CLDCTL1.20     
CLL                                                                        CLDCTL1.21     
CLL System Task : P0                                                       CLDCTL1.22     
CLL                                                                        CLDCTL1.23     
CLL External documentation: UMDP P0, Version 11 dated (26/11/90)           CLDCTL1.24     
CLLEND -----------------------------------------------------------------   CLDCTL1.25     
C*L Arguments                                                              CLDCTL1.26     
                                                                           CLDCTL1.27     

      SUBROUTINE CLD_CTL(CLOUD_FRACTION,SURF_RADFLUX,PHOTOSYNTH_ACT_RAD,    1,46AJS1F401.1445   
     &           AREA_CLOUD_FRACTION,                                      ASK1F405.146    
     &           RAD_NO_SNOW,RAD_SNOW,SNOW_FRAC,                           ARE2F404.22     
     &           PDF_QC_OR_CF_LIQ,PDF_BS_OR_CF_ICE,                        AYY1F404.160    
     &           N_POLAR_VALUES,S_POLAR_VALUES,                            ARN1F404.100    
     &           RADHEAT_RATE,BL_LEVELSDA,                                 ARN1F404.101    
     &           L_RADHEAT,RADHEAT_DIM1,P_FIELDDA,                         ARN1F404.102    
     &           P_LEVELSDA,Q_LEVELSDA,ROW_LENGTHDA,TOT_LEVELS,INT9,       @DYALLOC.722    
*CALL ARGSIZE                                                              @DYALLOC.723    
*CALL ARGD1                                                                @DYALLOC.724    
*CALL ARGDUMA                                                              @DYALLOC.725    
*CALL ARGDUMO                                                              @DYALLOC.726    
*CALL ARGDUMW                                                              GKR1F401.192    
*CALL ARGSTS                                                               @DYALLOC.727    
*CALL ARGPTRA                                                              @DYALLOC.728    
*CALL ARGPTRO                                                              @DYALLOC.729    
*CALL ARGCONA                                                              @DYALLOC.730    
*CALL ARGPPX                                                               GKR0F305.911    
*CALL ARGFLDPT                                                             APBHF401.3      
*IF DEF,FRADIO                                                             GGH3F401.14     
     &           RADINCS,                                                  @DYALLOC.732    
*ENDIF                                                                     @DYALLOC.733    
     &    COS_ZENITH_ANGLE,                                                AWO1F401.59     
     &           ICODE,CMESSAGE)                                           CLDCTL1.30     
                                                                           CLDCTL1.31     
      IMPLICIT NONE                                                        CLDCTL1.32     
                                                                           CLDCTL1.33     
*CALL CMAXSIZE                                                             @DYALLOC.734    
*CALL CSUBMODL                                                             GSS1F305.922    
*CALL TYPSIZE                                                              @DYALLOC.735    
*CALL TYPD1                                                                @DYALLOC.736    
*CALL TYPDUMA                                                              @DYALLOC.737    
*CALL TYPDUMO                                                              @DYALLOC.738    
*CALL TYPDUMW                                                              GKR1F401.193    
*CALL TYPSTS                                                               @DYALLOC.739    
*CALL TYPPTRA                                                              @DYALLOC.740    
*CALL TYPPTRO                                                              @DYALLOC.741    
*CALL TYPCONA                                                              @DYALLOC.742    
*CALL PPXLOOK                                                              GKR0F305.912    
*CALL TYPFLDPT                                                             APBHF401.4      
                                                                           @DYALLOC.743    
      INTEGER                                                              CLDCTL1.34     
     &       P_FIELDDA,  !  COPY OF P_FIELD                                @DYALLOC.744    
     &       P_LEVELSDA, !  COPY OF P_LEVELS                               @DYALLOC.745    
     &       Q_LEVELSDA, !  COPY OF Q_LEVELS                               @DYALLOC.746    
     &       BL_LEVELSDA,  !  COPY OF BL_LEVELS                            ARN1F404.103    
     &       ROW_LENGTHDA, !  COPY OF ROW_LENGTH                           @DYALLOC.747    
     &       TOT_LEVELS, !  2nd Dim of N_POLAR_VALUES & S_POLAR_VALUES     @DYALLOC.748    
     &       RADHEAT_DIM1,       ! either P_FIELD or 1 - dimension of      ARN1F404.104    
!                                ! RADHEAT_RATE                            ARN1F404.105    
     &       INT9,       !  Length of STASHWORK - which may be filled in   CLDCTL1.39     
C  this routine for Section 9 on any timestep and 1 on a non-radiation     CLDCTL1.40     
C  timestep, i.e. one which is neither a SW nor LW timestep.               CLDCTL1.41     
C  (There is no risk of over-writing problems, as STASH is CALLed for      CLDCTL1.42     
C  Section 9 before any Section 1 diagnostics are put into STASHWORK.)     CLDCTL1.43     
     &       ICODE       !  RETURN CODE:  0 NORMAL EXIT;  >0 ERROR         CLDCTL1.44     
                                                                           CLDCTL1.45     
      CHARACTER*80 CMESSAGE                                                TS150793.37     
                                                                           CLDCTL1.47     
      LOGICAL L_RADHEAT    ! True if RADHEAT_RATE to be calculated         ARN1F404.106    
      REAL                                                                 CLDCTL1.48     
     &       CLOUD_FRACTION(P_FIELDDA,Q_LEVELSDA),                         @DYALLOC.749    
     &       AREA_CLOUD_FRACTION(P_FIELDDA,Q_LEVELSDA),                    ASK1F405.147    
!      Cloud area in layer                                                 ASK1F405.148    
     &       SIN_TRUE_LATITUDE(P_FIELDDA),                                 @DYALLOC.750    
     &       DAY_FRACTION(P_FIELDDA),                                      @DYALLOC.751    
     &       COS_ZENITH_ANGLE(P_FIELDDA),                                  @DYALLOC.752    
     &       SURF_RADFLUX(P_FIELDDA),                                      @DYALLOC.753    
     &       RAD_NO_SNOW(P_FIELDDA),        ! Surface net radiation,       ARE2F404.23     
C                                           ! snow-free fraction           ARE2F404.24     
     &       RAD_SNOW(P_FIELDDA),           ! Surface net radiation,       ARE2F404.25     
C                                           ! snow-covered fraction        ARE2F404.26     
     &       SNOW_FRAC(LAND_FIELD),         ! Snow cover fraction on       ARE2F404.27     
C                                           ! land points                  ARE2F404.28     
     &       PHOTOSYNTH_ACT_RAD(P_FIELDDA), ! photosythetically active     AJS1F401.1447   
C                                           ! radiation (W/sq m)           AJS1F401.1448   
     &       RADHEAT_RATE(RADHEAT_DIM1,BL_LEVELSDA),                       ARN1F404.107    
     &       PDF_QC_OR_CF_LIQ(P_FIELDDA,Q_LEVELSDA),                       AYY1F404.161    
     &       PDF_BS_OR_CF_ICE(P_FIELDDA,Q_LEVELSDA),                       AYY1F404.162    
     &       N_POLAR_VALUES(ROW_LENGTHDA,TOT_LEVELS),                      @DYALLOC.754    
     &       S_POLAR_VALUES(ROW_LENGTHDA,TOT_LEVELS)                       @DYALLOC.755    
                                                                           CLDCTL1.56     
C Include COMDECKS                                                         CLDCTL1.57     
                                                                           CLDCTL1.58     
*IF DEF,MPP                                                                APB1F305.179    
! Parameters and Common blocks                                             APB1F305.180    
*CALL PARVARS                                                              APB1F305.181    
*ENDIF                                                                     APB1F305.182    
*CALL CHSUNITS                                                             RS030293.96     
*CALL CCONTROL                                                             CLDCTL1.60     
*CALL C_R_CP                                                               CLDCTL1.62     
*CALL CTIME                                                                CLDCTL1.63     
*CALL CHISTORY                                                             GDR3F305.15     
*CALL C_MDI                                                                AJS1F401.1449   
*CALL C_OMEGA                                                              CLDCTL1.65     
*CALL SWSC                                                                 CLDCTL1.66     
*IF DEF,FRADIO                                                             GGH3F401.15     
*CALL CRADINCS                                                             CLDCTL1.70     
*ENDIF                                                                     CLDCTL1.71     
*CALL CRUNTIMC                                                             ADR1F305.58     
                                                                           CLDCTL1.72     
C*L  Subroutines called:                                                   CLDCTL1.73     
                                                                           CLDCTL1.74     
      EXTERNAL GLUE_CLD, TIMER, STASH, SOLPOS, SOLANG, EXTDIAG             AYY2F400.97     
     &,COPYDIAG_3D,COPYDIAG,CLOUD_COVER,CLOUD_COVER_BASE                   PC120793.122    
C  Workspace usage                                                         CLDCTL1.77     
                                                                           CLDCTL1.78     
      REAL                                                                 CLDCTL1.79     
     &      STASHWORK(INT9)                                                CLDCTL1.80     
*IF -DEF,FRADIO                                                            GGH3F401.16     
     &     ,RADINCS((P_FIELDDA*(P_LEVELSDA+3)+511)/512*512*2)              ARE2F404.29     
C          RADINCS dimensioned for 512word blocking of SW and LW incrs     CLDCTL1.83     
C          Extra levels included to hold net surface SW (band 1) without   ARE2F404.30     
C          zenith angle adjustment, surface albedo and surface radiative   ARE2F404.31     
C          temperature                                                     ARE2F404.32     
*ENDIF                                                                     CLDCTL1.84     
                                                                           CLDCTL1.85     
C  Local variables                                                         CLDCTL1.86     
                                                                           CLDCTL1.87     
      INTEGER                                                              CLDCTL1.88     
     &       n,                                                            ARE2F404.33     
     &       I,L,LEVEL,I1,I2,! Loop counters                               ARE2F404.34     
     &       LEN,            ! Length of field for I/O from paging file.   CLDCTL1.90     
     &       II,KK,IFLAG,    ! Loop counters                               RB200193.25     
     &       LEN_IO,         ! Length returned by unit function.           CLDCTL1.92     
     &       FIRST_POINT,    ! Define limits of                            CLDCTL1.93     
     &       LAST_POINT,     ! points to                                   CLDCTL1.94     
     &       POINTS,         ! be processed.                               CLDCTL1.95     
     &       LAND1,          ! First land point to be processed            ARE2F404.35     
     &       LAND_PTS,       ! Land points to be processed                 ARE2F404.36     
     &       JS,              ! Offset for start point                     CLDCTL1.96     
     &       NFTSWAP,        ! FTN number of paging file                   PC120793.123    
     &       NOCT                                                          PC120793.124    
     &      ,IM_IDENT   ! internal model identifier                        GRB4F305.36     
     &      ,IM_INDEX   ! internal model index for STASH arrays            GRB4F305.37     
                                                                           CLDCTL1.98     
      REAL                                                                 CLDCTL1.99     
     &       SINDEC,      ! Sin of the solar declination                   CLDCTL1.100    
     &       SCS,         ! Solar constant scaling factor                  CLDCTL1.101    
     &       TIME,                                                         CLDCTL1.102    
     &       A_IO            ! Real indicator returned by UNIT function.   CLDCTL1.103    
C                                                                          CLDCTL1.104    
                                                                           CLDCTL1.105    
      LOGICAL                                                              CLDCTL1.106    
     &       SWITCH          ! Set if radiation timestep                   CLDCTL1.107    
     &      ,LC_REQD         ! Set if any low cloud diags required         PC120793.125    
     &      ,WBFL_REQD       ! Set if wetbulb freez lev diags required     ASW1F304.5      
     &      ,WBT_REQD        ! Set if wetbulb temp diags required          ASW1F304.6      
     &      ,TCLDH_REQD      ! Set if cloud top height(tot) diags reqd     ASW1F304.7      
                                                                           CLDCTL1.108    
      REAL                                                                 CLDCTL1.109    
     &    PU,PL,PUS,PLS                                                    CLDCTL1.110    
     &   ,OCTAS(8)           ! set of 8 thresholds for cloud base ht.      RB200193.26     
C*L  Workspace usage                                                       PC120793.126    
!    Eight blocks of workspace required                                    AYY1F404.163    
      REAL                                                                 PC120793.129    
     +     C_COVER(P_FIELDDA)                                              PC120793.130    
     +    ,LC_FRAC(P_FIELDDA)                                              PC120793.131    
     +    ,LC_BASE(P_FIELDDA)                                              PC120793.132    
     +    ,LC_TOP (P_FIELDDA)                                              PC120793.133    
     +    ,WBFLH(P_FIELDDA)                                                ASW1F304.8      
     +    ,TW(P_FIELDDA,Q_LEVELSDA)                                        ASW1F304.9      
     +    ,CLOUD_TOP(P_FIELDDA)                                            ASW1F304.10     
     &    ,CCA2D(P_FIELDDA)                                                AJX0F404.497    
*CALL P_EXNERC                                                             CLDCTL1.111    
*CALL NSTYPES                                                              ARE2F404.37     
                                                                           CLDCTL1.112    
C  Use DATA statement to set cloud cover threshold values                  RB200193.27     
C   until implemented later as pseudo-levels.                              RB200193.28     
      DATA OCTAS/0.1,1.5,2.5,3.5,4.5,5.5,6.5,7.9/                          RB200193.29     
C                                                                          RB200193.30     
CL  Internal Structure:                                                    CLDCTL1.113    
CL                                                                         CLDCTL1.114    
CL -------------SECTION 9 CLOUD AMOUNT CALCULATIONS -------------------    CLDCTL1.115    
CL 9.0 Initialisation                                                      CLDCTL1.116    
      FIRST_POINT = FIRST_VALID_PT                                         APBHF401.5      
      LAST_POINT  = LAST_P_VALID_PT                                        APBHF401.6      
      POINTS      = LAST_POINT-FIRST_POINT+1                               APBHF401.7      
      JS          = FIRST_POINT-1                                          APBHF401.8      
                                                                           GRB4F305.38     
C  Set the polar points in PHOTOSYNTH_ACT_RAD to MDI                       AJS1F401.1453   
                                                                           AJS1F401.1454   
*IF DEF,MPP                                                                ARB2F403.110    
      if (at_top_of_LPG) then                                              ARB2F403.111    
*ENDIF                                                                     ARB2F403.112    
      DO I=1,FIRST_POINT-1                                                 AJS1F401.1455   
        PHOTOSYNTH_ACT_RAD(I) = RMDI                                       AJS1F401.1456   
      ENDDO                                                                AJS1F401.1457   
*IF DEF,MPP                                                                ARB2F403.113    
      DO LEVEL = 1,CLOUD_LEVELS                                            ARB2F403.114    
        DO I = 1,FIRST_POINT-1                                             ARB2F403.115    
          CLOUD_FRACTION(I,LEVEL) = 0.0                                    ARB2F403.116    
          AREA_CLOUD_FRACTION(I,LEVEL) = 0.0                               ASK1F405.149    
        END DO                                                             ARB2F403.117    
      END DO                                                               ARB2F403.118    
      end if                                                               ARB2F403.119    
*ENDIF                                                                     ARB2F403.120    
                                                                           AJS1F401.1458   
*IF DEF,MPP                                                                ARB2F403.121    
      if (at_base_of_LPG) then                                             ARB2F403.122    
*ENDIF                                                                     ARB2F403.123    
      DO I=LAST_POINT+1,P_FIELD                                            AJS1F401.1459   
        PHOTOSYNTH_ACT_RAD(I) = RMDI                                       AJS1F401.1460   
      ENDDO                                                                AJS1F401.1461   
*IF DEF,MPP                                                                ARB2F403.124    
      DO LEVEL = 1,CLOUD_LEVELS                                            ARB2F403.125    
        DO I = LAST_POINT+1,P_FIELD                                        ARB2F403.126    
          CLOUD_FRACTION(I,LEVEL) = 0.0                                    ARB2F403.127    
          AREA_CLOUD_FRACTION(I,LEVEL) = 0.0                               ASK1F405.150    
        END DO                                                             ARB2F403.128    
      END DO                                                               ARB2F403.129    
      end if                                                               ARB2F403.130    
*ENDIF                                                                     ARB2F403.131    
                                                                           AJS1F401.1462   
C  Set up internal model identifier and STASH index                        GRB4F305.39     
      im_ident = atmos_im                                                  GRB4F305.40     
      im_index = internal_model_index(im_ident)                            GRB4F305.41     
                                                                           CLDCTL1.122    
C SWITCH =.TRUE. If either radiation scheme is being called.               CLDCTL1.123    
                                                                           CLDCTL1.124    
      SWITCH = L_LW_RADIATE.OR.L_SW_RADIATE                                CLDCTL1.125    
                                                                           CLDCTL1.126    
CL 9.1 AT non-radiation timesteps, read radiation increments.              CLDCTL1.127    
                                                                           CLDCTL1.128    
      IF(.NOT.SWITCH) THEN                                                 CLDCTL1.129    
*IF -DEF,FRADIO                                                            GGH3F401.17     
        LEN=(P_FIELDDA*(P_LEVELS+3)+511)/512*512*2 !no. words for LW/SW    ARE2F404.38     
C (The above includes extra levels for net surface SW (band 1) without     ARE2F404.39     
C zenith angle adjustment, surface albedo and surface radiative temp)      ARE2F404.40     
        NFTSWAP=16                                                         CLDCTL1.132    
        CALL SETPOS(NFTSWAP,0,ICODE)                                       GTD0F400.43     
      CALL BUFFIN(NFTSWAP,RADINCS,LEN,LEN_IO,A_IO)                         CLDCTL1.134    
*ENDIF                                                                     CLDCTL1.135    
      END IF                                                               CLDCTL1.136    
                                                                           CLDCTL1.137    
      IF (L_RHCPT) THEN                                                    ASK1F405.151    
!                                                                          ASK1F405.152    
        CALL RHCRIT_CALC(                                                  ASK1F405.153    
     &    A_LEVDEPC(JAK),A_LEVDEPC(JBK),AKH,BKH,D1(JPSTAR+JS),             ASK1F405.154    
     &    D1(JRHC(1)+JS),Q_LEVELS,POINTS,P_FIELD,                          ASK1F405.155    
     &    D1(JTHETA(1)+JS),D1(JQ(1)+JS),D1(JQCF(1)+JS),                    ASK1F405.156    
     &    ROW_LENGTHDA,D1(JLAND+JS),D1(JICE_FRACTION+JS),BL_LEVELS)        ASK1F405.157    
!                                                                          ASK1F405.158    
*IF DEF,MPP                                                                ASK1F405.159    
        CALL SWAPBOUNDS(D1(JRHC(1)),ROW_LENGTH,P_ROWS,EW_Halo,NS_Halo,     ASK1F405.160    
     &                Q_LEVELS)                                            ASK1F405.161    
*ENDIF                                                                     ASK1F405.162    
      ENDIF                                                                ASK1F405.163    
!                                                                          ASK1F405.164    
!L 9.2  Call GLUE_CLD to calculate cloud fraction and                      AYY2F400.98     
CL      cloud water/ice content.                                           CLDCTL1.139    
                                                                           CLDCTL1.140    
                                                                           CLDCTL1.141    
      IF(LTIMER) THEN                                                      CLDCTL1.142    
        CALL TIMER('LS_CLD  ',3)                                           CLDCTL1.143    
      END IF                                                               CLDCTL1.144    
                                                                           CLDCTL1.145    
      IF (L_CLD_AREA) THEN                                                 ASK1F405.165    
        CALL AREA_CLD(                                                     ASK1F405.166    
     &    A_LEVDEPC(JAK),A_LEVDEPC(JBK),D1(JPSTAR+JS),RHCRIT,Q_LEVELS,     ASK1F405.167    
     &    D1(JRHC(1)+JS),POINTS,P_FIELD,D1(JTHETA(1)+JS),                  ASK1F405.168    
     &    CLOUD_FRACTION(FIRST_POINT,1),D1(JQ(1)+JS),D1(JQCF(1)+JS),       ASK1F405.169    
     &    D1(JQCL(1)+JS),PDF_QC_OR_CF_LIQ(FIRST_POINT,1),                  ASK1F405.170    
     &    PDF_BS_OR_CF_ICE(FIRST_POINT,1),ICODE,                           ASK1F405.171    
     &              AREA_CLOUD_FRACTION(FIRST_POINT,1),AKH,BKH)            ASK1F405.172    
      ELSE                                                                 ASK1F405.173    
        CALL GLUE_CLD(                                                     ASK1F405.174    
     &    A_LEVDEPC(JAK),A_LEVDEPC(JBK),D1(JPSTAR+JS),                     ASK1F405.175    
     &    RHCRIT,Q_LEVELS,D1(JRHC(1)+JS),                                  ASK1F405.176    
     &    POINTS,P_FIELD,D1(JTHETA(1)+JS),                                 ASK1F405.177    
     &    CLOUD_FRACTION(FIRST_POINT,1),D1(JQ(1)+JS),D1(JQCF(1)+JS),       ASK1F405.178    
     &    D1(JQCL(1)+JS),PDF_QC_OR_CF_LIQ(FIRST_POINT,1),                  ASK1F405.179    
     &    PDF_BS_OR_CF_ICE(FIRST_POINT,1),ICODE)                           ASK1F405.180    
!                                                                          ASK1F405.181    
!  Radiation uses layer cloud area, so if scheme is switched off put the   ASK1F405.182    
!  volume cloud fraction into the area fraction array.                     ASK1F405.183    
        DO LEVEL = 1,Q_LEVELS                                              ASK1F405.184    
          DO I = 1,P_FIELD                                                 ASK1F405.185    
            AREA_CLOUD_FRACTION(I,LEVEL) = CLOUD_FRACTION(I,LEVEL)         ASK1F405.186    
          END DO                                                           ASK1F405.187    
        END DO                                                             ASK1F405.188    
!                                                                          ASK1F405.189    
      ENDIF                                                                ASK1F405.190    
                                                                           CLDCTL1.152    
      IF(LTIMER) THEN                                                      CLDCTL1.153    
        CALL TIMER('LS_CLD  ',4)                                           CLDCTL1.154    
      END IF                                                               CLDCTL1.155    
                                                                           CLDCTL1.156    
      IF(ICODE.GT.0) THEN                                                  CLDCTL1.157    
        CMESSAGE="CLD_CTL  : ERROR IN LS_CLD"                              CLDCTL1.158    
        RETURN                                                             CLDCTL1.159    
      END IF                                                               CLDCTL1.160    
                                                                           CLDCTL1.161    
CL 9.3 Diagnostic processing                                               CLDCTL1.162    
                                                                           CLDCTL1.163    
      IF(SF(201,9)) THEN                                                   CLDCTL1.164    
                                                                           CLDCTL1.165    
CL Copy cloud fraction to STASHWORK                                        CLDCTL1.166    
                                                                           CLDCTL1.167    
        CALL COPYDIAG_3D (STASHWORK(si(201,9,im_index)),CLOUD_FRACTION,    GRB4F305.42     
     &      FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS,            CLDCTL1.169    
     &      STLIST(1,STINDEX(1,201,9,im_index)),LEN_STLIST,                GRB4F305.43     
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,                               GPB1F403.509    
     &      im_ident,9,201,                                                GPB1F403.510    
*CALL ARGPPX                                                               GPB1F403.511    
     &      ICODE,CMESSAGE)                                                GPB1F403.512    
                                                                           CLDCTL1.172    
        IF(ICODE.GT.0) THEN                                                CLDCTL1.173    
          CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(cloud fraction)"       CLDCTL1.174    
          RETURN                                                           CLDCTL1.175    
        END IF                                                             CLDCTL1.176    
      ENDIF                                                                CLDCTL1.177    
!                                                                          ASK1F405.191    
      IF(SF(227,9)) THEN                                                   ASK1F405.192    
CL Copy cloud area fraction to STASHWORK                                   ASK1F405.193    
        CALL COPYDIAG_3D (STASHWORK(si(227,9,im_index)),                   ASK1F405.194    
     &      AREA_CLOUD_FRACTION,FIRST_POINT,LAST_POINT,P_FIELD,            ASK1F405.195    
     &      ROW_LENGTH,P_LEVELS,STLIST(1,STINDEX(1,227,9,im_index)),       ASK1F405.196    
     &      LEN_STLIST,STASH_LEVELS,NUM_STASH_LEVELS+1,                    ASK1F405.197    
     &      im_ident,9,227,                                                ASK1F405.198    
*CALL ARGPPX                                                               ASK1F405.199    
     &      ICODE,CMESSAGE)                                                ASK1F405.200    
        IF(ICODE.GT.0) THEN                                                ASK1F405.201    
          CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(LSCLD_AREA)"           ASK1F405.202    
          RETURN                                                           ASK1F405.203    
        END IF                                                             ASK1F405.204    
      ENDIF                                                                ASK1F405.205    
!                                                                          ASK1F405.206    
!                                                                          ASK1F405.207    
      IF(SF(228,9)) THEN                                                   ASK1F405.208    
CL Copy RHcrit to STASHWORK                                                ASK1F405.209    
        CALL COPYDIAG_3D (STASHWORK(si(228,9,im_index)),D1(JRHC(1)),       ASK1F405.210    
     &      FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS,            ASK1F405.211    
     &      STLIST(1,STINDEX(1,228,9,im_index)),LEN_STLIST,                ASK1F405.212    
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,                               ASK1F405.213    
     &      im_ident,9,228,                                                ASK1F405.214    
*CALL ARGPPX                                                               ASK1F405.215    
     &      ICODE,CMESSAGE)                                                ASK1F405.216    
        IF(ICODE.GT.0) THEN                                                ASK1F405.217    
          CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(RHCPT)"                ASK1F405.218    
          RETURN                                                           ASK1F405.219    
        END IF                                                             ASK1F405.220    
      ENDIF                                                                ASK1F405.221    
!                                                                          ASK1F405.222    
!                                                                          AJX0F404.498    
! Calculate a 2D convective cloud amount to pass to diagnostic             AJX0F404.499    
! routines.                                                                AJX0F404.500    
!                                                                          AJX0F404.501    
      IF (L_3D_CCA) THEN                                                   AJX0F404.502    
        DO I=1,P_FIELD                                                     AJX0F404.503    
          LEVEL=ID1(JCCT+I-1)                                              AJX0F404.504    
          IF (LEVEL .GT. 1) THEN                                           AJX0F404.505    
            CCA2D(I)=D1(JCCA(LEVEL-1)+I-1)                                 AJX0F404.506    
          ELSE                                                             AJX0F404.507    
            CCA2D(I)=0.0                                                   AJX0F404.508    
          ENDIF                                                            AJX0F404.509    
        ENDDO                                                              AJX0F404.510    
      ELSE                                                                 AJX0F404.511    
        DO I=1,P_FIELD                                                     AJX0F404.512    
          CCA2D(I)=D1(JCCA(1)+I-1)                                         AJX0F404.513    
        ENDDO                                                              AJX0F404.514    
      ENDIF                                                                AJX0F404.515    
                                                                           CLDCTL1.178    
      IF ( SF(203,9) .OR. SF(204,9) .OR. SF(205,9) .OR.                    WI080293.1      
     &     SF(216,9) .OR. SF(217,9) .OR. SF(226,9) ) THEN                  AYY1F404.166    
                                                                           CLDCTL1.180    
C                                                                          CLDCTL1.181    
CL----------- Calculate layer cloud amount-----------------                CLDCTL1.182    
C                                                                          CLDCTL1.183    
C  The cloud amount is found by finding the max cloud cover over           CLDCTL1.184    
C  a set of levels. The boundaries of these types are set in SETDCFL1      CLDCTL1.185    
C  and stored in CCONSTS.                                                  CLDCTL1.186    
                                                                           CLDCTL1.187    
        CALL CLOUD_COVER (AREA_CLOUD_FRACTION, CCA2D, D1(JCCB),D1(JCCT),   ASK1F405.223    
     &                   STASHWORK(si(203,9,im_index)),                    GRB4F305.44     
     &                   STASHWORK(si(204,9,im_index)),                    GRB4F305.45     
     &                   STASHWORK(si(205,9,im_index)),                    GRB4F305.46     
     &                   STASHWORK(si(216,9,im_index)),                    GRB4F305.47     
     &                   STASHWORK(si(217,9,im_index)),                    GRB4F305.48     
     &                   STASHWORK(si(226,9,im_index)),                    AYY1F404.167    
     &                   LOW_BOT_LEVEL,LOW_TOP_LEVEL,                      CLDCTL1.191    
     &                   MED_BOT_LEVEL,MED_TOP_LEVEL,                      CLDCTL1.192    
     &                   HIGH_BOT_LEVEL,HIGH_TOP_LEVEL,                    CLDCTL1.193    
     &                   SF(203,9),SF(204,9),SF(205,9),                    CLDCTL1.194    
     &                   SF(216,9), SF(217,9), SF(226,9),                  AYY1F404.168    
     &                   CLOUD_LEVELS,P_FIELDDA,                           @DYALLOC.759    
     &                   Q_LEVELSDA,                                       AYY1F404.169    
     &                   ICODE,CMESSAGE)                                   CLDCTL1.196    
                                                                           CLDCTL1.197    
        IF (ICODE.GT.0) THEN                                               CLDCTL1.198    
          RETURN                                                           CLDCTL1.199    
        END IF                                                             CLDCTL1.200    
                                                                           CLDCTL1.201    
      END IF                                                               CLDCTL1.202    
                                                                           CLDCTL1.203    
        IF(SF(206,9)) THEN                                                 CLDCTL1.204    
                                                                           CLDCTL1.205    
CL Copy Cloud water to STASHWORK                                           CLDCTL1.206    
                                                                           CLDCTL1.207    
          CALL COPYDIAG_3D(STASHWORK(si(206,9,im_index)),D1(JQCL(1)),      GRB4F305.49     
     &        FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,                   CLDCTL1.209    
     &        P_LEVELS,STLIST(1,STINDEX(1,206,9,im_index)),LEN_STLIST,     GRB4F305.50     
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,                               GPB1F403.513    
     &      im_ident,9,206,                                                GPB1F403.514    
*CALL ARGPPX                                                               GPB1F403.515    
     &      ICODE,CMESSAGE)                                                GPB1F403.516    
                                                                           CLDCTL1.212    
          IF (ICODE.GT.0) THEN                                             CLDCTL1.213    
            CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(cloud water)"        CLDCTL1.214    
            RETURN                                                         CLDCTL1.215    
          END IF                                                           CLDCTL1.216    
                                                                           CLDCTL1.217    
        END IF                                                             CLDCTL1.218    
                                                                           CLDCTL1.219    
        IF(SF(207,9)) THEN                                                 CLDCTL1.220    
                                                                           CLDCTL1.221    
CL Copy Cloud ice to STASHWORK                                             CLDCTL1.222    
                                                                           CLDCTL1.223    
          CALL COPYDIAG_3D(STASHWORK(si(207,9,im_index)),D1(JQCF(1)),      GRB4F305.51     
     &        FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,                   CLDCTL1.225    
     &        P_LEVELS,STLIST(1,STINDEX(1,207,9,im_index)),LEN_STLIST,     GRB4F305.52     
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,                               GPB1F403.517    
     &      im_ident,9,207,                                                GPB1F403.518    
*CALL ARGPPX                                                               GPB1F403.519    
     &      ICODE,CMESSAGE)                                                GPB1F403.520    
                                                                           CLDCTL1.228    
          IF (ICODE.GT.0) THEN                                             CLDCTL1.229    
            CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(cloud ice)"          CLDCTL1.230    
            RETURN                                                         CLDCTL1.231    
          END IF                                                           CLDCTL1.232    
                                                                           CLDCTL1.233    
        END IF                                                             CLDCTL1.234    
!                                                                          AYY1F404.170    
      IF(SF(224,9)) THEN                                                   AYY1F404.171    
!                                                                          AYY1F404.172    
! 1A Cloud : Copy Cloud PDF QC value to STASHWORK (NOT IN MASTER LIST)     AYY1F404.173    
! 2A Cloud : Copy cloud liquid fraction to STASHWORK                       AYY1F404.174    
!                                                                          AYY1F404.175    
        CALL COPYDIAG_3D (STASHWORK(si(224,9,im_index)),                   AYY1F404.176    
     &      PDF_QC_OR_CF_LIQ,                                              AYY1F404.177    
     &      FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS,            AYY1F404.178    
     &      STLIST(1,STINDEX(1,224,9,im_index)),LEN_STLIST,                AYY1F404.179    
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,im_ident,9,224,                AYY1F404.180    
*CALL ARGPPX                                                               AYY1F404.181    
     &      ICODE,CMESSAGE)                                                AYY1F404.182    
!                                                                          AYY1F404.183    
        IF(ICODE.GT.0) THEN                                                AYY1F404.184    
          CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(cloud liq frac)"       AYY1F404.185    
          RETURN                                                           AYY1F404.186    
        END IF                                                             AYY1F404.187    
      END IF                                                               AYY1F404.188    
!                                                                          AYY1F404.189    
      IF(SF(225,9)) THEN                                                   AYY1F404.190    
!                                                                          AYY1F404.191    
! 1A Cloud : Copy Cloud PDF bs value to STASHWORK (NOT IN MASTER LIST)     AYY1F404.192    
! 2A Cloud : Copy cloud ice fraction to STASHWORK                          AYY1F404.193    
!                                                                          AYY1F404.194    
        CALL COPYDIAG_3D (STASHWORK(si(225,9,im_index)),                   AYY1F404.195    
     &      PDF_BS_OR_CF_ICE,                                              AYY1F404.196    
     &      FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,P_LEVELS,            AYY1F404.197    
     &      STLIST(1,STINDEX(1,225,9,im_index)),LEN_STLIST,                AYY1F404.198    
     &      STASH_LEVELS,NUM_STASH_LEVELS+1,im_ident,9,225,                AYY1F404.199    
*CALL ARGPPX                                                               AYY1F404.200    
     &      ICODE,CMESSAGE)                                                AYY1F404.201    
!                                                                          AYY1F404.202    
        IF(ICODE.GT.0) THEN                                                AYY1F404.203    
          CMESSAGE="CLD_CTL  : ERROR IN COPYDIAG_3D(cloud ice frac)"       AYY1F404.204    
          RETURN                                                           AYY1F404.205    
        END IF                                                             AYY1F404.206    
      END IF                                                               AYY1F404.207    
!                                                                          AYY1F404.208    
C  Hard-wired loop over 8 cloud cover thresholds, with stashcodes          RB200193.32     
C   208 - 215 inclusive, not all of which need have been selected.         RB200193.33     
C    This will be replaced by User Interface provided pseudo-levels        RB200193.34     
C     list with N_OCTAS set and single call of CLOUD_COVER_BASE            RB200193.35     
C      at a later version - meanwhile BEWARE.                              RB200193.36     
C                                                                          RB200193.37     
C Items 208-215, 218-220                                                   PC120793.143    
C     Are any low cloud diags required?                                    PC120793.144    
      LC_REQD = SF(218,9).OR.SF(219,9).OR.SF(220,9)                        PC120793.145    
      WBFL_REQD = SF(221,9)                                                ASW1F304.15     
      WBT_REQD = SF(222,9)                                                 ASW1F304.16     
      TCLDH_REQD = SF(223,9)                                               ASW1F304.17     
      DO  IFLAG = 1,8                                                      RB200193.38     
C Do we need to call for cloud base height or low cloud stats?             PC120793.146    
        IF(SF(207+IFLAG,9).OR.LC_REQD.OR.WBFL_REQD.OR.WBT_REQD             ASW1F304.18     
     &  .OR.TCLDH_REQD) THEN                                               ASW1F304.19     
          NOCT=1                                                           PC120793.148    
                                                                           RB200193.40     
C                                                                          RB200193.41     
CL----------- Calculate cloud base for specified cloud cover -------       RB200193.42     
C                                                                          RB200193.43     
C  The cloud base is found by locating the lowest level with               RB200193.44     
C   CLOUD_FRACTION greater than the threshold value (OCTAS), and then      RB200193.45     
C    adjusting for convective cloud if more significant.                   RB200193.46     
                                                                           RB200193.47     
          CALL CLOUD_COVER_BASE(D1(JTHETA(1)),D1(JQ(1)),                   RB200193.48     
     &                   D1(JPSTAR),D1(JP_EXNER(1)),D1(JOROG),             RB200193.49     
     &                   CCA2D,D1(JCCB),                                   AJX0F404.517    
     &                   AREA_CLOUD_FRACTION,D1(JCCT),                     ASK1F405.224    
     &                   P_FIELD,P_LEVELS,Q_LEVELS,                        RB200193.52     
     &                   A_LEVDEPC(JAK),A_LEVDEPC(JBK),                    ASW1F304.21     
     &                   AKH,BKH,                                          RB200193.53     
     &                   OCTAS(IFLAG),NOCT,                                PC120793.149    
     &                   SF(207+IFLAG,9),                                  PC120793.150    
     &                   LC_REQD,                                          PC120793.151    
     &                   WBFL_REQD,                                        ASW1F304.22     
     &                   WBT_REQD,                                         ASW1F304.23     
     &                   TCLDH_REQD,                                       ASW1F304.24     
     &                   C_COVER,                                          PC120793.152    
     &                   LC_FRAC,                                          PC120793.153    
     &                   LC_BASE,                                          PC120793.154    
     &                   LC_TOP,                                           ASW1F304.25     
     &                   WBFLH,                                            ASW1F304.26     
     &                   TW,                                               ASW1F304.27     
     &                   CLOUD_TOP,FIRST_POINT,LAST_POINT)                 ARB2F403.132    
          IF(SF(207+IFLAG,9)) THEN                                         PC120793.156    
            CALL COPYDIAG(STASHWORK(si(207+IFLAG,9,im_index)),C_COVER,     GRB4F305.53     
     &           FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,                GPB1F403.521    
     &           im_ident,9,207+IFLAG,                                     GPB1F403.522    
*CALL ARGPPX                                                               GPB1F403.523    
     &           ICODE,CMESSAGE)                                           GPB1F403.524    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.525    
          ENDIF                                                            PC120793.159    
          IF(LC_REQD) THEN                                                 PC120793.160    
            IF(SF(218,9)) THEN                                             PC120793.161    
            CALL COPYDIAG(STASHWORK(si(218,9,im_index)),LC_FRAC,           GRB4F305.54     
     &               FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,            GPB1F403.526    
     &               im_ident,9,218,                                       GPB1F403.527    
*CALL ARGPPX                                                               GPB1F403.528    
     &               ICODE,CMESSAGE)                                       GPB1F403.529    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.530    
            ENDIF                                                          PC120793.164    
            IF(SF(219,9)) THEN                                             PC120793.165    
            CALL COPYDIAG(STASHWORK(si(219,9,im_index)),LC_BASE,           GRB4F305.55     
     &               FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,            GPB1F403.531    
     &               im_ident,9,219,                                       GPB1F403.532    
*CALL ARGPPX                                                               GPB1F403.533    
     &               ICODE,CMESSAGE)                                       GPB1F403.534    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.535    
            ENDIF                                                          PC120793.168    
            IF(SF(220,9)) THEN                                             PC120793.169    
            CALL COPYDIAG(STASHWORK(si(220,9,im_index)),LC_TOP,            GRB4F305.56     
     &               FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,            GPB1F403.536    
     &               im_ident,9,220,                                       GPB1F403.537    
*CALL ARGPPX                                                               GPB1F403.538    
     &               ICODE,CMESSAGE)                                       GPB1F403.539    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.540    
            ENDIF                                                          PC120793.172    
            LC_REQD=.FALSE.      ! Make sure we don't recalculate it       PC120793.173    
          ENDIF                                                            ASW1F304.29     
          IF (WBFL_REQD) THEN                                              ASW1F304.30     
            CALL COPYDIAG(STASHWORK(si(221,9,im_index)),WBFLH,             GRB4F305.57     
     &                FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,           GPB1F403.541    
     &                im_ident,9,221,                                      GPB1F403.542    
*CALL ARGPPX                                                               GPB1F403.543    
     &                ICODE,CMESSAGE)                                      GPB1F403.544    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.545    
            WBFL_REQD=.FALSE.      ! Make sure we don't recalculate it     ASW1F304.33     
          ENDIF                                                            ASW1F304.34     
          IF (WBT_REQD) THEN                                               ASW1F304.35     
            CALL COPYDIAG_3D(STASHWORK(si(222,9,im_index)),TW,             GRB4F305.58     
     &               FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,            ASW1F304.37     
     &        P_LEVELS,STLIST(1,STINDEX(1,222,9,im_index)),LEN_STLIST,     GRB4F305.59     
     &               STASH_LEVELS,NUM_STASH_LEVELS+1,                      ASW1F304.39     
     &               im_ident,9,222,                                       GPB1F403.546    
*CALL ARGPPX                                                               GPB1F403.547    
     &               ICODE,CMESSAGE)                                       ASW1F304.40     
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.548    
            WBT_REQD=.FALSE.      ! Make sure we don't recalculate it      ASW1F304.41     
          ENDIF                                                            ASW1F304.42     
          IF (TCLDH_REQD) THEN                                             ASW1F304.43     
            CALL COPYDIAG(STASHWORK(si(223,9,im_index)),CLOUD_TOP,         GRB4F305.60     
     &                FIRST_POINT,LAST_POINT,P_FIELD,ROW_LENGTH,           GPB1F403.549    
     &                im_ident,9,223,                                      GPB1F403.550    
*CALL ARGPPX                                                               GPB1F403.551    
     &                ICODE,CMESSAGE)                                      GPB1F403.552    
            IF (ICODE .GT. 0) GOTO 9999                                    GPB1F403.553    
            TCLDH_REQD=.FALSE.      ! Make sure we don't recalculate it    ASW1F304.46     
          ENDIF                                                            PC120793.174    
                                                                           RB200193.56     
        END IF                                                             RB200193.57     
                                                                           RB200193.58     
      END DO                                                               RB200193.59     
                                                                           CLDCTL1.235    
CL Call STASH to process output                                            CLDCTL1.236    
                                                                           CLDCTL1.237    
      IF(LTIMER) THEN                                                      CLDCTL1.238    
        CALL TIMER('STASH   ',3)                                           CLDCTL1.239    
      END IF                                                               CLDCTL1.240    
                                                                           CLDCTL1.241    
      CALL STASH(a_sm,a_im,9,STASHWORK,                                    GKR0F305.913    
*CALL ARGSIZE                                                              @DYALLOC.762    
*CALL ARGD1                                                                @DYALLOC.763    
*CALL ARGDUMA                                                              @DYALLOC.764    
*CALL ARGDUMO                                                              @DYALLOC.765    
*CALL ARGDUMW                                                              GKR1F401.194    
*CALL ARGSTS                                                               @DYALLOC.766    
*CALL ARGPPX                                                               GKR0F305.914    
     &           ICODE,CMESSAGE)                                           @DYALLOC.770    
                                                                           CLDCTL1.243    
      IF(LTIMER) THEN                                                      CLDCTL1.244    
        CALL TIMER('STASH   ',4)                                           CLDCTL1.245    
      END IF                                                               CLDCTL1.246    
                                                                           CLDCTL1.247    
      IF(ICODE.GT.0) THEN                                                  CLDCTL1.248    
        RETURN                                                             CLDCTL1.249    
      END IF                                                               CLDCTL1.250    
                                                                           CLDCTL1.251    
*IF DEF,GLOBAL                                                             CLDCTL1.252    
                                                                           CLDCTL1.253    
CL Copy values adjacent to poles into temporary workspace                  CLDCTL1.254    
                                                                           CLDCTL1.255    
*IF DEF,MPP                                                                APBHF401.9      
      IF (at_top_of_LPG) THEN                                              APBHF401.10     
*ENDIF                                                                     APBHF401.11     
        DO LEVEL=1,P_LEVELS                                                APBHF401.12     
          DO I=1,ROW_LENGTH                                                APBHF401.13     
            I1=I+START_POINT_NO_HALO-2                                     APBHF401.14     
            PU=D1(JPSTAR+I1)*BKH(LEVEL+1) + AKH(LEVEL+1)                   APBHF401.15     
            PL=D1(JPSTAR+I1)*BKH(LEVEL)   + AKH(LEVEL)                     APBHF401.16     
            N_POLAR_VALUES(I,LEVEL)=D1(JTHETA(LEVEL)+I1)/                  APBHF401.17     
     &      P_EXNER_C( D1(JP_EXNER(LEVEL+1)+I1),D1(JP_EXNER(LEVEL)+I1),    APBHF401.18     
     &      PU,PL,KAPPA )                                                  APBHF401.19     
          ENDDO                                                            APBHF401.20     
        ENDDO                                                              APBHF401.21     
                                                                           APBHF401.22     
        DO 102 LEVEL=1,Q_LEVELS                                            APBHF401.23     
          DO I=1,ROW_LENGTH                                                APBHF401.24     
            I1=I+START_POINT_NO_HALO-2                                     APBHF401.25     
            N_POLAR_VALUES(I,LEVEL+P_LEVELS)=D1(JQ(LEVEL)+I1)              APBHF401.26     
            N_POLAR_VALUES(I,LEVEL+P_LEVELS+Q_LEVELS)=                     APBHF401.27     
     &        D1(JQCL(LEVEL)+I1)                                           APBHF401.28     
            N_POLAR_VALUES(I,LEVEL+P_LEVELS+2*Q_LEVELS)=                   APBHF401.29     
     &        D1(JQCF(LEVEL)+I1)                                           APBHF401.30     
          ENDDO                                                            APBHF401.31     
  102   CONTINUE                                                           APBHF401.32     
*IF DEF,MPP                                                                APBHF401.33     
      ENDIF                                                                APBHF401.34     
                                                                           APBHF401.35     
      IF (at_base_of_LPG) THEN                                             APBHF401.36     
*ENDIF                                                                     APBHF401.37     
        DO LEVEL=1,P_LEVELS                                                APBHF401.38     
          DO I=1,ROW_LENGTH                                                APBHF401.39     
            I2=I+P_BOT_ROW_START-ROW_LENGTH-2                              APBHF401.40     
            PUS=D1(JPSTAR+I2)*BKH(LEVEL+1) + AKH(LEVEL+1)                  APBHF401.41     
            PLS=D1(JPSTAR+I2)*BKH(LEVEL)   + AKH(LEVEL)                    APBHF401.42     
            S_POLAR_VALUES(I,LEVEL)=D1(JTHETA(LEVEL)+I2)/                  APBHF401.43     
     &      P_EXNER_C( D1(JP_EXNER(LEVEL+1)+I2),D1(JP_EXNER(LEVEL)+I2),    APBHF401.44     
     &      PUS,PLS,KAPPA )                                                APBHF401.45     
          ENDDO                                                            APBHF401.46     
        ENDDO                                                              APBHF401.47     
                                                                           APBHF401.48     
        DO LEVEL=1,Q_LEVELS                                                APBHF401.49     
          DO I=1,ROW_LENGTH                                                APBHF401.50     
            I2=I+P_BOT_ROW_START-ROW_LENGTH-2                              APBHF401.51     
            S_POLAR_VALUES(I,LEVEL+P_LEVELS)=D1(JQ(LEVEL)+I2)              APBHF401.52     
            S_POLAR_VALUES(I,LEVEL+P_LEVELS+Q_LEVELS)=                     APBHF401.53     
     &        D1(JQCL(LEVEL)+I2)                                           APBHF401.54     
            S_POLAR_VALUES(I,LEVEL+P_LEVELS+2*Q_LEVELS)=                   APBHF401.55     
     &        D1(JQCF(LEVEL)+I2)                                           APBHF401.56     
          ENDDO                                                            APBHF401.57     
        ENDDO                                                              APBHF401.58     
*IF DEF,MPP                                                                APBHF401.59     
      ENDIF                                                                APBHF401.60     
*ENDIF                                                                     APBHF401.61     
                                                                           CLDCTL1.289    
*ENDIF                                                                     CLDCTL1.290    
                                                                           CLDCTL1.291    
      IF (.NOT.SWITCH) THEN                                                CLDCTL1.292    
                                                                           CLDCTL1.293    
CL 9.4 Check completion of I/O and add radiation increments. Copy          CLDCTL1.294    
CL     surface increments to SURF_RADFLUX.                                 CLDCTL1.295    
CL     Perform output processing for radiation diagnostics if not a        CLDCTL1.296    
CL     radiation timestep                                                  CLDCTL1.297    
                                                                           CLDCTL1.298    
*IF -DEF,FRADIO                                                            GGH3F401.18     
                                                                           CLDCTL1.300    
        IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN) THEN                             CLDCTL1.301    
          CMESSAGE=' CLD_CTL : PAGING I/O ERROR'                           CLDCTL1.302    
          ICODE=1                                                          CLDCTL1.303    
          RETURN                                                           CLDCTL1.304    
        END IF                                                             CLDCTL1.305    
*ENDIF                                                                     CLDCTL1.306    
                                                                           CLDCTL1.307    
        LEN=(P_FIELDDA*(P_LEVELS+3)+511)/512*512 ! offset to 2nd RADINCS   ARE2F404.41     
C (The above includes extra levels for net surface SW (band 1) without     ARE2F404.42     
C zenith angle adjustment and surface albedo)                              ARE2F404.43     
*IF -DEF,MPP                                                               APB1F305.241    
        FIRST_POINT=ROW_LENGTH+1                                           CLDCTL1.309    
        LAST_POINT=P_FIELD-ROW_LENGTH                                      CLDCTL1.310    
        POINTS = P_FIELD - 2 * ROW_LENGTH                                  CLDCTL1.311    
*ELSE                                                                      APB1F305.242    
      FIRST_POINT = START_POINT_INC_HALO                                   APBHF401.62     
      LAST_POINT  = END_P_POINT_INC_HALO                                   APBHF401.63     
      POINTS      = LAST_POINT-FIRST_POINT+1                               APBHF401.64     
*ENDIF                                                                     APB1F305.256    
                                                                           CLDCTL1.312    
CL      Astronomy calculations - basically duplicating part of RAD_CTL.    CLDCTL1.313    
                                                                           CLDCTL1.314    
CL  Calculate sine of the solar declination and the scaling                CLDCTL1.315    
CL      factor for solar intensity from the day number and year.           CLDCTL1.316    
                                                                           CLDCTL1.317    
        IF(LTIMER) THEN                                                    CLDCTL1.318    
          CALL TIMER('SOLPOS  ',3)                                         CLDCTL1.319    
        END IF                                                             CLDCTL1.320    
                                                                           CLDCTL1.321    
                                                                           AWI1F403.338    
C       ! HADCM2 physics must continue to use the wrong solar time.        AWI1F403.339    
                                                                           AWI1F403.340    
        IF ( H_SECT(1) .EQ. '02B' ) THEN                                   AWI1F403.341    
           CALL SOLPOS (I_DAY_NUMBER, I_YEAR, SINDEC, SCS, LCAL360)        AWI1F403.342    
         ELSE                                                              AWI1F403.343    
           CALL SOLPOS (PREVIOUS_TIME(7), PREVIOUS_TIME(1), SINDEC, SCS,   AWI1F403.344    
     &                    LCAL360)                                         AWI1F400.10     
        ENDIF                                                              AWI1F403.345    
                                                                           CLDCTL1.323    
        IF(LTIMER) THEN                                                    CLDCTL1.324    
          CALL TIMER('SOLPOS  ',4)                                         CLDCTL1.325    
        END IF                                                             CLDCTL1.326    
                                                                           CLDCTL1.327    
C calculate sine of true latitude from Coriolis component F3               CLDCTL1.328    
                                                                           CLDCTL1.329    
        CALL UV_TO_P(F3(FIRST_VALID_PT),                                   APBHF401.65     
     &               SIN_TRUE_LATITUDE(FIRST_VALID_PT+ROW_LENGTH),         APBHF401.66     
     &               U_FIELD-FIRST_VALID_PT+1,                             APBHF401.67     
     &               P_FIELD-(FIRST_VALID_PT+ROW_LENGTH)+1,                APBHF401.68     
     &               ROW_LENGTH,upd_P_ROWS+1)                              APBHF401.69     
                                                                           APBHF401.70     
*IF DEF,MPP                                                                APBHF401.71     
        CALL SWAPBOUNDS(SIN_TRUE_LATITUDE,ROW_LENGTH,P_ROWS,               APBHF401.72     
     &                  EW_Halo,NS_Halo,1)                                 APBHF401.73     
*ENDIF                                                                     APBHF401.74     
        DO I=FIRST_POINT, LAST_POINT                                       CLDCTL1.332    
          SIN_TRUE_LATITUDE(I) = SIN_TRUE_LATITUDE(I) * 0.5 / OMEGA        CLDCTL1.333    
        END DO                                                             CLDCTL1.334    
                                                                           CLDCTL1.335    
C calculate seconds elapsed since midnight                                 CLDCTL1.336    
                                                                           CLDCTL1.337    
        IF ( H_SECT(1) .EQ. '02B' ) THEN                                   AWI1F403.346    
           TIME = REAL ( 3600 * I_HOUR + 60 * I_MINUTE + I_SECOND )        AWI1F403.347    
         ELSE                                                              AWI1F403.348    
           TIME = REAL ( 3600*PREVIOUS_TIME(4) + 60*PREVIOUS_TIME(5)       AWI1F403.349    
     &                                      + PREVIOUS_TIME(6) )           AWI1F400.12     
        ENDIF                                                              AWI1F403.350    
                                                                           AWI1F403.351    
                                                                           CLDCTL1.339    
        IF(LTIMER) THEN                                                    CLDCTL1.340    
          CALL TIMER('SOLANG  ',3)                                         CLDCTL1.341    
        END IF                                                             CLDCTL1.342    
                                                                           CLDCTL1.343    
CL Calculate day fraction and the zenith angle for each grid point         CLDCTL1.344    
                                                                           CLDCTL1.345    
        CALL SOLANG(                                                       CLDCTL1.346    
C input constants                                                          CLDCTL1.347    
C    &     SINDEC, TIME, A_REALHD(30),                                     ADR1F305.60     
     &     SINDEC, TIME, SECS_PER_STEPim(atmos_im),                        ADR1F305.61     
C row and column dependent constants                                       CLDCTL1.349    
     &     SIN_TRUE_LATITUDE(FIRST_POINT), TRUE_LONGITUDE(FIRST_POINT),    CLDCTL1.350    
C size variables                                                           CLDCTL1.351    
     &     POINTS,                                                         CLDCTL1.352    
C output fields                                                            CLDCTL1.353    
     &     DAY_FRACTION(FIRST_POINT), COS_ZENITH_ANGLE(FIRST_POINT) )      CLDCTL1.354    
                                                                           CLDCTL1.355    
        IF(LTIMER) THEN                                                    CLDCTL1.356    
          CALL TIMER('SOLANG  ',4)                                         CLDCTL1.357    
        END IF                                                             CLDCTL1.358    
                                                                           CLDCTL1.359    
CL      ! Combine the two terms to give the mean cos zenith angle over     CLDCTL1.360    
CL      !  the whole of the physics timestep,                              CLDCTL1.361    
        DO I=FIRST_POINT, LAST_POINT                                       CLDCTL1.364    
          COS_ZENITH_ANGLE(I) = COS_ZENITH_ANGLE(I) * DAY_FRACTION(I)      CLDCTL1.365    
        ENDDO                                                              CLDCTL1.367    
C                                                                          CLDCTL1.368    
C       !  Some SW diagnostics can now be made available:                  CLDCTL1.369    
        IF ( SF(202,1) ) THEN                                              CLDCTL1.370    
          DO I=FIRST_POINT, LAST_POINT                                     CLDCTL1.371    
            STASHWORK(si(202,1,im_index)+I-1) =                            GRB4F305.61     
     &                                 RADINCS(I) * COS_ZENITH_ANGLE(I)    GRB4F305.62     
          ENDDO                                                            CLDCTL1.373    
        CALL EXTDIAG (STASHWORK,si(1,1,im_index),SF(1,1),202,202,INT9,     GPB1F403.1285   
     &     ROW_LENGTH, STLIST, LEN_STLIST, STINDEX(1,1,1,im_index), 2,     GPB1F403.1286   
     &     STASH_LEVELS, NUM_STASH_LEVELS+1,                               GPB1F403.1287   
     &     STASH_PSEUDO_LEVELS, NUM_STASH_PSEUDO,                          GPB1F403.1288   
     &     im_ident,1,                                                     GPB1F403.1289   
*CALL ARGPPX                                                               GPB1F403.1290   
     &     ICODE, CMESSAGE)                                                GPB1F403.1291   
        ENDIF                                                              CLDCTL1.374    
        IF ( SF(207,1) ) THEN                                              CLDCTL1.375    
          DO I=FIRST_POINT, LAST_POINT                                     CLDCTL1.376    
            STASHWORK(si(207,1,im_index)+I-1) =                            GRB4F305.63     
     &                                 COS_ZENITH_ANGLE(I) * SC * SCS      GRB4F305.64     
          ENDDO                                                            CLDCTL1.378    
        CALL EXTDIAG (STASHWORK,si(1,1,im_index),SF(1,1),207,207,INT9,     GPB1F403.1292   
     &     ROW_LENGTH, STLIST, LEN_STLIST, STINDEX(1,1,1,im_index), 2,     GPB1F403.1293   
     &     STASH_LEVELS, NUM_STASH_LEVELS+1,                               GPB1F403.1294   
     &     STASH_PSEUDO_LEVELS, NUM_STASH_PSEUDO,                          GPB1F403.1295   
     &     im_ident,1,                                                     GPB1F403.1296   
*CALL ARGPPX                                                               GPB1F403.1297   
     &     ICODE, CMESSAGE)                                                GPB1F403.1298   
        ENDIF                                                              CLDCTL1.379    
        IF ( SF(232,1) ) THEN                                              CLDCTL1.380    
          DO 13 LEVEL=1,                                                   GRB4F305.65     
     &            STASH_LEVELS(1,-STLIST(10,STINDEX(1,232,1,im_index)))    GRB4F305.66     
            DO I=FIRST_POINT, LAST_POINT                                   CLDCTL1.382    
             STASHWORK(si(232,1,im_index)+I-1+(LEVEL-1)*P_FIELD) =         GRB4F305.67     
     &   RADINCS(I+LEVEL*P_FIELD) * COS_ZENITH_ANGLE(I) /                  ADR1F305.62     
     &   SECS_PER_STEPim(atmos_im)                                         ADR1F305.63     
            ENDDO                                                          CLDCTL1.385    
   13     CONTINUE                                                         CLDCTL1.386    
        CALL EXTDIAG (STASHWORK,si(1,1,im_index),SF(1,1),232,232,INT9,     GPB1F403.1299   
     &     ROW_LENGTH, STLIST, LEN_STLIST, STINDEX(1,1,1,im_index), 2,     GPB1F403.1300   
     &     STASH_LEVELS, NUM_STASH_LEVELS+1,                               GPB1F403.1301   
     &     STASH_PSEUDO_LEVELS, NUM_STASH_PSEUDO,                          GPB1F403.1302   
     &     im_ident,1,                                                     GPB1F403.1303   
*CALL ARGPPX                                                               GPB1F403.1304   
     &     ICODE, CMESSAGE)                                                GPB1F403.1305   
        ENDIF                                                              CLDCTL1.387    
C                                                                          CLDCTL1.392    
C      add surface fluxes                                                  CLDCTL1.393    
C                                                                          CLDCTL1.394    
        DO I=FIRST_POINT,LAST_POINT                                        CLDCTL1.395    
          SURF_RADFLUX(I) =                                                CLDCTL1.396    
     &          RADINCS(I) * COS_ZENITH_ANGLE(I) + RADINCS(I+LEN)          CLDCTL1.397    
          PHOTOSYNTH_ACT_RAD(I) =                                          AJS1F401.1469   
     &          RADINCS(I+P_FIELD*(P_LEVELS+1)) * COS_ZENITH_ANGLE(I)      AJS1F401.1470   
        END DO                                                             CLDCTL1.398    
                                                                           ARE2F404.44     
C                                                                          CLDCTL1.399    
C      add in short wave radiation increments                              CLDCTL1.400    
C                                                                          CLDCTL1.401    
        DO 96 LEVEL=1,P_LEVELS                                             CLDCTL1.402    
          DO I=FIRST_POINT,LAST_POINT                                      CLDCTL1.403    
            D1(JTHETA(LEVEL)+I-1) = D1(JTHETA(LEVEL)+I-1)+                 CLDCTL1.404    
     &         RADINCS(I+LEVEL*P_FIELD) * COS_ZENITH_ANGLE(I)              CLDCTL1.405    
!                                                                          ARN1F404.108    
!           Calculate radiative heating rates for layers 1 to BL_LEVELS    ARN1F404.109    
!                                                                          ARN1F404.110    
                                                                           ARN1F404.111    
            IF (L_RADHEAT .AND. LEVEL .LE. BL_LEVELS) THEN                 ARN1F404.112    
              RADHEAT_RATE(I,LEVEL) =                                      ARN1F404.113    
     &           ( RADINCS(I+LEVEL*P_FIELD) * COS_ZENITH_ANGLE(I)          ARN1F404.114    
     &           + RADINCS(I+LEVEL*P_FIELD+LEN) )                          ARN1F404.115    
     &           / SECS_PER_STEPim(atmos_im)                               ARN1F404.116    
            ENDIF                                                          ARN1F404.117    
          END DO                                                           CLDCTL1.406    
 96     CONTINUE                                                           CLDCTL1.407    
                                                                           CLDCTL1.408    
        IF(LTIMER) THEN                                                    CLDCTL1.409    
          CALL TIMER('STASH   ',3)                                         CLDCTL1.410    
        END IF                                                             CLDCTL1.411    
                                                                           CLDCTL1.412    
        CALL STASH(a_sm,a_im,1,STASHWORK,                                  GKR0F305.915    
*CALL ARGSIZE                                                              @DYALLOC.773    
*CALL ARGD1                                                                @DYALLOC.774    
*CALL ARGDUMA                                                              @DYALLOC.775    
*CALL ARGDUMO                                                              @DYALLOC.776    
*CALL ARGDUMW                                                              GKR1F401.195    
*CALL ARGSTS                                                               @DYALLOC.777    
*CALL ARGPPX                                                               GKR0F305.916    
     &             ICODE,CMESSAGE)                                         @DYALLOC.781    
                                                                           CLDCTL1.414    
        IF (ICODE.GT.0) RETURN                                             CLDCTL1.415    
                                                                           CLDCTL1.416    
        IF(LTIMER) THEN                                                    CLDCTL1.417    
          CALL TIMER('STASH   ',4)                                         CLDCTL1.418    
        END IF                                                             CLDCTL1.419    
C                                                                          CLDCTL1.420    
C      add in long wave radiation increments                               CLDCTL1.421    
C                                                                          CLDCTL1.422    
        DO 97 LEVEL=1,P_LEVELS                                             CLDCTL1.423    
          DO I=FIRST_POINT,LAST_POINT                                      CLDCTL1.424    
            D1(JTHETA(LEVEL)+I-1) = D1(JTHETA(LEVEL)+I-1)+                 CLDCTL1.425    
     &      RADINCS(I+LEVEL*P_FIELD+LEN)                                   CLDCTL1.426    
          END DO                                                           CLDCTL1.427    
 97     CONTINUE                                                           CLDCTL1.428    
                                                                           ARE2F404.45     
        IF ( H_SECT(3) .EQ. '07A' ) THEN                                   ARE2F404.46     
                                                                           ARE2F404.47     
          LAND1 = 1                                                        ARE2F404.48     
          LAND_PTS = 0                                                     ARE2F404.49     
          DO L=1,LAND_FIELD                                                ARE2F404.50     
            IF ( LAND_LIST(L) .LT. FIRST_POINT ) THEN                      ARE2F404.51     
              LAND1 = LAND1 + 1                                            ARE2F404.52     
            ELSEIF ( LAND_LIST(L) .LE. LAST_POINT ) THEN                   ARE2F404.53     
              LAND_PTS = LAND_PTS + 1                                      ARE2F404.54     
            ENDIF                                                          ARE2F404.55     
          ENDDO                                                            ARE2F404.56     
                                                                           ARE2F404.57     
CL Set the SW+LW flux over the snow-free surface to the gridbox mean       ABX1F405.97     
CL SW+LW flux (valid for sea points but corrected in RAD_MOSES for land    ABX1F405.98     
CL points)                                                                 ABX1F405.99     
        DO I=FIRST_POINT,LAST_POINT                                        ABX1F405.100    
          RAD_NO_SNOW(I) = SURF_RADFLUX(I)                                 ABX1F405.101    
          RAD_SNOW(I) = SURF_RADFLUX(I)                                    ABX1F405.102    
        ENDDO                                                              ABX1F405.103    
                                                                           ABX1F405.104    
          CALL RAD_MOSES (                                                 ARE2F404.58     
     &     P_FIELD,LAND_FIELD,LAND1,LAND_PTS,LAND_LIST,P_LEVELS,           ARE2F404.59     
     &     BL_LEVELS,AKH,BKH,COS_ZENITH_ANGLE,                             ARE2F404.60     
     &     RADINCS(P_FIELD*(P_LEVELS+2)+1),D1(JSFA),RADINCS(LEN+1),        ARE2F404.61     
     &     RADINCS(P_FIELD+LEN+1),D1(JPSTAR),                              ARE2F404.62     
     &     RADINCS,SNOW_FRAC,D1(JFRAC_TYP),                                ARE2F404.63     
     &     RADINCS(P_FIELD*(P_LEVELS+1)+LEN+1),                            ARE2F404.64     
     &     D1(JTSTAR_TYP),SECS_PER_STEPim(atmos_im),                       ARE2F404.65     
     &     D1(JTHETA(1)),RAD_NO_SNOW,RAD_SNOW                              ARE2F404.66     
     &     )                                                               ARE2F404.67     
                                                                           ARE1F405.1      
C Overwrite SURF_RADFLUX with the gridbox average for land points          ARE1F405.2      
           DO L=LAND1,LAND1+LAND_PTS-1                                     ARE1F405.3      
             I = LAND_LIST(L)                                              ARE1F405.4      
             SURF_RADFLUX(I) = (1. - SNOW_FRAC(L))*RAD_NO_SNOW(I)          ARE1F405.5      
     &                                 + SNOW_FRAC(L)*RAD_SNOW(I)          ARE1F405.6      
           ENDDO                                                           ARE1F405.7      
                                                                           ARE1F405.8      
        ELSE IF ( H_SECT(3) .NE. '03A' .AND.                               ABX1F405.105    
     &            H_SECT(3) .NE. '05A' .AND.                               ABX1F405.106    
     &            H_SECT(3) .NE. '06A' ) THEN                              ABX1F405.107    
           ICODE=1                                                         ABX1F405.108    
           CMESSAGE='CLD_CTL: Unknown version of Section 3 '               ABX1F405.109    
     &       //'encountered at call to RAD_MOSES.'                         ABX1F405.110    
           RETURN                                                          ABX1F405.111    
        ENDIF                                                              ARE2F404.68     
                                                                           CLDCTL1.429    
        IF(LTIMER) THEN                                                    CLDCTL1.430    
          CALL TIMER('STASH   ',3)                                         CLDCTL1.431    
        END IF                                                             CLDCTL1.432    
                                                                           CLDCTL1.433    
        CALL STASH(a_sm,a_im,2,STASHWORK,                                  GKR0F305.917    
*CALL ARGSIZE                                                              @DYALLOC.783    
*CALL ARGD1                                                                @DYALLOC.784    
*CALL ARGDUMA                                                              @DYALLOC.785    
*CALL ARGDUMO                                                              @DYALLOC.786    
*CALL ARGDUMW                                                              GKR1F401.196    
*CALL ARGSTS                                                               @DYALLOC.787    
*CALL ARGPPX                                                               GKR0F305.918    
     &             ICODE,CMESSAGE)                                         @DYALLOC.791    
                                                                           CLDCTL1.435    
        IF (ICODE.GT.0) RETURN                                             CLDCTL1.436    
                                                                           CLDCTL1.437    
        IF(LTIMER) THEN                                                    CLDCTL1.438    
          CALL TIMER('STASH   ',4)                                         CLDCTL1.439    
        END IF                                                             CLDCTL1.440    
                                                                           CLDCTL1.441    
      END IF                                                               CLDCTL1.442    
                                                                           CLDCTL1.443    
 9999 CONTINUE                                                             GPB1F403.554    
      RETURN                                                               CLDCTL1.444    
      END                                                                  CLDCTL1.445    
*ENDIF                                                                     CLDCTL1.446