*IF DEF,CONTROL,AND,DEF,ATMOS                                              ATMSTEP1.2      
C ******************************COPYRIGHT******************************    GTS2F400.397    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.398    
C                                                                          GTS2F400.399    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.400    
C restrictions as set forth in the contract.                               GTS2F400.401    
C                                                                          GTS2F400.402    
C                Meteorological Office                                     GTS2F400.403    
C                London Road                                               GTS2F400.404    
C                BRACKNELL                                                 GTS2F400.405    
C                Berkshire UK                                              GTS2F400.406    
C                RG12 2SZ                                                  GTS2F400.407    
C                                                                          GTS2F400.408    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.409    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.410    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.411    
C Modelling at the above address.                                          GTS2F400.412    
C ******************************COPYRIGHT******************************    GTS2F400.413    
C                                                                          GTS2F400.414    
CLL Subroutine ATM_STEP -----------------------------------------------    ATMSTEP1.3      
CLL                                                                        ATMSTEP1.4      
CLL Purpose : Performs an atmosphere timestep.                             ATMSTEP1.5      
CLL          Call order is dynamics then physics then assimilation if      ATMSTEP1.6      
CLL          required. If boundary updating required, calls                ATMSTEP1.7      
CLL          BOUNDVAL. If boundary values required for the regional        ATMSTEP1.8      
CLL          model calls GEN_INTF.                                         ATMSTEP1.9      
CLL                                                                        ATMSTEP1.10     
CLL Level 2 control routine                                                ATMSTEP1.11     
CLL Version for CRAY YMP                                                   ATMSTEP1.12     
CLL                                                                        ATMSTEP1.13     
CLL  Model            Modification history from model version 3.0:         ATMSTEP1.14     
CLL version  Date                                                          ATMSTEP1.15     
CLL   3.1  22/01/93  Add debugging code under *DEF BITCOM10 to assist      TJ270193.14     
CLL                  bit compare tests across new releases of the model.   TJ270193.15     
CLL  3.1    8/02/93 : added comdeck CHSUNITS to define NUNITS for          RS030293.194    
CLL                   CCONTROL                                             RS030293.195    
CLL   3.1   17/2/93 : Add timer routine for GEN_INTF. D Robinson           DR240293.1      
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.22     
CLL                   portability and correct calls to TIMER - first       TS150793.23     
CLL                   argument should be an 8 character name.              TS150793.24     
CLL                   Author: Tracey Smith.                                TS150793.25     
CLL   3.2  16/06/93  Dynamic allocation of main arrays. R T H Barnes       @DYALLOC.460    
CLL   3.3  30/09/93  Option on frequency of convection scheme calls,       RB300993.7      
CLL                  using COMDECKS ARGCNVI,TYPCNVI.    R.T.H.Barnes.      RB300993.8      
CLL   3.3   24/09/93 : added P_FIELDDA to argument list for portable       NF171193.11     
CLL                    dynamic arrays. Author: Paul Burton                 NF171193.12     
CLL   3.4  21/07/94  DEF BITCOM10 replaced by LOGICAL L_WRIT_ATMSTEP       GSS1F304.1085   
CLL                  Time step control mechanism for WRITD1 added          GSS1F304.1086   
CLL                  DEF LBOUTA replaced by LOGICAL LLBOUTA                GSS1F304.1087   
CLL                  Comdeck C_GLOBAL *CALLed (declares LGLOBAL)           GSS1F304.1088   
CLL                  Comdeck C_WRITD  *CALLed (time step control data      GSS1F304.1089   
CLL                                            for WRITD1)                 GSS1F304.1090   
CLL                  Arguments LLBOUTA, LCAL360 passed to GEN_INTF         GSS1F304.1091   
CLL                                                  S.J.Swarbrick         GSS1F304.1092   
CLL   3.4   1/8/94  Add code for Var outer loop processing S. Bell         VSB1F304.44     
CLL  3.4  29/11/94  Add TR_VARS to AC_CTL arg.list for portability         ANF1F304.1      
CLL                 and P_FIELD,P_LEVELS to ST_DIAG2.  RTHBarnes.          ANF1F304.2      
CLL  3.5  5/6/95    Submodels project. Introduced *CALL ARGPPX             GSS2F305.87     
CLL                 PPXLOOK to pass ppx lookup arrays to VAR_COPY.         GSS2F305.88     
CLL                  S.J.Swarbrick                                         GSS2F305.89     
CLL  4.0  31/08/95  Option for dynamics timestep different from            ARB0F400.39     
CLL                 physics/assm. timestep.                RTHBarnes       ARB0F400.40     
CLL  4.0  05/01/96: Pass dynamic allocated arrays to AC_CTL1.              ABM3F400.43     
CLL                 (N Farnon)                                             ABM3F400.44     
!LL  4.0 23/11/95 : added Q_FIELDS to argument list of ATM_DYN.            AYY2F400.331    
!LL                                 Author: Andrew Bushell                 AYY2F400.332    
!LL  4.0 04/12/95 : Mod for dynamic array put in at vn3.5 - for lexcon.    AYY2F400.333    
!LL                                 Author: N. Farnon                      AYY2F400.334    
!LL  4.1 18/04/96 : Initialise the TYPFLDPT variables, and pass as         GPB0F401.131    
!                   arguments to ATM_DYN and ATM_PHYS                      GPB0F401.132    
!                                                       P.Burton           GPB0F401.133    
CLL  4.1 14/05/96 : Add TR_VARS to ST_DIAG2 arg.list.                      ADP0F401.1      
CLL                                 Author: D.Podd                         ADP0F401.2      
CLL 4.1 6/2/96     Extra LAND_FIELD and SM_LEVELS to argument              AJS1F401.158    
CLL 4.1 6/2/96     list of ATM_PHYS                                        AJS1F401.159    
CLL                J.Smith                                                 AJS1F401.160    
!    4.1  16/01/96  Pass ARGPPX to GEN_INTF. D. Robinson.                  APB4F401.1      
CLL   4.1  22/05/96  Replaced *DEF FAST with FRADIO to allow fast          GGH3F401.7      
CLL                  radiation i/o code to be used. G Henderson            GGH3F401.8      
!LL 4.3 6/3/97     Moved loop for multiple dynamics timesteps down         GPB3F403.4      
!LL                to atmdyn.                    P.Burton                  GPB3F403.5      
!LL  4.3  14/04/97  Changed WRITD1 calls to DUMPCTL1 for MPP. K Rogers     GKR4F403.39     
!    4.4  4/7/97:  Add call to IAU_CTL. C.D.Jones/Stuart Bell              VSB2F404.1      
!LL  4.4  30/09/97  Allocate dimension TILE_FIELD for 7A boundary layer    ARE1F404.1      
!LL                 and hydrology         R. Essery                        ARE1F404.2      
!!! 4.4 Dynamically allocate dimensions to RADHEAT according to            ARN1F404.64     
!!!     version of Section 3 used.      Cyndy Bunton                       ARN1F404.65     
!!  4.5  26/05/98 Force user to define array sizes if new BDYLYR version   ACB2F405.25     
!!                used.      C.Bunton                                      ACB2F405.26     
!LL  4.5  21/04/98  Added ARGFLDPT to ST_DIAG subroutine calls             GSM1F405.565    
!LL                 S.D.Mullerworth                                        GSM1F405.566    
CLL Programming standard : unified model documentation paper No 3          ATMSTEP1.17     
CLL                                                                        ATMSTEP1.18     
CLL System components covered : P1                                         ATMSTEP1.19     
CLL                                                                        ATMSTEP1.20     
CLL System task : P0                                                       ATMSTEP1.21     
CLL                                                                        ATMSTEP1.22     
CLL Documentation : Unified model documentation paper no. P0               ATMSTEP1.23     
CLL                 version No 11 dated (26/11/90)                         ATMSTEP1.24     
CLLEND -----------------------------------------------------------------   ATMSTEP1.25     
C*L Arguments                                                              ATMSTEP1.26     
                                                                           ATMSTEP1.27     

      SUBROUTINE ATM_STEP(                                                  1,44@DYALLOC.461    
*CALL ARGSZSP                                                              @DYALLOC.462    
*CALL ARGSZSPA                                                             @DYALLOC.463    
*CALL ARGSZSPO                                                             @DYALLOC.464    
*CALL ARGSP                                                                @DYALLOC.465    
*CALL ARGSPA                                                               @DYALLOC.466    
*CALL ARGSPO                                                               @DYALLOC.467    
*CALL ARGSIZE                                                              @DYALLOC.468    
*CALL ARGCNVI                                                              RB300993.9      
*CALL ARGPPX                                                               GSS2F305.90     
*IF DEF,FRADIO                                                             GGH3F401.9      
     &                    RADINCS,                                         @DYALLOC.470    
*ENDIF                                                                     @DYALLOC.471    
     &   P_FIELDDA,                                                        NF171193.13     
     &                    ICODE,CMESSAGE)                                  @DYALLOC.472    
                                                                           ATMSTEP1.29     
      IMPLICIT NONE                                                        ATMSTEP1.30     
                                                                           @DYALLOC.473    
*CALL CMAXSIZE                                                             @DYALLOC.474    
*CALL SPINDEX                                                              @DYALLOC.475    
*CALL TYPSZSP                                                              @DYALLOC.476    
*CALL TYPSZSPA                                                             @DYALLOC.477    
*CALL TYPSZSPO                                                             @DYALLOC.478    
*CALL TYPSP                                                                @DYALLOC.479    
*CALL TYPSPA                                                               @DYALLOC.480    
*CALL TYPSPO                                                               @DYALLOC.481    
*CALL TYPSIZE                                                              @DYALLOC.482    
*CALL TYPCNVI                                                              RB300993.10     
*IF DEF,FRADIO                                                             GGH3F401.10     
*CALL CRADINCS                                                             @DYALLOC.484    
*ENDIF                                                                     @DYALLOC.485    
                                                                           ATMSTEP1.31     
      INTEGER                                                              ATMSTEP1.32     
     &   P_FIELDDA,   ! IN : copy of P_FIELD for dynamic array             NF171193.14     
     &     RADHEAT_DIM1,              ! Required for array dimensions      ARN1F404.66     
!                                     ! for RADHEAT                        ARN1F404.67     
     &       ICODE        ! Return code : 0 Normal Exit                    ATMSTEP1.33     
C                         !             : >0 Error                         ATMSTEP1.34     
                                                                           ATMSTEP1.35     
      CHARACTER*80                                                         TS150793.26     
     &       CMESSAGE     ! Error message if return code >0                ATMSTEP1.37     
      LOGICAL L_RADHEAT               ! Flag for version of Section 3.     ARN1F404.68     
                                                                           ATMSTEP1.38     
C INTEGRATE ATMOSPHERE 1 TIMESTEP                                          ATMSTEP1.39     
                                                                           ATMSTEP1.40     
*CALL CSUBMODL                                                             ATMSTEP1.41     
*CALL CHSUNITS                                                             RS030293.196    
*CALL CCONTROL                                                             ATMSTEP1.42     
*CALL CTIME                                                                @DYALLOC.486    
*CALL C_GLOBAL                                                             GSS1F304.1093   
*CALL C_WRITD                                                              GSS1F304.1094   
*CALL CPPXREF                                                              GSS2F305.91     
*CALL PPXLOOK                                                              GSS2F305.92     
*IF DEF,MPP                                                                GPB0F401.134    
*CALL PARVARS                                                              GPB0F401.135    
*ENDIF                                                                     GPB0F401.136    
*CALL TYPFLDPT                                                             GPB0F401.137    
                                                                           ATMSTEP1.48     
C External subroutines called                                              ATMSTEP1.49     
                                                                           ATMSTEP1.50     
      EXTERNAL                                                             ATMSTEP1.51     
     &       AC_CTL,                                                       ATMSTEP1.52     
     &       ATM_DYN,                                                      ATMSTEP1.53     
     &       ATM_PHYS,                                                     ATMSTEP1.54     
     &       ST_DIAG1,                                                     ATMSTEP1.55     
     &       ST_DIAG2,                                                     ATMSTEP1.56     
     &       ST_MAXLEN,                                                    @DYALLOC.487    
     &       BOUNDVAL,                                                     ATMSTEP1.57     
     &       GEN_INTF,                                                     ATMSTEP1.58     
     &       MMPPINIT,                                                     @DYALLOC.488    
     &       MMPP_CTL,                                                     @DYALLOC.489    
     &       THLQT2THQ, ! convert thetal,qt to thata,q,cl,cf               ARB0F400.41     
     &       STASH,                                                        ATMSTEP1.59     
     &       TIMER                                                         @DYALLOC.490    
     &      ,Var_Copy,Var_Ctl                                              VSB1F304.45     
     &      ,DUMPCTL                                                       GKR4F403.40     
     &      ,IAU                                                           VSB2F404.2      
                                                                           ATMSTEP1.65     
C Local Variables                                                          ATMSTEP1.66     
                                                                           ATMSTEP1.67     
      INTEGER                                                              ATMSTEP1.68     
     &       I,          ! loop variable                                   ARB0F400.42     
     &       STASH_LEN,                                                    ATMSTEP1.69     
     &       TILE_FIELD,                                                   ARE1F404.3      
     &       A_STEP      ! local timestep no. for atmosphere               ARB0F400.43     
      REAL                                                                 ATMSTEP1.71     
     &       PSTAR_OLD(P_FIELDDA)  ! array to hold old value of Pstar      NF171193.15     
     &      ,DYN_TIMESTEP          ! modified timestep for dynamics        ARB0F400.44     
                                                                           ATMSTEP1.74     
      ICODE=0                                                              ATMSTEP1.75     
      CMESSAGE='  '                                                        ATMSTEP1.76     
                                                                           GPB0F401.138    
*IF DEF,MPP                                                                GPB0F401.139    
! QAN fix                                                                  GPB0F401.140    
! Set PSTAR_OLD to zeros (removes any junk from halo areas)                GPB0F401.141    
      DO I=1,P_FIELD                                                       GPB0F401.142    
        PSTAR_OLD(I)=0.0                                                   GPB0F401.143    
      ENDDO                                                                GPB0F401.144    
*ENDIF                                                                     GPB0F401.145    
                                                                           GPB0F401.146    
! Set up the TYPFLDPT variables                                            GPB0F401.147    
*CALL SETFLDPT                                                             GPB0F401.148    
                                                                           GPB0F401.149    
!  Set local A_STEP to generic control value STEPim(a_im)                  GDR3F305.8      
      A_STEP = STEPim(a_im)                                                GDR3F305.9      
                                                                           ATMSTEP1.77     
      IF (L_WRIT_ATMSTEP .OR. L_WRIT_DYN .OR. L_WRIT_PHY) THEN             GSS1F304.1096   
                                                                           GSS1F304.1097   
        IF (A_STEP .EQ. 1) THEN                                            GSS1F304.1098   
        WRITD1_TEST_PREV = 0                                               GSS1F304.1099   
        END IF                                                             GSS1F304.1100   
                                                                           GSS1F304.1101   
        WRITD1_TEST = (A_STEP - T_WRITD1_START)/T_WRITD1_INT               GSS1F304.1102   
                                                                           GSS1F304.1103   
        IF (A_STEP .LT. T_WRITD1_START) WRITD1_TEST = 0                    GSS1F304.1104   
                                                                           GSS1F304.1105   
      END IF                                                               GSS1F304.1106   
                                                                           GSS1F304.1107   
      WRITE(6,*) 'ATMOS TIMESTEP ',A_STEP                                  ARB0F400.45     
                                                                           ATMSTEP1.79     
C   Call max/min and patch prints if requested                             ATMSTEP1.80     
                                                                           ATMSTEP1.81     
      CALL MMPPINIT(                                                       @DYALLOC.492    
*CALL ARGSIZE                                                              @DYALLOC.493    
*CALL ARTD1                                                                @DYALLOC.494    
*CALL ARTDUMA                                                              @DYALLOC.495    
*CALL ARTPTRA                                                              @DYALLOC.496    
*CALL ARTCONA                                                              @DYALLOC.497    
     &              ICODE,CMESSAGE)                                        @DYALLOC.498    
                                                                           ATMSTEP1.96     
CL ---------In Section 18----- Incremental Analysis updated (VAR) -----    VSB2F404.3      
      IF (L_IAU) THEN                                                      VSB2F404.4      
        CALL IAU_CTL(                                                      VSB2F404.5      
*CALL ARTDUMA                                                              VSB2F404.6      
*CALL ARTD1                                                                VSB2F404.7      
*CALL ARGSIZE                                                              VSB2F404.8      
*CALL ARTPTRA                                                              VSB2F404.9      
*CALL ARTCONA                                                              VSB2F404.10     
*CALL ARGPPX                                                               VSB2F404.11     
     &               ICODE,CMESSAGE)                                       VSB2F404.12     
      ENDIF                                                                VSB2F404.13     
      IF (ICODE .GT. 0) GOTO 9999                                          VSB2F404.14     
CL ---------------------------------------------------------------------   VSB2F404.15     
      IF( .NOT. L_3DVAR )THEN                                              VSB1F304.46     
! skip dynamics and physics if doing 3DVAR                                 VSB1F304.47     
                                                                           ATMSTEP1.145    
CL ---------Sections 10-13----- Dynamics routines ---------------------    ATMSTEP1.146    
                                                                           VSB1F304.48     
                                                                           ATMSTEP1.147    
      IF(LTIMER) THEN                                                      ATMSTEP1.148    
      CALL TIMER('DYNAMICS',5)                                             GPB1F401.9      
        CALL TIMER('ATM_DYN ',3)                                           TS150793.27     
      END IF                                                               ATMSTEP1.150    
                                                                           ATMSTEP1.151    
                                                                           VSB1F304.49     
!  Get max of STASH_MAXLEN values for sections 10-13.                      ARB0F400.46     
      CALL ST_MAXLEN(STASH_LEN,10,13,atmos_im,                             GDR4F305.1      
*CALL ARGSIZE                                                              @DYALLOC.504    
*CALL ARTSTS                                                               @DYALLOC.505    
     &                          ICODE,CMESSAGE)                            @DYALLOC.506    
                                                                           ATMSTEP1.155    
      IF (L_WRIT_ATMSTEP .AND.                                             GSS1F304.1108   
     &    (A_STEP.LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN          GSS1F304.1109   
                                                                           TJ270193.22     
      IF (A_STEP.EQ.T_WRITD1_START .OR.                                    GSS1F304.1110   
     &    WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN                            GSS1F304.1111   
                                                                           GSS1F304.1112   
           CALL DUMPCTL (                                                  GKR4F403.41     
*CALL ARGSIZE                                                              GKR4F403.42     
*CALL ARTD1                                                                GKR4F403.43     
*CALL ARTDUMA                                                              GKR4F403.44     
*CALL ARTDUMO                                                              GKR4F403.45     
*CALL ARTDUMW                                                              GKR4F403.46     
*CALL ARTCONA                                                              GKR4F403.47     
*CALL ARTPTRA                                                              GKR4F403.48     
*CALL ARTSTS                                                               GKR4F403.49     
*CALL ARGPPX                                                               GKR4F403.50     
     &          atmos_sm,0,.TRUE.,'bf_atm_dyn',a_step,                     GIE1F405.22     
     &          ICODE,CMESSAGE)                                            GKR4F403.52     
                                                                           GSS1F304.1114   
      END IF                                                               GSS1F304.1115   
                                                                           GSS1F304.1116   
      END IF                                                               GSS1F304.1117   
                                                                           GSS1F304.1118   
!  Adjust timestep for option of multiple dynamics sweeps.                 ARB0F400.47     
      IF (A_SWEEPS_DYN .gt. 1) THEN                                        ARB0F400.48     
        DYN_TIMESTEP = SECS_PER_STEPim(a_im)/A_SWEEPS_DYN                  ARB0F400.49     
      ELSE                                                                 ARB0F400.50     
        DYN_TIMESTEP = SECS_PER_STEPim(a_im)                               ARB0F400.51     
      END IF                                                               ARB0F400.52     
                                                                           ARB0F400.53     
                                                                           ARB0F400.67     
      CALL ATM_DYN(U_FIELD,P_FIELD,P_LEVELS,Q_LEVELS,P_ROWS,               AYY2F400.335    
     &             NUM_STASH_LEVELS,                                       AYY2F400.336    
     &             STASH_LEN,PSTAR_OLD,DYN_TIMESTEP,                       GPB3F403.6      
*CALL ARGSIZE                                                              @DYALLOC.510    
*CALL ARTD1                                                                @DYALLOC.511    
*CALL ARTDUMA                                                              @DYALLOC.512    
*CALL ARTDUMO                                                              @DYALLOC.513    
*CALL ARTDUMW                                                              GKR1F401.183    
*CALL ARTSTS                                                               @DYALLOC.514    
*CALL ARTPTRA                                                              @DYALLOC.515    
*CALL ARTPTRO                                                              @DYALLOC.516    
*CALL ARTCONA                                                              @DYALLOC.517    
*CALL ARGPPX                                                               GKR0F305.899    
*CALL ARGFLDPT                                                             APB0F401.1      
     &             ICODE,CMESSAGE,WRITD1_TEST)                             ARB0F400.69     
                                                                           ATMSTEP1.158    
                                                                           ARB0F400.71     
      IF (L_WRIT_ATMSTEP .AND.                                             GSS1F304.1121   
     &    (A_STEP.LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN          GSS1F304.1122   
                                                                           TJ270193.26     
      IF (A_STEP.EQ.T_WRITD1_START .OR.                                    GSS1F304.1123   
     &    WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN                            GSS1F304.1124   
                                                                           GSS1F304.1125   
           CALL DUMPCTL (                                                  GKR4F403.53     
*CALL ARGSIZE                                                              GKR4F403.54     
*CALL ARTD1                                                                GKR4F403.55     
*CALL ARTDUMA                                                              GKR4F403.56     
*CALL ARTDUMO                                                              GKR4F403.57     
*CALL ARTDUMW                                                              GKR4F403.58     
*CALL ARTCONA                                                              GKR4F403.59     
*CALL ARTPTRA                                                              GKR4F403.60     
*CALL ARTSTS                                                               GKR4F403.61     
*CALL ARGPPX                                                               GKR4F403.62     
     &          atmos_sm,0,.TRUE.,'af_atm_dyn',a_step,                     GIE1F405.12     
     &          ICODE,CMESSAGE)                                            GKR4F403.64     
                                                                           GSS1F304.1127   
      END IF                                                               GSS1F304.1128   
                                                                           GSS1F304.1129   
      END IF                                                               GSS1F304.1130   
                                                                           GSS1F304.1131   
      IF(LTIMER) THEN                                                      ATMSTEP1.159    
        CALL TIMER('ATM_DYN ',4)                                           TS150793.28     
      CALL TIMER('DYNAMICS',6)                                             GPB1F401.10     
      END IF                                                               ATMSTEP1.161    
                                                                           ATMSTEP1.162    
      IF(ICODE.GT.0) THEN                                                  ATMSTEP1.163    
       RETURN                                                              ATMSTEP1.164    
      ENDIF                                                                ATMSTEP1.165    
                                                                           ATMSTEP1.166    
*IF -DEF,GLOBAL,OR,DEF,FLOOR                                               ATMSTEP1.167    
                                                                           ATMSTEP1.168    
C     IF (.NOT.LGLOBAL .OR. LFLOOR) THEN                                   GSS1F304.1132   
                                                                           GSS1F304.1133   
CL Call BOUNDVAL to merge in limited area boundary values                  ATMSTEP1.169    
                                                                           ATMSTEP1.170    
      CALL BOUNDVAL(                                                       @DYALLOC.519    
*CALL ARGSIZE                                                              @DYALLOC.520    
*CALL ARTD1                                                                @DYALLOC.521    
*CALL ARTDUMA                                                              @DYALLOC.522    
*CALL ARTPTRA                                                              @DYALLOC.523    
*CALL ARTBND                                                               @DYALLOC.524    
     &           ICODE,CMESSAGE)                                           @DYALLOC.525    
                                                                           ATMSTEP1.172    
C     END IF                                                               GSS1F304.1134   
                                                                           GSS1F304.1135   
*ENDIF                                                                     ATMSTEP1.173    
                                                                           ATMSTEP1.176    
CL Generate lateral boundary values                                        ATMSTEP1.177    
                                                                           ATMSTEP1.178    
      IF (LINTERFACE .AND. LLBOUTim(A_IM)) THEN                            GDR3F305.10     
        IF (LTIMER) CALL TIMER ('GEN_INTF',3)                              DR240293.3      
        CALL GEN_INTF (                                                    @DYALLOC.526    
*CALL ARGSIZE                                                              @DYALLOC.527    
*CALL ARTD1                                                                @DYALLOC.528    
*CALL ARTDUMA                                                              @DYALLOC.529    
*CALL ARTSTS                                                               @DYALLOC.530    
*CALL ARTPTRA                                                              @DYALLOC.531    
*CALL ARTCONA                                                              @DYALLOC.532    
*CALL ARTINFA                                                              @DYALLOC.533    
*CALL ARGPPX                                                               APB4F401.2      
     &                1,ICODE,CMESSAGE)                                    GDR3F305.11     
        IF (LTIMER) CALL TIMER ('GEN_INTF',4)                              DR240293.4      
        IF (ICODE.GT.0)  RETURN                                            ATMSTEP1.181    
      END IF                                                               ATMSTEP1.182    
                                                                           ATMSTEP1.183    
                                                                           GSS1F304.1138   
CL--------- Sections 1-9----- Physics Routines----------------------       ATMSTEP1.186    
                                                                           ATMSTEP1.187    
*IF -DEF,STRAT                                                             ATMSTEP1.192    
                                                                           ATMSTEP1.193    
      IF(LTIMER) THEN                                                      ATMSTEP1.194    
      CALL TIMER('PHYSICS',5)                                              GPB1F401.11     
        CALL TIMER('ATM_PHYS',3)                                           ATMSTEP1.195    
      END IF                                                               ATMSTEP1.196    
                                                                           ATMSTEP1.197    
CL Space for tiled diagnostics on land points only required for            ARE1F404.4      
CL boundary layer and hydrology versions 7A                                ARE1F404.5      
!! and RADHEAT is only needed for Boundary layer 6A so allocate space      ACB2F405.27     
!! accordingly.                                                            ACB2F405.28     
                                                                           ARE1F404.6      
      IF ( (H_SECT(3).EQ."06A") )THEN                                      ACB2F405.29     
        L_RADHEAT = .TRUE.                                                 ACB2F405.30     
        RADHEAT_DIM1 = P_FIELDDA                                           ACB2F405.31     
        TILE_FIELD = 1                                                     ACB2F405.32     
      ELSEIF ( (H_SECT(3).EQ."03A")                                        ACB2F405.33     
     & .OR. (H_SECT(3).EQ."05A") )THEN                                     ACB2F405.34     
        L_RADHEAT = .FALSE.                                                ACB2F405.35     
        RADHEAT_DIM1 = 1                                                   ACB2F405.36     
        TILE_FIELD = 1                                                     ACB2F405.37     
      ELSEIF ( (H_SECT(3).EQ."07A") )THEN                                  ACB2F405.38     
        L_RADHEAT = .FALSE.                                                ACB2F405.39     
        RADHEAT_DIM1 = 1                                                   ACB2F405.40     
        TILE_FIELD = LAND_FIELD                                            ACB2F405.41     
      ELSE                                                                 ACB2F405.42     
        WRITE(6,*) 'ATM_PHYS: Unknown version of Section 3 encountered'    ACB2F405.43     
        CALL ABORT                                                         ACB2F405.44     
      ENDIF                                                                ACB2F405.45     
                                                                           ARE1F404.12     
      CALL ATM_PHYS(P_FIELD,LAND_FIELD,SM_LEVELS,                          AJS1F401.161    
     &              TILE_FIELD,                                            ARE1F404.13     
     &              ROW_LENGTH,P_LEVELS,Q_LEVELS,BL_LEVELS,                ARN1F404.77     
     &              L_RADHEAT,RADHEAT_DIM1,                                ARN1F404.78     
                                                                           AJS1F401.163    
*CALL ARGSIZE                                                              @DYALLOC.537    
*CALL ARTD1                                                                @DYALLOC.538    
*CALL ARTDUMA                                                              @DYALLOC.539    
*CALL ARTDUMO                                                              @DYALLOC.540    
*CALL ARTDUMW                                                              GKR1F401.184    
*CALL ARTSTS                                                               @DYALLOC.541    
*CALL ARTPTRA                                                              @DYALLOC.542    
*CALL ARTPTRO                                                              @DYALLOC.543    
*CALL ARTCONA                                                              @DYALLOC.544    
*CALL ARGCNVI                                                              RB300993.11     
*CALL ARGPPX                                                               GKR0F305.900    
*CALL ARGFLDPT                                                             APB1F401.1      
*IF DEF,FRADIO                                                             GGH3F401.11     
     &              RADINCS,                                               @DYALLOC.546    
*ENDIF                                                                     @DYALLOC.547    
     &              ICODE,CMESSAGE,WRITD1_TEST)                            ARB0F400.72     
                                                                           ATMSTEP1.200    
      IF (L_WRIT_ATMSTEP .AND.                                             GSS1F304.1141   
     &    (A_STEP.LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN          GSS1F304.1142   
                                                                           TJ270193.30     
      IF (A_STEP.EQ.T_WRITD1_START .OR.                                    GSS1F304.1143   
     &    WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN                            GSS1F304.1144   
                                                                           GSS1F304.1145   
           CALL DUMPCTL (                                                  GKR4F403.65     
*CALL ARGSIZE                                                              GKR4F403.66     
*CALL ARTD1                                                                GKR4F403.67     
*CALL ARTDUMA                                                              GKR4F403.68     
*CALL ARTDUMO                                                              GKR4F403.69     
*CALL ARTDUMW                                                              GKR4F403.70     
*CALL ARTCONA                                                              GKR4F403.71     
*CALL ARTPTRA                                                              GKR4F403.72     
*CALL ARTSTS                                                               GKR4F403.73     
*CALL ARGPPX                                                               GKR4F403.74     
     &          atmos_sm,0,.TRUE.,'af_atm_phy',a_step,                     GIE1F405.13     
     &          ICODE,CMESSAGE)                                            GKR4F403.76     
                                                                           GSS1F304.1147   
      END IF                                                               GSS1F304.1148   
                                                                           GSS1F304.1149   
      END IF                                                               GSS1F304.1150   
                                                                           GSS1F304.1151   
      IF(LTIMER) THEN                                                      ATMSTEP1.201    
        CALL TIMER('ATM_PHYS',4)                                           ATMSTEP1.202    
      CALL TIMER('PHYSICS',6)                                              GPB1F401.12     
      END IF                                                               ATMSTEP1.203    
                                                                           ATMSTEP1.204    
*ENDIF                                                                     ATMSTEP1.205    
                                                                           ATMSTEP1.206    
      IF(ICODE.GT.0) THEN                                                  ATMSTEP1.207    
        RETURN                                                             ATMSTEP1.208    
      ENDIF                                                                ATMSTEP1.209    
                                                                           ATMSTEP1.210    
      END IF   ! .NOT.L_3DVAR                                              VSB1F304.50     
                                                                           VSB1F304.51     
CL --------- Section 18---- Data Assimilation -----------------------      ATMSTEP1.211    
      IF(L_AC .AND. LASSIMILATION )THEN                                    VSB1F304.52     
! Do AC assimilation                                                       VSB1F304.53     
                                                                           ATMSTEP1.212    
        IF(LTIMER)  CALL TIMER('AC_CTL',3)                                 VSB1F304.54     
                                                                           ATMSTEP1.218    
C Use s/r to get STASH_MAXLEN value for section 18                         @DYALLOC.549    
      CALL ST_MAXLEN(STASH_LEN,18,18,atmos_im,                             GDR4F305.2      
*CALL ARGSIZE                                                              @DYALLOC.551    
*CALL ARTSTS                                                               @DYALLOC.552    
     &                          ICODE,CMESSAGE)                            @DYALLOC.553    
                                                                           @DYALLOC.554    
        CALL AC_CTL(STASH_LEN, TR_VARS, P_FIELD, Q_LEVELS,                 AJS1F401.164    
*CALL ARGSIZE                                                              @DYALLOC.556    
*CALL ARTD1                                                                @DYALLOC.557    
*CALL ARTDUMA                                                              @DYALLOC.558    
*CALL ARTDUMO                                                              @DYALLOC.559    
*CALL ARTDUMW                                                              GKR1F401.185    
*CALL ARTSTS                                                               @DYALLOC.560    
*CALL ARTPTRA                                                              @DYALLOC.561    
*CALL ARTPTRO                                                              @DYALLOC.562    
*CALL ARTCONA                                                              @DYALLOC.563    
*CALL ARGPPX                                                               GKR0F305.901    
     &              ICODE,CMESSAGE)                                        @DYALLOC.564    
                                                                           ATMSTEP1.220    
      IF (L_WRIT_ATMSTEP .AND.                                             GSS1F304.1152   
     &    (A_STEP.LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN          GSS1F304.1153   
                                                                           GSS1F304.1154   
      IF (A_STEP.EQ.T_WRITD1_START .OR.                                    GSS1F304.1155   
     &    WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN                            GSS1F304.1156   
                                                                           GSS1F304.1157   
           CALL DUMPCTL (                                                  GKR4F403.77     
*CALL ARGSIZE                                                              GKR4F403.78     
*CALL ARTD1                                                                GKR4F403.79     
*CALL ARTDUMA                                                              GKR4F403.80     
*CALL ARTDUMO                                                              GKR4F403.81     
*CALL ARTDUMW                                                              GKR4F403.82     
*CALL ARTCONA                                                              GKR4F403.83     
*CALL ARTPTRA                                                              GKR4F403.84     
*CALL ARTSTS                                                               GKR4F403.85     
*CALL ARGPPX                                                               GKR4F403.86     
     &          atmos_sm,0,.TRUE.,'af_ac_ctl_',a_step,                     GIE1F405.14     
     &          ICODE,CMESSAGE)                                            GKR4F403.88     
                                                                           GSS1F304.1159   
      END IF                                                               GSS1F304.1160   
                                                                           GSS1F304.1161   
      END IF                                                               GSS1F304.1162   
                                                                           TJ270193.34     
        IF(LTIMER) CALL TIMER('AC_CTL',4)                                  VSB1F304.55     
                                                                           ATMSTEP1.224    
        IF (ICODE.GT.0)GO TO 9999                                          VSB1F304.56     
                                                                           ATMSTEP1.228    
      END IF !LASSIMILATION and L_AC                                       VSB1F304.57     
                                                                           ATMSTEP1.230    
      IF(L_3DVAR)THEN                                                      VSB1F304.58     
! Do processing for 3DVAR                                                  VSB1F304.59     
                                                                           VSB1F304.60     
       IF(LTIMER) CALL TIMER('VarCtl',3)                                   VSB1F304.61     
                                                                           VSB1F304.62     
        CALL Var_Ctl(                                                      VSB1F304.63     
*CALL ARGSIZE                                                              VSB1F304.64     
*CALL ARTD1                                                                VSB1F304.65     
*CALL ARTDUMA                                                              VSB1F304.66     
*CALL ARTSTS                                                               VSB1F304.67     
*CALL ARTPTRA                                                              VSB1F304.68     
*CALL ARTCONA                                                              VSB1F304.69     
*CALL ARGPPX                                                               GKR0F305.902    
     &              ICODE,CMESSAGE)                                        VSB1F304.70     
                                                                           VSB1F304.71     
       IF(LTIMER) CALL TIMER('VarCtl',4)                                   VSB1F304.72     
                                                                           VSB1F304.73     
       IF (ICODE.GT.0) GOTO 9999                                           VSB1F304.74     
                                                                           VSB1F304.75     
      END IF  !L_3DVAR                                                     VSB1F304.76     
                                                                           VSB1F304.77     
      IF (L_4DVAR) THEN                                                    VSB1F304.78     
! Do processing for 4DVAR (likely also do call VarCtl when available)      VSB1F304.79     
          ICODE =1                                                         VSB1F304.80     
          CMESSAGE = ' ATMSTEP: 4DVAR not coded'                           VSB1F304.81     
          GO TO 9999                                                       VSB1F304.82     
      ENDIF   !L_4DVAR                                                     VSB1F304.83     
                                                                           VSB1F304.84     
      IF (L_3DVAR_BG) THEN                                                 VSB1F304.85     
! When doing forecast background creation for 3DVAR                        VSB1F304.86     
! save the required fields in prognostic D1 space                          VSB1F304.87     
                                                                           VSB1F304.88     
       IF(LTIMER) CALL TIMER('VarCopy',3)                                  VSB1F304.89     
                                                                           VSB1F304.90     
        CALL Var_Copy(                                                     VSB1F304.91     
*CALL ARGSIZE                                                              VSB1F304.92     
*CALL ARTD1                                                                VSB1F304.93     
*CALL ARTDUMA                                                              VSB1F304.94     
*CALL ARTSTS                                                               VSB1F304.95     
*CALL ARTPTRA                                                              VSB1F304.96     
*CALL ARTCONA                                                              VSB1F304.97     
*CALL ARGPPX                                                               GSS2F305.93     
     &              ICODE,CMESSAGE)                                        VSB1F304.98     
                                                                           VSB1F304.99     
       IF(LTIMER) CALL TIMER('VarCopy',4)                                  VSB1F304.100    
                                                                           VSB1F304.101    
       IF (ICODE.GT.0) GOTO 9999                                           VSB1F304.102    
                                                                           VSB1F304.103    
      ENDIF !L_3DVAR_BG                                                    VSB1F304.104    
                                                                           VSB1F304.105    
CL ----------Section 15 ----  Diagnostics -part1 -----------------------   ATMSTEP1.231    
                                                                           ATMSTEP1.232    
      IF(LTIMER) THEN                                                      ATMSTEP1.233    
        CALL TIMER('ST_DIAG1',3)                                           ATMSTEP1.234    
      END IF                                                               ATMSTEP1.235    
                                                                           ATMSTEP1.236    
C Use s/r to get STASH_MAXLEN value for section 15                         @DYALLOC.566    
      CALL ST_MAXLEN(STASH_LEN,15,15,atmos_im,                             GDR4F305.3      
*CALL ARGSIZE                                                              @DYALLOC.568    
*CALL ARTSTS                                                               @DYALLOC.569    
     &                          ICODE,CMESSAGE)                            @DYALLOC.570    
                                                                           @DYALLOC.571    
      CALL ST_DIAG1(NUM_STASH_LEVELS,STASH_LEN,PSTAR_OLD,                  @DYALLOC.572    
*CALL ARGSIZE                                                              @DYALLOC.573    
*CALL ARTD1                                                                @DYALLOC.574    
*CALL ARTDUMA                                                              @DYALLOC.575    
*CALL ARTDUMO                                                              @DYALLOC.576    
*CALL ARTDUMW                                                              GKR1F401.186    
*CALL ARTSTS                                                               @DYALLOC.577    
*CALL ARTPTRA                                                              @DYALLOC.578    
*CALL ARTPTRO                                                              @DYALLOC.579    
*CALL ARTCONA                                                              @DYALLOC.580    
*CALL ARGPPX                                                               GKR0F305.903    
*CALL ARGFLDPT                                                             GSM1F405.567    
     &              ICODE,CMESSAGE)                                        @DYALLOC.581    
                                                                           ATMSTEP1.239    
      IF(LTIMER) THEN                                                      ATMSTEP1.240    
        CALL TIMER('ST_DIAG1',4)                                           ATMSTEP1.241    
      END IF                                                               ATMSTEP1.242    
                                                                           ATMSTEP1.243    
      IF (ICODE.GT.0) THEN                                                 ATMSTEP1.244    
        RETURN                                                             ATMSTEP1.245    
      END IF                                                               ATMSTEP1.246    
                                                                           ATMSTEP1.247    
CL ----------Section 16 ----  Diagnostics -part2 -----------------------   ATMSTEP1.248    
                                                                           ATMSTEP1.249    
      IF(LTIMER) THEN                                                      ATMSTEP1.250    
        CALL TIMER('ST_DIAG2',3)                                           ATMSTEP1.251    
      END IF                                                               ATMSTEP1.252    
                                                                           ATMSTEP1.253    
C Use s/r to get STASH_MAXLEN value for section 16                         @DYALLOC.582    
      CALL ST_MAXLEN(STASH_LEN,16,16,atmos_im,                             GDR4F305.4      
*CALL ARGSIZE                                                              @DYALLOC.584    
*CALL ARTSTS                                                               @DYALLOC.585    
     &                          ICODE,CMESSAGE)                            @DYALLOC.586    
                                                                           @DYALLOC.587    
      CALL ST_DIAG2(NUM_STASH_LEVELS,STASH_LEN,                            @DYALLOC.588    
     &              P_FIELD,P_LEVELS,TR_VARS,                              ADP0F401.3      
*CALL ARGSIZE                                                              @DYALLOC.589    
*CALL ARTD1                                                                @DYALLOC.590    
*CALL ARTDUMA                                                              @DYALLOC.591    
*CALL ARTDUMO                                                              @DYALLOC.592    
*CALL ARTDUMW                                                              GKR1F401.187    
*CALL ARTSTS                                                               @DYALLOC.593    
*CALL ARTPTRA                                                              @DYALLOC.594    
*CALL ARTPTRO                                                              @DYALLOC.595    
*CALL ARTCONA                                                              @DYALLOC.596    
*CALL ARGPPX                                                               GKR0F305.904    
*CALL ARGFLDPT                                                             GSM1F405.568    
     &              ICODE,CMESSAGE)                                        @DYALLOC.597    
                                                                           ATMSTEP1.255    
      IF(LTIMER) THEN                                                      ATMSTEP1.256    
        CALL TIMER('ST_DIAG2',4)                                           ATMSTEP1.257    
      END IF                                                               ATMSTEP1.258    
                                                                           ATMSTEP1.259    
      IF (ICODE.GT.0) THEN                                                 ATMSTEP1.260    
        RETURN                                                             ATMSTEP1.261    
      ENDIF                                                                ATMSTEP1.262    
                                                                           ATMSTEP1.263    
CL   Output diagnostics at end of timestep                                 ATMSTEP1.264    
                                                                           ATMSTEP1.265    
      IF(LTIMER) THEN                                                      ATMSTEP1.266    
        CALL TIMER('STASH   ',3)                                           ATMSTEP1.267    
      END IF                                                               ATMSTEP1.268    
                                                                           ATMSTEP1.269    
      CALL STASH(a_sm,a_im,0,SPD1,                                         GKR0F305.905    
*CALL ARGSIZE                                                              @DYALLOC.599    
*CALL ARTD1                                                                @DYALLOC.600    
*CALL ARTDUMA                                                              @DYALLOC.601    
*CALL ARTDUMO                                                              @DYALLOC.602    
*CALL ARTDUMW                                                              GKR1F401.188    
*CALL ARTSTS                                                               @DYALLOC.603    
*CALL ARGPPX                                                               GKR0F305.906    
     &           ICODE,CMESSAGE)                                           @DYALLOC.607    
                                                                           ATMSTEP1.271    
      IF(LTIMER) THEN                                                      ATMSTEP1.272    
        CALL TIMER('STASH   ',4)                                           ATMSTEP1.273    
      END IF                                                               ATMSTEP1.274    
                                                                           ATMSTEP1.275    
      IF (ICODE.GT.0) THEN                                                 ATMSTEP1.276    
        RETURN                                                             ATMSTEP1.277    
      ENDIF                                                                ATMSTEP1.278    
                                                                           ATMSTEP1.279    
CL  Call max/min and patch prints if requested                             ATMSTEP1.280    
                                                                           ATMSTEP1.281    
      CALL MMPP_CTL(                                                       @DYALLOC.608    
*CALL ARGSIZE                                                              @DYALLOC.609    
*CALL ARTD1                                                                @DYALLOC.610    
*CALL ARTDUMA                                                              @DYALLOC.611    
*CALL ARTPTRA                                                              @DYALLOC.612    
*CALL ARTCONA                                                              @DYALLOC.613    
     &              ICODE,CMESSAGE)                                        @DYALLOC.614    
                                                                           ATMSTEP1.289    
                                                                           TJ270193.35     
      IF (L_WRIT_ATMSTEP .AND.                                             GSS1F304.1163   
     &    (A_STEP.LE.T_WRITD1_END .OR. T_WRITD1_END .EQ. 0)) THEN          GSS1F304.1164   
                                                                           GSS1F304.1165   
      IF (A_STEP.EQ.T_WRITD1_START .OR.                                    GSS1F304.1166   
     &    WRITD1_TEST.GT.WRITD1_TEST_PREV) THEN                            GSS1F304.1167   
                                                                           GSS1F304.1168   
           CALL DUMPCTL (                                                  GKR4F403.89     
*CALL ARGSIZE                                                              GKR4F403.90     
*CALL ARTD1                                                                GKR4F403.91     
*CALL ARTDUMA                                                              GKR4F403.92     
*CALL ARTDUMO                                                              GKR4F403.93     
*CALL ARTDUMW                                                              GKR4F403.94     
*CALL ARTCONA                                                              GKR4F403.95     
*CALL ARTPTRA                                                              GKR4F403.96     
*CALL ARTSTS                                                               GKR4F403.97     
*CALL ARGPPX                                                               GKR4F403.98     
     &          atmos_sm,0,.TRUE.,'endatmstep',a_step,                     GIE1F405.23     
     &          ICODE,CMESSAGE)                                            GKR4F403.100    
                                                                           GSS1F304.1170   
      END IF                                                               GSS1F304.1171   
                                                                           GSS1F304.1172   
      END IF                                                               GSS1F304.1173   
                                                                           GSS1F304.1174   
      WRITD1_TEST_PREV = WRITD1_TEST                                       GSS1F304.1175   
                                                                           ATMSTEP1.355    
9999  CONTINUE                                                             VSB1F304.106    
      RETURN                                                               ATMSTEP1.356    
      END                                                                  ATMSTEP1.357    
                                                                           ATMSTEP1.358    
*ENDIF                                                                     ATMSTEP1.359