*IF DEF,CONTROL                                                            DUMPCTL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.2341   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.2342   
C                                                                          GTS2F400.2343   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.2344   
C restrictions as set forth in the contract.                               GTS2F400.2345   
C                                                                          GTS2F400.2346   
C                Meteorological Office                                     GTS2F400.2347   
C                London Road                                               GTS2F400.2348   
C                BRACKNELL                                                 GTS2F400.2349   
C                Berkshire UK                                              GTS2F400.2350   
C                RG12 2SZ                                                  GTS2F400.2351   
C                                                                          GTS2F400.2352   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.2353   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.2354   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.2355   
C Modelling at the above address.                                          GTS2F400.2356   
C ******************************COPYRIGHT******************************    GTS2F400.2357   
C                                                                          GTS2F400.2358   
CLL  Routine: DUMPCTL --------------------------------------------------   DUMPCTL1.3      
CLL                                                                        DUMPCTL1.4      
CLL  Purpose: Controls the production and naming of output dump files.     DUMPCTL1.5      
CLL           Also selectively adds dump files to the list of dumps        DUMPCTL1.6      
CLL           for processing by the external dump server process.          DUMPCTL1.7      
CLL                                                                        DUMPCTL1.8      
CLL  Tested under compiler:   cft77                                        DUMPCTL1.9      
CLL  Tested under OS version: UNICOS 5.1                                   DUMPCTL1.10     
CLL                                                                        DUMPCTL1.11     
CLL  Author:   T.C.Johns                                                   DUMPCTL1.12     
CLL                                                                        DUMPCTL1.13     
CLL  Model            Modification history from model version 3.0:         DUMPCTL1.14     
CLL version  Date                                                          DUMPCTL1.15     
CLL   3.1  12/02/93  Set FIXHD(5) file type indicator to 2 for mean dump   TJ130293.24     
CLL  3.1  8/02/93  : added comdeck CHSUNITS to define NUNITS for           RS030293.200    
CLL                  comdeck CCONTROL                                      RS030293.201    
CLL                                                                        AD050293.224    
CLL   3.1  05/02/93    Portable Fortran unit no assigns                    AD050293.225    
CLL                    Author: A. Dickinson    Reviewer: R. Stratton       AD050293.226    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.44     
CLL                   portability and change call to DATE to call          TS150793.45     
CLL                   to DATE_TIME.  Author: Tracey Smith.                 TS150793.46     
CLL   3.2  05/05/93    Dynamic allocation of arrays.                       @DYALLOC.844    
CLL                    Author: D. Robinson     Reviewer: A. Dickinson      @DYALLOC.845    
CLL   3.3  06/04/94  Compute BUFLEN as explicit maximum field length.      TJ300394.45     
CLL                    Author: T. Johns        Reviewer: M. Carter         TJ300394.46     
CLL   3.3  25/02/94    Temporary correction: write MDIs to temporary       RR250294.1      
CLL                    history file in block. A later change will          RR250294.2      
CLL                    rationalise or remove completely.                   RR250294.3      
CLL                    Also old comments removed.                          RR250294.4      
CLL                    Author: R. Rawlins      Reviewer: N. Farnon         RR250294.5      
CLL   3.4  17/06/94    Argument LCAL360 passed to GET_NAME                 GSS1F304.282    
CLL                                                   S.J.Swarbrick        GSS1F304.283    
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN and                       GPB1F305.28     
CLL                    CLOSE to FILE_CLOSE    P.Burton                     GPB1F305.29     
CLL   4.0  20/12/95    Correction involving archiving of dumps             GDR8F400.1      
CLL                    if ARCHDUMP_OFFSETim is used. D. Robinson           GDR8F400.2      
CLL  4.1  27/03/96  Introduce Wave sub-model.  RTHBarnes.                  WRB1F401.79     
CLL  4.1  27/02/96  Set O/ARESTART environment variable for ocn/atmanl     GRB1F401.1      
CLL                 file as well as for ordinary dump files. RTHBarnes.    GRB1F401.2      
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.595    
!                   Author D.M. Goddard.                                   GDG0F401.596    
CLL  4.2  27/11/96  Changes to parellelise writes to archiving system.     GLW2F402.1      
CLL                 L. Wiles                                               GLW2F402.2      
!LL  4.3  19/03/97  Changed WRITDUMP to UM_WRITDUMP  P.Burton              GPB4F403.1      
CLL  4.3  30/05/96  Correction to dumps being wrongly deleted L Wiles      GLW6F403.9      
!LL  4.3  02/04/97  Enable DUMPCTL to write out temporary copies of        GKR4F403.1      
!LL                 D1. K Rogers                                           GKR4F403.2      
!LL  4.3  06/03/97  Reposition data for multi-level land fields            ADR2F403.37     
!LL                 before and after call to WRITDUMP. Pointers to         ADR2F403.38     
!LL                 fields also reset. (Interim fix) D. Robinson.          ADR2F403.39     
!LL  4.4  23/04/97  Changes to allow dump archiving at real month          GMG1F404.87     
!LL                 boundaries when using real-year climate means.         GMG1F404.88     
!LL                 Author M. Gallani                                      GMG1F404.89     
!LL  4.4  18/09/97  Changes to allow the correct dumps to be kept with     GKR1F404.1      
!LL                 coupled models with different dump frequency and       GKR1F404.2      
!LL                 coupling frequency.  Also ensure the previous dump     GKR1F404.3      
!LL                 is kept until after meaning is done for all models.    GKR1F404.4      
!LL                 K Rogers.                                              GKR1F404.5      
!LL  4.4  09/10/97  Change the closes on unit 8 to flushes                 GBCCF404.1      
!LL                   Author: Bob Carruthers, Cray Research                GBCCF404.2      
!LL  4.4  17/06/97  Add code to pass the O/P file length                   GBC6F404.17     
!LL                 to the I/O routines.                                   GBC6F404.18     
!LL                   Author: Bob Carruthers, Cray Research.               GBC6F404.19     
!LL  4.4  08/10/97  Reposition data for new multi-level land fields        ABX1F404.126    
!LL                 before and after call to WRITDUMP.  No need to         ABX1F404.127    
!LL                 reposition pointers since new pointers are scalars.    ABX1F404.128    
!LL                 (Interim fix)  R.A.Betts                               ABX1F404.129    
!LL  4.4   Sept 97    Mixed phase precip scheme uses zero array            ADM2F404.98     
!LL                   instead of QCF in call to THETL_QT.                  ADM2F404.99     
!LL                   Damian Wilson.                                       ADM2F404.100    
!LL  4.5  15/04/98  Remove interim fixes. D. Robinson.                     GDR5F405.30     
!LL  4.5   May 98   Delete previous safe restart dumps in slab model       GIE0F405.1      
!LL                 runs.  Ian Edmond.                                     GIE0F405.2      
CLL                                                                        DUMPCTL1.16     
CLL  Programming standard: UM Doc Paper 3, version 2 (7/9/90)              DUMPCTL1.17     
CLL                                                                        DUMPCTL1.18     
CLL  Logical components covered: C2                                        DUMPCTL1.19     
CLL                                                                        DUMPCTL1.20     
CLL  Project task: C2                                                      DUMPCTL1.21     
CLL                                                                        DUMPCTL1.22     
CLL  External documentation: On-line UM document C0 - The top-level        DUMPCTL1.23     
CLL                          control system; On-line document C2 -         DUMPCTL1.24     
CLL                          Dump Handling.                                DUMPCTL1.25     
CLL                                                                        DUMPCTL1.26     
CLL  -------------------------------------------------------------------   DUMPCTL1.27     
C*L  Interface and arguments: ------------------------------------------   DUMPCTL1.28     
C                                                                          DUMPCTL1.29     

      SUBROUTINE DUMPCTL (                                                  26,23@DYALLOC.861    
*CALL ARGSIZE                                                              @DYALLOC.862    
*CALL ARGD1                                                                @DYALLOC.863    
*CALL ARGDUMA                                                              @DYALLOC.864    
*CALL ARGDUMO                                                              @DYALLOC.865    
*CALL ARGDUMW                                                              WRB1F401.80     
*CALL ARGCONA                                                              @DYALLOC.866    
*CALL ARGPTRA                                                              @DYALLOC.867    
*CALL ARGSTS                                                               @DYALLOC.868    
*CALL ARGPPX                                                               GDG0F401.597    
     &           I_AO,MEANLEV,lwritd1,tmpfname,writestep,ICODE,CMESSAGE)   GKR4F403.3      
C                                                                          DUMPCTL1.31     
      IMPLICIT NONE                                                        DUMPCTL1.32     
                                                                           @DYALLOC.870    
C*L Arguments                                                              @DYALLOC.871    
*CALL CMAXSIZE                                                             @DYALLOC.872    
*CALL CSUBMODL                                                             GSS1F305.924    
*CALL TYPSIZE                                                              @DYALLOC.879    
*CALL NSTYPES                                                              ABX1F404.130    
*CALL TYPD1                                                                @DYALLOC.883    
*CALL TYPDUMA                                                              @DYALLOC.885    
*CALL TYPDUMO                                                              @DYALLOC.886    
*CALL TYPDUMW                                                              WRB1F401.81     
*CALL TYPCONA                                                              @DYALLOC.888    
*CALL TYPPTRA                                                              @DYALLOC.890    
*CALL TYPSTS                                                               @DYALLOC.892    
*CALL PPXLOOK                                                              GDG0F401.598    
C                                                                          DUMPCTL1.33     
      INTEGER I_AO             ! IN  - Atmosphere/Ocean indicator          DUMPCTL1.34     
      INTEGER MEANLEV          ! IN  - Mean period level for dump          DUMPCTL1.35     
      INTEGER writestep        ! IN  - Timestep on which to write it       GKR4F403.4      
      CHARACTER*14 tmpfname    ! IN  - Name of file to be written          GKR4F403.5      
                               !       containing temporary copy of D1     GKR4F403.6      
      LOGICAL lwritd1          ! IN  - True if doing a WRITD1 temp write   GKR4F403.7      
                                                                           GKR4F403.8      
      INTEGER ICODE            ! OUT - Error return code                   DUMPCTL1.36     
      CHARACTER*80 CMESSAGE                                                TS150793.47     
C                                                                          DUMPCTL1.38     
C*----------------------------------------------------------------------   DUMPCTL1.39     
C  Common blocks                                                           DUMPCTL1.40     
C                                                                          DUMPCTL1.41     
*CALL CHSUNITS                                                             GDR3F305.23     
*CALL CHISTORY                                                             RS030293.202    
*CALL CCONTROL                                                             DUMPCTL1.42     
*CALL CENVIR                                                               DUMPCTL1.48     
*CALL CLOOKADD                                                             TJ300394.47     
*CALL C_MDI                                                                RR250294.6      
*CALL CTIME                                                                GGH3F400.7      
C                                                                          DUMPCTL1.49     
C  Subroutines called                                                      DUMPCTL1.50     
C                                                                          DUMPCTL1.51     
      EXTERNAL GET_FILE                                                    AD050293.228    
*IF DEF,ATMOS                                                              DUMPCTL1.53     
     *        ,THETL_QT                                                    DUMPCTL1.54     
*ENDIF                                                                     DUMPCTL1.55     
     *        ,DATE,CLOCK,TIMER                                            DUMPCTL1.56     
        EXTERNAL UM_WRITDUMP                                               GPB4F403.3      
C                                                                          DUMPCTL1.57     
C  Local variables                                                         DUMPCTL1.58     
C                                                                          DUMPCTL1.59     
      LOGICAL LARCHIVE         ! WORK  - Switch for dump archiving         DUMPCTL1.60     
      LOGICAL LUNITTYPE        ! True if unit number can be superceded     GLW6F403.10     
C                              ! dump or ppfile                            GLW6F403.11     
      LOGICAL LKEEPATM         ! True if atmos safe restart dump needs     GKR1F404.6      
!                              ! to be kept until the ocean safe           GKR1F404.7      
!                              ! restart dump is produced                  GKR1F404.8      
      LOGICAL LDELATM          ! True if atmos safe restart dump can       GKR1F404.9      
!                              ! now be deleted ie. ocean safe restart     GKR1F404.10     
!                              ! dump has been produced.                   GKR1F404.11     
      CHARACTER*80 FILENAME                                                AD050293.227    
      CHARACTER*1     C1                                                   DUMPCTL1.61     
      CHARACTER*8     CDATE        ! Creation date for file                DUMPCTL1.62     
      INTEGER MYEAR,MMONTH,MDAY,MHOUR,MMIN,MSEC,IDATE  ! Creation date     DUMPCTL1.63     
      EQUIVALENCE (IDATE,CDATE)                                            DUMPCTL1.64     
      INTEGER     I,J              ! Loop counters                         DUMPCTL1.70     
C                                                                          DUMPCTL1.71     
      INTEGER       NFTOUT,     ! Output unit number                       DUMPCTL1.72     
     2              BUFLEN      ! Length of i/o buffer for WRITDUMP        DUMPCTL1.73     
     3             ,TOGGLE      ! Dummy argument for GET_NAME              DUMPCTL1.74     
     &             ,REINIT_STEPS! Dummy argument for GET_NAME              DUMPCTL1.75     
     *,LEN_DUMPNAME  !No of characters in file name                        DUMPCTL1.76     
     *,ERROR         !Error code returned by OPEN                          DUMPCTL1.77     
     &,STEP          !Step number                                          GKR4F403.9      
     &,archdump_monfreq    ! dump archiving frequency (in months)          GMG1F404.90     
     &,archdump_monoffset  ! dump archiving offset (in months)             GMG1F404.91     
     &,disk_address                    ! Current rounded disk address      GBC6F404.20     
     &,number_of_data_words_on_disk    ! Number of data words on disk      GBC6F404.21     
     &,number_of_data_words_in_memory  ! Number of Data Words in memory    GBC6F404.22     
     &,get_char_len                    ! function returns number of non-   GBC6F404.23     
                                       ! blank leading characters from a   GBC6F404.24     
                                       ! character variable                GBC6F404.25     
      INTEGER internal_model                                               GIE0F405.3      
      INTEGER im      ! temporary internal model id for ocean or slab      GIE0F405.4      
                                                                           GIE0F405.5      
                                                                           GKR4F403.10     
      CHARACTER*1   FILETYPE    ! Code letter for file type                DUMPCTL1.78     
      CHARACTER*1   LETTER_3    ! dummy argument for GET_NAME              DUMPCTL1.79     
      CHARACTER*14  DUMPNAME    ! Model generated dump name                DUMPCTL1.80     
      INTEGER STP1im(N_INTERNAL_MODEL_MAX)!NO OF STEPS SINCE im DUMP       GGH3F400.8      
      INTEGER STP2im(N_INTERNAL_MODEL_MAX)!NO OF STEPS BETWEEN im          GMG1F404.92     
                                          !PERIOD 1 MEANS                  GMG1F404.93     
      INTEGER D1_ADDR_SUBMODEL_ID  ! submodel id in D1_ADDR array          GPB4F403.2      
*IF DEF,ATMOS                                                              ADM2F404.101    
      REAL ZERO_FIELD(P_FIELD,Q_LEVELS) ! mixed phase precip               ADM2F404.102    
*ENDIF                                                                     ADM2F404.103    
C                                                                          GLW2F402.3      
*IF DEF,MPP                                                                GLW2F402.4      
*CALL PARVARS                                                              GLW2F402.5      
*ENDIF                                                                     GLW2F402.6      
CL                                                                         DUMPCTL1.81     
CL----------------------------------------------------------------------   DUMPCTL1.82     
C Get name of pipe                                                         AD050293.229    
      CALL GET_FILE(8,FILENAME,80,ICODE)                                   GTD0F400.153    
CL                                                                         DUMPCTL1.85     
CL 1. (Temporary correction in preparation for removing temporary          RR250294.7      
CL    history copy from dump headers, since not used within model          RR250294.8      
CL    and history file size now (from vn3.1 on) exceeds reserved space).   RR250294.9      
CL    Write missing data indicators into dump copy of temporary history    RR250294.10     
CL    block to prevent earlier overwriting error.                          RR250294.11     
CL                                                                         RR250294.12     
*IF DEF,ATMOS                                                              DUMPCTL1.122    
      IF (I_AO.EQ.1) THEN                                                  DUMPCTL1.123    
        DO I=1,LEN_DUMPHIST+1                                              RR250294.13     
          A_DUMPHIST(I) = RMDI                                             RR250294.14     
        ENDDO                                                              DUMPCTL1.126    
      ENDIF                                                                DUMPCTL1.127    
*ENDIF                                                                     DUMPCTL1.128    
*IF DEF,OCEAN                                                              DUMPCTL1.129    
      IF (I_AO.EQ.2) THEN                                                  DUMPCTL1.130    
        DO I=1,LEN_DUMPHIST+1                                              RR250294.15     
          O_DUMPHIST(I) = RMDI                                             RR250294.16     
        ENDDO                                                              DUMPCTL1.133    
      ENDIF                                                                DUMPCTL1.134    
*ENDIF                                                                     DUMPCTL1.135    
*IF DEF,WAVE                                                               WRB1F401.82     
      IF (I_AO.EQ.4) THEN                                                  WRB1F401.83     
        DO I=1,LEN_DUMPHIST+1                                              WRB1F401.84     
          W_DUMPHIST(I) = RMDI                                             WRB1F401.85     
        ENDDO                                                              WRB1F401.86     
      ENDIF                                                                WRB1F401.87     
*ENDIF                                                                     WRB1F401.88     
CL----------------------------------------------------------------------   DUMPCTL1.136    
CL 2. Set LOOKUP header data and validity times from FIXHD                 DUMPCTL1.137    
CL                                                                         DUMPCTL1.138    
CL ** This section deleted due to conflict with STASH use of dump          DUMPCTL1.139    
CL ** LOOKUP headers to retain timestamp information across timesteps.     DUMPCTL1.140    
CL                                                                         DUMPCTL1.141    
CL----------------------------------------------------------------------   DUMPCTL1.142    
CL 3. Construct dump name from model information using defined             DUMPCTL1.143    
CL     naming convention.                                                  DUMPCTL1.144    
CL                                                                         DUMPCTL1.145    
      IF (MEANLEV.NE.-1) THEN             ! Analyses already named         DUMPCTL1.146    
        IF (lwritd1) THEN                                                  GKR4F403.11     
          STEP = STEPim(I_AO)                                              GKR4F403.12     
          IF (STEP .NE. writestep) GOTO 999                                GKR4F403.13     
          WRITE(DUMPNAME,1011) STEP                                        GKR4F403.14     
 1011     FORMAT('..........',i4.4)                                        GIE1F405.27     
          DO I=1,10                                                        GIE1F405.26     
            IF(TMPFNAME(I:I).NE.' ') DUMPNAME(I:I)=TMPFNAME(I:I)           GKR4F403.17     
          END DO                                                           GKR4F403.18     
        ELSE                                                               GKR4F403.19     
C                                                                          DUMPCTL1.147    
        FILETYPE='d'                      ! Indicates dump                 DUMPCTL1.148    
        TOGGLE=1                                                           DUMPCTL1.149    
        REINIT_STEPS=0                    ! default dummy value            DUMPCTL1.150    
        LETTER_3='a'                      ! default dummy value            DUMPCTL1.151    
      IF ((I_AO.EQ.1 .AND. (MODEL_ASSIM_MODE.EQ."Atmosphere" .OR.          DUMPCTL1.152    
     *    MODEL_ASSIM_MODE.EQ."Coupled   ")) .OR.                          DUMPCTL1.153    
     *    (I_AO.EQ.2 .AND. (MODEL_ASSIM_MODE.EQ."Ocean     " .OR.          DUMPCTL1.154    
     *    MODEL_ASSIM_MODE.EQ."Coupled   ")) .OR.                          WRB1F401.89     
     *    (I_AO.EQ.4 .AND.  MODEL_ASSIM_MODE.EQ."Wave      ")) THEN        WRB1F401.90     
        CALL GET_NAME(EXPT_ID,JOB_ID,I_AO,MEANLEV,TOGGLE,                  DUMPCTL1.156    
     *       REINIT_STEPS,FILETYPE,LETTER_3,MODEL_STATUS,                  DUMPCTL1.157    
     *       TIME_CONVENTION,MODEL_ANALYSIS_HRS,DUMPNAME,ICODE,CMESSAGE,   GSS1F304.284    
     *       LCAL360)                                                      GSS1F304.285    
      ELSE                                                                 DUMPCTL1.159    
        CALL GET_NAME(EXPT_ID,JOB_ID,I_AO,MEANLEV,TOGGLE,                  DUMPCTL1.160    
     *       REINIT_STEPS,FILETYPE,LETTER_3,MODEL_STATUS,                  DUMPCTL1.161    
     *       TIME_CONVENTION,0,DUMPNAME,ICODE,CMESSAGE,LCAL360)            GSS1F304.286    
      ENDIF                                                                DUMPCTL1.163    
      IF (ICODE.GT.0) GOTO 999                                             DUMPCTL1.164    
        ENDIF                                                              GKR4F403.20     
      ELSE                                                                 DUMPCTL1.165    
C Initialise dumpname to prevent problems later.                           DUMPCTL1.166    
        DUMPNAME='    '                                                    DUMPCTL1.167    
C                                                                          DUMPCTL1.168    
      ENDIF                                                                DUMPCTL1.169    
CL----------------------------------------------------------------------   DUMPCTL1.170    
CL 4. Assign dump name to appropriate IO unit and open for write.          DUMPCTL1.171    
CL    NB: Analysis dumps have preassigned names                            DUMPCTL1.172    
CL                                                                         DUMPCTL1.173    
      IF (MEANLEV.EQ.0 .OR. lwritd1) THEN                                  GKR4F403.21     
C      Cater for instantaneous dumps                                       DUMPCTL1.175    
        IF(I_AO.EQ.1)THEN                                                  DUMPCTL1.176    
          NFTOUT=22    ! Atmos                                             WRB1F401.91     
        ELSE IF (I_AO.EQ.2) THEN                                           WRB1F401.92     
          NFTOUT=42    ! Ocean                                             WRB1F401.93     
        ELSE                                                               DUMPCTL1.178    
          NFTOUT=132   ! Wave                                              WRB1F401.94     
        ENDIF                                                              DUMPCTL1.180    
      ELSEIF (MEANLEV.EQ.-1) THEN                                          DUMPCTL1.181    
C      Cater for analysis dumps                                            DUMPCTL1.182    
        IF(I_AO.EQ.1)THEN                                                  DUMPCTL1.183    
          NFTOUT=28    ! Atmos                                             WRB1F401.95     
        ELSE IF (I_AO.EQ.2) THEN                                           WRB1F401.96     
          NFTOUT=47    ! Ocean                                             WRB1F401.97     
        ELSE                                                               DUMPCTL1.185    
          NFTOUT=133   ! Wave                                              WRB1F401.98     
        ENDIF                                                              DUMPCTL1.187    
      ELSE                                                                 DUMPCTL1.188    
C      Cater for mean dump                                                 DUMPCTL1.189    
        NFTOUT=27                                                          DUMPCTL1.190    
      ENDIF                                                                DUMPCTL1.191    
                                                                           GBC6F404.26     
*IF DEF,ATMOS                                                              GBC6F404.27     
c--compute the new addresses and lengths                                   GBC6F404.28     
      if(i_ao.eq.1) then                                                   GBC6F404.29     
        call set_dumpfile_address(                                         GBC6F404.30     
     &   a_fixhd, len_fixhd,                                               GBC6F404.31     
     &   a_lookup, len1_lookup, a_len2_lookup,                             GBC6F404.32     
     &   number_of_data_words_in_memory, number_of_data_words_on_disk,     GBC6F404.33     
     &   disk_address)                                                     GBC6F404.34     
      endif                                                                GBC6F404.35     
*ENDIF                                                                     GBC6F404.36     
                                                                           GBC6F404.37     
*IF DEF,OCEAN                                                              GBC6F404.38     
c--compute the new addresses and lengths                                   GBC6F404.39     
      if(i_ao.eq.2) then                                                   GBC6F404.40     
        call set_dumpfile_address(                                         GBC6F404.41     
     &   o_fixhd, len_fixhd,                                               GBC6F404.42     
     &   o_lookup, len1_lookup, o_len2_lookup,                             GBC6F404.43     
     &   number_of_data_words_in_memory, number_of_data_words_on_disk,     GBC6F404.44     
     &   disk_address)                                                     GBC6F404.45     
      endif                                                                GBC6F404.46     
*ENDIF                                                                     GBC6F404.47     
                                                                           GBC6F404.48     
*IF DEF,WAVE                                                               GBC6F404.49     
      if(i_ao.eq.4) then                                                   GBC6F404.50     
c--compute the new addresses and lengths                                   GBC6F404.51     
          call set_dumpfile_address(                                       GBC6F404.52     
     &     w_fixhd, len_fixhd,                                             GBC6F404.53     
     &     w_lookup, len1_lookup, w_len2_lookup,                           GBC6F404.54     
     &   number_of_data_words_in_memory, number_of_data_words_on_disk,     GBC6F404.55     
     &   disk_address)                                                     GBC6F404.56     
      endif                                                                GBC6F404.57     
*ENDIF                                                                     GBC6F404.58     
                                                                           GBC6F404.59     
c--output the new length of this dumpfile                                  GBC6F404.60     
*IF DEF,MPP                                                                GBC6F404.61     
      if(mype.eq.0) then                                                   GBC6F404.62     
*ENDIF                                                                     GBC6F404.63     
*IF DEF,DIAG92                                                             GBC6F404.64     
        len_dumpname=get_char_len(dumpname)                                GBC6F404.65     
        write(6,9921) dumpname(1:len_dumpname), nftout, disk_address       GBC6F404.66     
9921    format(/'Dumpfile Size for File ',a,' on Unit ',i4,                GBC6F404.67     
     2   ' to be set to ',i10,' Words')                                    GBC6F404.68     
*IF DEF,T3E                                                                GBC6F404.69     
        write(0,9921) dumpname(1:len_dumpname), nftout, disk_address       GBC6F404.70     
*ENDIF                                                                     GBC6F404.71     
*ENDIF                                                                     GBC6F404.72     
        call set_dumpfile_length(nftout, disk_address)                     GBC6F404.73     
*IF DEF,MPP                                                                GBC6F404.74     
      endif                                                                GBC6F404.75     
*ENDIF                                                                     GBC6F404.76     
CL                                                                         DUMPCTL1.192    
CL 4.1 Open unit for dump : different call required if an analysis         DUMPCTL1.193    
CL     since name pre-assigned through environment variable                DUMPCTL1.194    
CL                                                                         DUMPCTL1.195    
      IF (MEANLEV.NE.-1) THEN                                              DUMPCTL1.196    
      WRITE(6,*)"DUMPCTL: Opening new file ",DUMPNAME," on unit ",NFTOUT   GIE0F403.122    
      LEN_DUMPNAME=LEN(DUMPNAME)                                           DUMPCTL1.198    
      CALL FILE_OPEN(NFTOUT,DUMPNAME,LEN_DUMPNAME,1,1,ERROR)               GPB1F305.31     
      IF(ERROR.NE.0)GOTO900                                                DUMPCTL1.200    
        ICODE=0                                                            DUMPCTL1.201    
                                                                           DUMPCTL1.202    
      ELSE                                                                 DUMPCTL1.203    
                                                                           DUMPCTL1.204    
        CALL FILE_OPEN(NFTOUT,FT_ENVIRON(NFTOUT),                          GPB1F305.30     
     *            LEN_FT_ENVIR(NFTOUT),1,0,ERROR)                          DUMPCTL1.206    
        IF(ERROR.NE.0) GOTO 900                                            DUMPCTL1.207    
        ICODE=0                                                            DUMPCTL1.208    
      ENDIF                                                                DUMPCTL1.209    
CL----------------------------------------------------------------------   DUMPCTL1.210    
CL 5. Write dump on appropriate unit putting timestamp in header           DUMPCTL1.211    
CL                                                                         DUMPCTL1.212    
*IF DEF,ATMOS                                                              DUMPCTL1.213    
      IF (I_AO.EQ.1) THEN                                                  DUMPCTL1.214    
                                                                           DUMPCTL1.215    
CL Restore conserved thermodynamic variables to dump before writing        DUMPCTL1.216    
                                                                           DUMPCTL1.217    
      IF (.NOT. lwritd1) THEN                                              GKR4F403.22     
      IF(LTIMER) THEN                                                      DUMPCTL1.218    
        CALL TIMER('THETL_QT',3)                                           DUMPCTL1.219    
      END IF                                                               DUMPCTL1.220    
                                                                           DUMPCTL1.221    
! If using mixed phase precip scheme then do not want ice in the call      ADM2F404.104    
! to THETL_QT.                                                             ADM2F404.105    
        IF (L_LSPICE) THEN                                                 ADM2F404.106    
! Mixed phase precip scheme. Define an array of zeros instead              ADM2F404.107    
! of using QCF.                                                            ADM2F404.108    
          DO J=1,Q_LEVELS                                                  ADM2F404.109    
            DO I=1,P_FIELD                                                 ADM2F404.110    
              ZERO_FIELD(I,J)=0.0                                          ADM2F404.111    
            END DO                                                         ADM2F404.112    
          END DO                                                           ADM2F404.113    
! Now call THETL_QT with the zero field                                    ADM2F404.114    
          CALL THETL_QT(                                                   ADM2F404.115    
     &      D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),ZERO_FIELD,     ADM2F404.116    
     &      D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS)             ADM2F404.117    
! Else the call to THETL_QT does contain the QCF field                     ADM2F404.118    
        ELSE                                                               ADM2F404.119    
      CALL THETL_QT(                                                       DUMPCTL1.222    
     &     D1(JPSTAR),D1(JTHETA(1)),D1(JQ(1)),D1(JQCL(1)),D1(JQCF(1)),     DUMPCTL1.223    
     &     D1(JP_EXNER(1)),AKH,BKH,P_FIELD,P_LEVELS,Q_LEVELS)              DUMPCTL1.224    
! END IF for L_LSPICE                                                      ADM2F404.120    
        END IF                                                             ADM2F404.121    
                                                                           DUMPCTL1.225    
      IF(LTIMER) THEN                                                      DUMPCTL1.226    
        CALL TIMER('THETL_QT',4)                                           DUMPCTL1.227    
      END IF                                                               DUMPCTL1.228    
      ENDIF                                                                GKR4F403.23     
                                                                           DUMPCTL1.229    
C Creation date and time                                                   TS150793.48     
                                                                           TS150793.49     
        CALL DATE_TIME(A_FIXHD(35),A_FIXHD(36),A_FIXHD(37),                TS150793.50     
     *  A_FIXHD(38),A_FIXHD(39),A_FIXHD(40))                               TS150793.51     
                                                                           TS150793.52     
C Maximum length of field, required for IO buffer                          TJ300394.48     
                                                                           DUMPCTL1.243    
        BUFLEN=A_LOOKUP(LBLREC,1)                                          TJ300394.49     
        IF (A_LEN2_LOOKUP.GT.1) THEN                                       TJ300394.50     
          DO I=2,A_LEN2_LOOKUP                                             TJ300394.51     
            BUFLEN=MAX(BUFLEN,A_LOOKUP(LBLREC,I))                          TJ300394.52     
          ENDDO                                                            TJ300394.53     
        ENDIF                                                              TJ300394.54     
                                                                           TJ300394.55     
        IF (MEANLEV.GT.0) A_FIXHD(5)=2    ! Set FIXHD(5) for mean dump     TJ130293.25     
                                                                           DUMPCTL1.249    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(atmos_sm)                      GPB4F403.4      
                                                                           GPB4F403.5      
        CALL UM_WRITDUMP(NFTOUT,A_FIXHD,LEN_FIXHD,                         GPB4F403.6      
     &                A_INTHD,A_LEN_INTHD,                                 GDG0F401.601    
     &                A_REALHD,A_LEN_REALHD,                               GDG0F401.602    
     &                A_LEVDEPC,A_LEN1_LEVDEPC,A_LEN2_LEVDEPC,             GDG0F401.603    
     &                A_ROWDEPC,A_LEN1_ROWDEPC,A_LEN2_ROWDEPC,             GDG0F401.604    
     &                A_COLDEPC,A_LEN1_COLDEPC,A_LEN2_COLDEPC,             GDG0F401.605    
     &                A_FLDDEPC,A_LEN1_FLDDEPC,A_LEN2_FLDDEPC,             GDG0F401.606    
     &                A_EXTCNST,A_LEN_EXTCNST,                             GDG0F401.607    
     &                A_DUMPHIST,LEN_DUMPHIST,                             GDG0F401.608    
     &                A_CFI1,A_LEN_CFI1,                                   GDG0F401.609    
     &                A_CFI2,A_LEN_CFI2,                                   GDG0F401.610    
     &                A_CFI3,A_LEN_CFI3,                                   GDG0F401.611    
     &                A_LOOKUP,LEN1_LOOKUP,A_LEN2_LOOKUP,                  GDG0F401.612    
*IF DEF,MPP                                                                GSM1F403.246    
     &                A_MPP_LOOKUP,MPP_LEN1_LOOKUP,                        GSM1F403.247    
*ENDIF                                                                     GSM1F403.248    
     &                BUFLEN,                                              GPB4F403.7      
     &                atmos_sm,                                            GPB4F403.8      
     &                NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                      GPB4F403.9      
     &                D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                    GPB4F403.10     
     &                A_LEN_DATA,D1,                                       GPB4F403.11     
*CALL ARGPPX                                                               GDG0F401.614    
     &                ICODE,CMESSAGE)                                      GDG0F401.615    
                                                                           DUMPCTL1.265    
        IF (ICODE.GT.0) GOTO 999                                           DUMPCTL1.266    
                                                                           DUMPCTL1.267    
        A_FIXHD(5)=1    ! Set FIXHD(5) back to instantaneous dump          TJ130293.26     
                                                                           TJ130293.27     
        IF (MEANLEV.EQ.0) THEN                                             DUMPCTL1.268    
          ARESTART='ARESTART: $DATAM/'                                     DUMPCTL1.269    
          ARESTART(18:31)=DUMPNAME                                         DUMPCTL1.270    
        ELSEIF (MEANLEV.EQ.-1) THEN                                        DUMPCTL1.271    
          ARESTART='ARESTART: '                                            GRB1F401.3      
          ARESTART(11:80)=ATMANL(11:80)                                    DUMPCTL1.272    
        ELSEIF (NFTOUT.EQ.27) THEN                                         GDR3F305.24     
! Special case for mean dump file                                          GDR3F305.25     
          AOMEAN = 'AOMEAN  : $DATAM/'                                     GDR3F305.26     
          AOMEAN(18:31) = DUMPNAME                                         GDR3F305.27     
        ENDIF                                                              DUMPCTL1.273    
                                                                           DUMPCTL1.274    
      ENDIF                                                                DUMPCTL1.275    
                                                                           DUMPCTL1.276    
*ENDIF                                                                     DUMPCTL1.277    
*IF DEF,OCEAN                                                              DUMPCTL1.278    
      IF (I_AO.EQ.2) THEN                                                  DUMPCTL1.279    
                                                                           DUMPCTL1.280    
C Creation date and time                                                   TS150793.53     
                                                                           TS150793.54     
        CALL DATE_TIME(O_FIXHD(35),O_FIXHD(36),O_FIXHD(37),                TS150793.55     
     *  O_FIXHD(38),O_FIXHD(39),O_FIXHD(40))                               TS150793.56     
                                                                           DUMPCTL1.295    
C Maximum length of field, required for IO buffer                          TJ300394.56     
                                                                           TJ300394.57     
        BUFLEN=O_LOOKUP(LBLREC,1)                                          TJ300394.58     
        IF (O_LEN2_LOOKUP.GT.1) THEN                                       TJ300394.59     
          DO I=2,O_LEN2_LOOKUP                                             TJ300394.60     
            BUFLEN=MAX(BUFLEN,O_LOOKUP(LBLREC,I))                          TJ300394.61     
          ENDDO                                                            TJ300394.62     
        ENDIF                                                              TJ300394.63     
                                                                           DUMPCTL1.298    
        IF (MEANLEV.GT.0) O_FIXHD(5)=2    ! Set FIXHD(5) for mean dump     TJ130293.28     
                                                                           DUMPCTL1.299    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(ocean_sm)                      GPB4F403.12     
        CALL UM_WRITDUMP(NFTOUT,O_FIXHD,LEN_FIXHD,                         GPB4F403.13     
     &                O_INTHD,O_LEN_INTHD,                                 GDG0F401.617    
     &                O_REALHD,O_LEN_REALHD,                               GDG0F401.618    
     &                O_LEVDEPC,O_LEN1_LEVDEPC,O_LEN2_LEVDEPC,             GDG0F401.619    
     &                O_ROWDEPC,O_LEN1_ROWDEPC,O_LEN2_ROWDEPC,             GDG0F401.620    
     &                O_COLDEPC,O_LEN1_COLDEPC,O_LEN2_COLDEPC,             GDG0F401.621    
     &                O_FLDDEPC,O_LEN1_FLDDEPC,O_LEN2_FLDDEPC,             GDG0F401.622    
     &                O_EXTCNST,O_LEN_EXTCNST,                             GDG0F401.623    
     &                O_DUMPHIST,LEN_DUMPHIST,                             GDG0F401.624    
     &                O_CFI1,O_LEN_CFI1,                                   GDG0F401.625    
     &                O_CFI2,O_LEN_CFI2,                                   GDG0F401.626    
     &                O_CFI3,O_LEN_CFI3,                                   GDG0F401.627    
     &                O_LOOKUP,LEN1_LOOKUP,O_LEN2_LOOKUP,                  GDG0F401.628    
*IF DEF,MPP                                                                GSM1F403.249    
     &                O_MPP_LOOKUP,MPP_LEN1_LOOKUP,                        GSM1F403.250    
*ENDIF                                                                     GSM1F403.251    
     &                BUFLEN,                                              GPB4F403.14     
     &                ocean_sm,                                            GPB4F403.15     
     &                NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                      GPB4F403.16     
     &                D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                    GPB4F403.17     
     &                O_LEN_DATA,D1,                                       GPB4F403.18     
*CALL ARGPPX                                                               GDG0F401.630    
     &                ICODE,CMESSAGE)                                      GDG0F401.631    
                                                                           DUMPCTL1.315    
        IF (ICODE.GT.0) GOTO 999                                           DUMPCTL1.316    
                                                                           TJ130293.29     
        O_FIXHD(5)=1    ! Set FIXHD(5) back to instantaneous dump          TJ130293.30     
                                                                           DUMPCTL1.317    
        IF (MEANLEV.EQ.0) THEN                                             DUMPCTL1.318    
          ORESTART='ORESTART: $DATAM/'                                     DUMPCTL1.319    
          ORESTART(18:31)=DUMPNAME                                         DUMPCTL1.320    
        ELSEIF (MEANLEV.EQ.-1) THEN                                        DUMPCTL1.321    
          ORESTART='ORESTART: '                                            GRB1F401.4      
          ORESTART(11:80)=OCNANL(11:80)                                    DUMPCTL1.322    
        ENDIF                                                              DUMPCTL1.323    
                                                                           DUMPCTL1.324    
      ENDIF                                                                DUMPCTL1.325    
*ENDIF                                                                     DUMPCTL1.326    
*IF DEF,WAVE                                                               WRB1F401.99     
      IF (I_AO.EQ.4) THEN                                                  WRB1F401.100    
                                                                           WRB1F401.101    
C Creation date and time                                                   WRB1F401.102    
                                                                           WRB1F401.103    
        CALL DATE_TIME(W_FIXHD(35),W_FIXHD(36),W_FIXHD(37),                WRB1F401.104    
     *  W_FIXHD(38),W_FIXHD(39),W_FIXHD(40))                               WRB1F401.105    
                                                                           WRB1F401.106    
C Maximum length of field, required for IO buffer                          WRB1F401.107    
                                                                           WRB1F401.108    
        BUFLEN=W_LOOKUP(LBLREC,1)                                          WRB1F401.109    
        IF (W_LEN2_LOOKUP.GT.1) THEN                                       WRB1F401.110    
          DO I=2,W_LEN2_LOOKUP                                             WRB1F401.111    
            BUFLEN=MAX(BUFLEN,W_LOOKUP(LBLREC,I))                          WRB1F401.112    
          ENDDO                                                            WRB1F401.113    
        ENDIF                                                              WRB1F401.114    
                                                                           WRB1F401.115    
        IF (MEANLEV.GT.0) W_FIXHD(5)=2    ! Set FIXHD(5) for mean dump     WRB1F401.116    
                                                                           WRB1F401.117    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(wave_sm)                       GPB4F403.19     
                                                                           GPB4F403.20     
        CALL UM_WRITDUMP(NFTOUT,W_FIXHD,LEN_FIXHD,                         GPB4F403.21     
     &    W_INTHD,W_LEN_INTHD,                                             WRB1F401.119    
     &    W_REALHD,W_LEN_REALHD,                                           WRB1F401.120    
     &    W_LEVDEPC,W_LEN1_LEVDEPC,W_LEN2_LEVDEPC,                         WRB1F401.121    
     &    W_ROWDEPC,W_LEN1_ROWDEPC,W_LEN2_ROWDEPC,                         WRB1F401.122    
     &    W_COLDEPC,W_LEN1_COLDEPC,W_LEN2_COLDEPC,                         WRB1F401.123    
     &    W_FLDDEPC,W_LEN1_FLDDEPC,W_LEN2_FLDDEPC,                         WRB1F401.124    
     &    W_EXTCNST,W_LEN_EXTCNST,                                         WRB1F401.125    
     &    W_DUMPHIST,LEN_DUMPHIST,                                         WRB1F401.126    
     &    W_CFI1,W_LEN_CFI1,                                               WRB1F401.127    
     &    W_CFI2,W_LEN_CFI2,                                               WRB1F401.128    
     &    W_CFI3,W_LEN_CFI3,                                               WRB1F401.129    
     &    W_LOOKUP,LEN1_LOOKUP,W_LEN2_LOOKUP,                              WRB1F401.130    
     &    BUFLEN,                                                          GPB4F403.22     
     &    wave_sm,                                                         GPB4F403.23     
     &    NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                                  GPB4F403.24     
     &    D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                                GPB4F403.25     
     &    W_LEN_DATA,D1,                                                   GPB4F403.26     
*CALL ARGPPX                                                               WRB1F401.132    
     &    ICODE,CMESSAGE)                                                  WRB1F401.133    
                                                                           WRB1F401.134    
        IF (ICODE.GT.0) GOTO 999                                           WRB1F401.135    
                                                                           WRB1F401.136    
        W_FIXHD(5)=1    ! Set FIXHD(5) back to instantaneous dump          WRB1F401.137    
                                                                           WRB1F401.138    
        IF (MEANLEV.EQ.0) THEN                                             WRB1F401.139    
          WRESTART='WRESTART: $DATAM/'                                     WRB1F401.140    
          WRESTART(18:31)=DUMPNAME                                         WRB1F401.141    
        ELSEIF (MEANLEV.EQ.-1) THEN                                        WRB1F401.142    
          WRESTART(11:80)=WAVANL(11:80)                                    WRB1F401.143    
        ENDIF                                                              WRB1F401.144    
                                                                           WRB1F401.145    
      ENDIF                                                                WRB1F401.146    
*ENDIF                                                                     WRB1F401.147    
CL                                                                         DUMPCTL1.327    
CL 5.1 Close unit                                                          DUMPCTL1.328    
CL                                                                         DUMPCTL1.329    
                                                                           DUMPCTL1.330    
      IF(MEANLEV.NE.-1) THEN    ! Not analysis                             DUMPCTL1.331    
                                                                           DUMPCTL1.332    
      LEN_DUMPNAME=LEN(DUMPNAME)                                           DUMPCTL1.333    
        CALL FILE_CLOSE(NFTOUT,DUMPNAME,LEN_DUMPNAME,1,0,ICODE)            GTD0F400.1      
      ELSE                      ! analysis                                 DUMPCTL1.335    
                                                                           DUMPCTL1.336    
        CALL FILE_CLOSE(NFTOUT,FT_ENVIRON(NFTOUT),LEN_FT_ENVIR(NFTOUT),    GTD0F400.2      
     &  0,0,ICODE)                                                         GTD0F400.3      
      ENDIF                                                                DUMPCTL1.339    
                                                                           GKR4F403.24     
c--now set the current length back to zero after we have done              GBC6F404.77     
c  the o/p                                                                 GBC6F404.78     
*IF DEF,MPP                                                                GBC6F404.79     
      if(mype.eq.0) then                                                   GBC6F404.80     
*ENDIF                                                                     GBC6F404.81     
        call set_dumpfile_length(nftout, 0)                                GBC6F404.82     
*IF DEF,MPP                                                                GBC6F404.83     
      endif                                                                GBC6F404.84     
*ENDIF                                                                     GBC6F404.85     
                                                                           GKR4F403.25     
!LL 5.2 Exit here for WRITD1 temporary writes of dumps since               GKR4F403.26     
!LL     no requests need to be sent to the archive server                  GKR4F403.27     
                                                                           GKR4F403.28     
      IF (lwritd1) GOTO 999                                                GKR4F403.29     
                                                                           GKR4F403.30     
CL----------------------------------------------------------------------   DUMPCTL1.340    
CL 6. Construct dump processing requests and send to slave task            DUMPCTL1.341    
CL                                                                         DUMPCTL1.342    
CL 6.1 Delete previous last-restart-dump from disk (slave request),        DUMPCTL1.343    
CL     and update last-restart-dump to be current dump                     DUMPCTL1.344    
CL     (exception is: first dump not to be deleted if operational)         DUMPCTL1.345    
CL                                                                         DUMPCTL1.346    
                                                                           GKR1F404.12     
*IF DEF,ATMOS                                                              GIE0F405.6      
*IF DEF,OCEAN                                                              GIE0F405.7      
      im=ocean_im                                                          GIE0F405.8      
*ENDIF Ocean                                                               GIE0F405.9      
*IF DEF,SLAB                                                               GIE0F405.10     
      im= slab_im                                                          GIE0F405.11     
*ENDIF Slab                                                                GIE0F405.12     
*IF DEF,OCEAN,OR,DEF,SLAB                                                  GIE0F405.13     
                                                                           GIE0F405.14     
! Check if ocean/slab has completed the same number of groups as atmos     GIE0F405.15     
      IF( (STEPim(atmos_im)/GROUPim(atmos_im) ).EQ.                        GIE0F405.16     
     *    (STEPim(      im)/GROUPim(      im) ) ) THEN                     GIE0F405.17     
        internal_model=atmos_im                                            GIE0F405.18     
      ELSE                                                                 GIE0F405.19     
        internal_model=      im    ! either slab or ocean                  GIE0F405.20     
      ENDIF                                                                GIE0F405.21     
*ELSE Not OCEAN or SLAB                                                    GIE0F405.22     
      internal_model=atmos_im                                              GIE0F405.23     
*ENDIF on OCEAN or SLAB                                                    GIE0F405.24     
                                                                           GIE0F405.25     
*ELSE Not ATMOS                                                            GIE0F405.26     
*IF DEF,OCEAN                                                              GIE0F405.27     
      internal_model=ocean_im                                              GIE0F405.28     
*ELSE                                                                      GIE0F405.29     
*IF DEF,WAVE                                                               GIE0F405.30     
!  This construct is only valid while the wave sub-model in not coupled    GIE0F405.31     
!   to any other sub-model.                                                GIE0F405.32     
      internal_model=wave_im                                               GIE0F405.33     
*ELSE                                                                      GIE0F405.34     
      ICODE=1                                                              GIE0F405.35     
      CMESSAGE="SETGRCTL : Illegal sub-model type, not ATMOS, OCEAN or     GIE0F405.36     
     & WAVE"                                                               GIE0F405.37     
*ENDIF on WAVE                                                             GIE0F405.38     
*ENDIF on OCEAN                                                            GIE0F405.39     
*ENDIF on ATMOS                                                            GIE0F405.40     
                                                                           GKR1F404.13     
      IF (NFTOUT.EQ.22.OR.NFTOUT.EQ.42.OR.(NFTOUT.GT.59.AND.               GLW6F403.12     
     &    NFTOUT.LT.68)) THEN                                              GLW6F403.13     
!       Instantaneous dump (atmos/ocean) or daily PP file? (add            GKR1F404.14     
!       extra unit numbers 68 and 69 if so but PP files not used here)     GKR1F404.15     
        LUNITTYPE=.TRUE.                                                   GKR1F404.16     
      ELSE                                                                 GLW6F403.15     
!       All other files                                                    GKR1F404.17     
        LUNITTYPE=.FALSE.                                                  GKR1F404.18     
      ENDIF                                                                GLW6F403.17     
                                                                           GKR1F404.19     
      LKEEPATM = .FALSE.                                                   GKR1F404.20     
      LDELATM  = .TRUE.                                                    GKR1F404.21     
                                                                           GKR1F404.22     
                                                                           GKR1F404.23     
      IF (MEANLEV.LE.0) THEN  ! Instantaneous dump or analysis             GKR1F404.24     
                                                                           GKR1F404.25     
*IF DEF,ATMOS                                                              DUMPCTL1.348    
        IF (I_AO.EQ.1) THEN   ! Atmos submodel                             GKR1F404.26     
                                                                           GKR1F404.27     
          IF (MEANLEV.EQ.0.AND.FT_SELECT(NFTOUT).EQ."Y") THEN              GKR1F404.28     
!           Meaning not switched on and files on this unit number          GKR1F404.29     
!           to be deleted                                                  GKR1F404.30     
                                                                           GKR1F404.31     
            IF ((internal_model .EQ.ocean_im)  .AND.                       GIE0F405.41     
     &          (steps_per_periodim(a_im) .NE. dumpfreqim(a_im))) THEN     GKR1F404.33     
!             Coupled model where coupling frequency is not the            GKR1F404.34     
!             same as the dump frequency.  Therefore always need to        GKR1F404.35     
!             keep the atmos dump until the ocean dump has been            GKR1F404.36     
!             written at the next dump time, for restartability.           GKR1F404.37     
              LKEEPATM=.true.                                              GKR1F404.38     
              CURRATMim(A_IM)=DUMPNAME                                     GKR1F404.39     
            ELSE                                                           GKR1F404.40     
              LKEEPATM=.false.                                             GKR1F404.41     
            ENDIF                                                          GKR1F404.42     
                                                                           GKR1F404.43     
                                                                           GKR1F404.44     
            IF (MEANFREQim(1,A_IM) .NE. 0 ) THEN                           GKR1F404.45     
!             Period 1 means are being calculated in this run              GKR1F404.46     
                                                                           GKR1F404.47     
              STP1im(A_IM)=STEPim(A_IM)+(DUMPFREQim(A_IM)*                 GKR1F404.48     
     &                             (OFFSET_DUMPSim(A_IM)-1))               GGH0F401.3      
              STP2im(A_IM)=MEANFREQim(1,A_IM)*DUMPFREQim(A_IM)             GKR1F404.49     
                                                                           GKR1F404.50     
              IF (MOD(STP1im(A_IM),STP2im(A_IM)) .EQ. 0) THEN              GKR1F404.51     
!               The last dump was at a period 1 mean point so a            GKR1F404.52     
!               new safe restart dump was created.  Therefore do           GKR1F404.53     
!               not delete this latest safe restart dump but the           GKR1F404.54     
!               previous safe restart dump in END_DUMPim                   GKR1F404.55     
                                                                           GKR1F404.56     
                IF ((internal_model .EQ.ocean_im)  .AND.                   GIE0F405.42     
     &            (steps_per_periodim(a_im) .NE. dumpfreqim(a_im)))THEN    GKR1F404.58     
                  LASTATMim(A_IM)=SAFEDMPim(A_IM)                          GKR1F404.59     
                ELSE                                                       GKR1F404.60     
                  END_DUMPim(A_IM)=SAFEDMPim(A_IM)                         GKR1F404.61     
                ENDIF                                                      GKR1F404.62     
              ENDIF ! (MOD(STP1im(A_IM),STP2im(A_IM)) .EQ. 0)              GKR1F404.63     
                                                                           GKR1F404.64     
            ENDIF ! (MEANFREQim(1,A_IM) .NE. 0 )                           GKR1F404.65     
                                                                           GKR1F404.66     
*IF DEF,MPP                                                                GLW2F402.7      
            IF (mype.eq.0) THEN                                            GKR1F404.67     
                                                                           GKR1F404.68     
*ENDIF                                                                     GKR1F404.69     
            IF (.NOT.(MOD((STP1im(A_IM)+DUMPFREQim(A_IM)),STP2im(A_IM))    GKR1F404.70     
     &           .EQ. 0)) THEN                                             GKR1F404.71     
              IF (END_DUMPim(A_IM).NE."              " .AND.               GKR1F404.72     
     &           .NOT. LKEEPATM ) THEN                                     GKR1F404.73     
!               Filename to be deleted is not blank and is not to          GKR1F404.74     
!               be kept until the ocean dump for the current step          GKR1F404.75     
!               is written                                                 GKR1F404.76     
                WRITE (8,610) END_DUMPim(A_IM) ! Delete request            GKR1F404.77     
*IF DEF,T3E                                                                GKR1F404.78     
                call flush(8, icode)                                       GKR1F404.79     
*ELSE                                                                      GKR1F404.80     
                CLOSE(8)                                                   GKR1F404.81     
                OPEN(8,FILE=FILENAME)                                      GKR1F404.82     
*ENDIF                                                                     GKR1F404.83     
              ENDIF                                                        GKR1F404.84     
            ENDIF                                                          GLW2F402.12     
*IF DEF,MPP                                                                GKR1F404.85     
                                                                           GKR1F404.86     
            ENDIF  !  (mype .eq. 0)                                        GKR1F404.87     
*ENDIF                                                                     GLW2F402.16     
          ENDIF  ! (MEANLEV.EQ.0.AND.FT_SELECT(NFTOUT).EQ."Y")             GKR1F404.88     
                                                                           GKR1F404.89     
                                                                           GKR1F404.90     
          IF (H_STEPim(A_IM).NE.DUMPTIMESim(1,A_IM).OR.                    GDR3F305.30     
     &        MODEL_STATUS.NE."OPERATIONAL   ") THEN                       GGH3F400.23     
!           This step is not the first one in the list of dumptimes        GKR1F404.91     
!           or the model is not operational                                GKR1F404.92     
                                                                           GKR1F404.93     
            IF (MEANFREQim(1,A_IM).NE.0.AND.FT_SELECT(NFTOUT).EQ."Y")      GGH0F401.11     
     &      THEN                                                           GGH0F401.12     
!             Period 1 Means switched on and files on this unit            GKR1F404.94     
!             number to be deleted                                         GKR1F404.95     
                                                                           GKR1F404.96     
              IF (MOD((STP1im(A_IM)+DUMPFREQim(A_IM)),STP2im(A_IM))        GKR1F404.97     
     &           .EQ. 0) THEN                                              GGH0F401.14     
!               File is at a Period 1 mean point.  Update names of         GKR1F404.98     
!               old and new safe restart points.                           GKR1F404.99     
                SAFEDMPim(A_IM)=NEWSAFEim(A_IM)                            GKR1F404.100    
                NEWSAFEim(A_IM)=DUMPNAME                                   GKR1F404.101    
                LASTDMPim(A_IM) = END_DUMPim(A_IM)                         GKR1F404.102    
              ELSE                                                         GKR1F404.103    
                END_DUMPim(A_IM)=DUMPNAME                                  GKR1F404.104    
              ENDIF                                                        GKR1F404.105    
      ELSE                                                                 GJC0F405.11     
      END_DUMPim(A_IM)=DUMPNAME                                            GJC0F405.12     
            ENDIF                                                          GGH3F400.37     
                                                                           GKR1F404.107    
          ENDIF ! (H_STEPim(A_IM).NE.DUMPTIMESim(1,A_IM).OR                GKR1F404.108    
                ! MODEL_STATUS.NE."OPERATIONAL   ")                        GKR1F404.109    
                                                                           GKR1F404.110    
        ENDIF  ! (I_AO.EQ.1)                                               GKR1F404.111    
*ENDIF                                                                     DUMPCTL1.361    
*IF DEF,OCEAN                                                              DUMPCTL1.362    
        IF (I_AO.EQ.2) THEN                                                GGH0F401.10     
                                                                           GKR1F404.112    
          IF (MEANLEV.EQ.0.AND.FT_SELECT(NFTOUT).EQ."Y") THEN              GKR1F404.113    
!           Meaning not switched on and files on this unit number          GKR1F404.114    
!           to be deleted                                                  GKR1F404.115    
                                                                           GKR1F404.116    
            IF( (internal_model .EQ.ocean_im)  .AND.                       GIE0F405.43     
     &        (steps_per_periodim(o_im) .NE. dumpfreqim(o_im)) ) THEN      GKR1F404.118    
!             Coupled model where coupling frequency is not the            GKR1F404.119    
!             same as the dump frequency.  Atmos dump for the              GKR1F404.120    
!             previous dump time can now be deleted.                       GKR1F404.121    
              LDELATM = .true.                                             GKR1F404.122    
            ENDIF                                                          GKR1F404.123    
                                                                           GKR1F404.124    
      IF (MEANFREQim(1,O_IM) .NE. 0 ) THEN                                 GJC0F405.13     
!             Period 1 means are being calculated in this run              GKR1F404.126    
              STP1im(O_IM)=STEPim(O_IM)+(DUMPFREQim(O_IM)*                 GKR1F404.127    
     &                             (OFFSET_DUMPSim(O_IM)-1))               GGH0F401.16     
              STP2im(O_IM)=MEANFREQim(1,O_IM)*DUMPFREQim(O_IM)             GKR1F404.128    
                                                                           GKR1F404.129    
              IF (MOD(STP1im(O_IM),STP2im(O_IM)) .EQ. 0) THEN              GKR1F404.130    
!               The last dump was at a period 1 mean point so a            GKR1F404.131    
!               new safe restart dump was created.  Therefore do           GKR1F404.132    
!               not delete this latest safe restart dump but the           GKR1F404.133    
!               previous safe restart dump in END_DUMPim                   GKR1F404.134    
                END_DUMPim(O_IM)=SAFEDMPim(O_IM)                           GKR1F404.135    
              ENDIF                                                        GKR1F404.136    
      ENDIF                                                                GJC0F405.14     
                                                                           GKR1F404.138    
*IF DEF,MPP                                                                GLW2F402.17     
            IF (mype.eq.0) THEN                                            GKR1F404.139    
                                                                           GKR1F404.140    
*ENDIF                                                                     GKR1F404.141    
            IF (.NOT.(MOD((STP1im(O_IM)+DUMPFREQim(O_IM)),STP2im(O_IM))    GKR1F404.142    
     &          .EQ. 0)) THEN                                              GKR1F404.143    
              IF (END_DUMPim(O_IM).NE."              ") THEN               GKR1F404.144    
!               Filename to be deleted is not blank                        GKR1F404.145    
                WRITE(8,610) END_DUMPim(O_IM)                              GKR1F404.146    
*IF DEF,T3E                                                                GKR1F404.147    
                call flush(8, icode)                                       GKR1F404.148    
*ELSE                                                                      GKR1F404.149    
                CLOSE(8)                                                   GKR1F404.150    
                OPEN(8,FILE=FILENAME)                                      GKR1F404.151    
*ENDIF                                                                     GKR1F404.152    
              ENDIF                                                        GKR1F404.153    
                                                                           GKR1F404.154    
              IF (LDELATM .AND. LASTATMim(A_IM).NE."              ")THEN   GKR1F404.155    
!               There is an atmos dump to delete and the filename          GKR1F404.156    
!               to be deleted is not blank                                 GKR1F404.157    
                  WRITE(8,610) LASTATMim(A_IM)                             GKR1F404.158    
                  CLOSE(8)                                                 GKR1F404.159    
              ENDIF                                                        GKR1F404.160    
              OPEN(8,FILE=FILENAME)                                        GKR1F404.161    
            ENDIF                                                          GLW2F402.22     
*IF DEF,MPP                                                                GKR1F404.162    
                                                                           GKR1F404.163    
            ENDIF ! (mype.eq.0)                                            GKR1F404.164    
*ENDIF                                                                     GKR1F404.165    
            LASTATMim(A_IM) = CURRATMim(A_IM)                              GKR1F404.166    
                                                                           GKR1F404.167    
          ENDIF ! (MEANLEV.EQ.0.AND.FT_SELECT(NFTOUT).EQ."Y")              GKR1F404.168    
                                                                           GKR1F404.169    
                                                                           GKR1F404.170    
          IF (MEANFREQim(1,O_IM).NE.0.AND.FT_SELECT(NFTOUT).EQ."Y")        GKR1F404.171    
     &    THEN                                                             GKR1F404.172    
!           Period 1 Means switched on and files on this unit              GKR1F404.173    
!           number to be deleted                                           GKR1F404.174    
            IF (MOD((STP1im(O_IM)+DUMPFREQim(O_IM)),STP2im(O_IM))          GKR1F404.175    
     &          .EQ. 0) THEN                                               GKR1F404.176    
!             File is at a Period 1 mean point.  Update names of           GKR1F404.177    
!             old and new safe restart points.                             GKR1F404.178    
              SAFEDMPim(O_IM)=NEWSAFEim(O_IM)                              GKR1F404.179    
              NEWSAFEim(O_IM)=DUMPNAME                                     GKR1F404.180    
              LASTDMPim(O_IM) = END_DUMPim(O_IM)                           GKR1F404.181    
            ELSE                                                           GKR1F404.182    
              END_DUMPim(O_IM)=DUMPNAME                                    GKR1F404.183    
            ENDIF                                                          GKR1F404.184    
          ELSE                                                             GKR1F404.185    
            END_DUMPim(O_IM)=DUMPNAME                                      GKR1F404.186    
          ENDIF                                                            GLW2F402.24     
                                                                           GGH0F401.27     
        ENDIF ! (I_AO.EQ.2)                                                GKR1F404.187    
*ENDIF                                                                     DUMPCTL1.371    
 610    FORMAT('%%% ',A14,' DELETE')                                       DUMPCTL1.372    
                                                                           GKR1F404.188    
      ENDIF ! (MEANLEV.LE.0)                                               GKR1F404.189    
                                                                           GKR1F404.190    
C                                                                          GKR1F404.191    
CL 6.2 If current dump is to be archived construct archiving request       DUMPCTL1.375    
CL     followed by delete request if appropriate                           GKR1F404.192    
CL                                                                         DUMPCTL1.376    
      LARCHIVE = .FALSE.                                                   DUMPCTL1.377    
                                                                           GKR1F404.193    
      IF (I_AO.EQ.1 .or. I_AO.EQ.2 .or. I_AO.EQ.4) THEN                    WRB1F401.148    
                                                                           GKR1F404.194    
        IF (MEANLEV.LE.0 .AND. DUMPFREQim(I_AO).GT.0                       GDR3F305.36     
     &      .AND. ARCHDUMP_FREQim(I_AO).GT.0) THEN                         GDR3F305.37     
!         No meaning, regular dumping, regular archiving                   GKR1F404.195    
                                                                           GKR1F404.196    
          if (lclimrealyr) then ! get freq + offset in terms of real       GMG1F404.94     
                                ! months from 360d-style freq + offset     GMG1F404.95     
            if (i_day .eq. 1 .and. i_hour .eq. 0) then ! end of month      GMG1F404.96     
              archdump_monfreq=(DUMPFREQim(I_AO)*ARCHDUMP_FREQim(I_AO)*    GMG1F404.97     
     &                         SECS_PER_PERIODim(I_AO))/                   GMG1F404.98     
     &                         (30*86400*STEPS_PER_PERIODim(I_AO))         GMG1F404.99     
            archdump_monoffset=(DUMPFREQim(I_AO)*ARCHDUMP_OFFSETim(I_AO)   GMG1F404.100    
     &                         *SECS_PER_PERIODim(I_AO))/                  GMG1F404.101    
     &                         (30*86400*STEPS_PER_PERIODim(I_AO))         GMG1F404.102    
!  N.B. i_month is used below, not (i_month-1), because offset is from     GMG1F404.103    
!  _start_ of 1st month                                                    GMG1F404.104    
              if(mod((i_month-(MODEL_BASIS_TIME(2)+archdump_monoffset)),   GMG1F404.105    
     &               archdump_monfreq) .eq. 0) then                        GMG1F404.106    
                LARCHIVE = .true.                                          GMG1F404.107    
              endif                                                        GMG1F404.108    
            endif                                                          GMG1F404.109    
          else IF ( H_STEPim(I_AO)/DUMPFREQim(I_AO) .GE.                   GMG1F404.110    
     &         ARCHDUMP_OFFSETim(I_AO) ) THEN                              GDR8F400.4      
!           Have passed the timestep from which to start archiving         GKR1F404.197    
!           Calculate whether this timestep is an archive time             GKR1F404.198    
                                                                           GKR1F404.199    
            LARCHIVE = (MOD((H_STEPim(I_AO)/                               GKR1F404.200    
     &                 DUMPFREQim(I_AO)-ARCHDUMP_OFFSETim(I_AO)),          GDR3F305.39     
     &                  ARCHDUMP_FREQim(I_AO)).EQ.0)                       GDR3F305.40     
          ENDIF                                                            GDR8F400.5      
                                                                           GKR1F404.201    
        ELSEIF (MEANLEV.LE.0 .AND. DUMPFREQim(I_AO).EQ.0) THEN             GDR3F305.41     
!         No meaning, no regular dumping.  Will archive if archiving       GKR1F404.202    
!         frequency is greater than 0.                                     GKR1F404.203    
          LARCHIVE= (ARCHDUMP_FREQim(I_AO).GT.0)                           GDR3F305.42     
                                                                           GKR1F404.204    
        ELSEIF (MEANLEV.GT.0) THEN                                         GDR3F305.43     
!         Meaning on. Archive is mean archive frequncy > 0.                GKR1F404.205    
          LARCHIVE= (MEANARCHim(MEANLEV,I_AO).EQ.1)                        GDR3F305.44     
        ENDIF                                                              GDR3F305.45     
*IF DEF,MPP                                                                GLW2F402.28     
        IF (mype.eq.0) THEN                                                GLW2F402.29     
*ENDIF                                                                     GKR1F404.206    
          IF (LARCHIVE) THEN                                               GLW2F402.30     
!           Archiving turned on                                            GKR1F404.207    
            WRITE(8,620) DUMPNAME  ! archive request                       GKR1F404.208    
*IF DEF,T3E                                                                GKR1F404.209    
            call flush(8, icode)                                           GKR1F404.210    
*ELSE                                                                      GKR1F404.211    
      CLOSE(8)                                                             GJC0F405.15     
            OPEN(8,FILE=FILENAME)                                          GKR1F404.213    
*ENDIF                                                                     GKR1F404.214    
            IF (MEANLEV.GT.0) THEN                                         GLW6F403.18     
!             Meaning turned on                                            GKR1F404.215    
              IF (LUNITTYPE) THEN                                          GLW6F403.19     
!               Correct sort of unit to be deleted                         GKR1F404.216    
                IF (FT_SELECT(NFTOUT).EQ."Y") THEN                         GLW6F403.20     
!                 Files on this unit number is to be deleted               GKR1F404.217    
                  WRITE(8,610) DUMPNAME  ! Delete request                  GKR1F404.218    
                ENDIF                                                      GLW6F403.22     
              ELSE                                                         GLW6F403.23     
                WRITE(8,610) DUMPNAME ! Delete request                     GKR1F404.219    
              ENDIF                                                        GLW6F403.25     
*IF DEF,T3E                                                                GKR1F404.220    
              call flush(8, icode)                                         GKR1F404.221    
*ELSE                                                                      GKR1F404.222    
              CLOSE(8)                                                     GLW2F402.33     
              OPEN(8,FILE=FILENAME)                                        GLW2F402.34     
*ENDIF                                                                     GKR1F404.223    
                                                                           GKR1F404.224    
            ENDIF                                                          GLW6F403.26     
                                                                           GKR1F404.225    
          ELSE  ! LARCHIVE false                                           GKR1F404.226    
                                                                           GKR1F404.227    
            IF (MEANLEV.GT.0) THEN                                         GLW2F402.36     
!             Meaning turned on                                            GKR1F404.228    
              IF (LUNITTYPE) THEN                                          GKR1F404.229    
!               Correct sort of unit to be deleted                         GKR1F404.230    
                IF (FT_SELECT(NFTOUT).EQ."Y") THEN                         GLW6F403.28     
!                 Files on this unit number is to be deleted               GKR1F404.231    
                  WRITE(8,610) DUMPNAME ! Delete request                   GKR1F404.232    
                ENDIF                                                      GLW6F403.30     
              ELSE                                                         GLW6F403.31     
                WRITE(8,610) DUMPNAME ! Delete request                     GKR1F404.233    
              ENDIF                                                        GLW6F403.33     
*IF DEF,T3E                                                                GKR1F404.234    
              call flush(8, icode)                                         GKR1F404.235    
*ELSE                                                                      GKR1F404.236    
              CLOSE(8)                                                     GLW2F402.38     
              OPEN(8,FILE=FILENAME)                                        GLW2F402.39     
*ENDIF                                                                     GKR1F404.237    
            ENDIF                                                          GLW2F402.40     
                                                                           GKR1F404.238    
          ENDIF                                                            GLW2F402.41     
*IF DEF,MPP                                                                GKR1F404.239    
        ENDIF                                                              GLW2F402.45     
*ENDIF                                                                     GLW2F402.46     
      ENDIF ! (I_AO.EQ.1 .or. I_AO.EQ.2 .or. I_AO.EQ.4)                    GKR1F404.240    
                                                                           GKR1F404.241    
 620  FORMAT('%%% ',A14,' ARCHIVE DUMP')                                   GKR1F404.242    
                                                                           GKR1F404.243    
C                                                                          DUMPCTL1.429    
C     Normal return                                                        DUMPCTL1.430    
C                                                                          DUMPCTL1.431    
      RETURN                                                               DUMPCTL1.432    
C                                                                          DUMPCTL1.433    
C     Error returns                                                        DUMPCTL1.434    
C                                                                          DUMPCTL1.435    
 900  ICODE=1                                                              DUMPCTL1.436    
      CMESSAGE="DUMPCTL : Fail to open output dump - may already exist"    DUMPCTL1.437    
 999  CONTINUE                                                             DUMPCTL1.438    
      RETURN                                                               DUMPCTL1.439    
CL----------------------------------------------------------------------   DUMPCTL1.440    
      END                                                                  DUMPCTL1.441    
*ENDIF                                                                     DUMPCTL1.442