*IF DEF,CONTROL                                                            INITIAL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.4771   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4772   
C                                                                          GTS2F400.4773   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4774   
C restrictions as set forth in the contract.                               GTS2F400.4775   
C                                                                          GTS2F400.4776   
C                Meteorological Office                                     GTS2F400.4777   
C                London Road                                               GTS2F400.4778   
C                BRACKNELL                                                 GTS2F400.4779   
C                Berkshire UK                                              GTS2F400.4780   
C                RG12 2SZ                                                  GTS2F400.4781   
C                                                                          GTS2F400.4782   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4783   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4784   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4785   
C Modelling at the above address.                                          GTS2F400.4786   
C ******************************COPYRIGHT******************************    GTS2F400.4787   
C                                                                          GTS2F400.4788   
CLL  Routine: INITIAL --------------------------------------------------   INITIAL1.3      
CLL                                                                        INITIAL1.4      
CLL  Purpose: Initialises the model ready for integration/assimilation.    INITIAL1.5      
CLL This involves reading the model control files and setting up STASH,    INITIAL1.6      
CLL reading the initial or restart dump,                                   TJ040293.1      
CLL initialising the ancillary, boundary and interface                     TJ040293.2      
CLL field control routines and updating the ancillary fields on restart    INITIAL1.9      
CLL if time to do so, exchanging coupling fields and swapping dumps (if    INITIAL1.10     
CLL a coupled model), and initialising the assimilation package if         INITIAL1.11     
CLL necessary.  Subsidiary control routines are called to perform these    INITIAL1.12     
CLL functions.                                                             INITIAL1.13     
CLL                                                                        INITIAL1.14     
CLL  Tested under compiler:   cft77                                        INITIAL1.15     
CLL  Tested under OS version: UNICOS 6.1.5A                                INITIAL1.16     
CLL                                                                        INITIAL1.17     
CLL  Author:   T.C.Johns                                                   INITIAL1.18     
CLL                                                                        INITIAL1.19     
CLL  Model            Modification history from model version 3.0:         INITIAL1.20     
CLL version  Date                                                          INITIAL1.21     
CLL   3.1  04/02/93  Write temporary history file after successfully       TJ040293.3      
CLL                  reading in initial dump(s) on timestep 0.             TJ040293.4      
CLL  3.1  15/02/93  Set L_Z0_OROG orographic roughness switch. R.Barnes.   TJ061293.27     
CLL  3.1  20/01/93  : Allow ancillary updating for atmosphere on           RS210193.1      
CLL                   timestep 0.                                          RS210193.2      
CLL  3.1    3/02/92 : Use newly defined NUNITS for loop over i/o.          RS030293.146    
CLL   3.1  05/02/93    Portable Fortran unit no assigns                    AD050293.214    
CLL                    Author: A. Dickinson    Reviewer: R. Stratton       AD050293.215    
CLL   3.1    3/2/93   Test LINTERFACE before calling GEN_INTF.             DR240293.848    
CLL                   D Robinson.                                          DR240293.849    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.84     
CLL                   portability.  Author Tracey Smith.                   TS150793.85     
CLL   3.2  07/04/93  Test H_A_STEP,H_O_STEP not A_STEP,O_STEP when         TJ070493.1      
CLL                  deciding whether to write history file on step 0.     TJ070493.2      
CLL  3.2  13/04/93  Dynamic allocation of main arrays. R T H Barnes.       @DYALLOC.1691   
CLL 3.2    27/03/93 Dynamic allocation of main data arrays. R. Rawlins     @DYALLOC.1692   
CLL   3.2  28/07/93 Add call to INITHDRS to set NRUN diag LOOKUPs (TCJ).   @DYALLOC.1693   
CLL 3.2    28/07/93 Corrections for call to IN_ACCTL. M. Bell              TJ061293.28     
CLL   3.3  02/12/93  Generalise code for handling submodels (TCJ).         TJ061293.29     
CLL   3.3   13/12/93    Half timestep dynamics. A.S.Lawless                AL131293.16     
CLL   3.4   23/08/94 Add switch for local -ve q correction (RAS).          ACH1F304.1      
CLL   3.4   30/06/94 Argument LLBOUTA passed to INTF_CTL, GEN_INTF         GSS1F304.982    
CLL                  Argument LLINTS passed to INIT_EMCORR                 GSS1F304.983    
CLL                  Comdecks C_GLOBAL, C_WRITD *CALLed                    GSS1F304.984    
CLL                  Arguments LANCILA,LANCILO passed to                   GSS1F304.985    
CLL                                            INANCCTL,UP_ANCIL           GSS1F304.986    
CLL                  Argument LCAL360 passed to various s/r's              GSS1F304.987    
CLL                  DEF EMCORR replaced by LOGICAL LEMCORR                GSS1F304.988    
CLL                  Argument LWHITBROM passed to INIT_EMCORR              GSS1F304.989    
CLL                  SETLOGIC CALLed to assign values to logical           GSS1F304.990    
CLL                                                     switches           GSS1F304.991    
CLL                  READWRITD CALLed to read time-step control data       GSS1F304.992    
CLL                            for WRITD1                                  GSS1F304.993    
CLL                                                  S.J.Swarbrick         GSS1F304.994    
CLL   3.4   1/8/94  Add control for assimilation type S Bell               VSB1F304.131    
CLL  3.4  26/09/94  Use LANCILLARY (set in SETTSCTL) in test for           GRB1F304.27     
CLL                 updating atmos & ocean ancillaries. RTHBarnes          GRB1F304.28     
CLL  3.4  06/08/94  NCPUS got from environment and used to compute no.of   AAD1F304.10     
CLL                 segments in parallel calls to LWRAD, SWRAD & CONVECT   AAD1F304.11     
CLL                 Authors: A.Dickinson, D.Salmond, Reviewer: R.Barnes    AAD1F304.12     
CLL   3.4    07/12/94 M.Carter. Pass nitems, nsects as arguments to        GMC2F304.14     
CLL                   initctl to allow dynamic allocation                  GMC2F304.15     
CLL  3.5  16/03/95  Sub-Models stage 1: revise History and Control file    GRB1F305.128    
CLL                 contents.  RTHBarnes.                                  GRB1F305.129    
CLL   3.5  18/04/95 Submodel stage 1 changes:                              GRR2F305.299    
CLL                 Change references to ISUBMODL and generalise           GRR2F305.300    
CLL                 submodel/internal model initialisation. R.Rawlins      GRR2F305.301    
CLL                 Include minor fix to ensure bit comparison of          GRR2F305.302    
CLL                 continuation runs in atmos-ocean coupled runs by       GRR2F305.303    
CLL                 allowing ancillary file updating of the atmosphere     GRR2F305.304    
CLL                 submodel before starting an ocean group. R.Rawlins     GRR2F305.305    
CLL                 Correct argument list for ocean call of UP_ANCIL.      GRR2F305.306    
CLL   3.5    Apr. 95  Submodels project.                                   GSS1F305.527    
CLL                   ppxref look-up arrays passed to INITCTL, INITDUMP    GSS1F305.528    
CLL                   via *CALL ARGPPX, *CALL PPXLOOK                      GSS1F305.529    
CLL                   S.J.Swarbrick                                        GSS1F305.530    
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.54     
CLL  4.0  16/08/95  Remove erroneous test on LANCILLARY introduced at      GRB1F400.6      
CLL                 vn3.4. Revert to pre-vn3.4 test or STEP=0.  RTHB       GRB1F400.7      
CLL  4.0  19/09/95  Remove erroneous extra TIMER('TRANSIN ',4) call.       GRB1F400.8      
CLL  4.0  19/09/95  Remove SETLOGIC from EXTERNAL statement.  RTHB         GRB1F400.9      
CLL  4.0  06/12/95  Move timestep 0 TEMPHIST to after INITTIME.  RTHB      GRB1F400.10     
CLL  4.1  29/02/96  Introduce wave sub-model.  RTHBarnes.                  WRB1F401.479    
CLL                                                                        WRB1F401.480    
!    4.1  10/05/96  Remove LENRIMDATA_A from UP_BOUND argument list.       APB4F401.489    
!                   Pass ARGPPX to GEN_INTF. D. Robinson                   APB4F401.490    
!                                                                          APB4F401.491    
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.816    
!                   Author D.M. Goddard.                                   GDG0F401.817    
CLL   4.1  22/05/96  Replaced *DEF FAST with FRADIO to allow fast          GGH3F401.19     
CLL                  radiation i/o code to be used. G Henderson            GGH3F401.20     
CLL  4.2  22/11/96  Allow uncompressed ocean dumps                         GSI0F402.26     
CLL  4.2  11/10/96  Enable atmos-ocean coupling for MPP.                   GRR0F402.1      
CLL                 (1): Coupled fields. Get global sizes for SWAP         GRR0F402.2      
CLL                 routines. R. Rawlins                                   GRR0F402.3      
!  4.2  23/08/96  If MPP, only write history file from PE 0. RTHBarnes.    ARB1F402.263    
CLL  4.2  06/01/97  Generate 1 file per pe for FLDSTAT diagnostic          ARR1F402.123    
CLL                 routine if invoked. Hence pe number is                 ARR1F402.124    
CLL                 appended to the generic filename. R.Rawlins            ARR1F402.125    
CLL  4.2  11/10/96  Enable atmos-ocean coupling for MPP.                   GRR1F402.292    
CLL                 (2): Swap D1 memory. New argument in TRANSIN,          GRR1F402.293    
CLL                  TRANSOUT routines. R. Rawlins                         GRR1F402.294    
CLL  4.3  16/05/97  Move INITMEAN to before INITTIME because INITTIME      GSM6F403.1      
CLL                 requires OFFSET_DUMPSim. S.D.Mullerworth               GSM6F403.2      
!LL  4.3  14/04/97  Add 'WRITD1' DUMPCTL1 calls for MPP. K Rogers          GKR4F403.261    
!LL  4.3  19/02/97 Skip INIT_HYD code if in MPP mode and                   ARB2F403.74     
!LL                 no land points.  RTHBarnes.                            ARB2F403.75     
!LL  4.4  08/09/97  Add call to subroutine allowing ocean stash            ORH9F404.1      
!LL                 output on timestep 0.  R.S.R. Hill                     ORH9F404.2      
!LL  4.4  18/08/97  Add ARTSTS to call to IN_BOUND.  RTHBarnes.            ARB1F404.368    
!LL  4.4  13/10/97  Add call to INIT_VEG to initialize vegetation          ABX1F404.216    
!LL                 parameters for Tiled Land Surface and accumulation     ABX1F404.217    
!LL                 prognostics for TRIFFID vegetation model.  R.A.Betts   ABX1F404.218    
!LL  4.4  28/08/97  Field increment diagnostics I/O changed from           ARR0F404.28     
!LL                 Fortran to C to free a unit no. R.Rawlins              ARR0F404.29     
!LL  4.5  29/07/98  Pass ARTINFA to INTF_CTL. D. Robinson.                 GDR2F405.54     
!LL  4.5  17/08/98  Add mods to enable global & meso run in                GDR3F405.848    
!LL                 parallel. D. Robinson.                                 GDR3F405.849    
!LL  4.5  16/02/98  Operational status only:                               GRR2F405.1      
!LL                 (1) Write a message to the operator when               GRR2F405.2      
!LL                 initialisation completed. R.Rawlins                    GRR2F405.3      
!LL  4.5   3/09/98  (2) Add call to Oper_Emergency.  Stuart Bell           GRR2F405.4      
CLL  Programming standard: UM Doc Paper 3, version 2 (7/9/90)              INITIAL1.23     
CLL                                                                        INITIAL1.24     
CLL  Logical components covered: C0                                        INITIAL1.25     
CLL                                                                        INITIAL1.26     
CLL  Project task: C0                                                      INITIAL1.27     
CLL                                                                        INITIAL1.28     
CLL  External documentation: On-line UM document C0 - The top-level        INITIAL1.29     
CLL                          control system                                INITIAL1.30     
CLL                                                                        INITIAL1.31     
CLL  -------------------------------------------------------------------   INITIAL1.32     
C*L  Interface and arguments: ------------------------------------------   INITIAL1.33     
C                                                                          INITIAL1.34     

      SUBROUTINE INITIAL(                                                   1,136@DYALLOC.1695   
*CALL ARGPPX                                                               GSS1F305.532    
*CALL ARGSZSP                                                              @DYALLOC.1696   
*CALL ARGSZSPA                                                             @DYALLOC.1697   
*CALL ARGSZSPO                                                             @DYALLOC.1698   
*CALL ARGSZSPW                                                             WRB1F401.481    
*CALL ARGSZSPC                                                             @DYALLOC.1699   
*CALL ARGSP                                                                @DYALLOC.1700   
*CALL ARGSPA                                                               @DYALLOC.1701   
*CALL ARGSPO                                                               @DYALLOC.1702   
*CALL ARGSPW                                                               WRB1F401.482    
*CALL ARGSPC                                                               @DYALLOC.1703   
*CALL ARGSIZE                                                              @DYALLOC.1704   
     &     internal_model,submodel,NGROUP,MEANLEV,                         GRR2F305.308    
     &     ICODE,CMESSAGE )                                                GRR2F305.309    
C                                                                          INITIAL1.37     
      IMPLICIT NONE                                                        INITIAL1.38     
      INTEGER internal_model ! OUT internal model identifier:              GRR2F305.310    
!                            !   1:Atmos; 2:Ocean; 3:Slab ; etc            GRR2F305.311    
      INTEGER submodel       ! OUT submodel partition (dump) identifier:   GRR2F305.312    
!                            !   1:Atmos; 2:Ocean; etc                     GRR2F305.313    
      INTEGER NGROUP         ! OUT   - No of steps in "group"n             GRR2F305.314    
      INTEGER MEANLEV        ! OUT - Mean level indicator                  GRR2F305.315    
*CALL CMAXSIZE                                                             @DYALLOC.1706   
*CL Super array lengths                                                    @DYALLOC.1707   
*CALL TYPSZSP                                                              @DYALLOC.1708   
*CALL TYPSZSPA                                                             @DYALLOC.1709   
*CALL TYPSZSPO                                                             @DYALLOC.1710   
*CALL TYPSZSPW                                                             WRB1F401.483    
*CALL TYPSZSPC                                                             @DYALLOC.1711   
*CL Super arrays                                                           @DYALLOC.1712   
*CALL TYPSPD1                                                              @DYALLOC.1713   
*CALL TYPSPDUA                                                             @DYALLOC.1714   
*CALL TYPSPDUO                                                             @DYALLOC.1715   
*CALL TYPSPDUW                                                             WRB1F401.484    
*CALL TYPSPST                                                              @DYALLOC.1716   
*CALL TYPSPPTA                                                             @DYALLOC.1717   
*CALL TYPSPPTO                                                             @DYALLOC.1718   
*CALL TYPSPPTW                                                             WRB1F401.485    
*CALL TYPSPCOA                                                             @DYALLOC.1719   
*CALL TYPSPCOO                                                             @DYALLOC.1720   
*CALL TYPSPCOW                                                             WRB1F401.486    
*CALL TYPSPINA                                                             @DYALLOC.1721   
*CALL TYPSPINO                                                             @DYALLOC.1722   
*CALL TYPSPINW                                                             WRB1F401.487    
*CALL TYPSPANA                                                             @DYALLOC.1723   
*CALL TYPSPANO                                                             @DYALLOC.1724   
*CALL TYPSPANW                                                             WRB1F401.488    
*CALL TYPSPBO                                                              @DYALLOC.1725   
*CALL TYPSPBOA                                                             @DYALLOC.1726   
*CALL TYPSPBOO                                                             @DYALLOC.1727   
*CALL TYPSPBOW                                                             WRB1F401.489    
*CALL TYPSPCPL                                                             @DYALLOC.1728   
CL       Model sizes                                                       @DYALLOC.1729   
*CALL TYPSIZE                                                              @DYALLOC.1730   
CL       Addresses of arrays within super arrays                           @DYALLOC.1731   
*CALL SPINDEX                                                              @DYALLOC.1732   
*CALL TYPOCDPT                                                             @DYALLOC.1733   
*CALL TYPWVDPT                                                             WRB1F401.490    
CL                                                                         @DYALLOC.1734   
      INTEGER      ICODE     ! Out - Return code from routine              INITIAL1.42     
      CHARACTER*80 CMESSAGE                                                TS150793.86     
C                                                                          INITIAL1.44     
C*----------------------------------------------------------------------   INITIAL1.45     
C  Common blocks                                                           INITIAL1.46     
C                                                                          INITIAL1.47     
*CALL CSUBMODL                                                             GRR2F305.316    
! Rick's mods have *CALL CSUBMODL here                                     GSS1F305.533    
*CALL CPPXREF                                                              GSS1F305.534    
*CALL PPXLOOK                                                              GSS1F305.535    
                                                                           GSS1F305.536    
*CALL CHSUNITS                                                             GRB1F305.131    
*CALL CHISTORY                                                             RS030293.147    
*CALL CCONTROL                                                             INITIAL1.48     
*CALL CTIME                                                                INITIAL1.50     
*CALL CPPRINT                                                              INITIAL1.53     
*CALL CENVIR                                                               INITIAL1.54     
*CALL C_GLOBAL                                                             GSS1F304.996    
*CALL C_WRITD                                                              GSS1F304.997    
*CALL PARVARS                                                              ARB1F402.264    
*CALL DECOMPTP                                                             GRR0F402.4      
*CALL DECOMPDB                                                             GRR0F402.5      
C                                                                          INITIAL1.59     
C  Subroutines called                                                      INITIAL1.60     
C                                                                          INITIAL1.61     
      EXTERNAL INITDUMP,INITHDRS,PPCTL,DUMPCTL,                            GKR4F403.262    
     &         INITTIME,INTF_CTL,                                          INITIAL1.63     
     &         INANCCTL,IN_ACCTL,IN_BOUND,INITCTL,INIT_HYD,                @DYALLOC.1736   
     &         INIT_VEG,                                                   ABX1F404.219    
     &         SETGRCTL,SETTSCTL,INITMEAN,TEMPHIST,                        INITIAL1.65     
     &         UP_BOUND,UP_ANCIL,GEN_INTF,PRINTCTL,                        INITIAL1.66     
     &         GET_FILE,TIMER,READWRITD,EXPPXI                             GRB1F400.25     
     &         ,Oper_Emergency                                             GRR2F405.5      
*IF DEF,MPP                                                                GRR2F405.6      
     &         ,OperatorMessage                                            GRR2F405.7      
*ENDIF                                                                     GRR2F405.8      
*IF DEF,ATMOS                                                              INITIAL1.68     
     *         ,INITPHYS,INITDIAG,INITZONM,INITMOS,INIT_CNV                RB250294.1      
*ENDIF                                                                     INITIAL1.70     
*IF DEF,OCEAN                                                              ORH9F404.3      
     &         ,INITDIAGO                                                  ORH9F404.4      
*ENDIF                                                                     ORH9F404.5      
     *         ,INIT_EMCORR                                                GSS1F304.999    
*IF DEF,ATMOS                                                              INITIAL1.74     
*IF DEF,OCEAN                                                              INITIAL1.75     
     *        ,TRANSOUT,TRANSIN,INIT_A2O,SWAP_A2O,SWAP_O2A                 INITIAL1.76     
*ENDIF                                                                     INITIAL1.77     
*IF DEF,SLAB                                                               INITIAL1.78     
     *        ,INIT_A2S                                                    INITIAL1.79     
*ENDIF                                                                     INITIAL1.80     
*ENDIF                                                                     INITIAL1.81     
*IF -DEF,FRADIO                                                            GGH3F401.21     
     *        ,SETPOS,BUFFOUT                                              @DYALLOC.1739   
*ENDIF                                                                     @DYALLOC.1740   
*IF DEF,MACRO                                                              AAD1F304.14     
     &        ,getenv                                                      AAD1F304.15     
*ENDIF                                                                     AAD1F304.16     
C                                                                          INITIAL1.82     
C  Local variables                                                         INITIAL1.83     
C                                                                          INITIAL1.84     
      INTEGER  IMEAN      ! Loop index over mean periods                   INITIAL1.85     
      INTEGER  I          ! Loop index                                     INITIAL1.86     
      INTEGER  ISM        ! Loop index over submodels                      GRR2F305.317    
      INTEGER  submodel_next      ! Submodel identifier                    GRR2F305.318    
      INTEGER  NFTASWAP,NFTOSWAP  ! Fortran units for coupling swapfiles   INITIAL1.87     
      INTEGER  NFTSWAP    ! General Fortran unit for coupling swapfiles    GRR2F305.319    
      INTEGER  FTN_UNIT   ! Fortran unit for pp files                      INITIAL1.88     
      INTEGER  TRANSALEN,TRANSOLEN !data length for TRANSOUT/IN            GRR2F305.320    
      INTEGER  TRANS_LEN  ! General data length for TRANSOUT/IN            GRR2F305.321    
      INTEGER NDEV      ! Unit no.                                         ARR1F402.126    
      INTEGER LL        ! Counter                                          ARR1F402.127    
      INTEGER LEN_FILENAME ! Length of FILENAME array                      ARR1F402.128    
      INTEGER  G_P_FIELD         ! Sizes for MPP dynamic allocation        GRR0F402.6      
     &        ,G_IMTJMT          ! in A-O coupling routines                GRR0F402.7      
      INTEGER CO2_DIMA,            ! CO2 array dimensions                  CCN1F405.106    
     &        CO2_DIMO,                                                    CCN1F405.107    
     &        CO2_DIMO2                                                    CCN1F405.108    
      CHARACTER*14 PPNAME ! Dummy PP file name returned by PPCTL           INITIAL1.93     
      CHARACTER*80 FILENAME                                                AD050293.216    
*IF -DEF,FRADIO                                                            GGH3F401.22     
      REAL DUMMY_WRITE,      ! Dummy variable for rad incs write           @DYALLOC.1742   
     *     A_IO              ! BUFFOUT return code                         @DYALLOC.1743   
      INTEGER LEN_IO         ! BUFFOUT return length                       @DYALLOC.1744   
*ENDIF                                                                     @DYALLOC.1745   
*IF DEF,MACRO                                                              AAD1F304.17     
      INTEGER II,getenv                                                    AAD1F304.18     
      CHARACTER*2 ENVALUE                                                  AAD1F304.19     
*ENDIF                                                                     AAD1F304.20     
C                                                                          INITIAL1.94     
*CALL LBC_COUP                                                             GDR3F405.850    
      integer len_wait_tot     ! Total wait time for boundary data         GDR3F405.851    
      integer iostatus         ! Return code                               GDR3F405.852    
      character*8 ch_date2     ! Date from date_and_time                   GDR3F405.853    
      character*10 ch_time2    ! Time from date_and_time                   GDR3F405.854    
      integer*8 sleep          ! SLEEP Function to make UM wait            GDR3F405.855    
      integer*8 ISLEEP         ! SLEEP Function to make UM wait            GDR3F405.856    
*IF DEF,ATMOS,AND,-DEF,GLOBAL,AND,DEF,MPP                                  GDR3F405.857    
      integer info             ! Return Code from GCOM routine.            GDR3F405.858    
*ENDIF                                                                     GDR3F405.859    
      integer lbc_ntimes       ! No of BC's in communication file          GDR3F405.860    
      integer ms_ntimes        ! No of BC's required in mesoscale          GDR3F405.861    
      integer gl_ntimes        ! No of BC's generated in global            GDR3F405.862    
                                                                           GDR3F405.863    
CL----------------------------------------------------------------------   INITIAL1.101    
C                                                                          GSS1F304.1005   
                                IF (LTIMER) CALL TIMER('INITIAL ',3)       INITIAL1.118    
CL                                                                         INITIAL1.119    
CL----------------------------------------------------------------------   GSS1F304.1006   
CL                                                                         GSS1F304.1007   
CL 1.2 Set FT units as inactive on first step of the integration           INITIAL1.120    
CL     and set last field written/read to zero for each unit               INITIAL1.121    
CL                                                                         INITIAL1.122    
      IF (H_STEPim(a_im).EQ.0.AND.H_STEPim(o_im).EQ.0                      WRB1F401.491    
     &                      .and. H_STEPim(w_im).eq.0) THEN                WRB1F401.492    
        DO I=20,NUNITS                                                     RS030293.148    
          FT_ACTIVE(I)='N'                                                 INITIAL1.125    
          FT_LASTFIELD(I)=0                                                INITIAL1.126    
        ENDDO                                                              INITIAL1.127    
      ENDIF                                                                INITIAL1.128    
CL                                                                         INITIAL1.129    
CL 1.3 Open file for RADINCS array spooling in RAD_CTL                     INITIAL1.130    
CL                                                                         INITIAL1.131    
*IF DEF,FRADIO                                                             GGH3F401.23     
      WRITE(6,*) 'Fast i/o of radincs directly to core memory'             INITIAL1.133    
*ELSE                                                                      INITIAL1.134    
CL    Open unit 16 for CACHE2 file                                         INITIAL1.135    
CL Open radiation increments file for portable i/o                         INITIAL1.136    
      CALL FILE_OPEN(16,FT_ENVIRON(16),LEN_FT_ENVIR(16),1,0,ICODE)         GPB1F305.55     
      IF(ICODE.NE.0) CMESSAGE='INITPHY1: Error opening rad incs file'      INITIAL1.138    
CLL                                                                        @DYALLOC.1746   
CLL Extra dummy write of radiation increments to stop heap fragmentation   @DYALLOC.1747   
CLL (caused by CRAY I/O bug)                                               @DYALLOC.1748   
CLL                                                                        @DYALLOC.1749   
      CALL SETPOS(16,0,ICODE)                                              GTD0F400.90     
      DUMMY_WRITE=0.0                                                      @DYALLOC.1751   
      CALL BUFFOUT(16,DUMMY_WRITE,1,LEN_IO,A_IO)                           @DYALLOC.1752   
      IF(A_IO.NE.-1.0.OR.LEN_IO.NE.1) THEN                                 @DYALLOC.1753   
         CMESSAGE=' INITIAL :Paging IO error radn incrs'                   @DYALLOC.1754   
         ICODE=1                                                           @DYALLOC.1755   
      ENDIF                                                                @DYALLOC.1756   
      CALL SETPOS(16,0,ICODE)                                              GTD0F400.91     
*ENDIF                                                                     INITIAL1.139    
CL                                                                         AAD1F304.21     
CL 1.4 Get number of CPUs attached to program (NCPU). This is              AAD1F304.22     
CL     used by macrotasked physics code.                                   AAD1F304.23     
CL     If DEF MACRO is not selected, NCPU defaults to 1.                   AAD1F304.24     
CL                                                                         AAD1F304.25     
*IF DEF,MACRO                                                              AAD1F304.26     
      II=getenv('NCPUS',ENVALUE)                                           WRB1F401.493    
      IF(ENVALUE.eq.'  ')THEN                                              AAD1F304.28     
        NCPU=1                                                             AAD1F304.29     
      ELSE                                                                 AAD1F304.30     
        READ(ENVALUE,'(I2)')NCPU                                           AAD1F304.31     
      ENDIF                                                                AAD1F304.32     
*ELSE                                                                      AAD1F304.33     
      NCPU=1                                                               AAD1F304.34     
*ENDIF                                                                     AAD1F304.35     
C   DEF,ATMOS needed for OCEAN only compilation,                           AAD1F304.36     
C   because MAX_NO_OF_SEGS is under DEF,ATMOS in CMAXSIZE.                 AAD1F304.37     
*IF DEF,ATMOS                                                              AAD1F304.38     
      IF (MAX(A_SW_SEGMENTS*NCPU, A_LW_SEGMENTS*NCPU,                      AAD1F304.39     
     & A_CONVECT_SEGMENTS*NCPU) .GT. MAX_NO_OF_SEGS) THEN                  AAD1F304.40     
        ICODE=1000                                                         AAD1F304.41     
       CMESSAGE='INITIAL: MAX_NO_OF_SEGS (in CMAXSIZE) not large enough'   AAD1F304.42     
        GOTO 999                                                           AAD1F304.43     
      ENDIF                                                                AAD1F304.44     
*ENDIF                                                                     AAD1F304.45     
CL                                                                         INITIAL1.140    
CL---------------------------------------------------------------------    INITIAL1.141    
CL 2. Initialise STASH control arrays from STASH control file.             INITIAL1.142    
CL---------------------------------------------------------------------    INITIAL1.143    
                                                                           INITIAL1.144    
        IF(LTIMER) THEN                                                    INITIAL1.145    
          CALL TIMER('INITCTL ',3)                                         INITIAL1.146    
        END IF                                                             INITIAL1.147    
                                                                           INITIAL1.148    
! Note that NSECTS=NSECTP, NITEMS=NITEMP : set in WSTLST                   GSS1F305.539    
                                                                           GSS1F305.540    
      CALL INITCTL(                                                        @DYALLOC.1758   
     &                  NUM_STASH_LEVELS,NUM_LEVEL_LISTS,                  @DYALLOC.1759   
     &                  NITEMS,NSECTS,N_INTERNAL_MODEL_MAX,                GSS1F305.541    
*CALL ARGSIZE                                                              @DYALLOC.1760   
*CALL ARTSTS                                                               @DYALLOC.1761   
*CALL ARGPPX                                                               GSS1F305.542    
*CALL ARTD1                                                                GSM2F403.233    
     &                   ICODE,CMESSAGE )                                  @DYALLOC.1762   
                                                                           INITIAL1.150    
        IF(LTIMER) THEN                                                    INITIAL1.151    
          CALL TIMER('INITCTL ',4)                                         INITIAL1.152    
        END IF                                                             INITIAL1.153    
                                                                           INITIAL1.154    
        IF(ICODE.GT.0) RETURN                                              INITIAL1.155    
                                                                           INITIAL1.156    
                                                                           INITIAL1.157    
CL                                                                         INITIAL1.158    
CL----------------------------------------------------------------------   INITIAL1.159    
CL 3. Read appropriate submodel partition dump to memory.  If coupled,     GRR2F305.322    
CL    page out the D1 part of each dump to its 'swap' file and read the    GRR2F305.323    
CL    other dump(s) into memory.  Write temporary history file if dumps    GRR2F305.324    
CL    read successfully on timestep 0.                                     TJ040293.6      
CL                                                                         INITIAL1.163    
CL Check if coupling across submodel partitions required and assign        GRR2F305.325    
CL fotran unit nos. { This could be generalised. Only atmos and ocean      GRR2F305.326    
CL dumps catered for here.}                                                GRR2F305.327    
                                                                           GRR2F305.328    
C *if def,atmos required for TRANSALEN as p_field                          GRR2F305.329    
C under *if def,atmos in TYPSIZE prevents warning & compile errors if      GRR2F305.330    
C ocean only being compiled ; to be sorted out in next version (4.1)       GRR2F305.331    
      IF (N_SUBMODEL_PARTITION.GT.1) THEN                                  GRR2F305.332    
        NFTASWAP=18                                                        GRR2F305.333    
        NFTOSWAP=19                                                        GRR2F305.334    
*IF DEF,ATMOS                                                              GRR2F305.335    
        TRANSALEN= A_LEN_DATA+(P_LEVELS+1+2*Q_LEVELS)*P_FIELD              GRR2F305.336    
*ELSE                                                                      GRR2F305.337    
        TRANSALEN= 1                                                       GRR2F305.338    
*ENDIF                                                                     GRR2F305.339    
        TRANSOLEN= O_LEN_DATA+O_LEN_DUALDATA                               GSI0F402.27     
      ENDIF                                                                GRR2F305.341    
                                                                           GRR2F305.342    
CL                                                                         GRR2F305.343    
CL 3.1  Loop over submodel partition dumps                                 GRR2F305.344    
CL                                                                         GRR2F305.345    
      DO ISM=1,N_SUBMODEL_PARTITION                                        GRR2F305.346    
                                                                           GRR2F305.347    
        submodel=SUBMODEL_PARTITION_LIST(ISM)                              GRR2F305.348    
        IF (LTIMER) THEN                                                   GPB1F401.27     
          CALL TIMER('INITDUMP',5)                                         GPB1F401.28     
          CALL TIMER('INITDUMP',3)                                         GPB1F401.29     
        ENDIF                                                              GPB1F401.30     
        CALL INITDUMP(                                                     GRR2F305.349    
*CALL ARGSIZE                                                              @DYALLOC.1764   
*CALL ARTD1                                                                @DYALLOC.1765   
*CALL ARTDUMA                                                              @DYALLOC.1766   
*CALL ARTDUMO                                                              @DYALLOC.1767   
*CALL ARTDUMW                                                              WRB1F401.494    
*CALL ARTSTS                                                               @DYALLOC.1768   
*CALL ARTPTRA                                                              @DYALLOC.1769   
*CALL ARTPTRO                                                              @DYALLOC.1770   
*CALL ARTPTRW                                                              WRB1F401.495    
*CALL ARTCONA                                                              @DYALLOC.1771   
*CALL ARTCONO                                                              @DYALLOC.1772   
*CALL ARTCONW                                                              WRB1F401.496    
*CALL ARGPPX                                                               GSS1F305.543    
     &               submodel,ICODE,CMESSAGE)                              GRR2F305.350    
        IF (LTIMER) THEN                                                   GPB1F401.31     
          CALL TIMER('INITDUMP',4)                                         GPB1F401.32     
          CALL TIMER('INITDUMP',6)                                         GPB1F401.33     
        ENDIF                                                              GPB1F401.34     
        IF (ICODE.GT.0) GOTO 999                                           GRR2F305.351    
                                                                           GRR2F305.352    
        IF(N_SUBMODEL_PARTITION.GT.1) THEN  ! coupling across dumps        GRR2F305.353    
                                                                           GRR2F305.354    
           IF(submodel.eq.atmos_sm) then    ! atmosphere                   GRR2F305.355    
              NFTSWAP=NFTASWAP                                             GRR2F305.356    
              TRANS_LEN= TRANSALEN                                         GRR2F305.357    
           ELSEIF(submodel.eq.ocean_sm) then    ! ocean                    GRR2F305.358    
              NFTSWAP=NFTOSWAP                                             GRR2F305.359    
              TRANS_LEN= TRANSOLEN                                         GRR2F305.360    
           ELSE                                                            GRR2F305.361    
              CMESSAGE='INITIAL: submodel ident not valid'                 GRR2F305.362    
              write(6,*) CMESSAGE                                          GRR2F305.363    
              write(6,*) 'Non valid submodel identifier=',submodel         GRR2F305.364    
              ICODE=1                                                      GRR2F305.365    
           ENDIF                                                           GRR2F305.366    
           IF (ICODE.GT.0) GOTO 999                                        GRR2F305.367    
                                                                           GRR2F305.368    
CL      Copy data from one start dump to "swap" file, read the other       INITIAL1.185    
CL      start dump to memory, and write it out to its "swap" file          INITIAL1.186    
                                IF (LTIMER) CALL TIMER('TRANSOUT',3)       GRR2F305.369    
           CALL TRANSOUT(                                                  GRR2F305.370    
*CALL ARTD1                                                                GRR2F305.371    
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.295    
                                IF (LTIMER) CALL TIMER('TRANSOUT',4)       GRR2F305.373    
                                                                           GRR2F305.374    
          IF (ICODE.GT.0) GOTO 999                                         GRR2F305.375    
                                                                           GRR2F305.376    
        ENDIF  ! end of test for coupling acroos dumps                     GRR2F305.377    
                                                                           GRR2F305.378    
      ENDDO  ! ISM over submodel partitions                                GRR2F305.379    
CL                                                                         INITIAL1.187    
!                                                                          GRR2F405.9      
! 3.2  Allow Override of namelist input in operational environment         GRR2F405.10     
!                                                                          GRR2F405.11     
      IF(MODEL_STATUS .EQ. 'Operational')  Call Oper_Emergency             GRR2F405.12     
!                                                                          GRR2F405.13     
CL                                                                         GRR2F305.380    
*IF DEF,ATMOS                                                              INITIAL1.221    
CL                                                                         INITIAL1.222    
CL      Set RUN indicator in atmosphere dump header                        INITIAL1.223    
CL                                                                         INITIAL1.224    
      CALL SET_RUN_INDIC_OP(                                               @DYALLOC.1797   
*CALL ARGSIZE                                                              @DYALLOC.1798   
*CALL ARTDUMA                                                              @DYALLOC.1799   
     &              ICODE,CMESSAGE)                                        @DYALLOC.1800   
*ENDIF                                                                     INITIAL1.226    
CL                                                                         @DYALLOC.1801   
CL 3.3  On NRUN initialise dump LOOKUP headers associated with             @DYALLOC.1802   
CL      diagnostic fields with the bare essentials needed to read and      @DYALLOC.1803   
CL      write dumps - the rest to be filled in by STASH during the run.    @DYALLOC.1804   
CL                                                                         @DYALLOC.1805   
      IF (H_STEPim(a_im).EQ.0.AND.H_STEPim(o_im).EQ.0                      WRB1F401.497    
     &                      .and. H_STEPim(w_im).eq.0) THEN                WRB1F401.498    
        CALL INITHDRS(                                                     @DYALLOC.1807   
*CALL ARGSIZE                                                              @DYALLOC.1808   
*CALL ARTDUMA                                                              @DYALLOC.1809   
*CALL ARTDUMO                                                              @DYALLOC.1810   
*CALL ARTDUMW                                                              WRB1F401.499    
*CALL ARTSTS                                                               @DYALLOC.1811   
*CALL ARGPPX                                                               GSS1F305.544    
     &                ICODE,CMESSAGE)                                      @DYALLOC.1812   
        IF (ICODE.GT.0) GOTO 999                                           @DYALLOC.1813   
                                                                           GRR2F305.381    
      ENDIF    ! End test for NRUN                                         GRR2F305.382    
                                                                           GKR4F403.263    
!L                                                                         GKR4F403.264    
!L 3.4 Write out temporary copy of D1 for current submodel                 GKR4F403.265    
!L                                                                         GKR4F403.266    
                                                                           GKR4F403.267    
      IF (L_WRIT_INIT) THEN                                                GKR4F403.268    
                                                                           GKR4F403.269    
        if (submodel .eq. atmos_sm) then                                   GKR4F403.270    
           CALL DUMPCTL (                                                  GKR4F403.271    
*CALL ARGSIZE                                                              GKR4F403.272    
*CALL ARTD1                                                                GKR4F403.273    
*CALL ARTDUMA                                                              GKR4F403.274    
*CALL ARTDUMO                                                              GKR4F403.275    
*CALL ARTDUMW                                                              GKR4F403.276    
*CALL ARTCONA                                                              GKR4F403.277    
*CALL ARTPTRA                                                              GKR4F403.278    
*CALL ARTSTS                                                               GKR4F403.279    
*CALL ARGPPX                                                               GKR4F403.280    
     &          atmos_sm,0,.TRUE.,'atminitial',0,                          GIE1F405.17     
     &          ICODE,CMESSAGE)                                            GKR4F403.282    
                                                                           GKR4F403.283    
        elseif (submodel .eq. ocean_sm) then                               GKR4F403.284    
           CALL DUMPCTL (                                                  GKR4F403.285    
*CALL ARGSIZE                                                              GKR4F403.286    
*CALL ARTD1                                                                GKR4F403.287    
*CALL ARTDUMA                                                              GKR4F403.288    
*CALL ARTDUMO                                                              GKR4F403.289    
*CALL ARTDUMW                                                              GKR4F403.290    
*CALL ARTCONA                                                              GKR4F403.291    
*CALL ARTPTRA                                                              GKR4F403.292    
*CALL ARTSTS                                                               GKR4F403.293    
*CALL ARGPPX                                                               GKR4F403.294    
     &          ocean_sm,0,.TRUE.,'ocninitial',0,                          GIE1F405.18     
     &          ICODE,CMESSAGE)                                            GKR4F403.296    
                                                                           GKR4F403.297    
        elseif (submodel .eq. wave_sm) then                                GKR4F403.298    
           CALL DUMPCTL (                                                  GKR4F403.299    
*CALL ARGSIZE                                                              GKR4F403.300    
*CALL ARTD1                                                                GKR4F403.301    
*CALL ARTDUMA                                                              GKR4F403.302    
*CALL ARTDUMO                                                              GKR4F403.303    
*CALL ARTDUMW                                                              GKR4F403.304    
*CALL ARTCONA                                                              GKR4F403.305    
*CALL ARTPTRA                                                              GKR4F403.306    
*CALL ARTSTS                                                               GKR4F403.307    
*CALL ARGPPX                                                               GKR4F403.308    
     &          wave_sm,0,.TRUE.,'wavinitial',0,                           GIE1F405.19     
     &          ICODE,CMESSAGE)                                            GKR4F403.310    
        endif                                                              GKR4F403.311    
                                                                           GKR4F403.312    
      END IF                                                               GKR4F403.313    
                                                                           GRR2F305.383    
CL----------------------------------------------------------------------   INITIAL1.227    
CL 6.  Initialise means program control block                              GSM6F403.3      
CL                                                                         GSM6F403.4      
      DO ISM=1,N_SUBMODEL_PARTITION                                        GSM6F403.5      
                                                                           GSM6F403.6      
        submodel=SUBMODEL_PARTITION_LIST(ISM)                              GSM6F403.7      
                                IF (LTIMER) CALL TIMER('INITMEAN',3)       GSM6F403.8      
        CALL INITMEAN(                                                     GSM6F403.9      
*CALL ARGSIZE                                                              GSM6F403.10     
*CALL ARTDUMA                                                              GSM6F403.11     
*CALL ARTDUMO                                                              GSM6F403.12     
*CALL ARTDUMW                                                              GSM6F403.13     
     &                submodel,ICODE,CMESSAGE)                             GSM6F403.14     
                                IF (LTIMER) CALL TIMER('INITMEAN',4)       GSM6F403.15     
        IF (ICODE.GT.0) GOTO 999                                           GSM6F403.16     
                                                                           GSM6F403.17     
      ENDDO ! ISM over submodel partition dumps                            GSM6F403.18     
CL----------------------------------------------------------------------   GSM6F403.19     
CL 4. Set up other control blocks and physical constants                   INITIAL1.228    
CL                                                                         INITIAL1.229    
CL 4.1  Initialise the model time and check that history file data time    INITIAL1.230    
CL      matches dump(s); set derived time/step information                 INITIAL1.231    
CL                                                                         INITIAL1.232    
                                IF (LTIMER) CALL TIMER('INITTIME',3)       INITIAL1.233    
      CALL INITTIME(                                                       @DYALLOC.1815   
*CALL ARGSIZE                                                              @DYALLOC.1816   
*CALL ARTDUMA                                                              @DYALLOC.1817   
*CALL ARTDUMO                                                              @DYALLOC.1818   
*CALL ARTDUMW                                                              WRB1F401.500    
     &              submodel,ICODE,CMESSAGE)                               GRR2F305.384    
                                IF (LTIMER) CALL TIMER('INITTIME',4)       INITIAL1.235    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.236    
CL                                                                         GRB1F400.12     
CL 4.2  Write up temporary history file after successfully reading         GRB1F400.13     
CL      initial dumps on timestep 0 and setting model_data_time if         GRB1F400.14     
CL      assimilation run, to allow CRUN from initial dumps.                GRB1F400.15     
CL                                                                         GRB1F400.16     
*IF DEF,MPP                                                                ARB1F402.265    
      IF (mype .eq. 0) THEN                                                ARB1F402.266    
*ENDIF                                                                     ARB1F402.267    
      IF (H_STEPim(a_im).EQ.0.AND.H_STEPim(o_im).EQ.0                      WRB1F401.501    
     &                      .and. H_STEPim(w_im).eq.0) THEN                WRB1F401.502    
        CALL TEMPHIST(THIST_UNIT,ICODE,CMESSAGE)                           GRB1F400.18     
        IF (ICODE.GT.0) GOTO 999                                           GRB1F400.19     
      END IF                                                               GRB1F400.20     
*IF DEF,MPP                                                                ARB1F402.268    
      ENDIF                                                                ARB1F402.269    
*ENDIF                                                                     ARB1F402.270    
CL                                                                         INITIAL1.237    
CL 4.3  Set up control block for updating ancillary fields                 INITIAL1.238    
CL                                                                         INITIAL1.239    
                                IF (LTIMER) CALL TIMER('INANCCTL',3)       INITIAL1.240    
      CALL INANCCTL(                                                       @DYALLOC.1820   
*CALL ARGSIZE                                                              @DYALLOC.1821   
*CALL ARTDUMA                                                              @DYALLOC.1822   
*CALL ARTDUMO                                                              @DYALLOC.1823   
*CALL ARTDUMW                                                              WRB1F401.503    
*CALL ARTSTS                                                               @DYALLOC.1824   
*CALL ARTPTRA                                                              @DYALLOC.1825   
*CALL ARTPTRO                                                              @DYALLOC.1826   
*CALL ARTPTRW                                                              WRB1F401.504    
*CALL ARTANC                                                               @DYALLOC.1827   
*CALL ARGPPX                                                               GDG0F401.818    
     &           ICODE,CMESSAGE)                                           GRB1F305.135    
                                IF (LTIMER) CALL TIMER('INANCCTL',4)       INITIAL1.242    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.243    
CL                                                                         INITIAL1.244    
CL 4.4  Set up control block for updating boundary fields                  INITIAL1.245    
                                                                           GDR3F405.864    
*IF DEF,ATMOS,AND,-DEF,GLOBAL                                              GDR3F405.865    
                                                                           GDR3F405.866    
      if (l_lbc_coup) then                                                 GDR3F405.867    
                                                                           GDR3F405.868    
!       Set no of boundary conditions required to proceed.                 GDR3F405.869    
!       For the first hour, 2 lots of boundary conditions required.        GDR3F405.870    
!       This value cannot be computed before the first read of             GDR3F405.871    
!       INBOUND so it is hardwired initially.                              GDR3F405.872    
                                                                           GDR3F405.873    
        ms_ntimes = 2                                                      GDR3F405.874    
                                                                           GDR3F405.875    
      endif                                                                GDR3F405.876    
                                                                           GDR3F405.877    
!     Return here if IN_BOUND has been called and there                    GDR3F405.878    
!     are insufficient BCs to proceed. This is possible                    GDR3F405.879    
!     in CRUNs.                                                            GDR3F405.880    
                                                                           GDR3F405.881    
 160  continue                                                             GDR3F405.882    
                                                                           GDR3F405.883    
      if (l_lbc_coup) then                                                 GDR3F405.884    
                                                                           GDR3F405.885    
        call date_and_time(ch_date2, ch_time2)                             GDR3F405.886    
                                                                           GDR3F405.887    
        write(6,*) 'LBC_COUP: ',                                           GDR3F405.888    
     &  ch_time2(1:2),':',ch_time2(3:4),':',ch_time2(5:6),' on ',          GDR3F405.889    
     &  ch_date2(7:8),'/',ch_date2(5:6),'/',ch_date2(1:4),                 GDR3F405.890    
     &  ' Wait to call INBOUND in INITIAL.'                                GDR3F405.891    
                                                                           GDR3F405.892    
*IF DEF,MPP                                                                GDR3F405.893    
        if (mype.eq.0) then                                                GDR3F405.894    
*ENDIF                                                                     GDR3F405.895    
                                                                           GDR3F405.896    
          write (6,*) ' ms_ntimes in INITIAL ',ms_ntimes                   GDR3F405.897    
                                                                           GDR3F405.898    
          len_wait_tot = 0                                                 GDR3F405.899    
 150      continue                                                         GDR3F405.900    
                                                                           GDR3F405.901    
!         Close the communication file and re-open.                        GDR3F405.902    
          close(190)                                                       GDR3F405.903    
          open (190,file=lbc_filename,action="read",iostat=icode)          GDR3F405.904    
                                                                           GDR3F405.905    
!         Check error code from OPEN                                       GDR3F405.906    
          if (icode.ne.0) then                                             GDR3F405.907    
            write (6,*) ' Return code from OPEN ',icode                    GDR3F405.908    
            icode = 401                                                    GDR3F405.909    
            write (cmessage,*) 'INITIAL : Problem with OPEN '//            GDR3F405.910    
     &      'for Unit No 190.'                                             GDR3F405.911    
            go to 151                                                      GDR3F405.912    
          endif                                                            GDR3F405.913    
                                                                           GDR3F405.914    
!         Return here to read next value from Unit 190                     GDR3F405.915    
 456      continue                                                         GDR3F405.916    
                                                                           GDR3F405.917    
!         Read in the next value of lbc_ntimes                             GDR3F405.918    
          read (190,*,iostat=icode) lbc_ntimes                             GDR3F405.919    
                                                                           GDR3F405.920    
!         Check error code from READ                                       GDR3F405.921    
          if (icode.ne.0) then  !  Non-zero return code from READ.         GDR3F405.922    
                                                                           GDR3F405.923    
            write (6,*) ' ms : Return code from READ ',icode               GDR3F405.924    
                                                                           GDR3F405.925    
!           Check if maximum wait time has been exceeded to read           GDR3F405.926    
!           required value of lbc_ntimes.                                  GDR3F405.927    
            if (len_wait_tot.ge.um_lbc_wait_max) then                      GDR3F405.928    
                                                                           GDR3F405.929    
!             Maximum wait time has been exceeded.                         GDR3F405.930    
!             Insufficient Boundary Conditions to proceed.                 GDR3F405.931    
!             Likely cause is delay in job generating the BC's.            GDR3F405.932    
                                                                           GDR3F405.933    
              write (6,*) ' ms : Maximum wait time reached'//              GDR3F405.934    
     &        ' after ',um_lbc_wait_max,' seconds.'                        GDR3F405.935    
              icode = 402                                                  GDR3F405.936    
              write (cmessage,*)                                           GDR3F405.937    
     &        'INITIAL : Failed to find required value in LBC_FILE.'       GDR3F405.938    
              icode = 402                                                  GDR3F405.939    
              go to 151                                                    GDR3F405.940    
                                                                           GDR3F405.941    
            endif   !  if len_wait_tot                                     GDR3F405.942    
                                                                           GDR3F405.943    
!           Insufficient BC's to proceed ; Wait for um_lbc_wait            GDR3F405.944    
!           seconds before another attempt to proceed.                     GDR3F405.945    
                                                                           GDR3F405.946    
            write (6,*) ' ms : Wait for ',um_lbc_wait,                     GDR3F405.947    
     &                  ' seconds and retry.'                              GDR3F405.948    
            isleep = sleep(um_lbc_wait)                                    GDR3F405.949    
            len_wait_tot = len_wait_tot+um_lbc_wait                        GDR3F405.950    
            write (6,*) ' ms : Total Wait so far ',len_wait_tot,           GDR3F405.951    
     &                  ' seconds.'                                        GDR3F405.952    
                                                                           GDR3F405.953    
            go to 150  !  Retry to find required lbc_ntimes.               GDR3F405.954    
                                                                           GDR3F405.955    
          endif  !  if icode.ne.0                                          GDR3F405.956    
                                                                           GDR3F405.957    
          if (lbc_ntimes.gt.1000) then                                     GDR3F405.958    
                                                                           GDR3F405.959    
!           First value in the file is always >1000. Read next value.      GDR3F405.960    
            go to 456                                                      GDR3F405.961    
                                                                           GDR3F405.962    
          elseif (lbc_ntimes.lt.ms_ntimes) then                            GDR3F405.963    
                                                                           GDR3F405.964    
!           Value is not required. Proceed to read next value.             GDR3F405.965    
            write (6,*) ' ms : gl_ntimes = ',lbc_ntimes,' read in.'//      GDR3F405.966    
     &      ' gl_ntimes >= ',ms_ntimes,' is required. Read next value.'    GDR3F405.967    
            go to 456                                                      GDR3F405.968    
                                                                           GDR3F405.969    
          elseif (lbc_ntimes.ge.ms_ntimes) then                            GDR3F405.970    
                                                                           GDR3F405.971    
!           Required value read in. Sufficient BC's to proceed.            GDR3F405.972    
            write (6,*) ' ms : gl_ntimes = ',lbc_ntimes,' read in.'//      GDR3F405.973    
     &      ' gl_ntimes >= ',ms_ntimes,' is required. Proceed.'            GDR3F405.974    
                                                                           GDR3F405.975    
            call date_and_time (ch_date2, ch_time2)                        GDR3F405.976    
                                                                           GDR3F405.977    
            write(6,*)  'LBC_COUP: ',                                      GDR3F405.978    
     &      ch_time2(1:2),':',ch_time2(3:4),':',ch_time2(5:6),' on ',      GDR3F405.979    
     &      ch_date2(7:8),'/',ch_date2(5:6),'/',ch_date2(1:4),             GDR3F405.980    
     &      ' Proceed to call INBOUND in INITIAL.'                         GDR3F405.981    
                                                                           GDR3F405.982    
            gl_ntimes = lbc_ntimes                                         GDR3F405.983    
                                                                           GDR3F405.984    
          endif  !  if lbc_ntimes                                          GDR3F405.985    
                                                                           GDR3F405.986    
*IF DEF,MPP                                                                GDR3F405.987    
        endif !  if mype=0                                                 GDR3F405.988    
*ENDIF                                                                     GDR3F405.989    
                                                                           GDR3F405.990    
 151    continue                                                           GDR3F405.991    
                                                                           GDR3F405.992    
*IF DEF,MPP                                                                GDR3F405.993    
!       Broadcast ICODE to all PEs                                         GDR3F405.994    
        iostatus = icode                                                   GDR3F405.995    
        call gc_ibcast (458,1,0,nproc,info,iostatus)                       GDR3F405.996    
        icode = iostatus                                                   GDR3F405.997    
*ENDIF                                                                     GDR3F405.998    
                                                                           GDR3F405.999    
!       Check on ICODE before proceeding.                                  GDR3F405.1000   
        if (icode.ne.0) then                                               GDR3F405.1001   
          write (6,*) ' U_MODEL - Error detected.'                         GDR3F405.1002   
          write (6,*) ' ICODE : ',ICODE                                    GDR3F405.1003   
          write (6,*) ' CMESSAGE : ',CMESSAGE                              GDR3F405.1004   
          go to 999   !  Return                                            GDR3F405.1005   
        endif                                                              GDR3F405.1006   
                                                                           GDR3F405.1007   
*IF DEF,MPP                                                                GDR3F405.1008   
!       Broadcast gl_ntimes to all PEs                                     GDR3F405.1009   
        call gc_ibcast (458,1,0,nproc,info,gl_ntimes)                      GDR3F405.1010   
*ENDIF                                                                     GDR3F405.1011   
        lbc_ntimes = gl_ntimes                                             GDR3F405.1012   
                                                                           GDR3F405.1013   
      endif  !  if l_lbc_coup                                              GDR3F405.1014   
                                                                           GDR3F405.1015   
*ENDIF                                                                     GDR3F405.1016   
                                                                           GDR3F405.1017   
CL                                                                         INITIAL1.246    
                                IF (LTIMER) CALL TIMER('IN_BOUND',3)       INITIAL1.247    
      CALL IN_BOUND(                                                       @DYALLOC.1829   
*CALL ARGSIZE                                                              @DYALLOC.1830   
*CALL ARTDUMA                                                              @DYALLOC.1831   
*CALL ARTDUMO                                                              @DYALLOC.1832   
*CALL ARTDUMW                                                              WRB1F401.505    
*CALL ARTSTS                                                               ARB1F404.369    
*CALL ARTPTRA                                                              @DYALLOC.1833   
*CALL ARTPTRO                                                              @DYALLOC.1834   
*CALL ARTPTRW                                                              WRB1F401.506    
*CALL ARTBND                                                               @DYALLOC.1835   
*IF DEF,ATMOS                                                              NF171193.16     
     &   A_LEN1_LEVDEPC,A_LEN2_LEVDEPC,   ! for dynamic array              NF171193.17     
*ENDIF                                                                     NF171193.18     
*IF DEF,OCEAN                                                              NF171193.19     
     &   O_LEN1_LEVDEPC,O_LEN2_LEVDEPC,   ! for dynamic array              NF171193.20     
*ENDIF                                                                     NF171193.21     
*IF DEF,WAVE                                                               WRB1F401.507    
     &   W_LEN1_LEVDEPC,W_LEN2_LEVDEPC,   ! for dynamic array              WRB1F401.508    
*ENDIF                                                                     WRB1F401.509    
*CALL ARGPPX                                                               GDG0F401.819    
     &                   ICODE,CMESSAGE)                                   GRB1F305.136    
                                IF (LTIMER) CALL TIMER('IN_BOUND',4)       INITIAL1.249    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.250    
                                                                           GDR3F405.1018   
*IF DEF,ATMOS,AND,-DEF,GLOBAL                                              GDR3F405.1019   
                                                                           GDR3F405.1020   
      if (l_lbc_coup) then                                                 GDR3F405.1021   
                                                                           GDR3F405.1022   
!       Now that IN_BOUND has been called for the first time               GDR3F405.1023   
!       double check that there are sufficient BCs to proceed.             GDR3F405.1024   
!                                                                          GDR3F405.1025   
!       Determine which boundary data is required to proceed               GDR3F405.1026   
!       the next period.                                                   GDR3F405.1027   
        if (boundary_stepsim(a_im).gt.0) then                              GDR3F405.1028   
          ms_ntimes = 2 + (stepim(a_im)/boundary_stepsim(a_im))            GDR3F405.1029   
        endif                                                              GDR3F405.1030   
                                                                           GDR3F405.1031   
        if (lbc_ntimes.lt.ms_ntimes) then                                  GDR3F405.1032   
                                                                           GDR3F405.1033   
!         There are insufficient BCs to proceed. Go back and wait          GDR3F405.1034   
!         for sufficient BCs to proceed.                                   GDR3F405.1035   
          write (6,*) ' ms : gl_ntimes = ',lbc_ntimes,                     GDR3F405.1036   
     &    ' gl_ntimes >= ',ms_ntimes,' is required. '//                    GDR3F405.1037   
     &    ' Insufficient BCs to proceed. Wait.'                            GDR3F405.1038   
          go to 160                                                        GDR3F405.1039   
                                                                           GDR3F405.1040   
        endif                                                              GDR3F405.1041   
                                                                           GDR3F405.1042   
      endif  !  if l_lbc_coup                                              GDR3F405.1043   
                                                                           GDR3F405.1044   
*ENDIF                                                                     GDR3F405.1045   
                                                                           GDR3F405.1046   
CL                                                                         INITIAL1.251    
CL  4.5  Set up control block for writing interface fields.                INITIAL1.252    
CL                                                                         INITIAL1.253    
                                IF (LTIMER) CALL TIMER('INTF_CTL',3)       INITIAL1.254    
      CALL  INTF_CTL (                                                     @DYALLOC.1837   
*CALL ARGSIZE                                                              @DYALLOC.1838   
*CALL ARTINFA                                                              GDR2F405.55     
     &                ICODE,CMESSAGE)                                      GRB1F305.137    
                                IF (LTIMER) CALL TIMER('INTF_CTL',4)       INITIAL1.256    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.257    
CL                                                                         INITIAL1.258    
*IF DEF,ATMOS                                                              INITIAL1.259    
CL                                                                         INITIAL1.260    
CL 4.6  Initialise physical constants used in main physics                 INITIAL1.261    
CL      packages - includes radiation lookup tables, and QSAT              INITIAL1.262    
CL      lookup table                                                       INITIAL1.263    
CL                                                                         INITIAL1.264    
                                                                           GRR2F305.385    
C First read the atmosphere data to memory if coupled                      INITIAL1.266    
      IF(submodel.NE.atmos_sm) THEN                                        GRR2F305.386    
                                                                           GRR2F305.387    
         TRANS_LEN=TRANSALEN                                               GRR2F305.388    
         NFTSWAP  =NFTASWAP                                                GRR2F305.389    
         submodel=atmos_sm    ! new submodel will be atmosphere            GRR1F402.296    
                                IF (LTIMER) CALL TIMER('TRANSIN ',3)       INITIAL1.267    
         CALL TRANSIN(                                                     GRR2F305.390    
*CALL ARTD1                                                                @DYALLOC.1841   
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.297    
                                IF (LTIMER) CALL TIMER('TRANSIN ',4)       INITIAL1.270    
      ENDIF ! End check on submodel                                        GRR2F305.393    
                                                                           GRR2F305.394    
                                IF (LTIMER) CALL TIMER('INITPHYS',3)       INITIAL1.272    
      CALL INITPHYS(ICODE,CMESSAGE)                                        INITIAL1.273    
                                IF (LTIMER) CALL TIMER('INITPHYS',4)       INITIAL1.274    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.275    
      LADD_RADINCS=(A_SW_RADSTEP.EQ.A_LW_RADSTEP)                          INITIAL1.276    
                                                                           GSS1F304.1011   
      IF (LEMCORR) THEN                                                    GSS1F304.1012   
CL                                                                         INITIAL1.278    
CL 4.7  Initialise total atmospheric energy                                INITIAL1.279    
CL                                                                         INITIAL1.280    
      IF (STEPim(a_im).EQ.0 ) THEN                                         GDR5F305.63     
C                                                                          INITIAL1.286    
                                IF (LTIMER) CALL TIMER('INEMCORR',3)       INITIAL1.287    
C                                                                          INITIAL1.288    
      CALL INIT_EMCORR(                                                    @DYALLOC.1844   
*CALL ARGSIZE                                                              @DYALLOC.1845   
*CALL ARTD1                                                                @DYALLOC.1846   
*CALL ARTDUMA                                                              @DYALLOC.1847   
*CALL ARTPTRA                                                              @DYALLOC.1848   
*CALL ARTCONA                                                              @DYALLOC.1849   
     &              ICODE,CMESSAGE,LLINTS,LWHITBROM)                       GSS1F304.1013   
C                                                                          INITIAL1.299    
                                IF (LTIMER) CALL TIMER('INEMCORR',4)       INITIAL1.300    
C                                                                          INITIAL1.301    
C                                                                          INITIAL1.302    
      END IF                                                               INITIAL1.303    
C                                                                          INITIAL1.304    
      END IF    !    LEMCORR                                               GSS1F304.1014   
CL                                                                         INITIAL1.306    
CL 4.8  Initialise MOS grid information                                    INITIAL1.307    
CL                                                                         INITIAL1.308    
                                IF (LTIMER) CALL TIMER('INITMOS ',3)       INITIAL1.309    
      CALL INITMOS(                                                        @DYALLOC.1851   
*CALL ARGSIZE                                                              @DYALLOC.1852   
*CALL ARTDUMA                                                              @DYALLOC.1853   
*CALL ARTSTS                                                               @DYALLOC.1854   
*CALL ARTCONA                                                              @DYALLOC.1855   
     &             ICODE,CMESSAGE)                                         @DYALLOC.1856   
                                IF (LTIMER) CALL TIMER('INITMOS ',4)       INITIAL1.311    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.312    
*ENDIF                                                                     INITIAL1.313    
CL----------------------------------------------------------------------   INITIAL1.314    
CL 5. Set timestep group control switches for initial step                 INITIAL1.315    
CL                                                                         INITIAL1.316    
                                IF (LTIMER) CALL TIMER('SETGRCTL',3)       INITIAL1.317    
      CALL SETGRCTL(internal_model,submodel,NGROUP,                        GRR2F305.395    
     *              ICODE,CMESSAGE)                                        GRR2F305.396    
                                IF (LTIMER) CALL TIMER('SETGRCTL',4)       INITIAL1.319    
      submodel_next=submodel   ! Next submodel group of timesteps.         GRR2F305.397    
                                                                           GRR2F305.398    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.320    
CL                                                                         INITIAL1.321    
CL 5.1 Set timestep control switches for initial step                      INITIAL1.322    
CL                                                                         INITIAL1.323    
                                IF (LTIMER) CALL TIMER('SETTSCTL',3)       INITIAL1.324    
      CALL SETTSCTL (                                                      @DYALLOC.1857   
*CALL ARGSIZE                                                              @DYALLOC.1858   
*CALL ARTDUMA                                                              @DYALLOC.1859   
*CALL ARTDUMO                                                              @DYALLOC.1860   
*CALL ARTDUMW                                                              WRB1F401.510    
*CALL ARTSTS                                                               @DYALLOC.1861   
*CALL ARTINFA                                                              @DYALLOC.1862   
*CALL ARTINFO                                                              @DYALLOC.1863   
*CALL ARTINFW                                                              WRB1F401.511    
     &             internal_model,.TRUE.,MEANLEV,ICODE,CMESSAGE)           GRR2F305.399    
                                IF (LTIMER) CALL TIMER('SETTSCTL',4)       INITIAL1.326    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.327    
CL                                                                         INITIAL1.328    
CL 5.2 Initialise PP files at step 0                                       INITIAL1.329    
CL                                                                         INITIAL1.330    
                                IF (LTIMER) CALL TIMER('PPCTL   ',3)       INITIAL1.331    
      MEANLEV=0                                                            INITIAL1.332    
      CALL PPCTL(                                                          @DYALLOC.1865   
*CALL ARGSIZE                                                              @DYALLOC.1866   
*CALL ARTD1                                                                @DYALLOC.1867   
*CALL ARTDUMA                                                              @DYALLOC.1868   
*CALL ARTDUMO                                                              @DYALLOC.1869   
*CALL ARTDUMW                                                              WRB1F401.512    
*CALL ARTINFA                                                              @DYALLOC.1870   
*CALL ARTINFO                                                              GMB1F405.380    
*CALL ARGPPX                                                               GMB1F405.381    
     &           submodel,MEANLEV,.TRUE.,PPNAME,ICODE,CMESSAGE)            GRR2F305.400    
                                IF (LTIMER) CALL TIMER('PPCTL   ',4)       INITIAL1.334    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.335    
CL                                                                         INITIAL1.336    
CL 5.3  Initialise assimilation package (not if assimilation completed)    INITIAL1.337    
CL                                                                         INITIAL1.338    
*IF DEF,ATMOS,OR,DEF,OCNASSM                                               ORH6F401.1      
      IF ( (ASSIM_STEPSim(a_im)+ASSIM_EXTRASTEPSim(a_im).GT.0  .AND.       GDR5F305.64     
     *   (MODEL_ASSIM_MODE.EQ."Atmosphere"       .OR.                      INITIAL1.340    
     *    MODEL_ASSIM_MODE.EQ."Coupled   ")      .AND.                     INITIAL1.341    
     *   (RUN_ASSIM_MODE  .EQ."Atmosphere"       .OR.                      INITIAL1.342    
     *    RUN_ASSIM_MODE  .EQ."Coupled   ")      .AND.                     INITIAL1.343    
     *    STEPim(a_im) .LT. ASSIM_FIRSTSTEPim(a_im) +                      GDR5F305.65     
     *              ASSIM_STEPSim(a_im) + ASSIM_EXTRASTEPSim(a_im))        GDR5F305.66     
     * .OR. (ASSIM_STEPSim(o_im)+ASSIM_EXTRASTEPSim(o_im).GT.0  .AND.      GDR5F305.67     
     *   (MODEL_ASSIM_MODE.EQ."Ocean     " .OR.                            INITIAL1.346    
     *    MODEL_ASSIM_MODE.EQ."Coupled   ")      .AND.                     INITIAL1.347    
     *   (RUN_ASSIM_MODE  .EQ."Ocean     " .OR.                            INITIAL1.348    
     *    RUN_ASSIM_MODE  .EQ."Coupled   ")      .AND.                     INITIAL1.349    
     *   STEPim(o_im) .LT. ASSIM_FIRSTSTEPim(o_im) +                       GDR5F305.68     
     *             ASSIM_STEPSim(o_im) + ASSIM_EXTRASTEPSim(o_im))         GDR5F305.69     
     * .OR. (ASSIM_STEPSim(w_im)+ASSIM_EXTRASTEPSim(w_im).GT.0  .AND.      WRB1F401.513    
     *   (MODEL_ASSIM_MODE.EQ."Wave      " .OR.                            WRB1F401.514    
     *    MODEL_ASSIM_MODE.EQ."Coupled   ")      .AND.                     WRB1F401.515    
     *   (RUN_ASSIM_MODE  .EQ."Wave      " .OR.                            WRB1F401.516    
     *    RUN_ASSIM_MODE  .EQ."Coupled   ")      .AND.                     WRB1F401.517    
     *   STEPim(w_im) .LT. ASSIM_FIRSTSTEPim(w_im) +                       WRB1F401.518    
     *             ASSIM_STEPSim(w_im) + ASSIM_EXTRASTEPSim(w_im))         WRB1F401.519    
     * .OR. (L_3DVAR.OR.L_4DVAR) )                                         VSB1F304.137    
     *  THEN                                                               INITIAL1.351    
                                IF (LTIMER) CALL TIMER('IN_ACCTL',3)       INITIAL1.352    
      CALL IN_ACCTL(                                                       @DYALLOC.1872   
*CALL ARGSIZE                                                              @DYALLOC.1873   
*CALL ARTDUMA                                                              @DYALLOC.1874   
*CALL ARTDUMO                                                              @DYALLOC.1875   
*CALL ARTDUMW                                                              WRB1F401.520    
*CALL ARTPTRA                                                              @DYALLOC.1876   
*CALL ARTPTRO                                                              @DYALLOC.1877   
*CALL ARTPTRW                                                              WRB1F401.521    
*CALL ARGOCTOP                                                             @DYALLOC.1878   
*CALL ARGPPX                                                               GDG0F401.820    
     &                  ICODE,CMESSAGE)                                    @DYALLOC.1879   
                                IF (LTIMER) CALL TIMER('IN_ACCTL',4)       INITIAL1.354    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.355    
      ENDIF                                                                INITIAL1.356    
*ENDIF                                                                     ORH6F401.2      
CL                                                                         INITIAL1.357    
CL 5.4  Open unit for model increments diagnostics if requested            INITIAL1.358    
CL                                                                         INITIAL1.359    
*IF DEF,ATMOS                                                              INITIAL1.360    
      IF(LPRFLD)THEN                                                       AD050293.220    
        LEN_FILENAME=LEN(FILENAME)                                         ARR0F404.30     
*IF DEF,MPP                                                                ARR0F404.31     
        CALL FORT_GET_ENV(FT_ENVIRON(NDEV_FLD),LEN_FT_ENVIR(NDEV_FLD),     ARR0F404.32     
     &                    FILENAME,LEN_FILENAME,ICODE)                     ARR0F404.33     
                                                                           ARR1F402.133    
C         Search for end of filename                                       ARR1F402.134    
        LL=0                                                               ARR1F402.135    
        DO I=1,LEN_FILENAME                                                ARR1F402.136    
          IF(FILENAME(I:I).ne.' ') THEN                                    ARR1F402.137    
             LL=LL+1                                                       ARR1F402.138    
          ENDIF                                                            ARR1F402.139    
        ENDDO    ! I over characters                                       ARR1F402.140    
                                                                           ARR1F402.141    
C         Construct filename with PE no. appended                          ARR1F402.142    
        FILENAME(LL+1:LL+1)='.'                                            ARR1F402.143    
        WRITE(FILENAME(LL+2:LL+5),'(i4.4)') mype                           ARR1F402.144    
*ENDIF                                                                     ARR1F402.145    
                                                                           ARR1F402.146    
*IF DEF,MPP                                                                ARR0F404.34     
        LEN_FLD_FILENAME=LL+5                                              ARR0F404.35     
        FLD_FILENAME=FILENAME                                              ARR0F404.36     
        CALL OPEN_SINGLE(NDEV_FLD,FLD_FILENAME,                            ARR0F404.37     
     &                   LEN_FLD_FILENAME,1,1,ICODE)                       ARR0F404.38     
*ELSE                                                                      ARR0F404.39     
        CALL FILE_OPEN(NDEV_FLD,FT_ENVIRON(NDEV_FLD),                      ARR0F404.40     
     &                 LEN_FT_ENVIR(NDEV_FLD),1,0,ICODE)                   ARR0F404.41     
*ENDIF                                                                     ARR0F404.42     
        IF(ICODE.NE.0) THEN                                                ARR0F404.43     
            WRITE(6,*) 'INITIAL: Error opening cached file on unit ',      ARR0F404.44     
     &                   NDEV_FLD                                          ARR0F404.45     
            GO TO 999                                                      ARR0F404.46     
        ENDIF                                                              ARR0F404.47     
      ENDIF                                                                AD050293.223    
*ENDIF                                                                     INITIAL1.362    
                                                                           GRR2F305.409    
CL----------------------------------------------------------------------   INITIAL1.376    
                                                                           WRB1F401.523    
!!! WAVE MODS INCOMPLETE BEYOND HERE - DUPLICAT OR GENERIFY ???            WRB1F401.524    
                                                                           WRB1F401.525    
CL 7.   Get derived diagnostics from, and update ancillary and boundary    INITIAL1.377    
CL      fields in, initial data.  Generate T+0 interface fields.           INITIAL1.378    
CL                                                                         INITIAL1.379    
*IF DEF,ATMOS                                                              INITIAL1.380    
C First read the atmosphere data to memory if coupled                      INITIAL1.382    
      IF(submodel.NE.atmos_sm) THEN                                        GRR2F305.410    
                                                                           GRR2F305.411    
         TRANS_LEN=TRANSALEN                                               GRR2F305.412    
         NFTSWAP  =NFTASWAP                                                GRR2F305.413    
         submodel=atmos_sm    ! new submodel will be atmosphere            GRR1F402.298    
                                IF (LTIMER) CALL TIMER('TRANSIN ',3)       INITIAL1.383    
         CALL TRANSIN(                                                     GRR2F305.414    
*CALL ARTD1                                                                @DYALLOC.1891   
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.299    
                                IF (LTIMER) CALL TIMER('TRANSIN ',4)       INITIAL1.386    
      ENDIF ! End check on submodel                                        GRR2F305.417    
CL                                                                         INITIAL1.388    
CL 7.1  Get derived diagnostics from start fields (atmosphere)             INITIAL1.389    
CL                                                                         INITIAL1.390    
      IF (STEPim(a_im).EQ.0) THEN                                          GDR5F305.70     
                                IF (LTIMER) CALL TIMER('INITDIAG',3)       INITIAL1.392    
        CALL INITDIAG(                                                     @DYALLOC.1893   
*CALL ARGSIZE                                                              @DYALLOC.1894   
*CALL ARTD1                                                                @DYALLOC.1895   
*CALL ARTDUMA                                                              @DYALLOC.1896   
*CALL ARTDUMO                                                              @DYALLOC.1897   
*CALL ARTDUMW                                                              GKR1F401.218    
*CALL ARTSTS                                                               @DYALLOC.1898   
*CALL ARTPTRA                                                              @DYALLOC.1899   
*CALL ARTPTRO                                                              @DYALLOC.1900   
*CALL ARTCONA                                                              @DYALLOC.1901   
*CALL ARGPPX                                                               GKR0F305.945    
     &   P_FIELD,     ! for dynamic array                                  NF171193.41     
     &                ICODE,CMESSAGE)                                      @DYALLOC.1902   
                                IF (LTIMER) CALL TIMER('INITDIAG',4)       INITIAL1.394    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.395    
      ENDIF                                                                INITIAL1.396    
CL                                                                         INITIAL1.397    
CL 7.2 Update boundary fields at step zero if required                     INITIAL1.398    
CL     or if LBOUNDARY=T (continuation run)                                INITIAL1.399    
CL                                                                         INITIAL1.400    
      IF (STEPim(a_im).EQ.0.OR.LBOUNDARY) THEN                             GDR5F305.71     
        IF (BOUNDARY_STEPSim(a_im).NE.0) THEN                              GDR5F305.72     
                                                                           GDR3F405.1047   
      if (l_lbc_coup) then                                                 GDR3F405.1048   
                                                                           GDR3F405.1049   
          call date_and_time(ch_date2, ch_time2)                           GDR3F405.1050   
                                                                           GDR3F405.1051   
          write(6,*)  'LBC_COUP: ',                                        GDR3F405.1052   
     &    ch_time2(1:2),':',ch_time2(3:4),':',ch_time2(5:6),' on ',        GDR3F405.1053   
     &    ch_date2(7:8),'/',ch_date2(5:6),'/',ch_date2(1:4),               GDR3F405.1054   
     &    ' Proceed to call UPBOUND in INITIAL.'                           GDR3F405.1055   
                                                                           GDR3F405.1056   
      endif    !   If l_lbc_coup                                           GDR3F405.1057   
                                                                           GDR3F405.1058   
                                IF (LTIMER) CALL TIMER('UP_BOUND',3)       INITIAL1.403    
      CALL UP_BOUND(submodel,                                              GRR2F305.418    
*CALL ARGSIZE                                                              @DYALLOC.1904   
*CALL ARTD1                                                                @DYALLOC.1905   
*CALL ARTDUMA                                                              @DYALLOC.1906   
*CALL ARTDUMO                                                              @DYALLOC.1907   
*CALL ARTDUMW                                                              GKR1F401.219    
*CALL ARTPTRA                                                              @DYALLOC.1908   
*CALL ARTPTRO                                                              @DYALLOC.1909   
*CALL ARTBND                                                               @DYALLOC.1910   
*CALL ARGPPX                                                               GDG0F401.821    
     &              ICODE,CMESSAGE)                                        GDG0F401.822    
                                IF (LTIMER) CALL TIMER('UP_BOUND',4)       INITIAL1.405    
          IF (ICODE.GT.0) GOTO 999                                         INITIAL1.406    
        ENDIF                                                              INITIAL1.407    
      ENDIF                                                                INITIAL1.408    
CL                                                                         INITIAL1.409    
CL 7.3 Update ancillary fields in dump if start time corresponds to        INITIAL1.410    
CL     an ancillary field update time. Also done at T+0 with values        GRB1F304.29     
CL     updated to half a period back from first standard update time       GRB1F304.30     
CL     to ensure reproducibility between long runs and new runs            GRB1F304.31     
CL     started from dump at any time.                                      GRB1F304.32     
CL                                                                         INITIAL1.412    
                                IF (LTIMER) CALL TIMER('UP_ANCIL',3)       INITIAL1.413    
      IF (ANCILLARY_STEPSim(a_im).GT.0) THEN                               GDR5F305.73     
        IF (STEPim(a_im).EQ.0 .OR.                                         GRB1F400.21     
     &      MOD(STEPim(a_im),ANCILLARY_STEPSim(a_im)).EQ.0)                GRB1F400.22     
     &   CALL UP_ANCIL (                                                   @DYALLOC.1912   
*CALL ARGSIZE                                                              @DYALLOC.1913   
*CALL ARTD1                                                                @DYALLOC.1914   
*CALL ARTDUMA                                                              @DYALLOC.1915   
*CALL ARTDUMO                                                              @DYALLOC.1916   
*CALL ARTDUMW                                                              GKR1F401.220    
*CALL ARTPTRA                                                              @DYALLOC.1917   
*CALL ARTPTRO                                                              @DYALLOC.1918   
*CALL ARTANC                                                               @DYALLOC.1919   
     &                  submodel,                                          GDG0F401.823    
*CALL ARGPPX                                                               GDG0F401.824    
     &                  ICODE,CMESSAGE)                                    GDG0F401.825    
      ENDIF                                                                INITIAL1.417    
                                IF (LTIMER) CALL TIMER('UP_ANCIL',4)       INITIAL1.418    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.419    
CL                                                                         INITIAL1.420    
CL                                                                         ABX1F404.220    
CL 7.3.1 Initialize tiled prognostics, gridbox mean vegetation             ABX1F404.221    
CL       parameters and TRIFFID accumulation prognostics.                  ABX1F404.222    
CL                                                                         ABX1F404.223    
      IF (L_VEG_FRACS) THEN                                                ABX1F404.224    
                                 IF(LTIMER) CALL TIMER('INIT_VEG',3)       ABX1F404.225    
*IF DEF,MPP                                                                ABX1F404.226    
!  Skip INIT_VEG if LAND_FIELD=0 for this PE.                              ABX1F404.227    
        IF (LAND_FIELD .gt. 0) THEN                                        ABX1F404.228    
*ENDIF                                                                     ABX1F404.229    
          CALL INIT_VEG(STEPim(a_im),                                      ABX1F404.230    
*CALL ARGSIZE                                                              ABX1F404.231    
*CALL ARTD1                                                                ABX1F404.232    
*CALL ARTDUMA                                                              ABX1F404.233    
*CALL ARTPTRA                                                              ABX1F404.234    
*CALL ARTCONA                                                              ABX1F404.235    
     &                  ICODE,CMESSAGE)                                    ABX1F404.236    
*IF DEF,MPP                                                                ABX1F404.237    
        ELSE                                                               ABX1F404.238    
          WRITE(6,*)'INITIAL; skip INIT_VEG, LAND_FIELD=0 for this PE'     ABX1F404.239    
        END IF                                                             ABX1F404.240    
*ENDIF                                                                     ABX1F404.241    
                                 IF(LTIMER) CALL TIMER('INIT_VEG',4)       ABX1F404.242    
      END IF                                                               ABX1F404.243    
CL 7.3.2 Ensure that canopy water does not exceed canopy                   ABX1F404.244    
CL       capacity at step zero (this may be a problem when                 INITIAL1.422    
CL       using interpolated fields                                         INITIAL1.423    
CL                                                                         INITIAL1.424    
      IF (STEPim(a_im).EQ.0) THEN                                          GDR5F305.74     
                                 IF(LTIMER) CALL TIMER('INIT_HYD',3)       INITIAL1.426    
      IF (.NOT.L_VEG_FRACS) THEN                                           ABX1F405.51     
*IF DEF,MPP                                                                ARB2F403.76     
!  Skip INIT_HYD if LAND_FIELD=0 for this PE.                              ARB2F403.77     
      IF (LAND_FIELD .gt. 0) THEN                                          ARB2F403.78     
*ENDIF                                                                     ARB2F403.79     
         CALL INIT_HYD(                                                    ABX1F405.52     
*CALL ARGSIZE                                                              @DYALLOC.1922   
*CALL ARTD1                                                                @DYALLOC.1923   
*CALL ARTPTRA                                                              @DYALLOC.1924   
     &                 ICODE,CMESSAGE)                                     @DYALLOC.1925   
*IF DEF,MPP                                                                ARB2F403.80     
      ELSE                                                                 ARB2F403.81     
      write(6,*)' INITIAL; skip INIT_HYD, LAND_FIELD=0 for this PE'        ARB2F403.82     
      END IF                                                               ARB2F403.83     
*ENDIF                                                                     ARB2F403.84     
      ENDIF                                                                ABX1F405.53     
                                 IF(LTIMER) CALL TIMER('INIT_HYD',4)       INITIAL1.428    
      END IF                                                               RB250294.2      
C                                                                          RB250294.3      
CL                                                                         RB250294.4      
CL 7.3.3 Ensure that convective cloud cover and liquid water path          ABX1F404.246    
CL       are consistent with convective cloud base & top. (Corrects        RB250294.6      
CL       for occasional problems caused by reconfiguration.)               RB250294.7      
CL                                                                         RB250294.8      
      IF (STEPim(a_im).EQ.0) THEN                                          GDR5F305.75     
                                 IF(LTIMER) CALL TIMER('INIT_CNV',3)       RB250294.10     
         CALL INIT_CNV(                                                    RB250294.11     
*CALL ARGSIZE                                                              RB250294.12     
*CALL ARTD1                                                                RB250294.13     
*CALL ARTPTRA                                                              RB250294.14     
     &                 ICODE,CMESSAGE)                                     RB250294.15     
                                 IF(LTIMER) CALL TIMER('INIT_CNV',4)       RB250294.16     
      END IF                                                               INITIAL1.429    
C                                                                          INITIAL1.430    
CL                                                                         INITIAL1.431    
CL 7.4 Generate interface fields at step zero if required                  INITIAL1.432    
CL                                                                         INITIAL1.433    
      IF (LINTERFACE .AND. STEPim(a_im).EQ.0) THEN                         GDR5F305.76     
                                IF (LTIMER) CALL TIMER('GEN_INTF',3)       INITIAL1.436    
        CALL GEN_INTF (                                                    @DYALLOC.1926   
*CALL ARGSIZE                                                              @DYALLOC.1927   
*CALL ARTD1                                                                @DYALLOC.1928   
*CALL ARTDUMA                                                              GMB1F405.383    
*CALL ARTSTS                                                               GMB1F405.384    
*CALL ARTPTRA                                                              GMB1F405.385    
*CALL ARTCONA                                                              GMB1F405.386    
*CALL ARTINFA                                                              GMB1F405.387    
*CALL ARTPTRO                                                              GMB1F405.388    
*CALL ARTCONO                                                              GMB1F405.389    
*CALL ARTDUMO                                                              GMB1F405.390    
*CALL ARTINFO                                                              GMB1F405.391    
*CALL ARGPPX                                                               APB4F401.492    
     &          submodel,ICODE,CMESSAGE)                                   GRR2F305.425    
                                IF (LTIMER) CALL TIMER('GEN_INTF',4)       INITIAL1.438    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.439    
      ENDIF                                                                INITIAL1.440    
                                                                           GRR2F305.426    
C Write atmosphere data back to "swap" file                                INITIAL1.442    
        IF(N_SUBMODEL_PARTITION.GT.1) THEN  ! coupling across dumps        GRR2F305.427    
                                                                           GRR2F305.428    
           IF(submodel.eq.atmos_sm) then    ! atmosphere                   GRR2F305.429    
              NFTSWAP  =NFTASWAP                                           GRR2F305.430    
              TRANS_LEN=TRANSALEN                                          GRR2F305.431    
           ELSE                                                            GRR2F305.432    
              CMESSAGE='INITIAL: submodel ident not atmosphere'            GRR2F305.433    
              write(6,*) CMESSAGE                                          GRR2F305.434    
              write(6,*) 'Non valid submodel identifier=',submodel         GRR2F305.435    
              ICODE=1                                                      GRR2F305.436    
           ENDIF      ! End test on submodel identifier                    GRR2F305.437    
           IF (ICODE.GT.0) GOTO 999                                        GRR2F305.438    
                                                                           GRR2F305.439    
CL      Copy data from one start dump to "swap" file, read the other       GRR2F305.440    
CL      start dump to memory, and write it out to its "swap" file          GRR2F305.441    
                                IF (LTIMER) CALL TIMER('TRANSOUT',3)       INITIAL1.443    
           CALL TRANSOUT(                                                  GRR2F305.442    
*CALL ARTD1                                                                @DYALLOC.1936   
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.300    
                                IF (LTIMER) CALL TIMER('TRANSOUT',4)       INITIAL1.446    
                                                                           GRR2F305.444    
          IF (ICODE.GT.0) GOTO 999                                         GRR2F305.445    
                                                                           GRR2F305.446    
        ENDIF  ! end of test for coupling across dumps                     GRR2F305.447    
*ENDIF                                                                     INITIAL1.448    
C                                                                          INITIAL1.449    
*IF DEF,OCEAN                                                              INITIAL1.450    
C First read the ocean      data to memory if coupled                      GRR2F305.448    
      IF(submodel.NE.ocean_sm) THEN                                        GRR2F305.449    
                                                                           GRR2F305.450    
         NFTSWAP  =NFTOSWAP                                                GRR2F305.451    
         TRANS_LEN=TRANSOLEN                                               GRR2F305.452    
         submodel=ocean_sm    ! new submodel will be ocean                 GRR1F402.301    
                                IF (LTIMER) CALL TIMER('TRANSIN ',3)       INITIAL1.453    
         CALL TRANSIN(                                                     GRR2F305.453    
*CALL ARTD1                                                                @DYALLOC.1939   
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.302    
                                IF (LTIMER) CALL TIMER('TRANSIN ',4)       INITIAL1.456    
      ENDIF ! End check on submodel                                        GRR2F305.456    
                                                                           GRR2F305.458    
CL                                                                         INITIAL1.458    
CL 7.5  Get derived diagnostics from start fields (ocean)                  INITIAL1.459    
                                                                           ORH9F404.6      
      IF (STEPim(o_im).EQ.0) THEN                                          ORH9F404.7      
                                                                           ORH9F404.8      
         IF (LTIMER) CALL TIMER('INITDIAGO',3)                             ORH9F404.9      
                                                                           ORH9F404.10     
         CALL INITDIAGO(                                                   ORH9F404.11     
*CALL ARGSIZE                                                              ORH9F404.12     
*CALL ARTD1                                                                ORH9F404.13     
*CALL ARTDUMA                                                              ORH9F404.14     
*CALL ARTDUMO                                                              ORH9F404.15     
*CALL ARTDUMW                                                              ORH9F404.16     
*CALL ARTSTS                                                               ORH9F404.17     
*CALL ARTPTRA                                                              ORH9F404.18     
*CALL ARTPTRO                                                              ORH9F404.19     
*CALL ARTCONA                                                              ORH9F404.20     
*CALL ARGPPX                                                               ORH9F404.21     
     &         ICODE,CMESSAGE)                                             ORH9F404.22     
                                                                           ORH9F404.23     
         IF (LTIMER) CALL TIMER('INITDIAGO',4)                             ORH9F404.24     
                                                                           ORH9F404.25     
         IF (ICODE.GT.0) GOTO 999                                          ORH9F404.26     
                                                                           ORH9F404.27     
      ENDIF                                                                ORH9F404.28     
CL                                                                         INITIAL1.461    
CL                                                                         INITIAL1.462    
CL 7.6 Update boundary fields at step zero if required                     INITIAL1.463    
CL     or if LBOUNDARY=T (continuation run)                                INITIAL1.464    
CL                                                                         INITIAL1.465    
      IF (STEPim(o_im).EQ.0.OR.LBOUNDARY) THEN                             GDR5F305.77     
        IF (BOUNDARY_STEPSim(o_im).NE.0) THEN                              GDR5F305.78     
                                IF (LTIMER) CALL TIMER('UP_BOUND',3)       INITIAL1.468    
      CALL UP_BOUND(submodel,                                              GRR2F305.459    
*CALL ARGSIZE                                                              @DYALLOC.1942   
*CALL ARTD1                                                                @DYALLOC.1943   
*CALL ARTDUMA                                                              @DYALLOC.1944   
*CALL ARTDUMO                                                              @DYALLOC.1945   
*CALL ARTDUMW                                                              GKR1F401.221    
*CALL ARTPTRA                                                              @DYALLOC.1946   
*CALL ARTPTRO                                                              @DYALLOC.1947   
*CALL ARTBND                                                               @DYALLOC.1948   
*CALL ARGPPX                                                               GDG0F401.826    
     &              ICODE,CMESSAGE)                                        GDG0F401.827    
                                IF (LTIMER) CALL TIMER('UP_BOUND',4)       INITIAL1.470    
          IF (ICODE.GT.0) GOTO 999                                         INITIAL1.471    
        ENDIF                                                              INITIAL1.472    
      ENDIF                                                                INITIAL1.473    
CL                                                                         INITIAL1.474    
CL 7.7 Update ancillary fields in dump if start time corresponds to        INITIAL1.475    
CL     an ancillary field update time. Also done at T+0 with values        GRB1F304.36     
CL     updated to half a period back from first standard update time       GRB1F304.37     
CL     to ensure reproducibility between long runs and new runs            GRB1F304.38     
CL     started from dump at any time.                                      GRB1F304.39     
CL                                                                         INITIAL1.477    
                                IF (LTIMER) CALL TIMER('UP_ANCIL',3)       INITIAL1.478    
      IF (ANCILLARY_STEPSim(o_im).GT.0) THEN                               GDR5F305.79     
        IF (STEPim(o_im).EQ.0 .OR.                                         GRB1F400.23     
     &      MOD(STEPim(o_im),ANCILLARY_STEPSim(o_im)).EQ.0)                GRB1F400.24     
     &   CALL UP_ANCIL (                                                   @DYALLOC.1950   
*CALL ARGSIZE                                                              @DYALLOC.1951   
*CALL ARTD1                                                                @DYALLOC.1952   
*CALL ARTDUMA                                                              @DYALLOC.1953   
*CALL ARTDUMO                                                              @DYALLOC.1954   
*CALL ARTDUMW                                                              GKR1F401.222    
*CALL ARTPTRA                                                              @DYALLOC.1955   
*CALL ARTPTRO                                                              @DYALLOC.1956   
*CALL ARTANC                                                               @DYALLOC.1957   
     &                  submodel,                                          GDG0F401.828    
*CALL ARGPPX                                                               GDG0F401.829    
     &                  ICODE,CMESSAGE)                                    GDG0F401.830    
      ENDIF                                                                INITIAL1.482    
                                IF (LTIMER) CALL TIMER('UP_ANCIL',4)       INITIAL1.483    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.484    
CL                                                                         INITIAL1.485    
CL 7.8 Generate interface fields at step zero if required                  INITIAL1.486    
CL                                                                         INITIAL1.487    
      IF (LINTERFACE .AND. STEPim(o_im).EQ.0) THEN                         GMB1F405.382    
                                IF (LTIMER) CALL TIMER('GEN_INTF',3)       INITIAL1.490    
        CALL GEN_INTF (                                                    @DYALLOC.1959   
*CALL ARGSIZE                                                              @DYALLOC.1960   
*CALL ARTD1                                                                @DYALLOC.1961   
*CALL ARTDUMA                                                              GMB1F405.392    
*CALL ARTSTS                                                               GMB1F405.393    
*CALL ARTPTRA                                                              GMB1F405.394    
*CALL ARTCONA                                                              GMB1F405.395    
*CALL ARTINFA                                                              GMB1F405.396    
*CALL ARTPTRO                                                              GMB1F405.397    
*CALL ARTCONO                                                              GMB1F405.398    
*CALL ARTDUMO                                                              GMB1F405.399    
*CALL ARTINFO                                                              GMB1F405.400    
*CALL ARGPPX                                                               APB4F401.493    
     &          submodel,ICODE,CMESSAGE)                                   GRR2F305.461    
                                IF (LTIMER) CALL TIMER('GEN_INTF',4)       INITIAL1.492    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.493    
      ENDIF                                                                INITIAL1.494    
                                                                           GRR2F305.462    
C Write ocean      data back to "swap" file                                GRR2F305.463    
        IF(N_SUBMODEL_PARTITION.GT.1) THEN  ! coupling across dumps        GRR2F305.464    
                                                                           GRR2F305.465    
           IF(submodel.eq.ocean_sm) then    ! ocean                        GRR2F305.466    
              NFTSWAP  =NFTOSWAP                                           GRR2F305.467    
              TRANS_LEN=TRANSOLEN                                          GRR2F305.468    
           ELSE                                                            GRR2F305.469    
              CMESSAGE='INITIAL: submodel ident not ocean     '            GRR2F305.470    
              write(6,*) CMESSAGE                                          GRR2F305.471    
              write(6,*) 'Non valid submodel identifier=',submodel         GRR2F305.472    
              ICODE=1                                                      GRR2F305.473    
           ENDIF      ! End test on submodel identifier                    GRR2F305.474    
           IF (ICODE.GT.0) GOTO 999                                        GRR2F305.475    
                                                                           GRR2F305.476    
C Write ocean data back to "swap" file                                     INITIAL1.496    
                                IF (LTIMER) CALL TIMER('TRANSOUT',3)       INITIAL1.497    
           CALL TRANSOUT(                                                  GRR2F305.477    
*CALL ARTD1                                                                @DYALLOC.1969   
     &           TRANS_LEN,NFTSWAP,submodel,ICODE,CMESSAGE)                GRR1F402.303    
                                IF (LTIMER) CALL TIMER('TRANSOUT',4)       INITIAL1.500    
                                                                           GRR2F305.479    
           IF (ICODE.GT.0) GOTO 999                                        GRR2F305.480    
                                                                           GRR2F305.481    
                                                                           GRR2F305.482    
        ENDIF  ! end of test for coupling across dumps                     GRR2F305.483    
*ENDIF                                                                     INITIAL1.501    
                                                                           GRR2F305.484    
CL----------------------------------------------------------------------   INITIAL1.503    
CL 8. If coupled model, initialise addresses of coupling fields,           INITIAL1.504    
CL    and if model has restarted at the end of a coupling period           INITIAL1.505    
CL    exchange coupling fields and swap data (full ocean model)            INITIAL1.506    
CL    or both models are at step 0, exchange coupling fields and           INITIAL1.507    
CL    swap data (in sense O-A at step 0).                                  INITIAL1.508    
CL                                                                         INITIAL1.509    
*IF DEF,ATMOS                                                              INITIAL1.510    
*IF DEF,OCEAN                                                              INITIAL1.511    
*IF DEF,MPP                                                                GRR0F402.8      
! Get 'global' atmos and ocean horizontal domain sizes from database       GRR0F402.9      
! in DECOMPDB to set dynamic allocation in SWAP_A2O,SWAP_O2A.              GRR0F402.10     
          G_P_FIELD= decomp_db_glsize(1,decomp_standard_atmos) *           GRR0F402.11     
     &               decomp_db_glsize(2,decomp_standard_atmos)             GRR0F402.12     
                                                                           GRR0F402.13     
          G_IMTJMT = decomp_db_glsize(1,decomp_standard_ocean) *           GRR0F402.14     
     &               decomp_db_glsize(2,decomp_standard_ocean)             GRR0F402.15     
*ELSE                                                                      GRR0F402.16     
! Sizes not used for non-MPP: dummy values only                            GRR0F402.17     
          G_P_FIELD= P_FIELD                                               GRR0F402.18     
          G_IMTJMT = IMT*JMT                                               GRR0F402.19     
*ENDIF                                                                     GRR0F402.20     
                                IF (LTIMER) CALL TIMER('INIT_A2O',3)       INITIAL1.512    
      CALL INIT_A2O(                                                       @DYALLOC.1971   
*CALL ARGSIZE                                                              @DYALLOC.1972   
*CALL ARTD1                                                                @DYALLOC.1973   
*CALL ARTSTS                                                               @DYALLOC.1974   
*CALL ARTDUMA                                                              @DYALLOC.1975   
*CALL ARTDUMO                                                              @DYALLOC.1976   
*CALL ARTPTRA                                                              @DYALLOC.1977   
*CALL ARTPTRO                                                              @DYALLOC.1978   
*CALL ARTAOCPL                                                             @DYALLOC.1979   
     *              ICODE,CMESSAGE)                                        @DYALLOC.1980   
                                IF (LTIMER) CALL TIMER('INIT_A2O',4)       INITIAL1.514    
*ENDIF                                                                     INITIAL1.515    
*IF DEF,SLAB                                                               INITIAL1.516    
                                IF (LTIMER) CALL TIMER('INIT_A2S',3)       INITIAL1.517    
      CALL INIT_A2S(                                                       @DYALLOC.1981   
*CALL ARGSIZE                                                              @DYALLOC.1982   
*CALL ARTSTS                                                               @DYALLOC.1983   
*CALL ARTPTRA                                                              @DYALLOC.1984   
     *              ICODE,CMESSAGE)                                        @DYALLOC.1985   
                                IF (LTIMER) CALL TIMER('INIT_A2S',4)       INITIAL1.519    
*ENDIF                                                                     INITIAL1.520    
      IF (ICODE.GT.0) GOTO 999                                             INITIAL1.521    
C                                                                          INITIAL1.522    
*IF DEF,OCEAN                                                              INITIAL1.523    
      IF (new_sm) THEN       ! Test for a new submodel next                GRR2F305.485    
      IF (L_CO2_INTERACTIVE) THEN                                          CCN1F405.109    
        CO2_DIMA  = G_P_FIELD                                              CCN1F405.110    
        CO2_DIMO  = G_IMTJMT                                               CCN1F405.111    
*IF DEF,MPP                                                                CCN1F405.112    
        CO2_DIMO2 = (decomp_db_glsize(1,decomp_standard_ocean)-2) *        CCN1F405.113    
     &              decomp_db_glsize(2,decomp_standard_ocean)              CCN1F405.114    
*ELSE                                                                      CCN1F405.115    
        CO2_DIMO2 = (IMT-2)*JMT                                            CCN1F405.116    
*ENDIF                                                                     CCN1F405.117    
      ELSE                                                                 CCN1F405.118    
        CO2_DIMA  = 1                                                      CCN1F405.119    
        CO2_DIMO  = 1                                                      CCN1F405.120    
        CO2_DIMO2 = 1                                                      CCN1F405.121    
      ENDIF                                                                CCN1F405.122    
        IF(submodel_next.EQ.ocean_sm) THEN   ! Atmos -> Ocean              GRR2F305.486    
                                                                           GRR2F305.487    
           NFTSWAP  =NFTASWAP                                              GRR2F305.488    
           TRANS_LEN=TRANSALEN                                             GRR2F305.489    
                                IF (LTIMER) CALL TIMER('TRANSIN ',3)       INITIAL1.526    
         CALL TRANSIN(                                                     GRR2F305.490    
*CALL ARTD1                                                                @DYALLOC.1987   
     &           TRANS_LEN,NFTSWAP,atmos_sm,ICODE,CMESSAGE)                GRR1F402.304    
                                IF (LTIMER) CALL TIMER('TRANSIN ',4)       INITIAL1.529    
C                                                                          INITIAL1.530    
                                IF (LTIMER) CALL TIMER('SWAP_A2O',3)       INITIAL1.531    
          CALL SWAP_A2O(G_P_FIELD,G_IMTJMT,CO2_DIMA,CO2_DIMO,              CCN1F405.123    
*CALL ARGSIZE                                                              @DYALLOC.1990   
*CALL ARTD1                                                                @DYALLOC.1991   
*CALL ARTDUMO                                                              @DYALLOC.1992   
*CALL ARTPTRA                                                              @DYALLOC.1993   
*CALL ARTPTRO                                                              @DYALLOC.1994   
*CALL ARTCONA                                                              @DYALLOC.1995   
*CALL ARTCONO                                                              CJG6F401.3      
*CALL ARTAOCPL                                                             @DYALLOC.1996   
     &            ICODE,CMESSAGE)                                          @DYALLOC.1997   
                                IF (LTIMER) CALL TIMER('SWAP_A2O',4)       INITIAL1.533    
                                                                           GRR2F305.492    
        ELSEIF(submodel_next.EQ.atmos_sm) THEN   ! Ocean -> Atmos          GRR2F305.493    
                                                                           GRR2F305.494    
           NFTSWAP  =NFTOSWAP                                              GRR2F305.495    
           TRANS_LEN=TRANSOLEN                                             GRR2F305.496    
                                IF (LTIMER) CALL TIMER('TRANSIN ',3)       INITIAL1.536    
         CALL TRANSIN(                                                     GRR2F305.497    
*CALL ARTD1                                                                @DYALLOC.1999   
     &           TRANS_LEN,NFTSWAP,ocean_sm,ICODE,CMESSAGE)                GRR1F402.305    
                                IF (LTIMER) CALL TIMER('TRANSIN ',4)       INITIAL1.539    
C                                                                          INITIAL1.540    
                                IF (LTIMER) CALL TIMER('SWAP_O2A',3)       INITIAL1.541    
          CALL SWAP_O2A(G_P_FIELD,G_IMTJMT,CO2_DIMA,CO2_DIMO,CO2_DIMO2,    CCN1F405.124    
*CALL ARGSIZE                                                              @DYALLOC.2002   
*CALL ARTD1                                                                @DYALLOC.2003   
*CALL ARTDUMO                                                              @DYALLOC.2004   
*CALL ARTPTRA                                                              @DYALLOC.2005   
*CALL ARTPTRO                                                              @DYALLOC.2006   
*CALL ARTCONO                                                              CJG6F401.4      
*CALL ARTAOCPL                                                             @DYALLOC.2007   
     &            ICODE,CMESSAGE)                                          @DYALLOC.2008   
                                IF (LTIMER) CALL TIMER('SWAP_O2A',4)       INITIAL1.543    
                                                                           GRR2F305.499    
        ELSE    ! No other submodel -> submodel coupling allowed yet       GRR2F305.500    
          ICODE=1                                                          GRR2F305.501    
          CMESSAGE='INITIAL: Illegal submodel identifier for coupling'     GRR2F305.502    
          write(6,*) CMESSAGE                                              GRR2F305.503    
          write(6,*) 'Next     submodel id =',submodel_next                GRR2F305.504    
                                                                           GRR2F305.505    
        ENDIF     ! End tests on coupled submodels' identity               GRR2F305.506    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.546    
        submodel=submodel_next  ! From SETGRCTL calculations               GRR2F305.507    
                                                                           GRR2F305.508    
      ENDIF    ! End test on new submodel                                  GRR2F305.509    
*ENDIF                                                                     INITIAL1.548    
*ENDIF                                                                     INITIAL1.549    
CL----------------------------------------------------------------------   INITIAL1.550    
CL 9. Print formatted diagnostics from initial dump                        INITIAL1.551    
CL                                                                         INITIAL1.552    
*IF DEF,ATMOS                                                              INITIAL1.553    
CL                                                                         INITIAL1.554    
CL 9.1 Set up address pointers for zonal mean print                        INITIAL1.555    
CL                                                                         INITIAL1.556    
      IF (PRINTFREQim(1,a_im).NE.0 .OR. PRINTFREQim(2,a_im).NE.0 .OR.      GRB1F305.139    
     *    PRINTFREQim(3,a_im).NE.0 .OR. PRINTFREQim(4,a_im).NE.0 .OR.      GRB1F305.140    
     *    PRINTFREQim(5,a_im).NE.0)  THEN                                  GRB1F305.141    
                                IF (LTIMER) CALL TIMER('INITZONM',3)       INITIAL1.560    
         CALL INITZONM (                                                   @DYALLOC.2009   
*CALL ARGSIZE                                                              @DYALLOC.2010   
*CALL ARTSTS                                                               @DYALLOC.2011   
*CALL ARTPTRA                                                              @DYALLOC.2012   
     &                                ICODE,CMESSAGE)                      @DYALLOC.2013   
                                IF (LTIMER) CALL TIMER('INITZONM',4)       INITIAL1.562    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.563    
      ENDIF                                                                INITIAL1.564    
CL                                                                         INITIAL1.565    
CL 9.2 Output zonal mean print from atmosphere start data                  INITIAL1.566    
CL                                                                         INITIAL1.567    
      IF (submodel.EQ.atmos_sm.AND.STEPim(a_im).EQ.0.AND.                  GRR2F305.510    
     &    PRINTFREQim(1,a_im).NE.0) THEN                                   GRB1F305.142    
                                IF (LTIMER) CALL TIMER('PRINTCTL',3)       INITIAL1.569    
        CALL PRINTCTL (                                                    @DYALLOC.2014   
*CALL ARGSIZE                                                              @DYALLOC.2015   
*CALL ARTD1                                                                @DYALLOC.2016   
*CALL ARTDUMA                                                              @DYALLOC.2017   
*CALL ARTPTRA                                                              @DYALLOC.2018   
*CALL ARTCONA                                                              @DYALLOC.2019   
     &                submodel,MEANLEV,ICODE,CMESSAGE)                     GRR2F305.511    
                                IF (LTIMER) CALL TIMER('PRINTCTL',4)       INITIAL1.571    
        IF (ICODE.GT.0) GOTO 999                                           INITIAL1.572    
      ENDIF                                                                INITIAL1.573    
*ENDIF                                                                     INITIAL1.574    
CL----------------------------------------------------------------------   INITIAL1.575    
CL 10. Initialisation complete - return to master routine                  INITIAL1.576    
CL                                                                         INITIAL1.577    
! Check that operational model running on MPP has finished                 GRR2F405.14     
! initialisation and write a message to the operator                       GRR2F405.15     
*IF DEF,MPP                                                                GRR2F405.16     
      IF(mype.eq.0) THEN                                                   GRR2F405.17     
         IF(MODEL_STATUS .EQ. 'Operational') THEN                          GRR2F405.18     
            CALL OperatorMessage(nproc)                                    GRR2F405.19     
         ENDIF                                                             GRR2F405.20     
      ENDIF                                                                GRR2F405.21     
*ENDIF                                                                     GRR2F405.22     
 999  CONTINUE                                                             INITIAL1.578    
                                IF (LTIMER) CALL TIMER('INITIAL ',4)       INITIAL1.579    
      RETURN                                                               INITIAL1.580    
CL----------------------------------------------------------------------   INITIAL1.581    
      END                                                                  INITIAL1.582    
*ENDIF                                                                     INITIAL1.583